<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: linux</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/linux.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-04-03T21:48:22+00:00</updated><author><name>Simon Willison</name></author><entry><title>Quoting Willy Tarreau</title><link href="https://simonwillison.net/2026/Apr/3/willy-tarreau/#atom-tag" rel="alternate"/><published>2026-04-03T21:48:22+00:00</published><updated>2026-04-03T21:48:22+00:00</updated><id>https://simonwillison.net/2026/Apr/3/willy-tarreau/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://lwn.net/Articles/1065620/"&gt;&lt;p&gt;On the kernel security list we've seen a huge bump of reports. We were between 2 and 3 per week maybe two years ago, then reached probably 10 a week over the last year with the only difference being only AI slop, and now since the beginning of the year we're around 5-10 per day depending on the days (fridays and tuesdays seem the worst). Now most of these reports are correct, to the point that we had to bring in more maintainers to help us.&lt;/p&gt;
&lt;p&gt;And we're now seeing on a daily basis something that never happened before: duplicate reports, or the same bug found by two different people using (possibly slightly) different tools.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://lwn.net/Articles/1065620/"&gt;Willy Tarreau&lt;/a&gt;, Lead Software Developer. HAPROXY&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-security-research"&gt;ai-security-research&lt;/a&gt;&lt;/p&gt;



</summary><category term="security"/><category term="linux"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="ai-security-research"/></entry><entry><title>Quoting Greg Kroah-Hartman</title><link href="https://simonwillison.net/2026/Apr/3/greg-kroah-hartman/#atom-tag" rel="alternate"/><published>2026-04-03T21:44:41+00:00</published><updated>2026-04-03T21:44:41+00:00</updated><id>https://simonwillison.net/2026/Apr/3/greg-kroah-hartman/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.theregister.com/2026/03/26/greg_kroahhartman_ai_kernel/"&gt;&lt;p&gt;Months ago, we were getting what we called 'AI slop,' AI-generated security reports that were obviously wrong or low quality. It was kind of funny. It didn't really worry us.&lt;/p&gt;
&lt;p&gt;Something happened a month ago, and the world switched. Now we have real reports. All open source projects have real reports that are made with AI, but they're good, and they're real.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.theregister.com/2026/03/26/greg_kroahhartman_ai_kernel/"&gt;Greg Kroah-Hartman&lt;/a&gt;, Linux kernel maintainer (&lt;a href="https://en.wikipedia.org/wiki/Greg_Kroah-Hartman"&gt;bio&lt;/a&gt;), in conversation with Steven J. Vaughan-Nichols&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-security-research"&gt;ai-security-research&lt;/a&gt;&lt;/p&gt;



</summary><category term="security"/><category term="linux"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="ai-security-research"/></entry><entry><title>Quoting Julian Andres Klode</title><link href="https://simonwillison.net/2025/Nov/1/debian/#atom-tag" rel="alternate"/><published>2025-11-01T17:34:34+00:00</published><updated>2025-11-01T17:34:34+00:00</updated><id>https://simonwillison.net/2025/Nov/1/debian/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://lists.debian.org/debian-devel/2025/10/msg00285.html"&gt;&lt;p&gt;I plan to introduce hard Rust dependencies and Rust code into
APT, no earlier than May 2026. This extends at first to the
Rust compiler and standard library, and the Sequoia ecosystem.&lt;/p&gt;
&lt;p&gt;In particular, our code to parse .deb, .ar, .tar, and the
HTTP signature verification code would strongly benefit
from memory safe languages and a stronger approach to
unit testing.&lt;/p&gt;
&lt;p&gt;If you maintain a port without a working Rust toolchain,
please ensure it has one within the next 6 months, or
sunset the port.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://lists.debian.org/debian-devel/2025/10/msg00285.html"&gt;Julian Andres Klode&lt;/a&gt;, debian-devel mailing list&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/debian"&gt;debian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;&lt;/p&gt;



</summary><category term="open-source"/><category term="debian"/><category term="rust"/><category term="linux"/></entry><entry><title>No More Blue Fridays</title><link href="https://simonwillison.net/2024/Jul/22/no-more-blue-fridays/#atom-tag" rel="alternate"/><published>2024-07-22T18:33:00+00:00</published><updated>2024-07-22T18:33:00+00:00</updated><id>https://simonwillison.net/2024/Jul/22/no-more-blue-fridays/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.brendangregg.com/blog/2024-07-22/no-more-blue-fridays.html"&gt;No More Blue Fridays&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Brendan Gregg: "In the future, computers will not crash due to bad software updates, even those updates that involve kernel code. In the future, these updates will push eBPF code."&lt;/p&gt;
&lt;p&gt;New-to-me things I picked up from this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;eBPF - a technology I had thought was unique to the a Linux kernel - is coming Windows!&lt;/li&gt;
&lt;li&gt;A useful mental model to have for eBPF is that it provides a WebAssembly-style sandbox for kernel code.&lt;/li&gt;
&lt;li&gt;eBPF doesn't stand for "extended Berkeley Packet Filter" any more - that name greatly understates its capabilities and has been retired. More on that &lt;a href="https://ebpf.io/what-is-ebpf/#what-do-ebpf-and-bpf-stand-for"&gt;in the eBPF FAQ&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;From &lt;a href="https://news.ycombinator.com/item?id=41034079"&gt;this Hacker News thread&lt;/a&gt; eBPF programs can be analyzed before running despite the halting problem because eBPF only allows verifiably-halting programs to run.&lt;/li&gt;
&lt;/ol&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=41033579"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/windows"&gt;windows&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webassembly"&gt;webassembly&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brendan-gregg"&gt;brendan-gregg&lt;/a&gt;&lt;/p&gt;



</summary><category term="linux"/><category term="security"/><category term="windows"/><category term="webassembly"/><category term="brendan-gregg"/></entry><entry><title>Hello World</title><link href="https://simonwillison.net/2024/Apr/9/hello-world/#atom-tag" rel="alternate"/><published>2024-04-09T01:06:46+00:00</published><updated>2024-04-09T01:06:46+00:00</updated><id>https://simonwillison.net/2024/Apr/9/hello-world/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://thecoder08.github.io/hello-world.html"&gt;Hello World&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Lennon McLean dives deep down the rabbit hole of what happens when you execute the binary compiled from “Hello world” in C on a Linux system, digging into the details of ELF executables, objdump disassembly, the C standard library, stack frames, null-terminated strings and taking a detour through musl because it’s easier to read than Glibc.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=39967709"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/c"&gt;c&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;&lt;/p&gt;



</summary><category term="c"/><category term="linux"/></entry><entry><title>iSH: The Linux shell for iOS</title><link href="https://simonwillison.net/2023/Dec/31/ish/#atom-tag" rel="alternate"/><published>2023-12-31T04:20:00+00:00</published><updated>2023-12-31T04:20:00+00:00</updated><id>https://simonwillison.net/2023/Dec/31/ish/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://ish.app/"&gt;iSH: The Linux shell for iOS&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Installing this iOS app gives you a full Linux shell environment running on your phone, using a “usermode x86 emulator”. You can even install packages: “apk add python3” gave me a working Python 3.9 interpreter, installed from the apk.ish.app repository.&lt;/p&gt;

&lt;p&gt;I didn’t think this kind of thing was allowed by the App Store, but that’s not been the case for a few years now: Section 4.5.2 of the App Store guidelines clarifies that “Educational apps designed to teach, develop, or allow students to test executable code may, in limited circumstances, download code provided that such code is not used for other purposes.”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=38816029#38816414"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/appstore"&gt;appstore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/emulator"&gt;emulator&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ios"&gt;ios&lt;/a&gt;&lt;/p&gt;



</summary><category term="appstore"/><category term="emulator"/><category term="linux"/><category term="python"/><category term="ios"/></entry><entry><title>Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs</title><link href="https://simonwillison.net/2023/Sep/8/dynamic-linker-tricks/#atom-tag" rel="alternate"/><published>2023-09-08T22:05:10+00:00</published><updated>2023-09-08T22:05:10+00:00</updated><id>https://simonwillison.net/2023/Sep/8/dynamic-linker-tricks/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/"&gt;Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This tutorial by Rafał Cieślak from 2013 filled in a bunch of gaps in my knowledge about how C works on Linux.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=37439125"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/c"&gt;c&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;&lt;/p&gt;



</summary><category term="c"/><category term="linux"/></entry><entry><title>Lima VM - Linux Virtual Machines On macOS</title><link href="https://simonwillison.net/2023/Jul/10/lima/#atom-tag" rel="alternate"/><published>2023-07-10T19:01:21+00:00</published><updated>2023-07-10T19:01:21+00:00</updated><id>https://simonwillison.net/2023/Jul/10/lima/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://earthly.dev/blog/lima/"&gt;Lima VM - Linux Virtual Machines On macOS&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This looks really useful: “brew install lima” to install, then “limactl start default” to start an Ubuntu VM running and “lima” to get a shell. Julia Evans wrote about the tool this morning, and here Adam Gordon Bell includes details on adding a writable directory (by default lima mounts your macOS home directory in read-only mode).

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://jvns.ca/blog/2023/07/10/lima--a-nice-way-to-run-linux-vms-on-mac/"&gt;Lima: a nice way to run Linux VMs on Mac&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/virtualization"&gt;virtualization&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/julia-evans"&gt;julia-evans&lt;/a&gt;&lt;/p&gt;



</summary><category term="linux"/><category term="macos"/><category term="virtualization"/><category term="julia-evans"/></entry><entry><title>Weeknotes: Getting my personal Dogsheep up and running again</title><link href="https://simonwillison.net/2021/Aug/22/weeknotes-dogsheep/#atom-tag" rel="alternate"/><published>2021-08-22T04:46:13+00:00</published><updated>2021-08-22T04:46:13+00:00</updated><id>https://simonwillison.net/2021/Aug/22/weeknotes-dogsheep/#atom-tag</id><summary type="html">
    &lt;p&gt;I gave a talk about &lt;a href="https://dogsheep.github.io/"&gt;Dogsheep&lt;/a&gt; at Noisebridge's &lt;a href="https://www.noisebridge.net/wiki/Five_Minutes_of_Fame_2021_08_19"&gt;Five Minutes of Fame&lt;/a&gt; on Thursday. Just one problem: my regular Dogsheep demo was broken, so I ended up building it from scratch again. In doing so I fixed a few bugs in some Dogsheep tools.&lt;/p&gt;
&lt;h4&gt;Dogsheep on a Digital Ocean droplet&lt;/h4&gt;
&lt;p&gt;The latest iteration of my personal Dogsheep runs on a $20/month 4GB/2CPU &lt;a href="https://www.digitalocean.com/"&gt;Digital Ocean&lt;/a&gt; Droplet running Ubuntu 20.04 LTS.&lt;/p&gt;
&lt;p&gt;It runs a private Datasette instance and a bunch of cron jobs to fetch data from Twitter, GitHub, Foursquare Swarm, Pocket and Hacker News.&lt;/p&gt;
&lt;p&gt;It also has copies of my Apple Photos and Apple HealthKit data which I upload manually - plus a &lt;a href="https://simonwillison.net/2019/Sep/20/weeknotes-design-thinking-genome-sqlite/#genome-to-sqlite"&gt;copy of my genome&lt;/a&gt; for good measure.&lt;/p&gt;
&lt;p&gt;Some abbreviated notes on how I set it up, copied from a private GitHub Issues thread:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a new Ubuntu droplet, and configure its IP address as the A record for &lt;code&gt;dogsheep.simonwillison.net&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Python 3 and NGINX and SQLite: &lt;code&gt;apt-get install python3 python3-venv nginx sqlite -y&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;a href="https://letsencrypt.org/"&gt;letsencrypt&lt;/a&gt; to get an HTTPS certificate for it: &lt;code&gt;apt-get update&lt;/code&gt; and then
&lt;code&gt;apt install certbot python3-certbot-nginx -y&lt;/code&gt;, then &lt;code&gt;certbot --nginx -d dogsheep.simonwillison.net&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I had to remove the &lt;code&gt;ipv6only=on;&lt;/code&gt; bit from the NGINX configuration due to &lt;a href="https://github.com/certbot/certbot/issues/5550#issuecomment-367971137"&gt;this bug&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Created a &lt;code&gt;dogsheep&lt;/code&gt; user, &lt;code&gt;useradd -s /bin/bash -d /home/dogsheep/ -m -G&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As that user, created a virtual environment: &lt;code&gt;python3 -mvenv datasette-venv&lt;/code&gt; and then &lt;code&gt;datasette-venv/bin/pip install wheel&lt;/code&gt; and &lt;code&gt;datasette-venv/bin/pip install datasette datasette-auth-passwords&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Created a &lt;code&gt;/etc/systemd/system/datasette.service&lt;/code&gt; file with &lt;a href="https://gist.github.com/simonw/0653b6177c6f12caa16530da4c56646f"&gt;this contents&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Created a set of blank SQLite database files &lt;a href="https://til.simonwillison.net/sqlite/enabling-wal-mode"&gt;in WAL mode&lt;/a&gt; in &lt;code&gt;/home/dogsheep&lt;/code&gt; using the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for f in beta.db twitter.db healthkit.db github.db \
  swarm.db photos.db genome.db simonwillisonblog.db \
  pocket.db hacker-news.db memories.db
do
  sqlite3 $f vacuum
  # And enable WAL mode:
  sqlite3 $f 'PRAGMA journal_mode=WAL;'
done
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Started the Datasette service: &lt;code&gt;service datasette start&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configured NGINX to proxy to localhost port 8001, using &lt;a href="https://docs.datasette.io/en/stable/deploying.html#nginx-proxy-configuration"&gt;this configuration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It's a few more steps than I'd like, but the end result was a &lt;a href="https://datasette.io/plugins/datasette-auth-passwords"&gt;password-protected&lt;/a&gt; Datasette instance running against a bunch of SQLite database files on my new server.&lt;/p&gt;
&lt;p&gt;With Datasette up and running, the next step was to start loading in data.&lt;/p&gt;
&lt;h4&gt;Importing my tweets&lt;/h4&gt;
&lt;p&gt;I started with Twitter. I dropped my Twitter API access credentials into an &lt;code&gt;auth.json&lt;/code&gt; file (as &lt;a href="https://datasette.io/tools/twitter-to-sqlite#user-content-authentication"&gt;described here&lt;/a&gt;) and ran the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source /home/dogsheep/datasette-venv/bin/activate
pip install twitter-to-sqlite
twitter-to-sqlite user-timeline /home/dogsheep/twitter.db \
  -a /home/dogsheep/auth.json
@simonw [###############################-----] 26299/29684 00:02:06
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That pulled in all 29,684 of my personal tweets.&lt;/p&gt;
&lt;p&gt;(Actually, first it broke with an error, exposing a &lt;a href="https://github.com/dogsheep/twitter-to-sqlite/issues/57"&gt;bug that had already been reported&lt;/a&gt;. I shipped &lt;a href="https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.4"&gt;a fix for that&lt;/a&gt; and tried again and it worked.)&lt;/p&gt;
&lt;p&gt;Favourited tweets were a little harder - I have 39,904 favourited tweets, but the Twitter API only returns the most recent 3,200. I grabbed those more recent ones with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;twitter-to-sqlite favorites /home/dogsheep/twitter.db \
  -a /home/dogsheep/auth.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I requested &lt;a href="https://help.twitter.com/en/managing-your-account/how-to-download-your-twitter-archive"&gt;my Twitter archive&lt;/a&gt;, waited 24 hours and uploaded the resulting &lt;code&gt;like.js&lt;/code&gt; file to the server, then ran:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;twitter-to-sqlite import twitter.db /tmp/like.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This gave me an &lt;code&gt;archive_like&lt;/code&gt; table with the data from that file - but it wasn't the full tweet representation, just the subset that Twitter expose in the archive export.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://datasette.io/tools/twitter-to-sqlite#user-content-importing-data-from-your-twitter-archive"&gt;README&lt;/a&gt; shows how to inflate those into full tweets:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;twitter-to-sqlite statuses-lookup twitter.db \
  --sql='select tweetId from archive_like' \
  --skip-existing
Importing 33,382 tweets [------------------------------------] 0% 00:18:28
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once that was done I wrote additional records into the &lt;code&gt;favorited_by&lt;/code&gt; table like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sqlite3 twitter.db '
  INSERT OR IGNORE INTO favorited_by (tweet, user)
  SELECT tweetId, 12497 FROM archive_like
'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(12497 is my Twitter user ID.)&lt;/p&gt;
&lt;p&gt;I also came up with a SQL view that lets me see just media attached to tweets:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sqlite-utils create-view twitter.db media_details "
select
  json_object('img_src', media_url_https, 'width', 400) as img,
  tweets.full_text,
  tweets.created_at,
  tweets.id as tweet_id,
  users.screen_name,
  'https://twitter.com/' || users.screen_name || '/status/' || tweets.id as tweet_url
from
  media
  join media_tweets on media.id = media_tweets.media_id
  join tweets on media_tweets.tweets_id = tweets.id
  join users on tweets.user = users.id
order by
  tweets.id desc
"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now I can visit &lt;code&gt;/twitter/media_details?_where=tweet_id+in+(select+tweet+from+favorited_by+where+user+=+12497)&lt;/code&gt; to see the most recent media tweets that I've favourited!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2021/liked-media-details.jpg" alt="media_details view showing Twitter media I have liked" data-canonical-src="https://static.simonwillison.net/static/2021/liked-media-details.jpg" style="max-width:100%;" /&gt;&lt;/p&gt;
&lt;h4&gt;Swarm checkins&lt;/h4&gt;
&lt;p&gt;Swarm checkins were a lot easier. I needed my previously-created Foursquare API token, and &lt;a href="https://datasette.io/tools/swarm-to-sqlite"&gt;swarm-to-sqlite&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pip install swarm-to-sqlite
swarm-to-sqlite /home/dogsheep/swarm.db --token=...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This gave me a full table of my Swarm checkins, which I can visualize using &lt;a href="https://datasette.io/plugins/datasette-cluster-map"&gt;datasette-cluster-map&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2021/dogsheep-swarm-map.jpg" alt="Map of my 2021 Swarm checkins" data-canonical-src="https://static.simonwillison.net/static/2021/dogsheep-swarm-map.jpg" style="max-width:100%;" /&gt;&lt;/p&gt;
&lt;h4&gt;Apple HealthKit&lt;/h4&gt;
&lt;p&gt;I don't yet have full automation for my Apple HealthKit data (collected by my Apple Watch) or my Apple Photos - both require me to run scripts on my laptop to create the SQLite database file and then copy the result to the server via &lt;code&gt;scp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://datasette.io/tools/healthkit-to-sqlite"&gt;healthkit-to-sqlite&lt;/a&gt; runs against the &lt;code&gt;export.zip&lt;/code&gt; that is produced by the Apple Health app on the iPhone's export data button - for me that was a 158MB zip file which I AirDropped to my laptop and converted (after &lt;a href="https://github.com/dogsheep/healthkit-to-sqlite/issues/19"&gt;fixing a new bug&lt;/a&gt;) like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;healthkit-to-sqlite ~/Downloads/export.zip healthkit.db
Importing from HealthKit  [-----------------------------]    2%  00:02:25
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I uploaded the resulting 1.5GB &lt;code&gt;healthkit.db&lt;/code&gt; file and now I can do things like visualize my 2017 San Francisco Half Marathon run on a map:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2021/dogsheep-marathon.jpg" alt="A map of the half marathon I ran" data-canonical-src="https://static.simonwillison.net/static/2021/dogsheep-marathon.jpg" style="max-width:100%;" /&gt;&lt;/p&gt;
&lt;h4&gt;Apple Photos&lt;/h4&gt;
&lt;p&gt;For my photos I use &lt;a href="https://datasette.io/tools/dogsheep-photos"&gt;dogsheep-photos&lt;/a&gt;, which I described last year in &lt;a href="https://simonwillison.net/2020/May/21/dogsheep-photos/"&gt;Using SQL to find my best photo of a pelican according to Apple Photos&lt;/a&gt;. The short version: I run this script on my laptop:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Upload original photos to my S3 bucket
dogsheep-photos upload photos.db \
  ~/Pictures/Photos\ Library.photoslibrary/originals
dogsheep-photos apple-photos photos.db \
  --image-url-prefix "https://photos.simonwillison.net/i/" \
  --image-url-suffix "?w=600"
scp photos.db dogsheep:/home/dogsheep/photos.db
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;photos.db&lt;/code&gt; is only 171MB - it contains the metadata, including the machine learning labels, but not the photos themselves.&lt;/p&gt;
&lt;p&gt;And now I can run queries for things like photos of food I've taken in 2021:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2021/dogsheep-photos-of-food.jpg" alt="Some photos of food" data-canonical-src="https://static.simonwillison.net/static/2021/dogsheep-photos-of-food.jpg" style="max-width:100%;" /&gt;&lt;/p&gt;
&lt;h4&gt;Automation via cron&lt;/h4&gt;
&lt;p&gt;I'm still working through the last step, which involves setting up cron tasks to refresh my data periodically from various sources. My &lt;code&gt;crontab&lt;/code&gt; currently looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Twitter
1,11,21,31,41,51 * * * * /home/dogsheep/datasette-venv/bin/twitter-to-sqlite user-timeline /home/dogsheep/twitter.db -a /home/dogsheep/auth.json --since
4,14,24,34,44,54 * * * * run-one /home/dogsheep/datasette-venv/bin/twitter-to-sqlite mentions-timeline /home/dogsheep/twitter.db -a /home/dogsheep/auth.json --since
11 * * * * run-one /home/dogsheep/datasette-venv/bin/twitter-to-sqlite user-timeline /home/dogsheep/twitter.db cleopaws -a /home/dogsheep/auth.json --since
6,16,26,36,46,56 * * * * run-one /home/dogsheep/datasette-venv/bin/twitter-to-sqlite favorites /home/dogsheep/twitter.db -a /home/dogsheep/auth.json --stop_after=50

# Swarm
25 */2 * * * /home/dogsheep/datasette-venv/bin/swarm-to-sqlite /home/dogsheep/swarm.db --token=... --since=2w

# Hacker News data every six hours
35 0,6,12,18 * * * /home/dogsheep/datasette-venv/bin/hacker-news-to-sqlite user /home/dogsheep/hacker-news.db simonw

# Re-build dogsheep-beta search index once an hour
32 * * * * /home/dogsheep/datasette-venv/bin/dogsheep-beta index /home/dogsheep/beta.db /home/dogsheep/dogsheep-beta.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I'll be expanding this out as I configure more of the &lt;a href="https://dogsheep.github.io/"&gt;Dogsheep tools&lt;/a&gt; for my personal instance.&lt;/p&gt;
&lt;h4&gt;TIL this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/sqlite/build-specific-sqlite-pysqlite-macos"&gt;Building a specific version of SQLite with pysqlite on macOS/Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/sqlite/track-timestamped-changes-to-a-table"&gt;Track timestamped changes to a SQLite table using triggers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://til.simonwillison.net/observable-plot/histogram-with-tooltips"&gt;Histogram with tooltips in Observable Plot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Releases this week&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/dogsheep/healthkit-to-sqlite"&gt;healthkit-to-sqlite&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/1.0.1"&gt;1.0.1&lt;/a&gt; - (&lt;a href="https://github.com/dogsheep/healthkit-to-sqlite/releases"&gt;9 releases total&lt;/a&gt;) - 2021-08-20
&lt;br /&gt;Convert an Apple Healthkit export zip to a SQLite database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/dogsheep/twitter-to-sqlite"&gt;twitter-to-sqlite&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.4"&gt;0.21.4&lt;/a&gt; - (&lt;a href="https://github.com/dogsheep/twitter-to-sqlite/releases"&gt;27 releases total&lt;/a&gt;) - 2021-08-20
&lt;br /&gt;Save data from Twitter to a SQLite database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-block-robots"&gt;datasette-block-robots&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/datasette-block-robots/releases/tag/1.0"&gt;1.0&lt;/a&gt; - (&lt;a href="https://github.com/simonw/datasette-block-robots/releases"&gt;5 releases total&lt;/a&gt;) - 2021-08-19
&lt;br /&gt;Datasette plugin that blocks robots and crawlers using robots.txt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/sqlite-utils"&gt;sqlite-utils&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/sqlite-utils/releases/tag/3.16"&gt;3.16&lt;/a&gt; - (&lt;a href="https://github.com/simonw/sqlite-utils/releases"&gt;85 releases total&lt;/a&gt;) - 2021-08-18
&lt;br /&gt;Python CLI utility and library for manipulating SQLite databases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/datasette-debug-asgi"&gt;datasette-debug-asgi&lt;/a&gt;&lt;/strong&gt;: &lt;a href="https://github.com/simonw/datasette-debug-asgi/releases/tag/1.1"&gt;1.1&lt;/a&gt; - (&lt;a href="https://github.com/simonw/datasette-debug-asgi/releases"&gt;3 releases total&lt;/a&gt;) - 2021-08-17
&lt;br /&gt;Datasette plugin for dumping out the ASGI scope&lt;/li&gt;
&lt;/ul&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nginx"&gt;nginx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/datasette"&gt;datasette&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dogsheep"&gt;dogsheep&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/weeknotes"&gt;weeknotes&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="linux"/><category term="nginx"/><category term="datasette"/><category term="dogsheep"/><category term="weeknotes"/></entry><entry><title>TLDR pages</title><link href="https://simonwillison.net/2017/Nov/24/tldr-pages/#atom-tag" rel="alternate"/><published>2017-11-24T05:38:04+00:00</published><updated>2017-11-24T05:38:04+00:00</updated><id>https://simonwillison.net/2017/Nov/24/tldr-pages/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://tldr.sh/"&gt;TLDR pages&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is an absurdly good idea: a community maintained set of alternative man pages for common commands with a focus on usage examples, plus a “tldr netstat” command to see them. The man pages themselves are maintained on GitHub.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/documentation"&gt;documentation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;&lt;/p&gt;



</summary><category term="documentation"/><category term="github"/><category term="linux"/></entry><entry><title>Docker Containers on the Desktop</title><link href="https://simonwillison.net/2017/Nov/5/jessie-frazelle/#atom-tag" rel="alternate"/><published>2017-11-05T04:16:38+00:00</published><updated>2017-11-05T04:16:38+00:00</updated><id>https://simonwillison.net/2017/Nov/5/jessie-frazelle/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.jessfraz.com/post/docker-containers-on-the-desktop/"&gt;Docker Containers on the Desktop&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jessie Frazelle’s classic explanation from 2015 of how she runs every desktop application on her Linux machine in its own Docker container.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/webology/status/927026639820779520"&gt;Jeff Triplett&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/docker"&gt;docker&lt;/a&gt;&lt;/p&gt;



</summary><category term="linux"/><category term="docker"/></entry><entry><title>What is the difference between Windows and Linux for web hosting, in other words, what are the pros and cons of each, each’s limitations, performance development environment and deployment between Windows and Linux?</title><link href="https://simonwillison.net/2013/Aug/5/what-is-the-difference/#atom-tag" rel="alternate"/><published>2013-08-05T12:24:00+00:00</published><updated>2013-08-05T12:24:00+00:00</updated><id>https://simonwillison.net/2013/Aug/5/what-is-the-difference/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-difference-between-Windows-and-Linux-for-web-hosting-in-other-words-what-are-the-pros-and-cons-of-each-each’s-limitations-performance-development-environment-and-deployment-between-Windows-and-Linux/answer/Simon-Willison"&gt;What is the difference between Windows and Linux for web hosting, in other words, what are the pros and cons of each, each’s limitations, performance development environment and deployment between Windows and Linux?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Any and every operation you perform on a Linux server can be trivially automated by copying the commands you ran in to a text file. I haven't managed a Windows server in years and I hear PowerShell is pretty great these days but an OS based around a GUI is always going to be harder to automate than one based around a command line.&lt;/p&gt;

&lt;p&gt;Linux has a much stronger complement of high quality open source software - and new open source server software (stuff like node.js) usually becomes available for Linux first.&lt;/p&gt;

&lt;p&gt;If you don't know anything about Linux but are comfortable with Windows, you'll find it easier to manage a Windows server in the short term.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/hosting"&gt;hosting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/windows"&gt;windows&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ecommerce"&gt;ecommerce&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="hosting"/><category term="linux"/><category term="web-development"/><category term="windows"/><category term="quora"/><category term="ecommerce"/></entry><entry><title>How can I download a web server's directory and all subdirectories with one command?</title><link href="https://simonwillison.net/2012/Jan/15/how-can-i-download/#atom-tag" rel="alternate"/><published>2012-01-15T18:55:00+00:00</published><updated>2012-01-15T18:55:00+00:00</updated><id>https://simonwillison.net/2012/Jan/15/how-can-i-download/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-can-I-download-a-web-servers-directory-and-all-subdirectories-with-one-command/answer/Simon-Willison"&gt;How can I download a web server&amp;#39;s directory and all subdirectories with one command?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use wget (you can install it with apt-get install wget)&lt;/p&gt;

&lt;p&gt;$ wget --recursive &lt;span&gt;&lt;a href="http://example.com"&gt;http://example.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;That will create a directory called &lt;span&gt;&lt;a href="http://example.com"&gt;example.com&lt;/a&gt;&lt;/span&gt; and put the mirrored downloaded files in the right sub-directories inside it.&lt;/p&gt;

&lt;p&gt;If you just want to download a subdirectory, do this:&lt;/p&gt;

&lt;p&gt;$ wget --recursive &lt;span&gt;&lt;a href="http://example.com/subdirectory"&gt;http://example.com/subdirectory&lt;/a&gt;&lt;/span&gt; --no-parent&lt;/p&gt;

&lt;p&gt;The --no-parent option ensures wget won't follow links up to parent directories of the one you want to download.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="http"/><category term="linux"/><category term="ubuntu"/><category term="quora"/></entry><entry><title>What is a painless way for a non-Unix programmer to get started learning Unix or GNU/Linux?</title><link href="https://simonwillison.net/2010/Oct/4/what-is-a-painless/#atom-tag" rel="alternate"/><published>2010-10-04T17:01:00+00:00</published><updated>2010-10-04T17:01:00+00:00</updated><id>https://simonwillison.net/2010/Oct/4/what-is-a-painless/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-a-painless-way-for-a-non-Unix-programmer-to-get-started-learning-Unix-or-GNU-Linux/answer/Simon-Willison"&gt;What is a painless way for a non-Unix programmer to get started learning Unix or GNU/Linux?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'd suggest getting yourself an Ubuntu virtual machine running on your own laptop - VirtualBox is free, so that's a good starting point. That way you can play with Linux all you like without fear of breaking anything, since you can always delete the image or roll back to a snapshot.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="linux"/><category term="programming"/><category term="software-engineering"/><category term="quora"/></entry><entry><title>Undelete!</title><link href="https://simonwillison.net/2010/Aug/21/undelete/#atom-tag" rel="alternate"/><published>2010-08-21T10:56:00+00:00</published><updated>2010-08-21T10:56:00+00:00</updated><id>https://simonwillison.net/2010/Aug/21/undelete/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://spin.atomicobject.com/2010/08/18/undelete?utm_source=y-combinator&amp;amp;utm_medium=social-media&amp;amp;utm_campaign=technical"&gt;Undelete!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
How to undelete a file accidentally removed using rm on Linux, by grepping through the raw bytes on the hard drive searching for a unique string that was contained in the file. “grep -a -B 25 -A 100 ’some string in the file’ /dev/sda1 &amp;gt; results.txt”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="linux"/><category term="sysadmin"/><category term="recovered"/></entry><entry><title>Running Processes</title><link href="https://simonwillison.net/2010/Mar/2/running/#atom-tag" rel="alternate"/><published>2010-03-02T09:55:18+00:00</published><updated>2010-03-02T09:55:18+00:00</updated><id>https://simonwillison.net/2010/Mar/2/running/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://dustin.github.com/2010/02/28/running-processes.html"&gt;Running Processes&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’ve been searching for a good solution to this problem (“run this program, and restart it if it falls over”) for years. I’m currently using god which works pretty well, but according to this article I should be learning upstart instead. It never ceases to amaze me how difficult this is, and how obtuse the tools are.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/god"&gt;god&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/processes"&gt;processes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/upstart"&gt;upstart&lt;/a&gt;&lt;/p&gt;



</summary><category term="god"/><category term="linux"/><category term="processes"/><category term="ubuntu"/><category term="unix"/><category term="upstart"/></entry><entry><title>Linux performance basics</title><link href="https://simonwillison.net/2010/Jan/24/jonathan/#atom-tag" rel="alternate"/><published>2010-01-24T13:50:39+00:00</published><updated>2010-01-24T13:50:39+00:00</updated><id>https://simonwillison.net/2010/Jan/24/jonathan/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://spyced.blogspot.com/2010/01/linux-performance-basics.html"&gt;Linux performance basics&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This kind of Linux knowledge is rapidly becoming a key skill for server-side web development.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jonathan-ellis"&gt;jonathan-ellis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ops"&gt;ops&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;&lt;/p&gt;



</summary><category term="jonathan-ellis"/><category term="linux"/><category term="ops"/><category term="performance"/><category term="sysadmin"/></entry><entry><title>The Maximal Usage Doctrine for Open Source</title><link href="https://simonwillison.net/2010/Jan/6/licenses/#atom-tag" rel="alternate"/><published>2010-01-06T17:23:31+00:00</published><updated>2010-01-06T17:23:31+00:00</updated><id>https://simonwillison.net/2010/Jan/6/licenses/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://yehudakatz.com/2010/01/05/the-maximal-usage-doctrine-for-open-source/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A KatzGotYourTongue %28Katz Got Your Tongue%3F%29"&gt;The Maximal Usage Doctrine for Open Source&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Yehuda Katz shares my own philosophy on Open Source licensing—stick BSD or MIT on it to maximise the number of people who can use it. The projects I work on are small enough that I don’t care if someone makes big private improvements and refuses to share them. I can see how much larger projects like Linux would disagree though.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bsd"&gt;bsd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/licensing"&gt;licensing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mit"&gt;mit&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yehuda-katz"&gt;yehuda-katz&lt;/a&gt;&lt;/p&gt;



</summary><category term="bsd"/><category term="licensing"/><category term="linux"/><category term="mit"/><category term="open-source"/><category term="yehuda-katz"/></entry><entry><title>Using Graphics Card Memory as Swap</title><link href="https://simonwillison.net/2009/Nov/3/graphics/#atom-tag" rel="alternate"/><published>2009-11-03T11:01:18+00:00</published><updated>2009-11-03T11:01:18+00:00</updated><id>https://simonwillison.net/2009/Nov/3/graphics/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap"&gt;Using Graphics Card Memory as Swap&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Interesting idea: “Graphic cards contain a lot of very fast RAM, typically between 64 and 512 MB. With Linux, it’s possible to use it as swap space, or even as RAM disk.”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.anchor.com.au/blog/2009/10/new-dedicated-server-upgrade-offering/"&gt;Anchor Hosting&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/graphicscards"&gt;graphicscards&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/memory"&gt;memory&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ops"&gt;ops&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ram"&gt;ram&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;&lt;/p&gt;



</summary><category term="graphicscards"/><category term="linux"/><category term="memory"/><category term="ops"/><category term="performance"/><category term="ram"/><category term="sysadmin"/></entry><entry><title>Learning to compile things from source (on Unix/Linux/OSX)</title><link href="https://simonwillison.net/2009/Jul/27/learning/#atom-tag" rel="alternate"/><published>2009-07-27T16:21:47+00:00</published><updated>2009-07-27T16:21:47+00:00</updated><id>https://simonwillison.net/2009/Jul/27/learning/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://serverfault.com/questions/46381/learning-to-compile-things-from-source-on-unix-linux-osx"&gt;Learning to compile things from source (on Unix/Linux/OSX)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I asked on serverfault.com for tips on learning how to solve configure/make/install problems on my own, and got some extremely useful replies.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/compiling"&gt;compiling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/questions"&gt;questions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/serverfault"&gt;serverfault&lt;/a&gt;&lt;/p&gt;



</summary><category term="compiling"/><category term="linux"/><category term="macos"/><category term="questions"/><category term="serverfault"/></entry><entry><title>Ubuntu brings advanced Screen features to the masses</title><link href="https://simonwillison.net/2009/Apr/28/screen/#atom-tag" rel="alternate"/><published>2009-04-28T21:52:50+00:00</published><updated>2009-04-28T21:52:50+00:00</updated><id>https://simonwillison.net/2009/Apr/28/screen/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://arstechnica.com/open-source/news/2009/04/ubuntu-brings-advanced-screen-features-to-the-masses.ars"&gt;Ubuntu brings advanced Screen features to the masses&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ubuntu 9.04’s screen-profiles package adds a taskbar to screen and emulates the gnome panel. You can even add a widget showing the cost of your current EC2 session.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/screen"&gt;screen&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;&lt;/p&gt;



</summary><category term="ec2"/><category term="linux"/><category term="screen"/><category term="ubuntu"/></entry><entry><title>Introducing the Karmic Koala, our mascot for Ubuntu 9.10</title><link href="https://simonwillison.net/2009/Feb/21/koala/#atom-tag" rel="alternate"/><published>2009-02-21T17:19:18+00:00</published><updated>2009-02-21T17:19:18+00:00</updated><id>https://simonwillison.net/2009/Feb/21/koala/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-February/000536.html"&gt;Introducing the Karmic Koala, our mascot for Ubuntu 9.10&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ubuntu 9.10 will have a strong focus on cloud computing, including tools for easily creating EC2 AMIs and Eucalyptus, an open-source system for running an EC2-compatible cloud in your own data centre.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.gardeviance.org/2009/02/happiness-is-koala.html"&gt;Simon Wardley&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cloud-computing"&gt;cloud-computing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/eucalyptus"&gt;eucalyptus&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/karmickoala"&gt;karmickoala&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mark-shuttleworth"&gt;mark-shuttleworth&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;&lt;/p&gt;



</summary><category term="cloud-computing"/><category term="ec2"/><category term="eucalyptus"/><category term="karmickoala"/><category term="linux"/><category term="mark-shuttleworth"/><category term="ubuntu"/></entry><entry><title>Quoting Jeremy Allison</title><link href="https://simonwillison.net/2008/Dec/9/mali/#atom-tag" rel="alternate"/><published>2008-12-09T08:03:09+00:00</published><updated>2008-12-09T08:03:09+00:00</updated><id>https://simonwillison.net/2008/Dec/9/mali/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://tuxdeluxe.org/node/287"&gt;&lt;p&gt;[In Mali...] The outcome of this rampant illegal software copying is that Windows is seen as "the first world standard" and any attempt to push a cheaper alternative is strongly resisted. They consider it trying to cheat local people out of getting the same quality of software that is used in the developed world, even though it's a legal way of getting quality software for free.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://tuxdeluxe.org/node/287"&gt;Jeremy Allison&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mali"&gt;mali&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/africa"&gt;africa&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/windows"&gt;windows&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/piracy"&gt;piracy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jeremy-allison"&gt;jeremy-allison&lt;/a&gt;&lt;/p&gt;



</summary><category term="mali"/><category term="africa"/><category term="linux"/><category term="open-source"/><category term="windows"/><category term="piracy"/><category term="jeremy-allison"/></entry><entry><title>Ubuntu and Debian AMIs for Amazon EC2</title><link href="https://simonwillison.net/2008/Dec/8/ubuntu/#atom-tag" rel="alternate"/><published>2008-12-08T18:04:09+00:00</published><updated>2008-12-08T18:04:09+00:00</updated><id>https://simonwillison.net/2008/Dec/8/ubuntu/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://alestic.com/"&gt;Ubuntu and Debian AMIs for Amazon EC2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Exactly what it says on the tin.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/amis"&gt;amis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/debian"&gt;debian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;&lt;/p&gt;



</summary><category term="amis"/><category term="debian"/><category term="ec2"/><category term="linux"/><category term="ubuntu"/></entry><entry><title>Happy Run Some Old Web Browsers Day!</title><link href="https://simonwillison.net/2008/Mar/31/jwz/#atom-tag" rel="alternate"/><published>2008-03-31T17:54:56+00:00</published><updated>2008-03-31T17:54:56+00:00</updated><id>https://simonwillison.net/2008/Mar/31/jwz/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jwz.livejournal.com/856745.html"&gt;Happy Run Some Old Web Browsers Day!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
jwz has recreated home.mcom.com, the original home of the Mosaic Communications Corporation, using a snapshot from 21st October 1994 and a domain borrowed from current owner AOL. Also includes instructions on running 1994 Mosaic Netscape binaries under a modern Linux distro.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aol"&gt;aol&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/history"&gt;history&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jwz"&gt;jwz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mosaic"&gt;mosaic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/netscape"&gt;netscape&lt;/a&gt;&lt;/p&gt;



</summary><category term="aol"/><category term="browsers"/><category term="history"/><category term="jwz"/><category term="linux"/><category term="mosaic"/><category term="netscape"/></entry><entry><title>Quoting Miguel de Icaza</title><link href="https://simonwillison.net/2008/Jan/4/moonlight/#atom-tag" rel="alternate"/><published>2008-01-04T12:42:35+00:00</published><updated>2008-01-04T12:42:35+00:00</updated><id>https://simonwillison.net/2008/Jan/4/moonlight/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://tirania.org/blog/archive/2008/Jan-04.html"&gt;&lt;p&gt;From my perspective, it is crucial for Linux to have good support for Silverlight because I do not want Linux on the desktop to become a second class citizen ever again. [...] The core of the debate is whether Microsoft will succeed in establishing Silverlight as a RIA platform or not. You believe that without Moonlight they would not have a chance of success, and I believe that they would have regardless of us.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://tirania.org/blog/archive/2008/Jan-04.html"&gt;Miguel de Icaza&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/miguel-de-icaza"&gt;miguel-de-icaza&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/roberto-callahan"&gt;roberto-callahan&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/silverlight"&gt;silverlight&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/moonlight"&gt;moonlight&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microsoft"&gt;microsoft&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ria"&gt;ria&lt;/a&gt;&lt;/p&gt;



</summary><category term="miguel-de-icaza"/><category term="roberto-callahan"/><category term="silverlight"/><category term="moonlight"/><category term="microsoft"/><category term="open-source"/><category term="linux"/><category term="ria"/></entry><entry><title>Quoting Tim Bray</title><link href="https://simonwillison.net/2008/Jan/3/ongoing/#atom-tag" rel="alternate"/><published>2008-01-03T13:08:59+00:00</published><updated>2008-01-03T13:08:59+00:00</updated><id>https://simonwillison.net/2008/Jan/3/ongoing/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.tbray.org/ongoing/When/200x/2008/01/02/Prediction-Windows-OS-X-Linux"&gt;&lt;p&gt;The strain due to the fact that most business desktops are locked into the Microsoft platform, at a time when both the Apple and GNU/Linux alternatives are qualitatively safer, better, and cheaper to operate, will start to become impossible to ignore.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.tbray.org/ongoing/When/200x/2008/01/02/Prediction-Windows-OS-X-Linux"&gt;Tim Bray&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/tim-bray"&gt;tim-bray&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/predictions"&gt;predictions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microsoft"&gt;microsoft&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/windows"&gt;windows&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/apple"&gt;apple&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;&lt;/p&gt;



</summary><category term="tim-bray"/><category term="predictions"/><category term="microsoft"/><category term="windows"/><category term="linux"/><category term="apple"/><category term="macos"/></entry><entry><title>The future of web standards</title><link href="https://simonwillison.net/2007/Dec/17/blist/#atom-tag" rel="alternate"/><published>2007-12-17T13:16:43+00:00</published><updated>2007-12-17T13:16:43+00:00</updated><id>https://simonwillison.net/2007/Dec/17/blist/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.b-list.org/weblog/2007/dec/17/standards/"&gt;The future of web standards&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Nice analysis from James Bennett, who suggests that successful open source projects (Linux, Python, Perl etc) could be used as the model for a more effective standards process, and points out that Ian Hickson is something of a BDFL for the WHAT-WG.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bdfl"&gt;bdfl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-hickson"&gt;ian-hickson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/james-bennett"&gt;james-bennett&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/perl"&gt;perl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/standards"&gt;standards&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/w3c"&gt;w3c&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-standards"&gt;web-standards&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/whatwg"&gt;whatwg&lt;/a&gt;&lt;/p&gt;



</summary><category term="bdfl"/><category term="ian-hickson"/><category term="james-bennett"/><category term="linux"/><category term="open-source"/><category term="perl"/><category term="python"/><category term="standards"/><category term="w3c"/><category term="web-standards"/><category term="whatwg"/></entry><entry><title>Quoting Linus Torvalds</title><link href="https://simonwillison.net/2007/Dec/16/linus/#atom-tag" rel="alternate"/><published>2007-12-16T21:53:51+00:00</published><updated>2007-12-16T21:53:51+00:00</updated><id>https://simonwillison.net/2007/Dec/16/linus/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://groups.google.com/group/fa.linux.kernel/msg/52f04d4ab1121c9b"&gt;&lt;p&gt;Don't EVER make the mistake that you can design something better than what you get from ruthless massively parallel trial-and-error with a feedback cycle. That's giving your intelligence &lt;em&gt;much&lt;/em&gt; too much credit.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://groups.google.com/group/fa.linux.kernel/msg/52f04d4ab1121c9b"&gt;Linus Torvalds&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/linus-torvalds"&gt;linus-torvalds&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/evolution"&gt;evolution&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;&lt;/p&gt;



</summary><category term="linus-torvalds"/><category term="evolution"/><category term="open-source"/><category term="linux"/><category term="programming"/></entry><entry><title>BBC iPlayer now supports streaming Flash for Mac and Linux</title><link href="https://simonwillison.net/2007/Dec/14/iplayer/#atom-tag" rel="alternate"/><published>2007-12-14T12:36:47+00:00</published><updated>2007-12-14T12:36:47+00:00</updated><id>https://simonwillison.net/2007/Dec/14/iplayer/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.bbc.co.uk/iplayer/"&gt;BBC iPlayer now supports streaming Flash for Mac and Linux&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Absolutely fantastic—it Just Works, you hit the homepage and you can be watching video in seconds. No need to even sign up for an account. I imagine IP ranges are used to block access from outside the UK.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bbc"&gt;bbc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flash"&gt;flash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iplayer"&gt;iplayer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/linux"&gt;linux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mac"&gt;mac&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;&lt;/p&gt;



</summary><category term="bbc"/><category term="flash"/><category term="iplayer"/><category term="linux"/><category term="mac"/><category term="macos"/></entry></feed>