Latest stuff
Using Ubuntu SSH agent inside WSL2 and tmux
Using Ubuntu SSH agent inside WSL2 and tmux — I’ve been forced to use a Windows 11 machine at my new job. I had trouble with ssh-agent
session
management inside WSL2, mostly with added keys timing out while the agent had no idea it should’ve
asked for keys again.
Draft previews for a writing boost
Draft previews for a writing boost — Implemented a simple setup for viewing drafts live using tokens, allowing me to preview things without hitting publish. I’m a somewhat visual writer, as in I like to be able to see my writing alive in order to validate how good it is. I.e. I can’t function with just Markdown, and need a more rendered experience to help me write well.
Getting there with outbound mentions
Getting there with outbound mentions — Would you look at that? A nice reply-context box, meant to display things that I’m replying to on this website. This is more of a UI-only thing for now, but a step towards sending outbound webmentions around.
Test-driving inbound webmentions
Test-driving inbound webmentions — Okay now I’ve implemented an endpoint for all you folks to send webmentions to. On each post, use your preferred endpoint discovery method to find it. These are only collected to an internal queue for now, and cool UI stuff comes later, as I mentioned in the last post.
Webmentions status update
Webmentions status update — Been working on the initial Webmentions implementation of my website for the past week or so. Webmentions by themselves are simple messages, but sending, reading, and processing them can get complicated real quick if you want to make it sensibly automated.
Generated media blindness
Generated media blindness — Ages ago we found out about banner blindness. People internalized that most banners are useless adverts, and subconsciously trained their brains to just ignore anything that resembles a banner ad.
Corrupted Windows DLLs quickfix
Corrupted Windows DLLs quickfix — After a botched auto-update I had some mangled DLLs in my Windows installation. Namely a
p9np.dll
file. Running dism /online /cleanup-image /restorehealth
in an elevated cmd.exe
fixed it. Remember to check that it worked with sfc /scannow
.
Building and installing RediSearch
Building and installing RediSearch — The official Redis documentation and RediSearch repo contains shaky documentation on how to build and install the RediSearch module, unless you're on the Docker bandwagon.
These smaller post things
These smaller post things — I added initial support for “lightweight” posts for my site. These are easier for me to use in case I need to just share something quickly or if I have nothing big to say otherwise. The difference right now is mostly visual for readers, but that might change.
Thoughts, thinks, gardens, blogs, wikis, and more
I’ve tried to keep myself thinking about how I want to write and create things on this website and elsewhere in the future, and how it would/should/could affect the way I design the building and reading experience here on the site.
Website technical sitrep
Website technical sitrep — Last week I posted that I had hopped back onto PHP, and a custom built CMS base to be more precise. I’ve done some more development since then.
Creating an FFI-compatible C-ABI library in Rust
This is part 2 in our PHP FFI + Rust blog series. Previously we took a look at how the FFI feature can be enabled and used in PHP 7.4, and now we will jump over to Rust and see how we can create C-ABI libraries ourselves, which can then be loaded using PHP FFI.
Protecting Caddy-powered websites with Fail2Ban
Protecting websites with stuff like Fail2Ban is a task I occasionally get to do. It is also a kind of task the details of which I manage to forget after every time I do it. This website runs on Caddy, and I had to do a few shifty moves to make it easier to get it working with Fail2Ban.
Backtracking
Some of you may remember how a few years back I ditched a CMS and embraced a static site generation approach for this website. Well I've now backtracked on that decision and will continue with a live-backend powered "normal" website again.
What AI has to say about mobbing and agile software development
ChatGPT is all the rage right now. I decided to try it out a bit. Eventually I wanted to see how it expands on knowledge we can verify exists, with something else we may or may not agree about.
Introduction to PHP FFI
In this series of posts, we will be getting acquainted with a new PHP feature: FFI! In addition to getting to know PHP FFI, we will be learning how to create and use FFI libraries written in Rust.
DigitalOcean automation with Terraform and Ansible
This post will walk you through a very basic setup of setting up automated infrastructure and server provisioning on DigitalOcean using Hashicorp Terraform and RedHat Ansible.
A week with ErgoDox
ErgoDox is a mechanical split keyboard built with ergonomics in mind. In the past, I’ve owned good old staggered QWERTY keyboards so this was my first foray into split and ortholinear keyboards.
Terminal coloring on Windows using Ansicon
The Windows command-line interface is quite a bummer when compared to the terminals on Linux and Mac. One of those bummer-factors is the absence of proper color handling.
Quick guide: remote Windows access with Bitvise SSH Server
Forget Windows Remote Desktop (or whatever it was) and TeamViewer. Let’s see how to get a baseline remote access to your Windows installation using SSH.
Long paths return: the hell called npm on Windows
Long paths return: the hell called npm on Windows — Previously I wrote about too long paths regarding Compass and Sass when using
.sass-cache
.
Sass compiling and too long directory paths
Recently I ran into a problem with a Compass project: I couldn’t compile any SCSS assets into CSS assets and Ruby threw a file not found error.
Sharing responsive design breakpoints between CSS and JavaScript using SassyExport
Wouldn’t it be useful if you could define breakpoints in one place and your whole frontend code would update accordingly? That’s what I wanted a while back on a project. I came up with a way to automate this procedure using SassyExport, a Compass plugin used to export Sass maps to JSON files.
Automated Apache virtual hosts on Windows
Generally all web development should take place on a local development
environment. Often usually this includes an AMP-stack. One great feature of
Apache is the ability to set up virtual hosts using configuration files. After
setting the virtual host configuration, changing the system’s hosts
file to
point a certain domain name to 127.0.0.1
will allow
http://localhost/projectname
(which could be pointing to
/path/to/www/projectname/
on the system) to become projectname.local
for
example.
Facebook plugins and AJAX loading
Facebook plugins and AJAX loading — I ran into a small issue earlier today while developing a client website. I was
trying to load an external page fragment using jQuery.load()
, which worked
just fine until the code broke the Facebook Like button plugin.
Beginner PHP: Custom array sorting functions explained
Many of you most probably are familiar with PHP’s built-in array sorting
functions, such as sort
, ksort
and similar. The built-in sorting functions
are quite straight-forward and easy to use. But what about situations where you
need to use a custom sorting scheme to order your arrays properly? Say hello to
usort
, uasort
and uksort
(u
standing for “user-defined”), a set of
functions used to map a custom sorting function to handle the more complex
ordering problems.
Using CSS3 gradients to create text leading lines
The new CSS3 gradients are quite powerful and simple when in need of simple
repeating background patterns. Although these will not work in older browsers
and partly in newer browsers, they are an option to look for to lessen image
usage for things that may work without the image file. This entry will guide
you through to make leading lines for text (as has been for ages in notebook paper
and similar stuff) using some CSS3. This effect can be useful for lines of code
within <pre>
tags and similar.
Returning multiple values from PHP functions
We are learning some basic PHP programming at school this semester. An exercise
required to use functions and display data with possible error reporting on that
data. I had a validation function to check my form, but I needed to return more
than true
or false
to make the error reporting work properly. I needed to
get the amount of errors and the description of each error.
Age of Empires 2: how to fix the odd colors on Windows 7
As some of you might have noticed, Age of Empires 2 (and its The Conquerors expansion) has a color bug on Windows 7 (and most probably on Vista too). Grass turns red, water becomes purple and every second tree is a christmas tree (or palm for that matter). Gameplay related problems include player colors displaying wrong either on the minimap or when outlining units behind obstacles. Annoying as hell and no normal option is around to fix it.
Getting the page count of paginated queries in WordPress
I was playing around with a WordPress theme and I wanted to display a simple number indicating the amount of pages a certain paginated part of the site had (front page’s recent entries in this case). I looked and looked but didn’t find any straight-forward variable or method which could output the value. Seemingly the only choice was to make the thing myself.
CTF-Austere for Unreal Tournament 3 released
I’m pleased to write that my award winning Capture The Flag level for Unreal Tournament 3 has been finalized and released.
Remember to backgroundify your <body> elements
Remember to backgroundify your <body> elements — Today I was in trouble. My girlfriend had turned the user setting of the page background to black on her Opera. This she did to “save energy”, which sounds a bit trivial to me, as she has a small LCD.