ROllerozxa
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