Are you ready for Web Numbers? Domains? Where we’re going, we don’t need domains! IP addresses are about to make a comeback on the web in a big (ok, small) way. What’s all this, then? As some of you might know, I’ve been working for the past six years on building a little thing I call the Small Web . The idea behind the Small Web is to make it as easy as possible to have your own web site at your…
Facebook: they sound nice. This is not your father’s book review So, a bit of an admission: I normally don’t read stuff about Big Tech, even though I’ve been railing against it in one form or other for a little over the past decade. Why? It gets me angry. Like, really angry. I used to believe, back when I was giving dozens of talks a year about the problem – talks with titles like Free is a Lie ,…
We keep seeing the following cycle in growth-based systems: A technology is introduced that improves a manual process via automation. The technology is iteratively improved, eventually reaching an optimal state of automation. Instead of stopping there 1 , due to infinite growth requirements, we move past the optimal state to excessive automation. Excessive automation can remove the positive…
Interactive embed (play with it) Kitten Kawaii is a Kitten port of React Kawaii by Miuki Miu (Elizabet Oliveira) that you can play with in the interactive embed above (also try it out in its own window/tab so you can see its responsiveness and URL-based state). I stumbled on Muiki Miu ’s (Elizabet Oliveira’s) adorable React Kawaii web site and wanted to use one of the characters in my Kitten app.…
Download the video and watch it with your favourite video player. Recording 1 of the live stream of a computer science colloquium on the Small Web I presented at the University of Groningen on June 11th, 2024. ( Transcript ) Update: I was going back and forth between calling the personal social network Place and Yarn. In the talk, I refer to it as Yarn. As I’ve been working more on it, I’ve…
Fedora, a major Linux distribution, has been shipping with a broken screen reader for nine years 1 . This can only happen in an ableist culture. If there is one takeaway you need from this post, it’s this. Unless you’re interested in the details or the ensuing drama, you can stop reading here and you will not have missed out on much. What is a screen reader? A screen reader is a core assistive…
Yesterday, I spent most of the day getting Kitten ’s new interactive shell working over a socket connection (this isn’t trivial if you want your shell to display Node.js REPL’s preview completions properly ). Then, I took fifteen minutes to submit Small Technology Foundation ’s application for funding from the seventh call of the NLnet Foundation NGI Zero Core for our work on realising the Small…
Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can download the video and watch it with your favourite video player. Yours truly demonstrating the new Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability) features. Links Kitten interactive shell (REPL) tutorial Streaming HTML tutorial Domain Like this? Fund us!…
Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can download the video and watch it with your favourite video player. Let me take you step-by-step as I remake Draw Together from scratch. Draw Together is a little collaborative drawing toy I made with Kitten on Saturday night. You can play with it in the live embed above , watch the video in this…
Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can download the video and watch it with your favourite video player. Building the Streaming HTML counter example. Estimated reading time: 25 minutes. Kitten has a new experimental workflow for creating web apps called Streaming HTML that I want to introduce you to today. Kitten, uniquely, enables…
Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can download Small Is Beautiful #27 directly , and watch it with your favourite video player. Small Is Beautiful (Feb, 2023): End-to-end encrypted Kitten Chat (an example peer-to-peer Small Web app using Kitten . Follow the tutorial to build it yourself from scratch or browse the source code ). In…
Helix Editor using the Bash Language Server to show the symbols in the script included in this post. Helix Editor I’ve been using Helix Editor as my daily driver for web development for most of this year and – while it has some outstanding issues 1 (what doesn’t?) – I’m really enjoying it. 2 One of the issues that might trip new folks is that while it has Language Server Protocol (LSP) support,…
Stephen is a big fish to fry. (I’m here all week.) Warning: the fediverse is about to get Fryed. Stephen Fry ed, that is. Following the recent takeover of Twitter by a proto-fascist billionaire man-baby, people have been fleeing 1 to the fediverse 2 . Among them are folks who, on Twitter, at least, had millions of followers like Greta Thunberg and, more recently, Stephen Fry. 3 “Well, surely…
On October 12th, 2022, we recevied the following form letter, informing us that our NLnet Grant Application ( original application , follow-up questions and answers ) for Domain has been rejected. Dear Aral, I'm sorry to have to inform you that your project 'Domain' (2022-08-099) unfortunately was not selected for a grant. This in no way means that we do not see the value of the work you proposed.…
This is the first update to our NLnet Grant Application for Domain . You applied to the 2022-08 open call from NLnet. We have some questions regarding your project proposal Domain. Thank you for getting back to us. Please find the answers, inline, below. You requested 50000 euro, equivalent of one year of effort. Can you provide some more detail on how you arrived at this time estimate? Could you…
Privileged ports, toffs of the Linux world. Kitten is a small web server that runs as a user-level service and would never need elevated privileges if it wasn’t for one archaic anti-security feature in Linux that dates back to the mainframe era: privileged ports. Back to the future As it was in Unix in the 1980s , so it is now, that any process that wants to bind to a port less than 1024 must have…
I just released a little tool called Lipstick on a Pig that helps keep the visual appearance of supported command-line applications in sync with the current light/dark mode setting (colour scheme) of your system in GNOME. But why is this tool even necessary to begin with? Let’s start at the beginning… Getting to GNOME you The GNOME display environment 1 , since version 42, implements support for…
Black Box adheres to the system colour scheme in GNOME. This is a niche post for those of you using a Terminal application that adheres to system light/dark mode settings 1 (like the excellent Black Box by Paulo Queiroz ) and Helix Editor . The problem is that Helix editor currently does not support separate light and dark themes or switching between them automatically when your system does. This…
This is my application to get NLnet funding to work on Domain as part of the User-Operated Internet Fund 1 I feel it’s important that such grant applications are made public so everyone has visibility into the process. This will allow us to collectively learn from the experience and perhaps even to improve the process itself. As such, I’ll be making my end of the process as public as possible by…
Imagine you have the following EcmaScript module you want to unit test: // untestable.js const configurationValue = 'something' export function functionToTest () { return configurationValue } The problem is you can’t test it for different values of configurationValue (which, in a real example, might be based on a runtime quality of your app). You can’t because configuration value is private to the…
My talk at the Department of Art & Media Technology, University of Southampton, on Wednesday, February 16th, 2022. This morning, I was invited to gave a talk at the Department of Art & Media Technology, University of Southampton. I was invited by Adam Procter, a long-time ally who heads up the department, as part of a new series of talks to help shape department policy on digital and networked…
NodeKit for Codium: a reluctant fork of Svelte Language Tools. This past week, I cobbled together 1 a very basic NodeKit extension for Codium . Download 📦 nodekit-for-codium-0.5.0.vsix 💡 What’s NodeKit? Watch the NodeKit video introduction to find out. Install Either drag the downloaded package to the Extensions panel of Codium or, in your terminal, run the following command from the folder you…
“And my timelines lit up in a rare unity, the left and right, the rich and the poor, the healthy and the sick, all pleading and nodding and saying, yes, yes please, please do that.” - Adam Dalliance Well, it’s official, everybody hates Facebook . But why we hate it matters. As does what we intend to do about it. For more good reasons to hate Facebook and other people farmers, watch my talk, The…
Since the initial demo of NodeKit at last week’s Small Is Beautiful , we now actually have a nodekit command, the server now does naïve restarts on route changes, and routes are now lazily loaded the first time they’re hit. I wanted to record this before jumping down the rabbit hole of implementing some form of hot module reloading/replacement using WebSockets and MorphDOM . Like this? Fund us!…
The web0 manifesto: a short and sweet middle finger to web3. Is it Covid or bullshit allergy? Towards the end of 2021, I started noticing more and more “articles” on “web3” cropping up, each one more grating than the last. It was as if journalists public relations hacks 1 were in a race to the death to see who could best parrot the latest right-libertarian techbro bullshit from bullshit press…
How to send an email by speaking SMTP interactively to an email server. (This is how email works under the hood and it’s simpler than you might think. Play the video and follow along.) Like this? Fund us! Small Technology Foundation is a tiny, independent not-for-profit. We exist in part thanks to patronage by people like you. If you share our vision and want to support our work, please become a…
The Universal Declaration of Cyborg Rights states that we extend our selves using digital and networked technologies and that this extended self must be protected under human rights law. As the primary means by which we extend ourselves today are through our everyday personal devices – computers, mobile phones, the so-called “Internet of Things” and “smart” homes, cars, etc. – we must enshrine the…
How do you like them apples? We didn’t and poor Better paid the price. Trillion-dollar corporations are not your friend. This isn’t a revelation to me. I’ve been saying it for some time now. And yet, over the years, I’ve taken my share of flack for seeing Apple as a viable mainstream stopgap based on its business model. Well, that position has become untenable ever since Apple announced , got…
Comet. Wallpaper illustation by Margo de Weerdt After several months of work, Comet version 1.0 is now available to install on elementary OS 6 . Comet is one of the artefacts from my three-month-long elementary OS 6 upgrade adventure and I will be writing more about the process of creating an app according to the elementary OS guidelines – what worked, what didn’t, and what can be improved –…
Sorry, your browser does not support embedded audio. Download the recording. An excerpt from an almost ten-minute phone call with a Vhi corporate advisor. (Transcript.) Question How do you get pre-existing conditions and waiting periods waived when getting health insurance from Vhi in Ireland? Answer: You start working at a multi-billion dollar American Big Tech company like VMWare . We’re all…
To install ImageMagick 7 on any distribution that supports AppImage , copy and paste this one-line script into your favourite shell: bash -lic 'wget -O /tmp/magick https://download.imagemagick.org/ImageMagick/download/binaries/magick && chmod +x /tmp/magick && test \$(wget -qO- https://download.imagemagick.org/ImageMagick/download/binaries/digest.rdf | grep 'rdf:about=\'magick\'.*' -A6 | sed -rn…
Yesterday, I wrote a short post on the fediverse with an overview of how to take a screenshot of an app with a context menu showing in elementary OS, while keeping its alpha channel and drop shadow using Krita . Today, I decided that since I want localised screenshots for Comet in the elementary OS AppCenter , I have to automate the screenshotting process (as I have 5 screenshots per language and,…
I just upgraded my operating system from elementary OS 5 to 6. It only took me three months. The journey begins elementary OS 6 (Odin) was officially released on August 10th, 2021 . Since there is no auto-update tool, you have to back everything up, wipe your computer, and install the new operating system from scratch. It took me a few days to build up the courage to do so. On August 14th, after…
Want to try something really scary this Halloween? Try counting the characters in a string in Vala . For example, how many characters do you think there are in the following string? var zombie = '🧟♀️️' ; One? You’re right! So how would you go about getting this result in Vala? Use zombie.length , did I hear you say? Oh, you poor, dear, naïve, sweet thing… '🧟♀️️' . length // 13 What’s that?…
gspell is GNOME’s spell-checking library. When it discovers misspelld wrds , it underlines them in dark red. (Only, it can’t do wavy underlines so it does solid ones.) To change the colour, say to Dracula pink for dark mode, you set gspell_text_view.underline_color = "#ff79c6"; Haha, just kidding, you can’t. There’s a 5-year issue open to ask for an option to change the colour. Being the Henry…
So every elementary OS app at the moment, if you start it from Terminal, welcomes you with a variation of the following salutation: Gtk-Message: … : Failed to load module 'canberra-gtk-module' Gtk-Message: … : Failed to load module 'canberra-gtk-module' Isn’t that friendly? The journey begins… I initially thought this was a long-standing issue with Flatpak ( and I was a shady bitch about it too )…
I finally got round to implementing dark mode for this site (the cobbler’s children have no shoes and all that…) Here’s all the CSS I had to add: @ media ( prefers-color-scheme : dark ) { /* Invert all elements on the body while attempting to not alter the hue substantially. */ body { filter : invert ( 100 % ) hue-rotate ( 180 deg ); } /* Workarounds and optical adjustments. */ /* Firefox…
I moved source.small-tech.org , our self-hosted GitLab instance, to Eclips.is a few months ago and noticed today that the Let’s Encrypt certificate had failed to renew. When I looked on the server, the outdated Let’s Encrypt certificates were in /etc/gitlab/ssl as expected but, when I looked in the GitLab configuration file ( /etc/gitlab/gitlab.rb ), the Let’s Encrypt integration section was…
Mapping keys has never been easier in Linux. I’m a bit particular when it comes to typing. Specifically, I like to use good typographical habits whenever possible. And, I use an external keyboard with a physical ANSI US Keyboard layout set to UK Macintosh layout on my Linux laptop 1 . So, I need to reclaim my backtick/tilde key . Previously, I used a combination of xmodmap , xev , and a .desktop…
Screeching for freedom. Illustration by Jérémie Fontana. I was there when Steve Jobs unveiled the original iPhone (ironically, I gave a talk on Flash there right after his keynote). I started making apps for iOS from day one, learned Swift while it was still in alpha and updated my code with every new version. My work has been featured by Apple on its App Store and our app, Better Blocker , has…
Fishing for a new shell? (Sorry.) Beautiful defaults Good design isn’t about removing the seams altogether 1 ; it’s about having beautiful defaults and layering the seams. And this is something that Fish shell absolutely nails. To be fair, I have no idea why I didn’t give it a proper shot until yesterday. I guess because Zsh, or more precisely Oh My Zsh , has been perfectly adequate. It’s not…
Remote 1 is a tiny ( < 50 lines of code ) module that creates a very lightweight façade over a socket connection, using convention over configuration to give you an expressive interface with which to send outgoing messages and handle incoming ones. You can use it both on the server and on the client. 2 Here’s a simple Site.js example that performs some basic arithmetic on the server and keeps a…
Disclaimer: you can’t load an actual bottle into Node.js (yet). I have a message in a text file called bottle.txt . Here’s how I load it into Node.js and output it to the console: import message from 'bottle.txt' message() Wait, what? How? I’m glad you asked. It’s thanks to Node.js’s experimental ESM Module Loaders feature . Here’s how you can implement this using the excellent node-esm-loader…
Cascades are beautiful things. This week, I reduced our DigitalOcean hosting costs for Small Technology Foundation from ~$90/month to $5/month by moving our canonical source code repositories as well as a few other servers to the complimentary hosting provided to our not-for-profit by the Eclips.is initiative by Greenhost and Open Technology Fund . As part of the move, I had to decide what to do…
Download the video. A live demonstration from today’s S’update. Transcript ) Clean audio = clean USB power You can connect the headphone out of a Blue Yeti microphone into the mic in of a Sony a6400 camera but the quality of the audio you get will depend on how clean the USB source powering your Blue Yeti is. In order to get analog audio into your camera from a Blue Yeti, you need to plug the Blue…
I’m busy working on Basil , the Small Web host, and while it’s nowhere near ready to use yet, I thought I’d try my hand at writing a database migration as they will be necessary once other people start using it. Basil runs on Site.js and Site.js uses JSDB – JavaScript Database — as its database. True to its name, JSDB is 100% JavaScript, so, of course, you write your migrations in JavaScript also.…
So, you now know how to verify an EU VAT number with Node.js . Lucky you! (Don’t say I don’t spoil you.) But do you know what the latest VAT rates are every EU country? (Do you? Huh, do you, punk?) OK, so you can find them here . Yes, that’s an HTML page. No, I haven’t been able to find a simple JSON feed or anything. Yes, it is 2021. Example So anyway, here’s one way you can scrape it using…
You may know of the VIES site where you can manually validate EU VAT numbers but did you know that the European Commission also has an API for programmatically doing this? 1 So that’s the good news. The bad news is that it’s SOAP . I’ll wait until you’re done retching… ok, feeling better? Let’s move on. Example Here’s how you consume it in Node.js: Install the soap package: npm install soap Create…
They have a word for Twitter on the fediverse. They call it “hell site”. It’s very apt. When I first joined about 15 years ago, at the end of 2006, it was a very different place. A small, non-algorithmically curated space where you could have group chats with your friends. What I didn’t know back then was that Twitter, Inc., was a venture-capital-funded startup. It wouldn’t have mattered if I’d…