From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 2903 invoked from network); 4 Jan 2021 11:01:08 -0000 Received: from tb-ob0.topicbox.com (64.147.108.117) by inbox.vuxu.org with ESMTPUTF8; 4 Jan 2021 11:01:08 -0000 Received: from tb-mx1.topicbox.com (tb-mx1.nyi.icgroup.com [10.90.30.61]) by tb-ob0.topicbox.com (Postfix) with ESMTP id AD68D2C49D for ; Mon, 4 Jan 2021 06:01:06 -0500 (EST) (envelope-from bounce.mM1347b1d8513480d11627e4eb.r522be890-2105-11eb-b15e-8d699134e1fa@9fans.bounce.topicbox.com) Received: by tb-mx1.topicbox.com (Postfix, from userid 1132) id A873B101A4DF; Mon, 4 Jan 2021 06:01:06 -0500 (EST) ARC-Authentication-Results: i=2; topicbox.com; arc=pass; dkim=pass (2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=AVHY/G3e header.a=rsa-sha256 header.s=20161025 x-bits=2048; dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=quarantine policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=quarantine,d=none,d.eval=none) policy.policy-from=p header.from=gmail.com; spf=pass smtp.mailfrom=ole.hjalmar.kristensen@gmail.com smtp.helo=mail-lf1-f43.google.com; x-internal-arc=fail (as.1.topicbox.com=pass, ams.1.topicbox.com=fail (body has been altered)) (Message modified while forwarding at Topicbox) ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d= topicbox.com; h=mime-version:references:in-reply-to:from:date :message-id:subject:to:content-type:list-help:list-id:list-post :list-subscribe:reply-to:content-transfer-encoding :list-unsubscribe; s=sysmsg-1; t=1609758066; bh=nhhZuHQ7t2A/i724 6ppHXBTziNDETeh5kyvx9QVqM80=; b=SWv0G2dVr3iY1i2kHvfYtyBTcLL/FfcS LGRHoDwTxrhA/5tEmC0EtXoyPVEUlE4Y5k+vb3pS+EG7uPjJf9uuEZc2TclsfZbf BSQZWyTAlpI5J86xqaVPs4y6+2jJl3ixwrSWI/+Y31++GNosE6+BAdSaNE2msaQd g7h7QIMn+gE= ARC-Seal: i=2; a=rsa-sha256; cv=pass; d=topicbox.com; s=sysmsg-1; t= 1609758066; b=lsZ8DurvzhBctr0jNUBsuQHO33S1sA4kU53OqXR1xOw2Gl7JuP xY5jIAYYL7jFQCGwfa8DyClpzVE1F/zoXWg+50+PTfMIjqAy1s+Tgz3hchjOAwzJ K7f2sKRVTCcQciE3YNuYg2tmCVHm0hqhANayh74VbiRuXydg2u1YOCeZU= Authentication-Results: topicbox.com; arc=pass; dkim=pass (2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=AVHY/G3e header.a=rsa-sha256 header.s=20161025 x-bits=2048; dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=quarantine policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=quarantine,d=none,d.eval=none) policy.policy-from=p header.from=gmail.com; spf=pass smtp.mailfrom=ole.hjalmar.kristensen@gmail.com smtp.helo=mail-lf1-f43.google.com; x-internal-arc=fail (as.1.topicbox.com=pass, ams.1.topicbox.com=fail (body has been altered)) (Message modified while forwarding at Topicbox) X-Received-Authentication-Results: tb-mx1.topicbox.com; arc=none (no signatures found); bimi=none (Domain is not BIMI enabled); dkim=pass (2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=AVHY/G3e header.a=rsa-sha256 header.s=20161025 x-bits=2048; dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=quarantine policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=quarantine,d=none,d.eval=none) policy.policy-from=p header.from=gmail.com; iprev=pass smtp.remote-ip=209.85.167.43 (mail-lf1-f43.google.com); spf=pass smtp.mailfrom=ole.hjalmar.kristensen@gmail.com smtp.helo=mail-lf1-f43.google.com; x-aligned-from=pass (Address match); x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=dTs1JRET; x-ptr=pass smtp.helo=mail-lf1-f43.google.com policy.ptr=mail-lf1-f43.google.com; x-return-mx=pass header.domain=gmail.com policy.is_org=yes (MX Records found: alt2.gmail-smtp-in.l.google.com,alt3.gmail-smtp-in.l.google.com,alt4.gmail-smtp-in.l.google.com,alt1.gmail-smtp-in.l.google.com,gmail-smtp-in.l.google.com); x-return-mx=pass smtp.domain=gmail.com policy.is_org=yes (MX Records found: alt2.gmail-smtp-in.l.google.com,alt3.gmail-smtp-in.l.google.com,alt4.gmail-smtp-in.l.google.com,alt1.gmail-smtp-in.l.google.com,gmail-smtp-in.l.google.com); x-tls=pass smtp.version=TLSv1.2 smtp.cipher=ECDHE-RSA-AES256-GCM-SHA384 smtp.bits=256/256; x-vs=clean score=0 state=0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=9fans.net; h= mime-version:references:in-reply-to:from:date:message-id:subject :to:content-type:list-help:list-id:list-post:list-subscribe :reply-to:content-transfer-encoding:list-unsubscribe; s=dkim-1; bh=Qs31ZfrbPkU9U7jxW5DxTkP5H7ozhUSwDjNDKc3EyEo=; b=SYEL07UlD0er dNCLCNUJlkMhfGa7Y55aRiLmVt+UM+JEwMPMFVwvt0VJS7uDMB3Of2WZSiUB/54F B/5xNT/sCQR6g6kccFRjEAko7U0fwoVZBeNXXFSGCslpEj/lQf3Ly7QE7Nc2Av8m pWWjm4CDNAtzmrsu/hP8KXD3ofOF/wQ= Received: from tb-mx1.topicbox.com (localhost.local [127.0.0.1]) by tb-mx1.topicbox.com (Postfix) with ESMTP id 51270101A12E for <9fans@9fans.net>; Mon, 4 Jan 2021 06:00:54 -0500 (EST) (envelope-from ole.hjalmar.kristensen@gmail.com) Received: from tb-mx1.topicbox.com (localhost [127.0.0.1]) by tb-mx1.topicbox.com (Authentication Milter) with ESMTP id DD1236214A5; Mon, 4 Jan 2021 06:00:54 -0500 ARC-Seal: i=1; a=rsa-sha256; cv=none; d=topicbox.com; s=arcseal; t= 1609758054; b=PR2ZejOXTUtmKAkkUmap5dDv9mTZb5i4xFdcVHoVHqfeFusGOv 6B+b6Afa3pHUa+QaHreDwHKval0LocWk35skjSVEoBFHR1hORwNwcVcAOnVs4oz3 o4vhPErSR/KI/sUysphEDu2bzW+KB0dw/ooXW4tfhZe5/PwwoKB53ha0Z5TAHi0v LmX49GyLApMWru6Uwxz0/wlTScdrdu0tEOjLpFzOQJjouzWV7F+Z+f/ERi26TCkY CdWnNnG+s4jVbxNW/BmacA7wzUnUgyWI/zsG2WQCmToDJWsP1751OhX0hPItF/ML SvsS+3OtIU//EZrxTKGhwvobPcwcHLY8lv6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= topicbox.com; h=mime-version:references:in-reply-to:from:date :message-id:subject:to:content-type; s=arcseal; t=1609758054; bh=nBaCCOSORhhpq2cPe73loMExVLKdN7M85ES/q2JL0jE=; b=cvnXU8K7zTr2 eWM46RP/RtVu20qwaA23sd267h1cAdrv22YW7SHDGBh/+P50+6MMCeCm+zJaQoBK QwfPdLEL1L+8BHKHpkHrbXyqlC4l8jXeGVTK2UFhKpD5TdBUfSWw55RAmfQCvsd2 Jcn6iNITNh/HlVgSSzAzv1wkHYa69E+6Ox377bET/E20YlfEsLRz1HaDvIx6kSZh 7slfg+WqtFccbvqwSMZm3DV7t8rr0H1mSLio+/6PAXPYZe9foRF0vP0kwm483IsD PZSHGdyHCaj17lEBj5gPthLtjiDJi3tzJChwtehrl/j0eFKSVj4JqG8vJi4izoxo otEZpb3P+Q== ARC-Authentication-Results: i=1; tb-mx1.topicbox.com; arc=none (no signatures found); bimi=none (Domain is not BIMI enabled); dkim=pass (2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=AVHY/G3e header.a=rsa-sha256 header.s=20161025 x-bits=2048; dmarc=pass policy.published-domain-policy=none policy.published-subdomain-policy=quarantine policy.applied-disposition=none policy.evaluated-disposition=none (p=none,sp=quarantine,d=none,d.eval=none) policy.policy-from=p header.from=gmail.com; iprev=pass smtp.remote-ip=209.85.167.43 (mail-lf1-f43.google.com); spf=pass smtp.mailfrom=ole.hjalmar.kristensen@gmail.com smtp.helo=mail-lf1-f43.google.com; x-aligned-from=pass (Address match); x-google-dkim=pass (2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=dTs1JRET; x-ptr=pass smtp.helo=mail-lf1-f43.google.com policy.ptr=mail-lf1-f43.google.com; x-return-mx=pass header.domain=gmail.com policy.is_org=yes (MX Records found: alt2.gmail-smtp-in.l.google.com,alt3.gmail-smtp-in.l.google.com,alt4.gmail-smtp-in.l.google.com,alt1.gmail-smtp-in.l.google.com,gmail-smtp-in.l.google.com); x-return-mx=pass smtp.domain=gmail.com policy.is_org=yes (MX Records found: alt2.gmail-smtp-in.l.google.com,alt3.gmail-smtp-in.l.google.com,alt4.gmail-smtp-in.l.google.com,alt1.gmail-smtp-in.l.google.com,gmail-smtp-in.l.google.com); x-tls=pass smtp.version=TLSv1.2 smtp.cipher=ECDHE-RSA-AES256-GCM-SHA384 smtp.bits=256/256; x-vs=clean score=0 state=0 X-ME-VSCause: gggruggvucftvghtrhhoucdtuddrgedujedrvdeffedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpeggfhgjhf ffkffuvfgtsegrtderredttdejnecuhfhrohhmpefqlhgvqdfjjhgrlhhmrghrucfmrhhi shhtvghnshgvnhcuoeholhgvrdhhjhgrlhhmrghrrdhkrhhishhtvghnshgvnhesghhmrg hilhdrtghomheqnecuggftrfgrthhtvghrnhepkeeutedtffekfeffhffhfffhvddtvdff hefhfedthfekgfekfeduieetjeelveevnecuffhomhgrihhnpehgihhthhhusgdrtghomh dpthhophhitggsohigrdgtohhmnecukfhppedvtdelrdekhedrudeijedrgeefnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddtledrkeehrdduieejrd egfedphhgvlhhopehmrghilhdqlhhfuddqfhegfedrghhoohhglhgvrdgtohhmpdhmrghi lhhfrhhomhepoeholhgvrdhhjhgrlhhmrghrrdhkrhhishhtvghnshgvnhesghhmrghilh drtghomhequcfukfgkgfepudehieefud X-ME-VSScore: 0 X-ME-VSCategory: clean Received-SPF: pass (gmail.com ... _spf.google.com: Sender is authorized to use 'ole.hjalmar.kristensen@gmail.com' in 'mfrom' identity (mechanism 'include:_netblocks.google.com' matched)) receiver=tb-mx1.topicbox.com; identity=mailfrom; envelope-from="ole.hjalmar.kristensen@gmail.com"; helo=mail-lf1-f43.google.com; client-ip=209.85.167.43 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by tb-mx1.topicbox.com (Postfix) with ESMTPS for <9fans@9fans.net>; Mon, 4 Jan 2021 06:00:53 -0500 (EST) (envelope-from ole.hjalmar.kristensen@gmail.com) Received: by mail-lf1-f43.google.com with SMTP id x20so63287273lfe.12 for <9fans@9fans.net>; Mon, 04 Jan 2021 03:00:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=nBaCCOSORhhpq2cPe73loMExVLKdN7M85ES/q2JL0jE=; b=dTs1JRETh4WmIsB5Ppem4eUF34v3H2v7058MmJ2yUdgTHXtqceYYufv0fqIjZbYJVi SZ8W/ludEvcTB+B3dy5RE33dGf2Sq/3zN292DE6jYVzpzlD+Aqb2iUtKTog6PDro5+2W zHuLu/j9ZYto57MhWCTFB3C2HCJy3ya5XRbh2OAFBJFsC6dgDYYTxVu1pRiTWAip9DoV Ol6AmIcSadI6jRpsUCeQ+m3KMibfH0tzjv24VEDfDxyDmC6/npjxxG05ndnqWrBDN1lP jZgVBKJ/XkyeUZIW9r/UbgxD5HQmRJy4vnx1S1iGFxrbyfrs3K9aqDbUMUCb/s9H1UT+ Tqlw== X-Gm-Message-State: AOAM532q7ijRkBDNJLIkXoMIcvMxI9bd6m/mJtavgO7dMoKCKTRL8NHM PvFAomIvlxjXYPEipj3AEd1xSIprpfIiazyoa4jtoNpU X-Google-Smtp-Source: ABdhPJwfPKFQTjNLMx+Rey9TK6+GD2OCzKkT0Zk4nszacNeOOSVaJRuy7k2BdEnMrhHCEywt5D3udy7ecRitCdEgQXk= X-Received: by 2002:a05:6512:94f:: with SMTP id u15mr29451544lft.389.1609758052530; Mon, 04 Jan 2021 03:00:52 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ole-Hjalmar Kristensen Date: Mon, 4 Jan 2021 12:00:41 +0100 Message-ID: Subject: Re: [9fans] plan9port: acme remoting To: 9fans <9fans@9fans.net> Content-Type: multipart/alternative; boundary="000000000000e53ed305b811007c" Topicbox-Policy-Reasoning: allow: sender is a member Topicbox-Message-UUID: 20eb7bd4-4e7c-11eb-8787-af3a7394b4d2 Archived-At: =?UTF-8?B?PGh0dHBzOi8vOWZhbnMudG9waWNib3guY29tL2dyb3Vwcy85?= =?UTF-8?B?ZmFucy9UNWFkZGMxN2EwZTE5Y2Q5MS1NMTM0N2IxZDg1MTM0ODBkMTE2Mjdl?= =?UTF-8?B?NGViPg==?= List-Help: List-Id: "9fans" <9fans.9fans.net> List-Post: List-Software: Topicbox v0 List-Subscribe: Precedence: list Reply-To: 9fans <9fans@9fans.net> Content-Transfer-Encoding: 7bit List-Unsubscribe: , Topicbox-Delivery-ID: 2:9fans:437d30aa-c441-11e9-8a57-d036212d11b0:522be890-2105-11eb-b15e-8d699134e1fa:M1347b1d8513480d11627e4eb:1:TgZZistM-8FA8Wlim5zNyr0y6MfyWErBQopcU4QOnuc --000000000000e53ed305b811007c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Very interesting. In the past, I have resorted to using a combination of Sam/9term/plumber in similar scenarios, but I really prefer Acme. At the moment I'm running Acme over X11, since I'm constrained to using Windows on the desktop, and I've got a working X server, but no Acme on Windows. Anyone got plan9port to work under Cygwin? On Mon, Jan 4, 2021 at 5:41 AM marius a. eriksen wrote: > Lately, I have needed to do a great deal of my work on remote servers. > It's been difficult to do this with acme. Previously, I have attempted to > run acme entirely remotely, and then attach to a local devdraw instance > . This works okay, but also > has many drawbacks, among which: (1) it's not economical with networking, > and so not great for high latency or otherwise poor connections; (2) it's > not resilient to connection disconnects; (3) often I want access to local > resources too. > > I built an experimental remoting layer in acme to see how far I could get > in recreating a modern "remoting" experience with acme. Since acme itself, > of course, is designed around a bunch of 9p servers, this turned out to be > fairly easy to do, and the resulting experience is nearly transparent. > > A remote may be attached to one or more path prefixes. These are similar > to mount points in a file system. Thus, if the prefix /home/meriksen is > attached to the remote "dev", then any file with this prefix is transpare= ly > fetched from the dev. Similarly, when commands are run from any directory > with this prefix, the command is transparently run on the remote. The > command is run in an environment that includes the acme and plumber 9p > servers (forwarded from the local host), and so even acme programs just > work. For example, if you run 'win' from a directory that is attached to a > remote, 'win' is run on the remote host, but it accesses the acme 9p file > tree (which is forwarded from the local acme) and creates its window and > interacts with acme. It "just works". (I regularly run other programs like > this too, e.g., acme-lsp, which uses the plumber to coordinate interactio= n). > > The design of the feature is quite simple: a new program, acmesrv > = is > run by acme (through ssh) on the remote host. Acme becomes a client of > acmesrv, through which all further interaction is facilitated. Acmesrv > itself is really just a 9p multiplexer: the local acme program exports the > acme and plumber 9p servers; acmesrv provides two new 9p servers (exportfs > and cmdfs) that gives the local acme access to the remote's file system > (exportfs) and to run commands (cmdfs). > > The local acme manages a session for each remote, and properly deals with > session disconnect/reconnect, etc. Thus, poor network conditions and > disconnects are easily supported. Since acme's file handling is anyway > stateless (the file is not kept open during editing), file state is easily > maintained through disconnect-reconnect cycles. > > There are some synchronous code paths in acme, and these may cause > temporary freezes when using remoting. For example, when acme queries for > the existence of a file (stat), this blocks UI updates in acme. On session > establishment (e.g., the first time a file is accessed on a remote), this > can cause additional delays, since the file cannot be queried before first > establishing a new session. I've not found this to be a big deal. > > This has been my "daily driver" for about a month at this point, and > overall I'm very happy with the experience. It creates a nearly transpare= nt > experience editing remote files, and retains most of acme's functionality > in remote settings as well. I never hesitate to shut my laptop lid while = in > the middle of a project. Most things just work. There are wrinkles, of > course, and there are some sharp edges in this (experimental) > implementation, but, to me, this provides really very useful functionality > that lets me use acme in more challenging environments. (Not to mention > that this means I can use a beefy remote host for heavy lifting.) > > In case this would be useful to anyone else, this version of acme resides > in my plan9port tree on github > . > (Currently, these diffs: 1 > , > 2 > , > 3 > , > 4 > > .) > > -m. > > (And of course, I realize that this approach goes against the spirit of > acme and plan9 -- acmesrv here is recreating a very specific slice of > functionality that could be recreated by standard means if we had real > filesystems. But we don't live in that world, and this is immensely useful > to me.) > *9fans * / 9fans / see discussions > + participants > + delivery options > Permalink > > ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/T5addc17a0e19cd91-M1347b= 1d8513480d11627e4eb Delivery options: https://9fans.topicbox.com/groups/9fans/subscription --000000000000e53ed305b811007c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Very interesting. In the past, I have resorted= to using a combination of Sam/9term/plumber in similar scenarios, but I re= ally prefer Acme. At the moment I'm running Acme over X11, since I'= m constrained to using Windows on the desktop, and I've got a working X= server, but no Acme on Windows. Anyone got plan9port to work under Cygwin?=

On Mon, Jan 4, 2021 at 5:41 AM marius a. eriksen <marius@monkey.org> wrote:
Lately, I have needed = to do a great deal of my work on remote servers. It's been difficult to= do this with acme. Previously, I have attempted to run acme entirely remot= ely, and then attach to a local devdraw instance. This works okay, but als= o has many drawbacks, among which: (1) it's not economical with ne= tworking, and so not great for high latency or otherwise poor connections; = (2) it's not resilient to connection disconnects; (3) often I want acce= ss to local resources too.

I built an experimental rem= oting layer in acme to see how far I could get in recreating a modern "= ;remoting" experience with acme. Since acme itself, of course, is desi= gned around a bunch of 9p servers, this turned out to be fairly easy to do,= and the resulting experience is nearly transparent.

=
A remote may be attached to one or more path prefixes. These are = similar to mount points in a file system. Thus, if the prefix /home/merikse= n is attached to the remote "dev", then any file with this prefix= is transparely fetched from the dev. Similarly, when commands are run from= any directory with this prefix, the command is transparently run on the re= mote. The command is run in an environment that includes the acme and plumb= er 9p servers (forwarded from the local host), and so even acme programs ju= st work. For example, if you run 'win' from a directory that is att= ached to a remote, 'win' is run on the remote host, but it accesses= the acme 9p file tree (which is forwarded from the local acme) and creates= its window and interacts with acme. It "just works". (I regularl= y run other programs like this too, e.g., acme-lsp, which uses the plumber = to coordinate interaction).

The design of the fe= ature is quite simple: a new program, acmesrv=  is run by acme (through ssh) on the remote host. Acme becomes a clien= t of acmesrv, through which all further interaction is facilitated. Acmesrv= itself is really just a 9p multiplexer: the local acme program exports the= acme and plumber 9p servers; acmesrv provides two new 9p servers (exportfs= and cmdfs) that gives the local acme access to the remote's file syste= m (exportfs) and to run commands (cmdfs).

The lo= cal acme manages a session for each remote, and properly deals with session= disconnect/reconnect, etc. Thus, poor network conditions and disconnects a= re easily supported. Since acme's file handling is anyway stateless (th= e file is not kept open during editing), file state is easily maintained th= rough disconnect-reconnect cycles. 

There a= re some synchronous code paths in acme, and these may cause temporary freez= es when using remoting. For example, when acme queries for the existence of= a file (stat), this blocks UI updates in acme. On session establishment (e= .g., the first time a file is accessed on a remote), this can cause additio= nal delays, since the file cannot be queried before first establishing a ne= w session. I've not found this to be a big deal.

=
This has been my "daily driver" for about a month at this po= int, and overall I'm very happy with the experience. It creates a nearl= y transparent experience editing remote files, and retains most of acme'= ;s functionality in remote settings as well. I never hesitate to shut my la= ptop lid while in the middle of a project. Most things just work. There are= wrinkles, of course, and there are some sharp edges in this (experimental)= implementation, but, to me, this provides really very useful functionality= that lets me use acme in more challenging environments. (Not to mention th= at this means I can use a beefy remote host for heavy lifting.)
<= br />
In case this would be useful to anyone else, this version o= f acme resides in my plan9port tree on github. (Curre= ntly, these diffs: 1, 2, 3, 4.)

-m.

(And of course, I realize that this approach goes = against the spirit of acme and plan9 -- acmesrv here is recreating a very s= pecific slice of functionality that could be recreated by standard means if= we had real filesystems. But we don't live in that world, and this is = immensely useful to me.)
= --000000000000e53ed305b811007c--