all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Amy Grinn <grinn.amy@gmail.com>
To: Philip Kaludercic <philipk@posteo.net>
Cc: clemera@posteo.net,  emacs-devel@gnu.org
Subject: Re: Objed maintenance
Date: Sat, 04 May 2024 09:59:52 -0400	[thread overview]
Message-ID: <s31v83t8yp3.fsf@gmail.com> (raw)
In-Reply-To: <8734qz8k2f.fsf@posteo.net> (Philip Kaludercic's message of "Fri,  03 May 2024 06:51:20 +0000")

Philip Kaludercic <philipk@posteo.net> writes:

> Amy Grinn <grinn.amy@gmail.com> writes:
>
>> Philip Kaludercic <philipk@posteo.net> writes:
>>
>>> Amy Grinn <grinn.amy@gmail.com> writes:
>>>
>>>> Philip Kaludercic <philipk@posteo.net> writes:
>>>>
>>>>> Amy Grinn <grinn.amy@gmail.com> writes:
>>>>>
>>>>>> Philip Kaludercic <philipk@posteo.net> writes:
>>>>>>
>>>>>>> Amy Grinn <grinn.amy@gmail.com> writes:
>>>>>>>
>>>>>>>> Philip, I am using an unpublished dependency called key-game,
>>>>>>>> which I wrote, which I thought might be useful for other modal
>>>>>>>> editing packages, or for large packages like gnus.  Anyways I
>>>>>>>> will try to submit that package for publishing on GNU ELPA
>>>>>>>> before
>>>>>>>> objed is updated.
>>>>>>>
>>>>>>> That sounds good, just inferring from the name it sounds like
>>>>>>> wizard or training program?  Is this going to be a hard
>>>>>>> dependency
>>>>>>> or a weak one?
>>>>>>
>>>>>> Yes, it's a utility package to help create key-based or
>>>>>> command-based tutorial games.  It's not a user-facing package,
>>>>>> similar to boxy; I wouldn't want users to have to install it
>>>>>> explicitly.  To answer a potential followup, I also wouldn't
>>>>>> want
>>>>>> to split up the objed tutorial game into a separate package.
>>>>>> That
>>>>>> would hinder discoverability and make the installation of objed
>>>>>> more complex.  All that to say I believe key-game will be a hard
>>>>>> dependency.
>>>>>
>>>>> That is a pity.  I try to advocate for minimising dependencies,
>>>>> especially if these aren't required for the core functionality of
>>>>> a
>>>>> package.  I don't know how your package is designed, but couldn't
>>>>> you have a command like M-x objed-tutorial that reports an error
>>>>> if
>>>>> the package is not installed (or proposes to install it)?  FWIW I
>>>>> don't think having a separate package is a good idea either --
>>>>> too
>>>>> much noise in the package list.
>>>>
>>>> Practically, the entrypoint for the objed tutorial game is a
>>>> key-game
>>>> macro call, so it would be difficult to rewire.  Moreover, this
>>>> would
>>>> cause a similar issue in all other packages which might use
>>>> key-game.
>>>> This implies much more boilerplate which must be maintained
>>>> separately in all those packages.
>>>>
>>>> I see your point that the tutorial is not *the* core feature of
>>>> objed, but in my opinion it is *a* core part, and one that is more
>>>> likely to be invoked by new users.  I don't want to put up
>>>> roadblocks
>>>> for them.  I think peer dependencies can be useful for extending a
>>>> package, and objed already has such a dependency with avy, but
>>>> this
>>>> seems like an unnecessary installation step instead.
>>>>
>>>> I'm not as experienced with ELPA, so I would like to know more
>>>> about
>>>> the thought process behind discouraging direct dependencies.  But
>>>> again, I don't think key-game has any intrinsic features which an
>>>> end
>>>> user may want separate and apart from its use in other packages,
>>>> and
>>>> I would find it odd to suggest users add it to their selected
>>>> packages.
>>>
>>> Abstractly: My advice is my advice, it is inherently biased.  I
>>> take
>>> that position, because of my experience, which is why I refuse to
>>> install packages with more than 1-~2 transitive dependencies (I was
>>> recently once again shocked by "ement").  As everything I say that
>>> isn't part of the ELPA rules, you can ignore it if you think you
>>> know
>>> better.  My motivation to help with ELPA is rooted in my own
>>> interest
>>> to have good packages, given my own understanding of what makes
>>> packages good.
>>>
>>> Concretely: I don't know how key-game looks like, so I cannot
>>> really
>>> say if it makes sense or not.  I had something in mind like a
>>> generic
>>> wizard framework, where you'd M-x key-game, then get prompted what
>>> game to play (as defined by whatever package provides a game) and
>>> then
>>> it would play that game.
>>
>> That's an interesting idea, kind of like man pages except for
>> tutorial
>> games.  Centralizing the entrypoint for all key games is not exactly
>> the
>> direction I took though, in the current implementation each package
>> is
>> responsible for creating a separate entrypoint.
>
> Right, I recall there was a discussion on creating a configuration
> wizard a few years back, and I'd imagine that it might look something
> like that as well.
>
>> I'll have to give it some more thought but I have a few concerns
>> already.  It probably doesn't address the boilerplate code issue I
>> brought up but more importantly it seems like a dual dependency:
>> objed-game requires key-game for its implementation and key-game
>> requires objed-game to register itself as a valid game.  If only one
>> of
>> the packages is loaded it would necessarily load the other I think?
>> Currently, the command objed-game resides in a separate file which
>> is
>> autoloaded (along with key-game) IFF a user invokes it.
>
> Why not just wrap it in a with-eval-after-load inside of objed-game?

That is a possibility, but wouldn't that make the key-game command very
slow the first time?  If a dozen packages implement key-games, they will
all be loaded at the same time.

> I am not familiar with the boiler-plate code (have you sent me the
> code and did I just miss it?)

To circle back, the discussion was about making key-game an optional
dependency.  So each package which implements a key game must have the
same boilerplate code that asks the user to install key-game and then
loads the full implementation.

> but if your input is just data, then you could add it to a list that
> key-game queries.

But key-game may not have been installed, so this would need to be a
with-eval-after-load situation as well.  And in order to make objed-game
visible to key-game even in the situation where objed hasn't been
loaded, the form must also be autoloaded.

>> When you have the time, I would like to know if you have a specific
>> autoload/dependency scheme in mind and if there are any similar
>> packages
>> already in ELPA which act as a centralized interface for interacting
>> with other packages.
>
> Perhaps the built-in VC package?  My autocrypt package is also built
> up
> in a way that would support this kind of usage, but these tackle
> different issues.

VC can always just be required by its dependents without installing
anything, so I don't think that is a particularly helpful example to me.
With autocrypt I see it has the ability to be extended but I couldn't
find any actual extension packages.  Nevertheless, if an autocrypt
extension was submitted to GNU ELPA, would you also suggest the author
not rely directly on autocrypt?

...

I understand and share your concern about packages like ement.
Particularly having a dependency like taxy-magit-section, which has no
real semantic meaning and has dependencies of its own which have their
OWN dependencies.  Since key-game will be the first dependency of objed,
has no dependencies of its own, and it's clear what the package does, I
don't think this is a directly comparable situation.

My overarching concern with your suggestions so far is that it would
complicate the dependency structure and make it more difficult to
develop and maintain key-game implementations.  That is the exact
opposite of the purpose of key-game, which is meant to simplify the
development of key based tutorial games.

I appreciate your time and thoughts but I think I'm going to keep the
dependency scheme as it is now: key-game will have no knowledge of where
it is being used and each implementation will depend directly on it.

-- 
Best,

Amy



      reply	other threads:[~2024-05-04 13:59 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-18 22:45 Objed maintenance Amy Grinn
2024-04-22  7:22 ` Philip Kaludercic
2024-04-25 12:38   ` Amy Grinn
2024-04-27 10:06     ` Philip Kaludercic
2024-04-27 11:32       ` Amy Grinn
2024-04-27 11:54         ` Philip Kaludercic
2024-04-27 21:51           ` Amy Grinn
2024-05-01 18:06             ` Philip Kaludercic
2024-05-02  1:39               ` Adam Porter
2024-05-02  6:02                 ` Philip Kaludercic
2024-05-02  9:43                   ` Adam Porter
2024-05-02 17:09                     ` Philip Kaludercic
2024-05-03  4:06                       ` Adam Porter
2024-05-03  5:49                         ` Philip Kaludercic
2024-05-02 13:13               ` Amy Grinn
2024-05-03  6:51                 ` Philip Kaludercic
2024-05-04 13:59                   ` Amy Grinn [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s31v83t8yp3.fsf@gmail.com \
    --to=grinn.amy@gmail.com \
    --cc=clemera@posteo.net \
    --cc=emacs-devel@gnu.org \
    --cc=philipk@posteo.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.