RSS.Social

ROllerozxa

follow: @[email protected]

Posts

Notes on DMABUF and video

Setting up an XMPP server with Prosody

Wildcard HTTPS certificates with Certbot and Cloudflare DNS

Jokes and Humour in the public Android API

I'm James Long

RAW file Quick Look broken in MacOS 15.4

Porting a game to 7 platforms

Sci-fi Shorts: Dimming

Post-mortem: The 2025-04-18 IP spoofing attack

Generating PDF documents from Markdown

Camera Lens Fixed

Camera Lens Issue

Further Average Cloud Cover Satellite Imagery

The Luanti Techage Backdoor

Why was the Commodore 64 Disk Drive So Slow?

Subverting control with weak references

Display Managers, and Ly

How (not) to compare strings in C

Goodbye Google Play

Editing Windows executable resources programmatically with rcedit

Drawing text in the SDL renderer without SDL_ttf

The story of principia-web

My C/C++ setup with Visual Studio Code (Code - OSS)

SDL_LEAN_AND_MEAN

Heatmap / Continuous Colour Scale Gradient Palettes

libobscura

IPv6 in your home

A Tale of XMODEM

Trip to Perth

Image Value Remapping

ActivityPub Event Handling in PHP and MySQL

Quick synthesizer with harmonics

Little learnings

Formatting serial streams in hardware

ActivityPub Follows in PHP

Intro to the new site

Working around Google Calendar sync delays

DeviantArt Community Guest Feature: When Art Meets Code

(Almost) Pure CSS Tooltips

Implementing HTTP Signatures with PHP and OpenSSL

Slow-Roll Livecoding: Proxying a REST API with PHP

Central New South Wales Trip

Bike dynamo

Building a Solitaire "AI" in JavaScript

Pointcloud Processing Tooling

Zero-downtime deploys for Render apps with disk storage

State of input method

Simple Photo Collage Generation

Wildcard Email Addresses with Self-Hosted Postfix

Why does the chromaticity diagram look like that?

The Curious Case of Debian 12 and the SSH Failure

Great-Circle Route Visualisation with three.js

Nested Threads and the Mastodon Context API

After Rustlab

Seven Snippets of Modern CSS I Used To Rebuild My Site

Shocking Finale

Two-factor login

Timelapse Blending

There and Back Again

An Idea for a Grand Adventure

Getting my HomeLab-2 sea legs

So... HomeLab-2? What is that?

Another year, another RetroChallenge

Binary Golfing in Commodore BASIC

Preprocessor Definitions in WebAssembly

Non-English speech synthesis

A biased guide to tech conferences

Style me

Multi 3.0: Codesigning, dynamic libraries, and macOS notifications

Debugging Rust in QtCreator

SSH keys everywhere

Shell recipes

User-oriented desktop, part 1

Keypress entropy

Modern SPAs without bundlers, CDNs, or NodeJS

Maps à la carte

Spots on the Sun and worn-out clothes

Graphical debugging on the Librem 5 using QtCreator

Jazda: Rust on my bike

A small benchmark for functional languages targeting web browsers

Why Jazda?

Cheap and cheerful microcode compression

Git-botch-email

A potion of experience

Browser tab archaeology

Typebeat, checkpoint 0.1.0

Rust on the MOS 6502: Beyond Fibonacci

A retrospective on Multi

Ambitious Side Projects (Collaborative Craft podcast)

Rust on Maemo

Reverse engineering a pen

Start in the middle

When being a nerd paid off

Linux kernel flame graphs

Simulating fluwids

A beautiful blossom of engineering excellence

This page is intentionally left Black

My objective function will blow it up

A tiny computer for Tiny BASIC

Teaching WebGL to dance to music

Ben from Ozark

Geo in GL part 1: Flattening Earth

A "very typed" container for representing microcode

Wayland and input methods

Solving text adventure games via symbolic execution

Word embedding fun

It's not about keyboards

Why I avoid Cargo: dependency versions

From C to exec: Part 3

From C to exec: Part 2

From C to exec

Brutalist blogging

Integrating Verilator and Clash via Cabal

Composable CPU descriptions in CλaSH, and wrap-up of RetroChallenge 2018/09

CPU modeling in CλaSH

Back in the game!

Very high-level simulation of a CλaSH CPU

PS/2 keyboard interface in CλaSH

CλaSH video: VGA signal generator

RetroChallenge 2018: CHIP-8 in CλaSH

Rust on AVR: Beyond Blinking

Sci-fi Shorts: Ticketed

Stack reification via trampolines

Hacks of 2015

Időrégész 2015

That Time My Encrypted RAID Failed

RFC 7168: Hypertext Coffeepot Control Protocol for Tea Efflux Appliances

Let's Build a JPEG Decoder: Frames and Bitstreams

Let's Build a JPEG Decoder: Huffman Tables

Let's Build a JPEG Decoder: File Structure

Let's Build a JPEG Decoder: Concepts

svn branchlist: Print branch names for multiple repos

How Emulators Work: a presentation

Sci-fi Shorts: Behind the Mirror

Steganography with Brainfuck

Sci-fi Shorts: Betel

Printable Opcodes in x86 Real Mode

Edge Detection with Android Native Code

Camera Overlays with Android Native Code

GameBoy Emulation in JavaScript: Timers

Sci-fi Shorts: The Harness

GameBoy Emulation in JavaScript: Memory Banking

Sci-fi Shorts: Power

GameBoy Emulation in JavaScript: Interrupts

GameBoy Emulation in JavaScript: Sprites

GameBoy Emulation in JavaScript: Input

GameBoy Emulation in JavaScript: Integration

GameBoy Emulation in JavaScript: Graphics

GameBoy Emulation in JavaScript: GPU Timings

GameBoy Emulation in JavaScript: Memory

GameBoy Emulation in JavaScript: The CPU

Memory Usage of Constants in PHP

Venn Diagrams in PHP with imagick

Sci-fi Shorts: Light

Sci-fi Shorts: New Science

Discordian Dates in Java

linecolor.pl: Rule-based Line Colours in irssi

Audio Captchas in PHP

Binary-Coded Decimal Addition on Atmel AVR

Gameboy Z80 Opcode Map

Implementing PayPal Website Payments Pro UK

Sci-fi Shorts: Prime Point

Parsing the DIME Message Format

Rebuilding Your Leg After Shooting Yourself in the Foot

Vanilla JavaScript Slideshows

Sci-fi Shorts: Highrise

Sci-fi Shorts: Go Northeast

Vanilla JavaScript Tab Controls

NotPDO for PHP: Wrapping MySQL to look like PDO

Modified Preorder Tree Traversal

CRC32 Calculation in 256 Bytes

List of countries and dependent territories

Asynchronous JavaScript and JSON

Using Pointers in C#

Automated Deployment with Subversion

Building Complex Emails with PHP

Extended Text Mode on the Commodore 64

The Structure Pattern in PHP

Intranet DNS Resolution with BIND Views

An Introduction to Compression

Whitelisting SSH Access with OpenWRT

Making PDO Look Like ADODB

Booting Linux from a USB Flash Drive

ARMv4/5 Opcode Map

Tetris in Vanilla JavaScript

Running a Windows Partition in VMWare

Trainfuck: Networking Extensions for Brainfuck

Sci-fi Shorts: Hideout

Sci-fi Shorts: Thirteen

Sci-fi Shorts: Tau

Sci-fi Shorts: Microwave

Sci-fi Shorts: Sand

Sci-fi Shorts: A Change of Clothing

Collapsible Nested Lists in Vanilla JavaScript

An Introduction to Bitwise Operators

Virus Detection with Message Digests

The Smallest Nintendo DS ROM

archipylago goes PyCon Finland

Thanks for 2024!

Hallway track is where the magic happens

Let's solve Advent of Code puzzles together - archipylago sprint

Fall 2024 announcement

It's my first time at a meetup - how does it work?

April sprint 13.4.: Web Development

archipylago #3: Good-enough SRE practices & Rule-based systems in Python

March meetup is coming 14.3.

Our first sprint in February

archipylago #1: Modern Python Packaging & Debugging Python

Start your year with a new podcast

from turku import archipylago

Modernising the Amiga at Forty

Another Another Place. My NOVA 2025 Demo.

The deep irony of the OpenAI Ghibli Generator

A 3D Game engine in 24 days

Repair Cafes great and small

Bee-Scales and Badges

Behave Birdnet Bhyve

Spotting Seals in Sonar with A.I.

HDMI Compatible PMOD for your FPGA

Running BirdNet 24/7 in a different way.

3D Printing Bee Spacers

I built a mechanical trommel

Profiling Python programs promptly

Get in the sea Arduino!

How to PhD, probably.

An A.I. Christmas Message

My approach to the passing of Elizabeth II

Multiply - a book about calculators I helped create

Assembly on the ZX Spectrum - Part 2 - Field-FX Demo at EMFCamp

FPGA Demo for Revision 2022

Assembly on the ZX Spectrum - Part 1

Writing. From Science Papers to Roleplay Games.

Making a computer game from scratch

Upgrading an Amiga 500 for today

Building an FPGA Board for pretty VGA graphics

Microscopes meet Artificial Intelligence

The Home of Golf meets the Nintendo Famicom

The ZX Spectrum 48K Today

A modern take on the plague doctor mask.

Building a Polybius Arcade Cabinet

Shutr, my own flickr replacement - Part 1

My deepfake alternative Queen's speech

Rust, Python and Fish

Making a VR tour of Antarctica

Blocking Big Battery Booms! (with bootloaders)

The Holy Trinity of Wireguard, hosts and PiHole

The Gamemaker's Toolkit GameJam 2020

My First Demoscene production

Generating Statistics in A.I. and Science

Visualising the PyTorch Compute Graph for Bug Fixing

Making your terminals a bit nicer

How I do imaging for my PhD research

Turning old mini-routers into useful remote cameras

What makes a computer role-playing game great?

Cell segmentation at The Alan Turing Institute

Why I'm not a Hackspace member anymore.

The first year of a Biology and A.I. PhD

Retro computers, vegetarianism and booze in Japan

Rust reverses research ruin

Debugging neural networks

Surface mount soldering with BGA and hot-plates

Using PyTorch to find the orientation of a torus

Planescape Torment, Adam Curtis and Gaming today

The Flickr diaspora, website bloat and what is important.

Hacking the Nintendo Powerglove

Tips for a budding Masters Student in Bioinformatics

The Cybar at EMF 2018

Metaballs on the Arty FPGA

Sequence classification and labelling for protein loops

Hydroponics build with the EMF Tilda badge

Attempting to modify e-coli with CRISPR in my bathroom

Reading ROMs from a scanning electron microscope

Protein Loops in Tensorflow - A.I Bio Part 2

Writing a electron microscopy python plugin for ChimeraX

Learning how to AI and Biology at the same time - Part 1

Making a 3D Scanning Dome - Part 2

Programming an Android Zotero Client - Part 1

Making a 3D Scanning Dome - Part 1

Setup for the Scarab miniSpartan3 FPGA

Keeping track of a load of Molerats

word2vec, Tensorflow and Vector Counts

An Electronic Wedding Invitation

Twitter meets SVM and Deep Learning

PXLjs WebGL Engine first version

Electronic Magnetic Field Camp 2016

Electronic Patient Report Forms for EMFCamp 2016

Go-lang and CMake

BSides London 2016

Fortran, CUDA and Fluid Dynamics

Writing a password management page in Go

FOSDEM 2016

Modding a Theremin

Building a SmartWatch Part 1

Transsiberian Slitscan

CCCamp2015

R2kS - A Novel Measure for Comparing Gene Expression Based on Ranked Gene Lists

Giant Tetris on a building; RI Xmas Lectures

UTOPIA Bio-informatics Toolkit

Bullseye's playground for Target and Psyop

Oyster Card RFID Ring Mk3

Seven Languages in Seven Weeks

Echoforms at Lexus NX Launch

900 RGB LED Screen

Nook Patient Report Forms

Kaleidoscope for Lexus

The Equatorie

Revision Demo Scene Party

Oculus Rift, meet Phantom Limb Therapy

Phantom Limb Dev Diary Part 4

Phantom Limb Dev Diary Part 3

Phantom Limb Dev Diary Part 2

RFID Ring

Phantom Limb Dev Diary Part 1

Another year for S9

LED Pendant

The EMF TilDA Badge Doorbell

Photo-realistic hands

Burberry Kisses, with Google and Grow Interactive

Museum of Rural Life Smart Audio Guide

Linear Rail Time Lapse

Coin Detection at the British Museum

Phantom Limb at the Science Museum

The Carp and the Seagull

A Touch Wall under the M1 Motorway

3D Organ Reconstruction

Animation12 - The Boom Box!

Building a Vertical Touch Wall

User Interfaces in OpenGL

Modern OpenGL

Stereo Vision

BSides London 2012

Minimus and Sega

Resonate Festival

Spying and starting services with OSX

Phantom Limb Pain

A Mosaic of snaffled images

Linux and Lion together at last (almost)

Lowry to Life

Smiling-Film-Student-Geekery

MongoDB Fun with Cinder

OSX Admin for the lulz

Defeating Firewalls

Node and Mongo

Running with Nginx

Denied

Animation11 - Only

Only Installation at the Lowry

Wireless Headtracking and FabLab

Deutsche Bank Installation

Cookbot

Cinder Shadow Volumes

British Library Tweet-o-meter

Structured Light

How Leaky is your Country?

TouchTable DJ Decks

Harmonic Numbers and Non-Uniform Milestones

A Polyomino Tiling Algorithm

Visualizing Hash Functions

Uninteresting Numbers

Interactive Quantum Circuits

Top-Heavy Towers and Borromean Rings

A Googol Hundred

The Ham Sandwich Theorem

Primitive Triangles

These Two Graphs Do This

From Juhis with Love #008: Weird and creative games

Blaugust 2025 retrospective: Surprising Rainbow Diamond Award

Static sites enable a good time travel experience

I keep geeking out about my print styles

There’s something I’ve never told you…

Build the forum you want to see in the web

Shortcut to add link to today’s note in Obsidian

I wonder if my blog has been mentioned in US courts

#971226 is my colour in the web

I have found the joy of clipboard managers

Linking to books online

I’m happy when people learn and are inspired

If you had absolutely no worries about money, and no fear, what are ten things you would do this week?

Handwriting is slow which gives me time to think

Notes require regular gardening

Board game nights are my favourite way to socialise and make new friends

My wallet doesn’t run out of battery

Questions and answers about blogging

Saturday Extra: Raindrops

Is writing a hobby for me?

Network stress test for my smart home

Blog comments, a must-have or fun extra?

I really like Home Assistant’s triggers and actions model for its flexibility

Newsletters I read

wallabag, I choose you!

Do not, I repeat, do not read the comments

Dotfiles feel too intimate and personal to share

Naming devices is fun

Solutions and references

Find new blogs to follow from this year’s Blaugust participants

Hooked - How Habit-Forming Products Capture Our Attention

Basic web server implementation using inbuilt python tools

Create HTTP server from Scratch

Adding Full Text Search to Your Django App with django-watson

Introduction to C++ Part 1

Ultimate Redis Cheatsheet

Google I/O 2023: The Year of AI

Hitchhiker's Guide to mastering ChatGPT

Celery Alternative for Django - Huey

Introduction to Three js - Hello World

How to download Pandas Dataframe as Excel or CSV in Django?

Understanding and Implementing UNet using Pytorch

Generative Adversarial Networks

How to implement Auto Expiring Token in Django Rest Framework

How ISP blocks (throttles) VPN?

Django in Production - III

Road to Machine Learning Engineer

5 techniques to Idiomatic Python (Loops)

Zero Downtime Deployments With Supervisor

Perceptrons

Machine Learning – in a nutshell

Fixing Up Permissions After Data Migration in Django

Telegram Trivia Bot

Reverse Engineering Netflix Falcor API

Updating Python Packages

Introduction to Git (Part 1)

How to save Base64 encoded image to Django ImageField?

Custom Response Header in Django

Django in Production - II

Django in Production - I

Array – Data Structure

PHP for Beginners

How to become a killer Web Developer

Are We Living in a Simulation

Fundamentals of Android Development

How Anime Shaped My Personality

Python for beginners (Part 2)

Python for beginners (Part 1)

What exactly is Big O notation?

Quantum Programming 101

Adding Tags Field to Your Django App

Take advantage of your procrastination

How to Write Good Code

Why Should I Care About Quantum Computers

Scrape Data From Javascript Rendered Sites

Tips to Speed Up Your Website

The Mathematics in Decision Trees

Important Flask Extensions You Should Use

VS Code Extensions I Use