The Curious Engineer

All blogs / Society / politics / economy

Aral Balkan

ar.al

Aral Balkan’s personal web site. Covers small technology as an alternative to big tech and surveillance capitalism, human rights in the digital age (cyborg rights), personhood, and democracy.

Society / politics / economyWeb developmentJavaScript / TypeScript

’05’10’15’20’25
Posts
228 from 1 Jan 2001 to 25 Jun 2025
Posting
now and then
Kind
personal blog
Feed
https://ar.al/index.xml

2025 2

  1. Web Numbers
  2. Careless people

2024 8

  1. Optimal automation
  2. Kitten Kawaii: porting a React library and Next.js web site to Kitten
  3. Small Web: computer science colloquium at University of Groningen
  4. Fedora has been shipping with a broken screen reader for nine years but the real problem is me
  5. Small Technology Foundation funding application for NLnet Foundation NGI Zero Core seventh call
  6. New Kitten features: Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability)
  7. Draw Together
  8. Streaming HTML

2023 1

  1. End-to-end encrypted Kitten Chat

2022 15

  1. Installing Helix Editor Language Servers
  2. Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)
  3. NLnet Grant Application for Domain Rejected
  4. Nlnet Grant Application for Domain – First Update: Questions and Answers
  5. Small Is Beautiful Episode 22 Small Web Kitten Dweb Camp Braid
  6. Dear Linux, Privileged Ports Must Die
  7. Lipstick on a Pig: learning the most important lesson in design
  8. Make Helix Editor follow the system colour scheme
  9. NLnet Grant Application for Domain
  10. Using bound functions to unit test EcmaScript Modules
  11. Decentralisation begins at decentring yourself
  12. NodeKit extension for Codium
  13. Everyone Hates Facebook (but this is more than just about Facebook)
  14. NodeKit Update
  15. The web0 manifesto

2021 34

  1. How to send an email
  2. The Three Laws of Personal Devices
  3. Saying goodbye to an old friend
  4. Comet
  5. Ireland’s two-tier health insurance system
  6. The magic one-line ImageMagick 7 AppImage installer
  7. How to apply a chroma key using ImageMagick
  8. My three-month-long elementary OS 6 upgrade adventure in three parts. (Part 1: Catts)
  9. How to count Unicode glyphs in Vala using Gtk
  10. How to change the colour of the underline in gspell
  11. How to disable Gtk-Message warnings in your app
  12. Implementing dark mode in a handful of lines of CSS with CSS filters
  13. Omnibus GitLab Let’s Encrypt renewal error and fix
  14. Key Mapper: a visual tool for remapping keys (and more) on Linux
  15. Apple is trying to redefine what it means to violate your privacy. We must not let it.
  16. Fish shell
  17. Remote: a little module for more elegant remoting with WebSockets
  18. Make anything a JavaScript module using Node.js ESM Module Loaders
  19. Archival cascades: a practical way to not break URLs
  20. How to get clean analog audio from a Blue Yeti microphone into a Sony a6400 camera using a Raspberry Pi Zero
  21. JSDB Migrations
  22. Scraping the latest EU VAT rates for e-services from the European Commission’s web site with Node.js
  23. Using the European Commission EU VAT Number validation API with Node.js
  24. Hell site
  25. Ethics as PR (or the ‘Some Very Good People Work There!’ Fallacy)
  26. Using Subresource Integrity (SRI) in Vite with @small-tech/vite-plugin-sri
  27. Clean up the web
  28. Passing data from layouts to pages in SvelteKit
  29. Site.js starter template for vite + svelte
  30. npm init using
  31. References to methods are a JavaScript minefield
  32. fs-extra to fs
  33. Cache busting in Node.js dynamic ESM imports
  34. CommonJS to ESM in Node.js

2020 20

  1. Snowpack Hot Module Replacement (HMR) from scratch with vanilla JavaScript
  2. Skypack: Backdoor as a Service?
  3. Why I wrote 152 extra lines of code just to do the same thing (and why I’d do it again today)
  4. Introducing JSDB
  5. What if data was code?
  6. What is the Small Web?
  7. Live Stream: A web site on your phone with Site.js
  8. Mentoring the Eastern Partnership Civil Society Online Hackathon
  9. How to use the Zoom malware safely on Linux if you absolutely have to
  10. How Apple and Google will cure COVID-19 and how you can opt into it if you want to keep your job
  11. Al Jazeera Live interview on corporate and government mass surveillance in the time of COVID-19
  12. Apple just killed Offline Web Apps while purporting to protect your privacy: why that’s A Bad Thing and why you should care
  13. Fail-fast on missing required arguments in JavaScript using default values that throw
  14. Flying to Antwerp tomorrow to present the opening keynote at Dig It Up on Thursday
  15. A happy ending to the Better Blocker saga
  16. Apple App Review: resistance is futile!
  17. Apple App Review says “maybe”: the whims of trillion-dollar gatekeepers
  18. “Apple Says ‘No!’” and what that means for the future of Better Blocker following our move to Ireland
  19. Dear Apple, a little help here? How hard can it be to move our developer account to our new not-for-profit?
  20. In 2020 and beyond, the battle to save personhood and democracy requires a radical overhaul of mainstream technology

2019 65

  1. The Future of Internet Regulation at the European Parliament
  2. Small Technology Foundation Personal Web Prototype-01: a mobile personal web server
  3. Introducing @small-tech/https, a batteries-included drop-in replacement for the Node.js https module
  4. Site.js: now with auto updates in production
  5. Site.js: now with auto server reload on source code changes
  6. Site.js: now with live reload
  7. Fixing read-only file system errors after do-release-upgrade from Ubuntu 14.04 LTS to 16.04 LTS
  8. How to migrate from VSCode to VSCodium (the best code editor ever minus the corporate bullshit)
  9. The little Raspberry Pi that could (serve a web site)
  10. Site.js: now easier than ever to update
  11. Scary git-lfs “bad object” error not so scary after all
  12. Install git-lfs on a Raspberry Pi
  13. Site.js and Pi
  14. Build a simple chat app with Site.js
  15. Site.js, now also on Windows 10
  16. Introducing Small Technology Foundation, Site.js, and Tincan
  17. Small Technology at the Interactive Future Exhibition in Darmstadt
  18. ar.al is now running on a new server
  19. Have you heard about Silicon Valley’s unpaid research and development department? It’s called the EU.
  20. Rerun cloud-init on multipass
  21. Export/import issues with GitLab CE
  22. The Do’s and Don’ts of Tech Regulation
  23. Slavery 2.0 and how to avoid it: a practical guide for cyborgs
  24. Indie Web Server 9.1.0: Better error handling
  25. Indie Web Server 9.0.0: Housekeeping
  26. Indie Web Server 8.2.0: Cascading archives for an evergreen web
  27. Aral Balkan (@aral@mastodon.ar.al)
  28. Fixing the icon regression in Pop!_OS 19.04
  29. Indie Web Server 8.1.1: Reverse proxy (local mode)
  30. This site now runs on Indie Web Server
  31. Set up a live static personal web site in seconds with Indie Web Server 8.0.0
  32. Indie Web Server 7.1.0: Launch a live secure static site with a single command
  33. Indie Web Server: now with native 404 to 302 support for an evergreen web
  34. Custom error pages for Indie Web Server
  35. Upcoming talks: April
  36. How to trim an MP4 video without re-encoding it
  37. Using the Advanced Scene Switcher Plugin with manual overrides in OBS Studio
  38. Open Broadcaster Software Studio is amazing!
  39. Introducing Indie Web Server (video)
  40. Reclaiming your backtick/tilde key with a UK Macintosh key layout on an ANSI US Keyboard in GNOME
  41. Setting multiple key bindings for the same action in GNOME
  42. Indie Web Server
  43. HTTPS Server: now with seamless Let’s Encrypt support
  44. Upcoming talks: March
  45. HTTPS Server
  46. Nodecert
  47. Small Technology
  48. Hypha: Glossary
  49. Privacy is not a science, it is a human right
  50. On the General Architecture of the Peer Web (and the placement of the PC 2.0 era within the timeline of general computing and the greater socioeconomic context)
  51. Hypha Spike: Persistence 1
  52. Hypha Spike: Multiwriter 2
  53. Hypercore protocol deep dive
  54. Hypha Spike: Multiwriter 1
  55. Hypha Spike: WebRTC 1
  56. Hypha Spike: Diceware
  57. Hypha Spike: DAT 1
  58. I was wrong about Google and Facebook: there’s nothing wrong with them (so say we all)
  59. Hypha Spike: Aspect Setup 1
  60. The post-Web is single tenant
  61. Success criteria for the PC 2.0 era
  62. Deployment-first development
  63. Hypha Spike: Deployment 1
  64. Getting Green Recorder running on Wayland under Gnome on Ubuntu 18.10-based systems
  65. Al Jazeera News interview: French “tech tax”

2018 81

  1. Sometimes you have to stick a screwdriver in it (or how to liberate a Chromebook in ten easy steps)
  2. Tilingnome
  3. What does a private communicator look like?
  4. A simple Node transform stream with the new Node 10 pipeline() function
  5. Boogie Board: a beautiful, modern, portable take on the blackboard
  6. Kappa Architecture workshop
  7. Remember directory from last session in Tilix with zsh
  8. Surveillance Capitalism at the BBC
  9. Baby steps
  10. GDMR: this one simple regulation could end surveillance capitalism in the EU
  11. Gnomit 1.0.6
  12. Better Blocker 2018.2 release for macOS and iOS
  13. Gnomit 1.0.5
  14. With this amazing trick, you can stay an extra night in Paris but only if you use Linux!
  15. version: display Linux version information
  16. Gnomit 1.0.4
  17. Updating firmware on Dell XPS 13 With Pop!_OS 18.04
  18. Setting up Hiawatha web server on Ubuntu 16.04
  19. Better Blocker: thank you for our best week yet!
  20. Better Blocker for macOS Mojave
  21. Better Blocker for iOS 12
  22. Workaround for unclickable app menu bug with window.makeKeyAndOrderFront and NSApp.activate on macOS
  23. Responsive design got my app rejected
  24. Better, simpler, and more affordable
  25. Extended Codice Interview With Rai 1
  26. Better Blocker: two year review and thoughts on the future
  27. Get Unicode-aware length of string in JavaScript
  28. Gnomit Flatpak bundle
  29. Introducing Gnomit: a simple Git commit message editor for Gnome
  30. How to install the Vala Reference Manual into Devhelp using the apt package manager
  31. New Philosopher: How power corrupts
  32. Off to Denmark for Smukfest
  33. Getting your iCloud contacts on GNU/Linux
  34. Using iCloud calendars on GNU/Linux
  35. Multi-writer Dat could power the next Web
  36. How to enable the Browse Files setting in GSConnect
  37. Crafting a continuous-client desktop/mobile experience on Linux with GSConnect
  38. How to install DAT on mobile under Termux
  39. Workaround for npm install error on Lineageos 15.1
  40. Web development on a phone with Hugo and Termux
  41. Out of the frying pan and into the fire
  42. Broadcasting your phone’s screen to web browsers using Screen Stream
  43. Fix for “No Bluetooth Found” error after wake from sleep
  44. Getting started with WireGuard on Linux using AzireVPN
  45. Pop!_OS 18.04: the state of the art in GNU/Linux on desktop
  46. Camera fix for Samsung S9 (LineageOS 15.1)
  47. Upgrade Little Snitch Before Upgrading to Mojave Beta
  48. iOTA 360
  49. Typographical typing habits for Linux
  50. Open from terminal in Linux
  51. Enabling Better Blocker in GNOME Web
  52. Changes
  53. Adding “command not found” apt package suggestions to zsh
  54. Flashing stock firmware onto a Samsung Galaxy S9+ (SM-G965F) on Ubuntu 18.04 using Heimdall
  55. Initial git configuration
  56. Casino Data
  57. Whither ethics, New Scientist?
  58. Rsync Permissions and Termux
  59. Web+ on a Phone
  60. Spellcheck With Emacs on Termux
  61. Nginx: Remember to remove the default site
  62. Phones LineageOS 15.1 is officially supported on
  63. Refining the RSS
  64. Reclaiming RSS
  65. Are You Logging IPs Without Even Knowing?
  66. The Real News: Turkish Elections
  67. Kyriarchy
  68. Web
  69. Demonstrating Web + Dat
  70. We Make the City: Next Generation Cities
  71. We Make the City: Opening Night
  72. Digital Masquerade
  73. Working From De Waag
  74. Override BaseURL in Hugo Server
  75. Little Saigon
  76. Public Stack Summit
  77. Giddy about CSS grid
  78. Formatting an ISO 8601 date stamp in Hugo
  79. Refining the blog
  80. Revision history
  81. Hello Peer-to-Peer Web

2014 1

  1. Scribbles

2001 1

  1. Biography