From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id 8EPwF049oWDBaQEAgWs5BA (envelope-from ) for ; Sun, 16 May 2021 17:42:06 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id AGuLE049oWBwAwAAB5/wlQ (envelope-from ) for ; Sun, 16 May 2021 15:42:06 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id DB7C412993 for ; Sun, 16 May 2021 17:42:05 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id D890627DF6; Sun, 16 May 2021 11:41:58 -0400 (EDT) Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by mail.notmuchmail.org (Postfix) with ESMTPS id 83467271D6 for ; Sun, 16 May 2021 11:41:56 -0400 (EDT) Received: by mail-wr1-x434.google.com with SMTP id z17so3891748wrq.7 for ; Sun, 16 May 2021 08:41:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:content-transfer-encoding:subject:from:to:in-reply-to :references:date:message-id:user-agent; bh=9K33CUHSlstpRI5cMSNbcUynTYPhedAq18kg4tqcw7w=; b=q4/CUTxkrpHW7jjPex7IEOuGZoJX8umoOnVLvoLppu8HsZz86ni57jNfUwaqh7KkFo 9Fg1mHSQkAt59lXHjQ7HqfPhfmDBSniwQEMQTOnUlh6DSOv6QrDfQRFm0/yXFCMSzGAl xzVqE71+Ze2agRqHENbDZQt8RP92ayEV4ML3gS3cTXDLlt5LAP7jMLOyvrnsAcOPJeOj VfYuolcF6zRFRqZts0GNTtY7b84GseNf5weKwODaMn6u5dzpmpngiKhVleXzY8BLExFQ 0k6Ea47vf4xXJdBi+KG8R+F8Q6LM15ZcOWPJHeE/A++EpHEBha+j0OlGW9h4+/Wp0fDp y8Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:content-transfer-encoding:subject :from:to:in-reply-to:references:date:message-id:user-agent; bh=9K33CUHSlstpRI5cMSNbcUynTYPhedAq18kg4tqcw7w=; b=gFuzVVB0EoAqhMkUOxece6Rs5uK2h7NTFFoD/YwZTSgdBgM1MagBqJR8S5s6uffWFI TxV1QMNkVj1b6vhj0cDuHFab05coODAs4Ig3AydO8voxx8DKGOJxLqTkPdkvttmMYoo8 ELqyR6byss20Pu5lOczjSczJ9V33qpQLvlKl0V4UrHVWHUODmsD1KmPeosGfYsUIaDfX OjocuWKMnLoXyeprM0jn/UbkAfgDXkPmEZhjhN6cledHuE4ttFzLfayuws3Kb5gblbil LLCEjs38NfQ/lLwskDoaNtr+NI27ZZP7tWPwBz14wKaz5n7bizH4rSoY5pxW6pYVk+UB 04iQ== X-Gm-Message-State: AOAM530FP0jcxvgQoA+KthGw9HyJ3BTBiiutXPAy9NTA3397xGnMTNif JFHPSJCjnYsYZZA7NSUWBFU= X-Google-Smtp-Source: ABdhPJxDxojkgv9zf9/fuvciQ0g6vOma4iUoZgmXGTQh8SSTAF470qus8bg9dSUE8imZc5SVS1WstQ== X-Received: by 2002:a5d:46c7:: with SMTP id g7mr34907279wrs.394.1621179710958; Sun, 16 May 2021 08:41:50 -0700 (PDT) Received: from localhost (0.2.a.7.9.f.b.3.5.1.d.5.a.1.9.8.4.3.5.d.1.c.a.7.0.b.8.0.1.0.0.2.ip6.arpa. [2001:8b0:7ac1:d534:891a:5d15:3bf9:7a20]) by smtp.gmail.com with ESMTPSA id b62sm11312206wmc.39.2021.05.16.08.41.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 May 2021 08:41:50 -0700 (PDT) MIME-Version: 1.0 Subject: Re: announce: my fork of alot From: Patrick Totzke To: Anton Khirnov , Michael J Gruber , notmuch@notmuchmail.org In-Reply-To: <162116372803.55588.12574083715280154635.git@grubix.eu> References: <162116038546.29687.12722695687857643272@lain.red.khirnov.net> <162116372803.55588.12574083715280154635.git@grubix.eu> Date: Sun, 16 May 2021 16:41:49 +0100 Message-ID: <162117970935.470262.11733111308148672432@piu> User-Agent: alot/0.9.1 Message-ID-Hash: ZGGA72XQ52K5AXE7MPUX3TUMZ4RU5BLC X-Message-ID-Hash: ZGGA72XQ52K5AXE7MPUX3TUMZ4RU5BLC X-MailFrom: patricktotzke@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1621179726; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=67HraUz+ep4D5KR3ZZEDvjPl0RJdvyiLhw60t8K5kTQ=; b=MI22TdJS5kZvyqpRn6oHyMo2cbBmBF/ulUOjZunzKdkfjOAgOjgRqalvXxfK8VR3VRMnrF g5RgFGkEdGtNzvryQs8YLL+5LtKpCdR5dttRgMKcI8g2aYzOvZuarVnME9OXgl+xrI+5TA De1dXkXRHC6h4Dnq7Jq3PNpu/QUiKqmNjVrVWwKteov2Ksu4IBWwRewXMT95T/PLDbqJLx yajC3N0AIFcOvN+VMqhHkbVvV0cL+wene0FjtQD/Nlq8fUv5xAd0dlyvFIHi2OO3HDzXEd LgjJyu4LeMMtBlviBu3sTRkANaqHb/IKZdpHL1fTOpS2QRleJ62aAXRcE68oZA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1621179726; a=rsa-sha256; cv=none; b=GybhCai0UvaAOzL/l9ZnPGo45BW2rnHx66crCIuUZCUqj1Ya+IV8WzjgoAkKnpnAvosXiG aYySr49ckMIRIzcsFB5DlK1puXdUFWQevdB+k1KqJEAyyAbuEwmV2vmOGmnWEgHiJ6Vi0E SVe15DtqDLK606GAw2/jrwDrk/Vvs5ZkEa85qmzorU3UL1l3N5L1ug5yN9WpGbu6gN0Tn2 2D9ctrkBxpgIo8ZXCHiSWmwq38ts/hDzFEHHBXNrii4mirQ3yatQkHvISkGmEPdX8JXBwn 7yd6eryiwG+M/6GLEXeHqhlO4qIxSBITGrR/T/o6HHZtTGcJevYjH5bKxNotbA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20161025 header.b="q4/CUTxk"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: 1.05 Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20161025 header.b="q4/CUTxk"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: DB7C412993 X-Spam-Score: 1.05 X-Migadu-Scanner: scn0.migadu.com X-TUID: GMBvYSnr1P7p Hi everyone, Of course I feel obliged to chime in and clarify, so here it goes. Quoting Michael J Gruber (2021-05-16 12:15:28) > Anton Khirnov venit, vidit, dixit 2021-05-16 12:19:45: > > Hi, > > > > Thought I'd share with the people here the fork of alot I've been > > hacking on for the past ~1.5 years, see if there is any interest in it. > > Thanks for sharing! First of all many thanks to Anton for his enthusiasm in pushing the alot project further! > > The code can be found at git://git.khirnov.net/alot. > > Any particular reason why this is not a fork where upstream is (GitHub)? > > > There are many changes in various places, the most user-visible ones in > > the thread view mode. Specifically > > - quoted blocks in the email body can now be colored and folded (this > > was probably my main motivation for starting all this) > > - in upstream the thread mode shows a tree of messages, each node in the > > tree is a rendered message, that can be collapsed into a single-line > > summary; > > in my fork the thread mode is split-window - upper window for the tree > > with the thread structure, lower window for the currently selected > > message; no collapsing of messages > > - attachments can be rendered inline, possibly colored with pygments > > - git patches are colored with pygments > > - all the parts are rendered for multipart/mixed messages, as per the > > RFCs > > - encrypted/signed parts are now wrapped in a frame that indicates which > > bits of the message are actually encrypted or signed > > - various architectural restructurings which were needed for the above > > or to allow for future changes (I have a large TODO list left) > > This all sounds like getting closer to mutt's view, which is not a bad > thing at all! > > > The code is currently alpha quality - I am using it as my main MUA and > > it works for my workflow, but any features I don't use regularly may be > > broken. There is a general lack of "UX" polish (appearance and > > documentation). I didn't bother updating the test suite to keep up with > > all the architectural changes (plan to get to that once I consider the > > code more stable). > > I have to question this strategy. alot (upstream) suffers from a lack of > tests already. There is really no point writing tests after the fact or > once you discover bugs by chance. Especially if you go for "disruptive" > changes it's important to get the new architecture correct right from > the beginning. > > > I removed some features which I considered an > > impediment to progress and not worth the maintenance effort - YMMV. All this sounds very exciting and I'd be very happy to see these features in (mainline) alot! I agree that some of alot's underlying code is ready for refactoring and urwid in particular has been a big drag on quickly implementing things. Also, I'd be interested in hearing your thoughts on deprecating some "unworthy" features in order to reduce the maintenance effort! > > Why did I not submit all this as PRs to upstream alot? The main reasons > > were my lack of time and disagreement with the upstream about project > > status. From what I can tell, alot maintainers consider the project to > > be mature, so they prioritize stability and small incremental changes. > > From my perspective, alot is lacking some critical features -- some > > implemented in my fork already, some planned -- which makes it > > borderline-unusable for me. As implementing those features required > > large-scale architectural changes and my free time was quite limited, I > > prioritized quickly implementing the things I cared about over > > progressing in small incremental stable easily-reviewable steps. > > I have a similar impression about the project status. I'm curious: What > are the architectural changes that you made? Yes, the speed at which alot progresses is borderline problematic. This is of course down to the small number of core contributors and the fact that for all of us life goes on an priorities change. One problem is that the project attracts many users interested in pushing what I'd call "hotfixes" to address missing features: Often people would present a (nicely working) proof-of concept that is not well documented, tested, and doesn't adhere to common code conventions, only not to follow up on their promises to "clean things up", for all too understandable reasons. Still, I believe that just merging everything will quickly kill the project as a) this leads to code that is very difficult and time-consuming to maintain and b) broken features are very damaging to user's perception of the software, much more so than missing ones. I am not accusing you of anything here, Anton. I just wish to point out potential long term difficulties and clarify that I tried to err on the side of cautiousness to keep alot afloat in a usable state for most (potential) users. > > At this point my tree has over 200 new commits and some ~4k changed > > lines, so it's looking increasingly unlikely that I'll ever find the > > free time and motivation to upstream it -- especially given alot's > > glacial pace of development recently. If people are interested in using > > this, I'll probably fork it "properly" under a new name. > > > > Any comments or questions are very much welcome. I can also be reached > > on IRC as elenril. > > Have you tried raising these concerns with upstream before your fork? > Have you tried gathering a team around an idea and starting something > new together? > > Frankly, upstream is borderline small already, and the way you started > your fork probably will not attract a team of people who want to make > that new fork their (common) own or are looking for a stronger team. I share Michael's concerns about further splintering the small group of developers and believe that this would be to the detriment of both projects. It's no secret that I am ready to give the helm to others. I have been maintaining this project for a while now, mainly for personal usage and as a fun distraction. I have tried to squeeze in time to review pull requests when possible and am grateful for the many code contributions over the years, most notably the big steps towards pgp/mime, python3 and notmuch2, all of which I'd have never found the time to implement myself. It has so far been a successful, albeit slow, strategy to try and coordinate efforts and I would very much like to see this going on, but without sacrificing the quality of the code or the relative mature user experience. To be clear: I still do not consider alot "mature" in the sense that I'd oppose radical refactoring. This is reflected in its version number :) Now, how to go on from here? It'd be great if we could coordinate future efforts among those willing to spend time on the project! This would require not only work on new features but also a discussion about directions, priorities, quality control etc. So far, I found GitHub a good place to organise these things but am happy to move on to another platform if necessary. It'd be great to hear from the other contributors. Best wishes, P