chiark / gitweb /
Ian Jackson [Sat, 15 May 2021 00:13:20 +0000 (01:13 +0100)]
bundles: Remove a not-needed layer of references
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sat, 15 May 2021 00:11:44 +0000 (01:11 +0100)]
bundles: Remove a not-needed layer of references
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sat, 15 May 2021 00:09:00 +0000 (01:09 +0100)]
progress: Fix width of RHS bar
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sat, 15 May 2021 00:00:51 +0000 (01:00 +0100)]
progress: Minor presentation improvements
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sat, 15 May 2021 00:14:48 +0000 (01:14 +0100)]
bundles: Use new size and ReadReporter to show upload progress
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Fri, 14 May 2021 23:56:17 +0000 (00:56 +0100)]
bundles: Pass size through
The progress report wants it, and it's probably good to send it in the
metadata.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Fri, 14 May 2021 23:26:42 +0000 (00:26 +0100)]
progress: provide ReadOriginator (untested as yet)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Fri, 14 May 2021 22:49:27 +0000 (23:49 +0100)]
progress: Provide test mode for progress bars
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Fri, 14 May 2021 22:30:50 +0000 (23:30 +0100)]
progress: Improve progress bars
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 20:34:38 +0000 (21:34 +0100)]
progress: Print progress bars in otter(1) bundle upload
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 20:30:42 +0000 (21:30 +0100)]
progress: Rename Originator (from Reporter)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 00:45:13 +0000 (01:45 +0100)]
Example bundle: Put the lemon in a library
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:09:52 +0000 (19:09 +0100)]
Example bundle: Download a lemon
Apropos of https://commons.wikimedia.org/wiki/File:Lemon.svg
wget https://upload.wikimedia.org/wikipedia/commons/f/fa/Lemon.svg
The wikitext there for this file is as follows:
{{Information
|Description={{en|1=Lemon - vector stamp from [[:en:TuxPaint|TuxPaint]]}}
{{cs|1=Citron - Vektorové razítko z [[:cs:TuxPaint|TuxPaint]]u}}
|Source=http://tuxpaint.org/stamps/stamps/food/fruit/cartoon/lemon.svg
|Author=Tuxpaint
|Date=12. 11. 2005, 03:22:29 CET
|Permission={{template:GPL}}
|other_versions=
<gallery>
File:Candlemon.svg
</gallery>
}}
[[Category:Lemon icons]]
[[Category:Tux Paint SVG]]
[[Category:SVG food and drink icons]]
GPL here means "either version 2 of the License, or any later version"
so it is AGPLv3+-compatible.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 00:16:37 +0000 (01:16 +0100)]
bundles: Skip indices of .tmp's on reload
Otherwise we can try to reuse them.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 23:59:26 +0000 (00:59 +0100)]
bundles: Pieces: Actually note in need_svgs
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 23:50:29 +0000 (00:50 +0100)]
bundles: Pieces: fix order of return values from rsplit
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 00:53:28 +0000 (01:53 +0100)]
bundles: Initial code for processing svgs
Still some bugs, so we don't introduce an actual library that triggers
this to run, yet.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 00:50:37 +0000 (01:50 +0100)]
config: Provide libexec_dir and usvg_bin
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 08:52:46 +0000 (09:52 +0100)]
Game updates: Provide ClearGame insn
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 09:04:29 +0000 (10:04 +0100)]
Game updates: Make reset_game from clear_game
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 08:52:20 +0000 (09:52 +0100)]
Game updates: Break out clear_game
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Thu, 13 May 2021 08:45:25 +0000 (09:45 +0100)]
Game updates: Actually delete old aliases when resetting
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 22:14:01 +0000 (23:14 +0100)]
bundles: Use Into<String> in by_name_caseless
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:28:25 +0000 (19:28 +0100)]
bundles: Say something about the start of upload
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:39:22 +0000 (19:39 +0100)]
bundles: Provide for_progress as a useful trait object in bulk
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:27:41 +0000 (19:27 +0100)]
progress: Count conversion, rework and Provide more From impl's
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:28:15 +0000 (19:28 +0100)]
bundles: Move Phase enum to toplevel
Various other bits will want it
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:18:20 +0000 (19:18 +0100)]
bundles: Fix Display of ZipIndex to honour format options
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:04:44 +0000 (19:04 +0100)]
bundles: Scan shape libraries
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 18:03:33 +0000 (19:03 +0100)]
bundles: Implement some more traits for ZipIndex
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 11:42:04 +0000 (12:42 +0100)]
bundles: Pass &InstanceName to parse_bundle
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 08:46:14 +0000 (09:46 +0100)]
bundles: Move i() method onto ZipArchive
shapelib will want this.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 08:44:25 +0000 (09:44 +0100)]
bundles: Make ZipFile a concrete type
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 01:51:18 +0000 (02:51 +0100)]
progress: Rename "item" (from "entry")
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 01:48:49 +0000 (02:48 +0100)]
progress: Reowrk, introducing ResponseReporter
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 01:02:13 +0000 (02:02 +0100)]
progress: Actually send a progress report
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 00:37:26 +0000 (01:37 +0100)]
progress: Refactor/rework. Produces weird spurious warnings
warning: unused variable: `phase`
--> src/progress.rs:53:40
|
53 | fn phase_entry<'p,'e,P,E>(&mut self, phase: P, entry: E)
| ^^^^^ help: if this is intentional, prefix it with an underscore: `_phase`
|
= note: `#[warn(unused_variables)]` on by default
rustc 1.53.0-nightly (
132b4e5d1 2021-04-13)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 00:14:36 +0000 (01:14 +0100)]
progress: Make ProgressInfo have Cow
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 12 May 2021 00:09:32 +0000 (01:09 +0100)]
progress: Add more fields, wip
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 23:50:25 +0000 (00:50 +0100)]
bundles: Plumb ProgressReporter
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 23:46:44 +0000 (00:46 +0100)]
bundles: Try to slightly reduce amount of Zip monomorphisation
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 23:41:40 +0000 (00:41 +0100)]
progress: Break out into nascent module
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 23:17:47 +0000 (00:17 +0100)]
shapelib: Reorganise BundleParseErrorHandling
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 23:02:27 +0000 (00:02 +0100)]
shapelib: Rename lib-loading functions to be less confusing
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 22:54:32 +0000 (23:54 +0100)]
shapelib: Move catalogue_data into LibrarySource
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 22:49:28 +0000 (23:49 +0100)]
shapelib: Move read_catalogue out of LibrarySource
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 19:09:27 +0000 (20:09 +0100)]
shapelib: Provide IndexedZip etc.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 14:24:52 +0000 (15:24 +0100)]
shapelib: Document SvgBaseName
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 14:00:28 +0000 (15:00 +0100)]
shapelib: Introduce and use SvgBaseName::note
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 13:45:12 +0000 (14:45 +0100)]
shapelib: Introduce and use SvgBaseName
This will be used for making sure we process all SVGs on bundle load.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 11 May 2021 13:44:58 +0000 (14:44 +0100)]
impl Borrow<str> for GoodItemName
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 18:38:51 +0000 (19:38 +0100)]
bundles: Reorgsnise by_name_caseless
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 18:32:12 +0000 (19:32 +0100)]
bundles: Scan the zipfile
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 18:02:05 +0000 (19:02 +0100)]
bundles: Plumb for_progress through to processing
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 17:57:37 +0000 (18:57 +0100)]
packetframe: Prepare for progress updates
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 17:52:14 +0000 (18:52 +0100)]
mgmtchannel: Prepare for progress updates
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:52:58 +0000 (01:52 +0100)]
mgmtchannel: Prepare for progress updates
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:51:27 +0000 (01:51 +0100)]
mgmtchannel: Break out read_rmp
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:22:11 +0000 (01:22 +0100)]
Revert "bundles: Save aux after incorporating"
Actually we don't need this because InstanceBundles is recreated on
load from the directory contents.
This reverts commit
36da462250abad1db53bada2face99e046061041.
Ian Jackson [Mon, 10 May 2021 00:21:11 +0000 (01:21 +0100)]
bundles: Save aux after incorporating
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:20:56 +0000 (01:20 +0100)]
bundles: Prepare for process_bundle, skeleton
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:06:15 +0000 (01:06 +0100)]
bundles: Static type for fn which is monomorphised anyway
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:04:41 +0000 (01:04 +0100)]
bundles: Use ReloadError for reload
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 10 May 2021 00:00:15 +0000 (01:00 +0100)]
bundles: Move parsing into bulk phase
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sun, 9 May 2021 23:54:46 +0000 (00:54 +0100)]
bundles: Split Uploaded out
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sun, 9 May 2021 21:31:59 +0000 (22:31 +0100)]
bundles: Reorganise bundle error handling
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sun, 9 May 2021 17:18:35 +0000 (18:18 +0100)]
bundles: Break up load_bundle and introduce incorporate_bundle
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sun, 9 May 2021 14:58:43 +0000 (15:58 +0100)]
bundles: Move BufReader into parse_bundle
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sun, 9 May 2021 14:49:53 +0000 (15:49 +0100)]
bundles: Rework loading (wip)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Sat, 8 May 2021 10:29:02 +0000 (11:29 +0100)]
bundles: Some todos done
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Fri, 7 May 2021 18:53:57 +0000 (19:53 +0100)]
library bundles: Introduce LibrarySource trait (wip)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Fri, 7 May 2021 18:35:33 +0000 (19:35 +0100)]
Revert "libraries: Prepare for multiple libraries with the same name"
We're going to always prepare things on loading, so we don't need this.
This reverts commit
5148d6ae3d2bedffcc35e7d0528d81fe0f8dbffe.
Ian Jackson [Wed, 5 May 2021 13:07:09 +0000 (14:07 +0100)]
libraries: Prepare for multiple libraries with the same name
This can't currently happen with the global shape libraries but the
per-game ones might have this, if the bundles overlap. And we
want to use the same data structure.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 5 May 2021 13:07:29 +0000 (14:07 +0100)]
libraries: LibraryItemNotPrepared: Make this a separate error
This is going to be important when uploadable shapes need separate
preparation.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 5 May 2021 13:02:26 +0000 (14:02 +0100)]
libraries: LibraryItemNotFound: Make it contain the whole ItemSpec
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 5 May 2021 15:08:13 +0000 (16:08 +0100)]
apitest: Fix off-by-one error in fd closing
This caused very-occasional test lockups...
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 5 May 2021 12:56:30 +0000 (13:56 +0100)]
shapelib: Move ItemSpec to specs.rs
This logically belongs here (and we are going to want to refer to it
from one of the SpecErrors).
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 5 May 2021 12:48:08 +0000 (13:48 +0100)]
otterlib: Refactor shape library iteration to be less crazy
These fallible iter combinators. Urgh.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Wed, 5 May 2021 12:10:27 +0000 (13:10 +0100)]
shapelib: Report correct "for" name
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 20:50:22 +0000 (21:50 +0100)]
bundles: Sort out private/public types etc.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 20:28:43 +0000 (21:28 +0100)]
bundles: Reorganise file to tidy it up
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 20:15:33 +0000 (21:15 +0100)]
asseturl: Break out this module from bundles
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 20:11:49 +0000 (21:11 +0100)]
bundles: Drop now-unneeded #![allow(dead_code)]
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 19:36:05 +0000 (20:36 +0100)]
zipfile: Better reporting of missing members
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 19:16:18 +0000 (20:16 +0100)]
zipfile: Actually read bundle metadata
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 21:01:01 +0000 (22:01 +0100)]
Makefile: Make the test bundle depend on the Makefile runes
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 18:22:04 +0000 (19:22 +0100)]
zipfile: Add dependency
Call it "zipfile" here to avoid clashes with iterator zips!
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 20:06:32 +0000 (21:06 +0100)]
bundles: Make test-bundle.zip not have an internal directory
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 18:11:01 +0000 (19:11 +0100)]
bundles: Make the test bundle be an actual zipfile
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 02:48:01 +0000 (03:48 +0100)]
bundles download: Fix http status codes
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 02:37:32 +0000 (03:37 +0100)]
bundles download: Explicitly drop ig to release lock after opening
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 02:37:23 +0000 (03:37 +0100)]
bundles download: Use Namedfile
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 02:31:21 +0000 (03:31 +0100)]
bundles download: Use BDE type alias
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 02:28:32 +0000 (03:28 +0100)]
bundles download: Provide a path() more useful for download
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 02:21:29 +0000 (03:21 +0100)]
bundles download: swap locking order
We're going to want to keep ig a bit longer
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 01:43:55 +0000 (02:43 +0100)]
bundles download: Token as query parameter rather than in path
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Mon, 3 May 2021 22:02:09 +0000 (23:02 +0100)]
bundles: Check that download link works
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 11:22:12 +0000 (12:22 +0100)]
bundles download: Send url to web clients (fix)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 11:26:30 +0000 (12:26 +0100)]
bundles download: Send url to web clients (wip)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Ian Jackson [Tue, 4 May 2021 01:17:51 +0000 (02:17 +0100)]
bundles download: Pass &Instance to info_pane renderer
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>