Deploying a large language model on your own system can be surprisingly simple—if you have the right tools. Here’s how to use LLMs like Meta’s new Llama 3 on your desktop.| InfoWorld
Dark Mode Toggle| vitalik.eth.limo
Domains? Where we’re going, we don’t need domains! Until the end of this year, the only way to have a secure web site is to have it accessible via a domain name. That, however, is changing. And the design of the Small Web will be changing along with it. IP addresses are about to make a comeback on the web in a big (ok, small) way, thanks to upcoming support for security certificates for IP addresses by Let’s Encrypt.| Aral Balkan
Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.| Redis
Notes from “Careless People: A story of where I used to work: Power. Greed. Madness.” by Sarah-Wynn Williams| Aral Balkan
Before getting into this post i want to make it clear I’m not a legal expert in any way and the following post is based upon my interpretations from spending a lot of time looking at software licenses.| Danb Blog
Shay Banon, founder and CTO of Elastic, says the AGPL (GNU Affero General Public License) will be added […]| DEVCLASS
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.| Aral Balkan
Fedora has an ableism problem but woe to you if you point it out.| Aral Balkan
Another day, another application for funding from the commons for our work on realising the Small Web for the common good.| Aral Balkan
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 you to build Small Web apps (peer-to-peer web apps).| Aral Balkan
Here’s a little script I hacked together to install the Language Servers I use for web development in Helix Editor. Please feel free to adapt and use.| Aral Balkan
Our NLnet Grant Application for Domain has been rejected.| Aral Balkan
Privileged ports were a security feature in the days of dumb terminals, in the age of the World Wide Web, they are a security vulnerability.| Aral Balkan
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 settings1 (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 is, however, something we can fix with a little bit of scripting.| Aral Balkan
This is my application to get NLnet funding to work on Domain as part of the User-Operated Internet Fund1 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 not only sharing my original grant application but any subsequent communication I receive durin...| Aral Balkan
Bound functions provide a way to unit test EcmaScript Modules that have private configuration.| Aral Balkan
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 technologies.| Aral Balkan
NodeKit for Codium: a reluctant fork of Svelte Language Tools. This past week, I cobbled together1 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 downloaded the package to:| Aral Balkan
NodeKit gets its own command and instant server start times.| Aral Balkan
The web0 manifesto is a short and sweet middle finger to web3.| Aral Balkan
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 human rights that pertain to our extended selves within concrete laws that protect p...| Aral Balkan
Our tracker blocker for iOS and macOS, Better, was poisoned by a rotten apple and died.| Aral Balkan
Comet is a distraction-free Git commit message editor with spell-check, first line character limit warnings, and emoji support.| Aral Balkan
Only large corporations/US Big Tech firms can get waiting periods and pre-existing conditions waived.| Aral Balkan
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 's/.*(.*?)<\/digest:sha256>/\1/p') = \$(sha256sum /tmp/magick | sed -r 's/(.*)\s(.*)/\1/') && (sudo...| Aral Balkan
Learn how to apply a chroma key that maintains transparencies/soft edges without colour spill using ImageMagick.| Aral Balkan
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? What about char_count ()?| Aral Balkan
It’s not as easy as you might think. In fact, it’s actually pretty hard.| Aral Balkan
One does not simply disable a Gtk+ warning.| Aral Balkan
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(180deg); } /* Workarounds and optical adjustments. */ /* Firefox workaround: Set the background colour for the html element separately because, unlike other browsers, Firefox do...| Aral Balkan
Documenting it here in hopes it might help somebody else (e.g., future me) ;)| Aral Balkan
Remapping keys on Linux has never been easier.| Aral Balkan
Violation of privacy by proxy is still violation of privacy.| Aral Balkan
Remote1 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 count. Install Site.| Aral Balkan
The experimental feature lets you compile anything into JavaScript.| Aral Balkan
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 with the three servers that were still running various parts of the Ind.| Aral Balkan
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 Yeti into a computer1 via USB and into your camera via an auxiliary cable.| Aral Balkan
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 Node.| Aral Balkan
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 the web service by consuming the WSDL file and calling the right method:2 import soa...| Aral Balkan
Going forward, I will no longer be checking Twitter or responding on it … I plan to concentrate as much of my time and energy as possible on building the Small Web.| Aral Balkan
These corporations will employ you for as long as they can launder their reputations by using your legitimacy. And when you become too problematic, they will spit you right out again.| Aral Balkan
Is the script or stylesheet you’re loading what you think you’re loading? SRI ensures that it is.| Aral Balkan
How to use the load() handler and the context property to flow data from layouts to pages in SvelteKit.| Aral Balkan
This template makes it easy to start using vite and svelte in your Site.js sites.| Aral Balkan
Some syntactic sugar for quickly getting started with Node.js starter templates.| Aral Balkan
Access an instance field from an unbound function and watch your app go ka-boom!| Aral Balkan
A guide to migrating from the fs-extra module to Node’s standard fs module.| Aral Balkan
I’m porting JSDB to EcmaScript Modules (ESM) and one of the issues I had to look into was module cache invalidation. JSDB is my little in-memory native JavaScript Database that writes JavaScript operations to append-only JavaScript logs that have UMD headers. And it loads in these tables either via a dynamic require() call, or, for very large tables, by streaming them in and evaluating them line by line1. When a table is loaded in, it is stored in the require cache.| Aral Balkan
Yesterday, I refactored Place1, which is a non-trivial Node.js app, to use ECMAScript Modules (ESM). Here’s a diff of the full set of changes. This is the approach I took and some of the issues I ran into, in case it helps someone else: Find and replace First off, I started by running the following regular expression2 to quickly convert CommonJS require syntax to ESM import syntax: Find const (.*?)\s*?=\s*?require\(('.*?')\) Replace import $1 from $2 While this will do a lot of the work for...| Aral Balkan
A basic example to show how HMR works in Snowpack| Aral Balkan
There’s some exciting work being done with projects like SvelteKit to reduce complexity and improve the developer experience when building web applications. At the heart of these efforts are basically three core elements: A front-end framework like Svelte or Vue. Native browser support for ECMAScript Modules. Hot Module Replacement (e.g., see esm-hmr). At deployment, bundling as usual with a tool like esbuild or rollup. Two development tools that support this workflow are Vite, from the fol...| Aral Balkan
The intent, clarity, and maintainability of the code is improved but the codebase has grown by 20%. Is the trade-off worth it?| Aral Balkan
JSDB is an easy-to-use, in-memory JavaScript database for Small Web that persists to a JavaScript transaction log.| Aral Balkan
What if I don’t persist the database as a serialised JSON structure but as the series of changes that created it instead?| Aral Balkan
Laura and I will be mentoring teams at the Eastern Partnership Civil Society Online Hackathon for the next three weeks.| Aral Balkan
Zoom is malware… if you have to run it, run it in its own prison. Update (8 Jul, 2020): I ended up doing my talk over our Vimeo Live account instead. You can watch the edited recording on our web site. We gave the folks in the Zoom meeting a link to my talk and they watched it there. I then did Q&A in the Zoom meeting via my iPhone (where Zoom is sandboxed).| Aral Balkan
Apple is teaming up with surveillance capitalist Google to track you while respecting your privacy. What could possibly go wrong?| Aral Balkan
The hard-won civil liberties we hand over today out of fear will not be easy to regain, if we do regain them at all.| Aral Balkan
A neat little method for adding some more safety to your JavaScript functions.| Aral Balkan
Apple have been in touch and offered us a way to migrate to our new not-for-profit without impacting the experience of existing Better Blocker customers.| Aral Balkan
We’ve now censored our release notes on the iOS version of our app as per Apple’s demands.| Aral Balkan
Wherein Apple approves our macOS app and rejects our iOS app for metadata… the same metadata as in the macOS app.| Aral Balkan
Last week, we got a definite “computer says no” from Apple’s “developer support.”| Aral Balkan
Apple: Computer says no? Dear Apple, We’re a tiny two-person not-for-profit. We used to be based in the UK, where we were known as Ind.ie (and incorporated as a not-for-profit called Article 12). We left the UK (for reasons) and now we have a not-for-profit here in Ireland called Small Technology Foundation. It’s still just Laura and me (and our huskamute, Oskar). We have an app called Better Blocker that’s on sale on the iOS and macOS app stores.| Aral Balkan
A brief write-up of my talk at the EU Parliament last week with embedded videos of my talk and a link to my slides.| Aral Balkan
Small Technology Foundation Personal Web Prototype-01: an always-connected portable personal web server that fits in your pocket. Imagine holding your personal web site in the palm of your hand. Imagine carrying the digital aspects of your self in your pocket instead of having them on some abstract cloud under the watchful eye of some faceless multinational corporation1. Personal Web Prototype-01 from Small Technology Foundation R&D achieves the former using widely available off-the-shelf par...| Aral Balkan
@small-tech/https is a drop-in replacement for the Node.js https module with automatic provisioning of both locally-trusted and globally-trusted TLS certificates.| Aral Balkan
Auto updates of production servers is a crucial security feature.| Aral Balkan
When you change the source code for a dynamic route, your Site.js server automatically reloads.| Aral Balkan
Site.js version 12.9.6 improves the developer experience with live reload support for static pages.| Aral Balkan
I upgraded an old server from Ubuntu 14.04 LTS to 16.04 LTS today and, when it restarted, I started getting “Read-only file system” errors on the root partition. Ouch! Here’s how I investigated and fixed the issue, including a list of the sites I found that helped me along the way. Am I out of disk space? I wasn’t sure if perhaps the installation had failed and corrupted something because I was out of disk space.| Aral Balkan
Blogception: a post on VSCodium as it’s being written in VSCodium. I am writing this blog post in VSCodium. What? Is that like VSCode? Yes, it’s basically VSCode minus the corporate bullshit like surveillance and proprietary-licensed binaries. An ode to VSCode VSCode is the best code editor I’ve ever used. It’s actually rather delightful. There, I’ve said it – and I’ve used a lot of editors across 30+ years of programming.| Aral Balkan
Yesterday, I asked folks following me on my Mastodon1, if they’d help me blow up my Raspberry Pi Zero W: A story in three toots… Earlier this week, I got to test Site.js on the Pi Zero and saw that it runs flawlessly. Using ngrok, I exposed the Pi to the harsh and cruel Interwebs and then – for the fun of it – decided to see what would happen if lots of folks hit it at the same time.| Aral Balkan
Earlier today: the new update command seamlessly updating and restarting Site.js on SiteJS.org. I just released Site.js version 12.9.5. This version brings with it some new commands, the most important of which is the update command1. # Update Site.js to the latest version. site update The update command does what it says on the tin and updates your copy of Site.js to the latest version. If Site.| Aral Balkan
What is git-lfs? Git Large File Storage is “an open source Git extension for versioning large files.” I use it on a number of our git repositories at Small Technology Foundation, including for the Site.js web site. Why Pi? As I announced yesterday, since version 12.8.0 of Site.js with Raspberry Pi support, I’ve started building Site.js on my Raspberry Pi 3B+. And it works perfectly, except for one thing: I can’t check the release binaries in without LFS and installing git-lfs on a Ras...| Aral Balkan
Chatting about Pi, on a Pi, with a chat server running on Site.js on the same Pi. Yesterday, I released Site.js 12.8.0 which brings initial ARM support for Linux. What that means is that it’s now easier than ever to get a static or dynamic (Node.js) web server up and running on a Raspberry Pi. Site.js on my Raspberry Pi, serving the basic chat app in the first screenshot.| Aral Balkan
/* Windows can’t even take screenshots properly. Fix the borders. 🤦 */ h2 + p img { outline: 1px solid black; outline-offset: -1px; } Last week, I bought a refurbished 7-year-old ThinkPad 440p1 so I could test Site.js under Windows. Long story short, Windows is still shit2. Plus, it’s now also a cesspit of surveillance3. And, over the weekend, I ended up adding native Windows 10 support4 to Site.| Aral Balkan
Say “hello” to Small Technology Foundation. Today, Laura and I want to introduce you to Small Technology Foundation, where we will be continuing the work we started at Ind.ie five years ago. In those five years, we’ve developed a strong understanding of the problem (surveillance capitalism) and we’ve been iterating on solutions to it. Our work led us to leave the UK, move to Sweden, and finally, last year, to settle in Ireland.| Aral Balkan
You… yes you. Who should you thank for Facebook’s Libra? “One of the UK’s leading privacy researchers” University College London The DECODE project And, if you’re an EU citizen who pays their taxes, You. Surprised? Don’t be. None of this was unforeseen Today, the EU acts like an unpaid research and development department for Silicon Valley. We fund startups, which, if they’re successful, get sold to companies in Silicon Valley.| Aral Balkan
Today, I had the need to experiment with rerunning cloud-init on a virtual machine created with multipass. You can use cloud-init with multipass by specifying a cloud-init.yaml file when creating your instance. e.g, multipass launch --name my-instance --cloud-init ./cloud-init.yaml This is all well and good and works as you would expect. However, today, I wanted to experiment with running cloud-init on an already-provisioned instance. My use case is that the lovely folks at Eclips.| Aral Balkan
The Al Jazeera segment from yesterday. Source (Warning: The video is embedded here without trackers. If you watch it on Al Jazeera you will be tracked, including by Facebook). Yesterday, I was interviewed on Al Jazeera news about the Macron-Zuckerberg meeting (Warning: the linked page on Al Jazeera includes privacy-eroding trackers, including Facebook.)1 in which they apparently decided on a framework of “co-regulation.” This is not what I mean when I talk about the need to regulate surve...| Aral Balkan
The cover of Issue 32 of the Kulturstiftung des Bundes magazine. This is the original English version of an article that I wrote for Issue 32 of the Kulturstiftung des Bundes (The German Federal Cultural Foundation) magazine. You can also read the German version. Thanks to Mauro Morales, there is now also a Spanish translation. You are most likely a cyborg and you don’t even know it.| Aral Balkan
“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 Camera Panopticon.| Aral Balkan
Element has chosen to pursue future development of Synapse, Dendrite and associated server-side projects under the terms of AGPLv3.| Element Blog
I just got the following error while trying to push to my git-lfs-enabled repository: ref master:: Error in git rev-list --stdin --objects --not --remotes=origin --: exit status 128 fatal: bad object f895c581f0ff52b2272318105ad7bcc09b5fb8eb Some quick ducking revealed scary stories of repository corruptions. Eek! Not what I wanted to hear. Turns out, however, that the error message is not as scary as it looks. Here’s when/why you get this scary error: Your repository is head of master with ...| Aral Balkan
Small Technology: my opening slide. I’m about to take off for Frankfurt via Zurich to talk about Small Technology at the Interactive Future Exhibition in Darmstadt tomorrow. This is the graduation event of students on the Interactive Media Design programme at the Hochschule Darmstady University of Applied Sciences. It’s an honour to have been invited by the students to speak at their graduation event and I’m very much looking forward to seeing their projects and speaking with them.| Aral Balkan
I'm the kind of nerd that has a favorite software license.| ntietz.com
Every time I post something that gets lots of engagement, I essentially end up carrying out a denial of service attack on myself. What does this say about the design of Mastodon and ActivityPub and the future of the fediverse?| Aral Balkan
Questions on Domain from NLnet and our answers as part of the NLnet grant application for Domain.| Aral Balkan
Updated June 19th, 2023 Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can download Small Is Beautiful #23 directly, and watch it with your favourite video player. Small Is Beautiful (Oct, 2022): What is the Small Web and why do we need it? Today, I want to introduce you to a concept – and a vision for the future of our species in the digital and networked age – that I’ve spoken about for a while but never specifically written about:| Aral Balkan
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 environment1, since version 42, implements support for light and dark appearance styles (aka colour schemes).| Aral Balkan