
Earlier this week I needed to make some changes and re-deploy an old Vue app. I hadn’t touched the codebase in over a year, and my experience with the rate of change in the front-end web space m...
If you’re a current follower of this blog then you may already know that I’m a bit of a fan of using plain text accounting for managing finances. I mainly use the Ledger text file format a...
Whilst my days of binge drinking as a student are thankfully far in my past, alcohol is still an ongoing, yet much more minor, part of my life. Like many millennials (and I’m sure it must be the...
I often talk about self-hosting on this blog, and I’m certainly a big fan of being able to control my own data and systems wherever possible (and feasible). I’ve recently switched from usi...
If you’ve ever run your own Nextcloud before, you may have noticed screens like the following in your instance’s settings pages. The messages advise a number of maintenance procedures to h...
I recently signed the web0 manifesto, which embodies many of the values I consider to be important when it comes to technology - and the web in particular. web0 is the decentralised web… web0 ...
Twelve months ago - in January 2021 - I started my attempt at the #100DaysToOffload challenge. I had set myself a new year’s resolution to try to write more and, around the same time, I noticed the ha...
🎉 This is post 100 in my attempt at the #100DaysToOffload challenge! For a couple of years I have been writing mobile apps using the Flutter framework, having previously been a React Native advocate. ...
For as long as I’ve been using Matrix I’ve hosted my own homeserver on my own VPS and at my own domain. Why I chose to move I previously wrote about how I self-host my homeserver with the ...
Some people may remember my quest a few months back to find a good alternative to Google Photos for image storage and backup. At the time, I talked about Piwigo, Mega and pCloud as potential candidate...
Dean Burnett’s The Idiot Brain is an interesting insight into why people think the way they do, personality, emotion, and the biology of the brain. The author (who happens to live in the same ci...
Most applications include some sort of outbound transactional email as part of their normal function. These email messages could be to support account-level features (such as password-resets) or to no...
I maintain a small number of projects in my spare time. The amount of time I get to work on and maintain these varies depending on my other workloads. The projects were never designed to be a means of...
A while ago I posted about how I back-up my personal servers to Backblaze B2. That approach involved adding all of the files and directories into a single compressed archive and sending this up to an ...
From the hills of Dusk’s End to the small alleys of Main Street, you feel drawn to the lights of this vibrant metropolis in an uncharted internet territory. The sign reads “Nightfall&rdquo...
I’ve really enjoyed my recent discovery of a couple of traditional-style webzines. Webzines (sometimes referred to as online magazines, or - in this instance - simply “zines”) are a ...
I feel that this book really resonated with my own thoughts around the importance of diversity in groups and teams. Matthew Syed’s Rebel Ideas: The Power of Diverse Thinking is a book that exami...
I’ve recently been reminiscing about the “old” days of the web. They felt much more like expressions of personality and creativity. These days, most people have social media accounts...
I’ve recently posted about our home, in which we’ve completed a few DIY projects, such as renovating the garden and building a small loft conversion (amongst other things!). Today I’...
If you run a service that accepts file uploads from users, and then subsequent re-download by other users (such as images), then your service is potentially at risk of becoming a system for distributi...
On Sunday I slipped and fell in the pouring rain. I landed hard on my side and ended up dislocating my shoulder. I didn’t really want to try risking it and putting it back in myself (sensibly, a...
It’s been a weird 18 months. Before pandemic-initiated changes, our daily lives might have involved getting up and travelling on some form of commute (either by walking, public transport, car, o...
Background I’ve recently noticed (and read) more and more posts discussing *BSD systems. Creations like the new (and excellent) OpenBSD Webzine and blogs (such as Rubenerd’s and Solene&rsq...
Following on from my previous post about renovating our garden, I wanted to write an entry about another project we’ve recently completed. Our home is a Victorian townhouse over three storeys, b...
I often enjoy books that try to take a different view on known events. I don’t mean consipiracy theory - more around thinking laterally or “out of the box”. Such ways of thinking oft...
Another podcast I frequently listen to likely needs no introduction of its own. The This Week in Tech (or just “TWiT”) network’s flagship podcast - also called TWiT - must be one of ...
Last week I gave a talk at the Bitcoin Association BSV Meet-up for Wales, hosted by Tramshed Tech in Cardiff. Before learning about this meetup, I had not heard of BSV - either from a technology or cu...
A few years ago I was in the position of needing a solution to backup and sync dotfiles (configuration files for various pieces of software) across my machines. Specifically, I had Mac computers and L...
Having recently read The Secret Barrister, which I loved, I was recommended to also check out This is Going to Hurt by Adam Kay. The book is similar to the Secret Barrister in that it’s a collec...
It’s been a few weeks since my last post about the Pinephone. Since then I have been playing further with a different graphical shell and have been trying out new applications. In that previous ...
The Secret Barrister: Stories of the Law and How It’s Broken is an oustanding book. In my opinion it is easily the best book I have read in the past year - certainly the most interesting. The bo...
English speakers’ privilege I’ve always been crap at learning languages. From an early age my parents would encourage me to learn French, and I picked up Spanish and German at around the G...
For many developers, the notion of adding accessibility features - such as image alt text attributes to web page images and integrations with host usability enhancements, such as screen-zoom and text-...
I was performing a standard system upgrade on an Arch server this morning and received the following messages (maintainer details redacted): $ sudo pacman -Syyu ... # Download of packages (159/159) ch...
I recently wrote about reviewing my Twitter usage, with the aim of discovering any constructive takeways I get from the platform that warrants me keeping it installed as an app on my phone. The up-sho...
Having recently read Project Hail Mary - and rated it highly - Goodreads suggested I try Columbus Day by Craig Alanson. This is the first book in the Expeditionary Force series - one that I hadn&rsquo...
The need for notifications I self-host several services on various servers - for both some professional and personal uses. I use automated backup scripts to periodically sync data to Backblaze (which ...
TL,DR; I’m starting a Twitter diary to log interesting findings, and to measure its value to me. Twitter is pretty much the last bastion of mainstream centralised social media that I use (aside ...
Another project I try to maintain (when I can!) is SSO Tools. This is a simple web service that aims to help developers test their own services’ single sign-on (SSO) functionality. The motivatio...
Another of my favourite podcasts is Darknet Diaries. Created and presented by the excellent Jack Rhysider, Darknet Diaries releases new episodes fornightly. Each episode contains a true story from the...
The problem with image uploads Many services - including web and mobile apps - allow for their users to upload imagery. This could be to enable users to upload an avatar image or perhaps create a gall...
Adding theming and the choice between “light” and “dark” modes to your website can enhance your site’s accessibility and make it feel more consistent with the host operat...
For several years I’ve been a user of Goodreads. It’s a very popular platform, and I primarily use it for keeping track of the books I’ve read, for receiving suggestions about new bo...
About 18 months ago we bought a new home. The house is an 1880s (ish) Victorian building, and many of its original features - such as tile floors, cornice, and fireplaces - had been retained, which is...
I don’t tend to talk much about the projects I’m working on, but thought this would be a good opportunity to write a post about one such project - Treadl. Treadl is a web app (and more rec...
Back in April, I bought a Pinephone. I used the phone quite consistently for the first few weeks and I meant to write an update here a couple of months back, but work (and other things) got in the way...
Some people have complex development processes and flows - making use of tools such as heavy editors and IDEs, Docker for running and building locally in development, or even develop entirely remotely...
About nine months ago - at the end of November last year - we adopted a dog. Although I’ve always grown up with and around dogs owned by parents and siblings, I’ve never been a huge &ldquo...
Providing code snippets on your website or blog can be a great way to convey meaning for technical concepts. Using the HTML pre tag can help provide structure to your listings, in terms of spacing and...
The Gemini protocol has gathered even more momentum in the few months since I last posted about it. Its popularity is largely driven by its privacy-focused and content-oriented design. It doesn’...
I listen to a number of podcasts each week. One of these is ATP (Accidental Tech Podcast). This is one of my favourite weekly podcasts. It’s humurous and full of cutting-edge discussion from the...
Many web apps have support for uploading video files. Whether it’s a media-focused platform (such as a video sharing service) or just offering users a chance to add vlogs to their profile - vide...
Every now and again it’s nice to dive back into a young adult book. I recently read The Night Circus by Erin Morgenstern. The book is a sort of dark romantic/fantasy mashup. It’s about a t...
I enjoy reading my RSS feeds across my devices - whether it’s on my phone when out and about, my Mac in between bouts of work, or my iPad when in downtime. Being able to sync feeds across these ...
Recently my colleague was talking to me about the concept of the “5AM Club”, as defined in the book by Robin Sharma. The “Club” is focused around starting your day early, with ...
The problem Image processing and resizing is a common task in many types of applications. This is made even more important by modern phones that take photos several megabytes in size. For example, if ...
Andy Weir has become renowned over the past decade for his science fiction novels. The Martian (and its movie) was hugely enjoyable and successful. I wasn’t so keen on Artemis, but still did enj...
Loading indicators In user-facing software, loading indicators are extremely important to let your users know that something is happening. This is the same no matter whether your software is a CLI pro...
Google and DuckDuckGo It’s common knowledge that part of Google’s business model is to use the data it knows about you, your searches, and browsing patterns in order to more effectively se...
Wales Tech Week is an annual event held by Technology Connected. The 2021 event is running this week, aiming to bring technologists together from a wide range of businesses and organisations across Wa...
Anxious People is a book about an attempted bank robbery in a Swedish town (not Stockholm!). It is written by Fredrik Backman. The story involves a would-be bank robber arriving unexpectedly at an ope...
Living without workspaces IDEs and richly-featured text editors - such as VS Code and Sublime Text - support many great features. One of these is the notion of projects or workspaces. Such workspaces ...
Recently I’ve noticed that some of the RSS feeds I subscribe to have become more and more restrictive. A post might contain just a title, or perhaps a short snippet or introductory paragraph, wi...
Getting and “installing” the nuc For his birthday a few years back, I bought my (now-)husband a beehive and a honeybee nucleus. Some might see this as a strange gift, especially given that...
Just a quick post to say that I recently got married! By coincidence the event was three years to the day after our engagement. It was a lovely day - great weather and really nice to see those that co...
Growing up and the “Warcraft years” In my earlier years I was fairly into gaming. I was definitely only ever a “casual gamer” in the scheme of things today, but I would play at...
The Classic Collection of H.G. Wells novels contains five well-known stories: The War of the Worlds, The First Men in the Moon, The Time Machine, The Invisible Man, and The Island of Doctor Moreau. De...
Someone non-technical recently asked me the question, “what actually is a server?“. They knew it was just a type of computer that runs somewhere that can be accessible over the internet, b...
For a couple of years now I have been using a self-hosted Nextcloud as a replacement for iCloud and Google Drive. I won’t go into the details as to why (especially given the additional upkeep an...
The effects of working from home The UK went into its first proper COVID-induced lockdown back around March time last year. At this time, our company locked its office doors and we all began working f...
In this post I will talk a little about how I handle my digital notes and to-do lists. In the spirit of my last post on data sovereignty, the focus will be on self-hosted approaches. To-do list manage...
The term ‘data sovereignty’ is something we hear much more about these days. Increasingly I’ve also heard it being mentioned in different contexts. We’ve seen it more in the wo...
I listen to a number of podcasts each week. One of these is Go Time. The Go Time podcast releases episodes every Thursday. Its format is mostly comprised of panel discussions and interviews with found...
As you may know, I recently purchased the beta edition of the Pinephone. It arrived last week in the Pinephone Beta Edition box shown below. As mentioned in my previous post on the subject, I bought t...
This is a bit of a vanity post, but back in December I was lucky enough to be included in the 2020 WalesOnline “35 Under 35”. This list aims to present the “best young businessmen in...
I was recently asked whether Steve Jobs was someone that inspired me. It’s a difficult question, I find; he’s definitely an inspiring person in the sense of his work ethic, the products he...
The Giver of Stars by Jojo Moyes tells the story of a young English woman - Alice - who marries an American man and moves to a small town in Kentucky in the late 1930s. Not long after arriving in Kent...
As is the case with many countries, all businesses in the UK must report the state of their financial accounts to the relevant inland revenue service at their year-end (in the UK, this is HMRC). This ...
Back in November I started an Invisalign course to help straighten my teeth. Invisalign works like traditional braces, but is instead formed from transparent teeth “trays” that others can ...
I don’t use Facebook often. In fact, I only have an account currently because our company uses the “Login with Facebook” functionality in order to offer an additional single sign-on ...
Like many people, I own and manage multiple email accounts - for example, some are for work, for home, or for specific projects. I used to be a strong user of solely web-based email clients (such as G...
Simple and RESTful HTTP APIs The HTTP standard is an expressive system for network-based computer-computer interaction. It’s a relatively old standard - it started life as HTTP/1.0 in 1996 and t...
Pre-ordering the PinePhone Beta Earlier this week I ordered a PinePhone, which recently became available as a Beta Edition. I’ve been excitedly following the progress of the PinePhone for some t...
The Great Alone by Kristin Hannah is a book set out in the Alaskan wild. It tells the story of a young family that move in order to live off-the-grid after the father returns from being a prisoner of ...
Why use decentralised communication services Centralised communication services, such as Telegram, Signal, and Whatsapp, offer convenient means to chat to friends and family using your personal device...
This post contains some of my thoughts on the book Blood, Sweat, and Pixels by Jason Schreier. This book contains a number of stories about how some of the most well-known (and other less well-known) ...
The last twenty years of internet evolution Although I was still somewhere between being of single-digit age and a young teen back in the ‘90s and early ‘00s, I still fondly remember disco...
I recently finished reading The Hunt for Red October by Tom Clancy. This genre of novel (sort of military thriller fiction) is not usual for me and this is the first Clancy book I have read. That bein...
Minimising possessions Like many people I these days try and live a minimal life when it comes to possessions. Having more stuff means there is a greater level of responsibility required to look after...
RSS has had a bit of a resurgence for personal websites and blogs in recent years, especially with the growing adoption of Small Web and IndieWeb ideologies. Many static site generators - including Hu...
Python’s Flask framework is an easy and excellent tool for writing web applications. Its in-built features and ecosystem of supporting packages let you create extensible web APIs, handle data an...
By now I’m sure everyone has heard the horror stories about people (seemingly-) randomly losing access to their Google accounts. Often the account closures are reported to have been accompanied ...
A few months ago I stumbled across this article: Beyond Cyberpunk: Towards a Solarpunk Future. It was posted on the excellent blog Tales from the Dork Web, by Steve Lord, which I can certainly recomme...
This month marks a year from when I decided to (mostly - see below) stop answering my phone. This was not because I wanted to be antisocial (quite the opposite), but because it’s become the wron...
Last week I read The Midnight Library by Matt Haig. The book won the 2020 Goodreads Choice Award for Fiction. “Set” in Bedford, England, the story starts by introducing the main character ...
For many small or personal services running on a VPS in the cloud, administration is often done by connecting directly to the server via SSH. Such servers should be hardened with firewalls, employ an ...
Many people no longer feel comfortable using Facebook. Whether you were never a member to begin with or you’ve had an account but chosen to remove yourself from the service, or you’ve simp...
Shapes and patterns can be leveraged in user interfaces to guide your users, draw attention to content, lend weight or emphasis, or just for aesthetics and decoration. Layout and styling on the web is...
React state React state management is what gives the library its reactiveness. It’s what makes it so easy to build performant data-driven applications that dynamically update based on the underl...
Many people would consider RSS - Really Simple Syndication - to be a relic of the past. However I think it has been making a comeback. RSS is a mechanism by which people can automatically receive upda...
A few months ago I discovered Blogging for Devs - I think through Product Hunt when it made it to #1 Product of the Day back in August last year. At the time blogging was something I had been thinking...
If you need a database for your next project, why not first consider if SQLite might be a good option? And I don’t mean just for getting an MVP off the ground or for small personal systems; I me...
Recently I finished reading Dirty Little Secrets. This is the first book I have read by Jo Spain and the first time I have known of the author. The book first appears as though it’s a typical mu...
If you’ve visited my geminispace (gemini://g.wilw.dev) you’ll have noticed that I’ve recently been on a mission to decentralise the every-day tools and services I use, and will under...
I know that I’ve been a bit crap at updating my blog properly and consistently over the past few years. One of my new year’s resolutions this year is to get into the habit of writing more,...
Over the past few months I have been trying to use centralised “big tech” social media platforms less and instead immerse myself into the more community-driven “fediverse” of d...
Building apps on serverless architecture has been a game-changer for me and for developers everywhere, enabling small dev teams to cheaply build and scale services from MVP through to enterprise deplo...
If you write React web apps that interface with a backend web API then definitely consider trying React Query. The library makes use of modern React patterns, such as hooks, to keep code concise and r...
This short post introduces a useful JavaScript operator to help make your one-liners even more concise. The specification was added formally in the 11th edition of ECMAScript. It is implemented as a l...
JavaScript has lots of handy tools for creating concise code and one-liners. One such tool is the optional chaining operator. The optional chaining operator is useful for addressing an attribute of a ...
I recently stumbled across an article on Hacker News discussing the pros of basic personal accounting using GnuCash - a free and open-source desktop accounting program. The article was interesting as ...
This note documents the set-up of a k8s cluster from scratch, including ingress and load-balanced TLS support for web applications. It’s mainly for myself to revisit and reference later on. The ...
ZEIT’s Now service is great for deploying apps and APIs that are able to make use of serverless execution models, and I use it for many of my projects (including this website, at the time of wri...
A previous note about Philips Hue bulbs got me thinking that the API exposed by the bridge might be used to warn if the house lights are left on too late at night, or even if they get turned on at une...
I have recently posted about CENode and how it might be used in IoT systems. Since CENode is partially designed to communicate directly with humans (particularly those out and about or “in the f...
In a previous note I discussed CENode and briefly mentioned its potential for use in interacting with the Internet of Things. I thought I’d add a practical example of how it might be used for th...
Whilst working on the ITA Project - a collaborative research programme between the UK MoD and the US Army Research Laboratory - over the last few years, one of my primary areas has been to research ar...
I haven’t written a post since summer 2015. It’s now March 2017 and I thought I’d write an update very briefly covering the last couple of years. I finished researching and lecturing...
I recently blogged about Nintendo Hotspot data and mentioned it could be more usefully consumable in a native mobile app. As such, I wrote a small Android app for retrieving this data and displaying i...
Since getting a DS, StreetPass has become quite addictive. It’s actually pretty fun checking the device after walking through town or using public transport to see a list of Miis representing th...
A couple of years ago I wrote a blog post about wrapping some of Weka’s classification functionality to allow it to be used programmatically in Python programs. A small project I’m current...
As is the case with many people, all music I listen to on my PC these days plays from the web through a browser. I’m a heavy user of Google Play Music and SoundCloud, and using Chrome to handle ...
his week I begin lecturing a module for Cardiff School of Computer Science and Informatics’ postgraduate MSc course in Advanced Computer Science. The module is called Web and Social Computing, w...
Yesterday, I gave a talk about my experiences with developing and using RESTful APIs, with the goal of providing tips for structuring such interfaces so that they work in a useful and sensible way. I ...
This weekend I took part in the NHS Hack Day. The idea of the event is to bring healthcare professionals together with technology enthusiasts in order to build stuff that is useful for those within th...
I recently received confirmation of my completed PhD! I submitted my thesis in May 2014, passed my viva in September and returned my final corrections in December. I was examined internally by Dr Pete...
Today I gave an internal talk at the School of Computer Science & Informatics about open-source contribution. The talk described some of the disadvantages of the ways in which hobbyists and the no...
I recently wrote a new article for Heroku’s Dev Center on carrying out asynchronous direct-to-S3 uploads using Node.js. he article is based heavily on the previous Python version, where the only...
Last week, I was invited to give a seminar to the Agents and Intelligent Systems group in the Department of Informatics at King’s College London. I gave an overview of my PhD research conducted ...
A while ago I wrote an article for Heroku’s Dev Center on carrying out direct uploads to S3 using a Python app for signing the PUT request. Specifically, the article focussed on Flask but the co...
Last week I visited Karlsruhe, in Germany, to give a presentation accompanying a recently-accepted paper. The paper, “Inferring the Interesting Tweets in Your Network”, was in the proceedi...
In my last post I discussed methods for streaming music to different zones in the house. More specifically I wanted to be able to play music from one location and then listen to it in other rooms at t...
For a while, now, I have been looking for a reliable way to manage zoned music-playing around the house. The general idea is that I’d like to be able to play music from a central point and have ...
I recently spent a week in France as part of a holiday with some of my family. Renting houses for a couple of weeks in France or Italy each summer has almost become a bit of a tradition, and it’...
Last week I released a new version of the tides Android app I’m currently developing. The idea of the application was initially to simply display the tidal times and patterns for the Gower Penin...
Back in March, I emailed Magic Seaweed to ask them if they had a public API for their surf forecast data. They responded that they didn’t at the time, but that it was certainly on their to-do li...
I today issued a full upgrade of the server at flyingsparx.net, which is hosted by Digital Ocean. By default, on Arch, this will upgrade every currently-installed package (where there is a counterpart...
Over the last few months, I’ve started to use Weka more and more. Weka is a toolkit, written in Java, that I use to create models with which to make classifications on data sets. It features a w...
This is just a quick post to mention that I have made the source for the Gower Tides app on Google Play public. The source repository is available on GitHub. From the repository I have excluded: Imag...
The Heroku Dev Center is a repository of guides and articles to provide support for those writing applications to be run on the Heroku platform. I recently contributed an article for carrying out Dire...
Last weekend I went to CFHack Open Sauce Hackathon. I worked in a team with Chris, Ross and Matt. We started work on eartub.es, which is a web application for suggesting movies based on their sound tr...
My hosting for my website has nearly expired, so I have been looking for renewal options. These days I tend to need to use servers for more than simple web-hosting, and most do not provide the flexibi...
I’ve been having trouble connecting to Eduroam, at least reliably and persistently, without heavy desktop environments or complicated network managers. Eduroam is the wireless networking service...
Next week I, along with others in a team, am taking part in Cardiff Open Sauce Hackathon. If you’re in the area and feel like joining in for the weekend then sign up at the link above. he hackat...
I wanted a way in which users can seamlessly upload images for use in the Heroku application discussed in previous posts. Ideally, the image would be uploaded through AJAX as part of a data-entry form...
I managed to turn about two tonnes of material into something vaguely resembling ‘decking’ in my back garden this weekend. It makes the area look much nicer, but whether it actually stays ...
A few posts back, I talked about the development of an Android app for tide predictions for South Wales. This app is now on Google Play. If you live in South Wales and are vaguely interested in tides/...
I’ve taken to writing most of my recent presentations in plain HTML (rather than using third-party software or services). I used JavaScript to handle the appearance and ordering of slides. I bun...
Each January the School of Computer Science hosts a poster day in order for the research students to demonstrate their current work to other research students, research staff and undergraduates. The e...
I’ve always been interested in the development of smartphone apps, but have never really had the opportunity to actually hava a go. Whilst I’m generally OK with development on platforms I ...
I gave a seminar on my current research phase. I summarised my work over the past few months; in particular, the work on the network structure of Twitter, the way in which tweets propagate through dif...
We recently held our DigiSocial Hackathon. This was a collaboration between the Schools of Computer Science and Social Sciences and was organised by myself and a few others. The website for the event ...