A global gitignore file can be handy to automatically hide common files from projects that you work on. I typically use this for files that are specific to me and my local setup. First create the file that you want to use for your global .gitignore file. I just use a file called .gitignore in…
An overview of how I set up Kubernetes, and my projects to deploy to it.
Automating backups of Docker volumes from a Linux server to Digital Ocean spaces.
By trade I am a PHP developer. I’ve never done devops in a professional setting. However, for a while I have had a strange fascination with various continuous integration and deployment strategies I’ve seen at many of my places of work. I’ve seen some very complicated setups over the years, which has created a mental…
In this guide I’ll show you a way to get started with Terraform — specifically with Digital Ocean.
I’ve seen some very elaborate homelab set-ups online but wanted to get the easiest possible implementation I could, within my current skill set. As I have quite a lot of experience with using docker for development in my day to day work, I thought I’d just try using docker compose to setup my homelab service…
I’ve opted for what I believe is the easiest, and cheapest, method of setting up my Homelab. I’m using my old work PC which has the following spec: My Homelab Goals My homelab goals are centered around two fundamental tenets: lower cost for online services and privacy. I want to be: Documenting my journey I…
I’m now running pi-hole through my Raspberry Pi 2b. It’s both amazing and depressing just how many trackers are being blocked by it. I even noticed a regular ping being made to an Amazon endpoint exactly every 10 minutes. I will try and write up my set up soon, which is a mix of setting…
I have decided to get back into tinkering with my Raspberry Pi. I will be blogging my journey as I stumble through my initial playing, through to building out my first proper homelab. This first Raspberry Pi (model 2b) will be initially used as both a wireguard VPN server and a local DNS server.
This is my first data visualization attempt and uses data from HM Land Registry to show to average cost of a semi-detached house in four counties across the past ten years. You can see the full repository for the project on Github. The Code Here I have included the code at the time of writing…
When I first moved my Neovim configuration over to using lua, as opposed to the more traditional vimscript, I thought I was clever separating it up into many files and includes. Turns out that it became annoying to edit my configuration. Not difficult; just faffy. So I decided to just stick it all into a…
What is Lupo? Lupo is a simple static site generator, written in Bash. I built it for myself to publish to a simple website of my own directly from the command line. It was inspired by Rob Muhlestein and his approach to the Zettelkasten method. Installation Running through the following set of commands will install…
Preface This guide comes logically after the previous one I wrote about setting up a digital ocean server with Terraform. You can clone my website’s ansible repository for reference. The main logic for this Ansible configuration happens in the setup.yml file. This file can be called whatever you like as we’ll call it by name…
Overview of this guide My Terraform Repository used in this guide Terraform is a program that enables you to set up all of your cloud-based infrastructure with configuration files. This is opposed to the traditional way of logging into a cloud provider’s dashboard and manually clicking buttons and setting up things yourself. This is known…
Being a Linux user for just over 10 years now, I can’t imagine my life with my aliases. Aliases help with removing the repetition of commonly-used commands on a system. For example, here’s some of my own that I use with the Laravel framework: You can set these in your ~/.bashrc file. See mine in…
Signing your git commits with GPG is really easy to set up and I’m always surprised by how many developers I meet that don’t do this. Of course it’s not required to push commits and has no baring on quality of code. But that green verified message next to your commits does feel good. Essentially…
This post is currently in-progress, and is more of a brain-dump right now. But I like to share as often as I can otherwise I’d never share anything 🙂 Please view the official Vimwiki Github repository for up-to-date details of Vimwiki usage and installation. This page just documents my own processes at the time. Installation…
I define a “general plugin” as a plugin that I use regardless of the filetype I’m editing. These will add extra functionality for enhancing my Neovim experience. I use Which-key for displaying keybindings as I type them. For example if I press my <leader> key and wait a few milliseconds, it will display all keybindings…
These plugins I use in Neovim are ones I consider “passive”. That is, they just sit there doing their thing in the background to enhance my development experience. Generally they wont offer extra keybindings or commands I will use day to day. You can view all the plugins I use in my plugins.lua file in…
I try to use Neovim for as much development-related work as possible. This page serves as a point of reference for me, and other people interested, for what I use and how I use it. Feedback is welcome and would love to know how you use Neovim too! My complete Neovim configuration files can be…
This is the absolute bare bones minimum implementation for my inventory keeping: saving items to my inventory list. Super simple, but meant only as an example of how I’d work when working on an API. Here are the changes made to my Inventory Manager. Those changes include the test and logic for the initial index…
nmcli is the command line tool for interacting with NetworkManager. For work I sometimes need to connect to a vpn using an .ovpn (openvpn) file. This method should work for other vpn types (I’ve only used openvpn) Installing the tools All three of the required programs are available via the official Arch repositories. Importing the…
What is the github cli The Github CLI tool is the official Github terminal tool for interacting with your github account, as well as any open source projects hosted on Github. I’ve only just begun looking into it but am already trying to make it part of my personal development flow. Installation You can see…
I only have this post here as there was a couple of extra steps I made after regular installation, which I wanted to keep a note of. Here are the changes made to my Inventory Manager. Follow the Jetstream Installation guide Firstly I just follow the official installation guide. When it came to running the…
The entry point for my Neovim Configuration is the init.lua file. Init.lua My entrypoint file simply requires three other files: The user.plugins file is where I’m using Packer to require plugins for my configuration. I will be writing other posts around some of the plugins I use soon. The user.options file is where I set…
Whenever I start a new Laravel project, whether that’s a little side-project idea or just having a play, I try to follow the same process. I recently read Steve’s post here on starting your first Laravel 9 Application, so thought I would write down my own setup. Whereas Steve’s guide walks you through the beginnings…
Laravel is an incredible PHP framework and the best starting point for pretty much any web-based application (if writing it in PHP, that is). Along with it’s many amazing features, comes a beautiful framework from which to test what you are building. For the longest time I cowered at the idea of writing automated tests…
When running psalm in a Laravel project, I get the following error by default: This is the default implementation for configureRateLimiting in the RouteServiceProvider class in Laravel: I change it to the following to get psalm to pass (I’ve added named parameters and the static keyword before the callback function):
When I search for docker-related topics online, it almost seems to me that there are two trains of thought for the most part: I believe either of these is a valid approach — whatever feels right to you. Of course it does also depend on how your company / team works. But I’d like to…
Whilst working on a little library recently, I discovered some interesting behavior with PHP’s __call magic method. Specifically around using named arguments in methods that are caught by the __call method. Given the following class: Calling a non-existing method without named parameters would result in the arguments being given to __call as an indexed array:…