[FAQ] Helping perchance as an experienced dev - Lemmy.World
I’ve received a few messages from experienced developers asking how they might
be able to help improve Perchance. I typed out a decently long (but somewhat
rambling and incomplete) response to a message just now and figured I might as
well post it publicly for the benefit of others who are interested. The TL;DR is
probably: Just have fun building stuff (plugins/generators/etc) that’s
interesting/useful for you, and share your creations with friends or communities
that might find it useful. That helps a lot! Message response below: — The
Perchance site itself is really just a code editor with a sandboxed iframe (that
the code is thrown into), and a mongodb server for accounts/generators, so not a
lot of my dev time goes into that level of the platform. And the DSL/engine
doesn’t change much at this point (though an overhaul will likely come at some
point), so most of my time is spent on creating plugins, examples/applications,
and stuff like that. I could add a bunch more features to the site, but I prefer
to keep the foundation very simple, which is why I create plugins like
perchance.org/upload-plugin [http://perchance.org/upload-plugin] and
perchance.org/comments-plugin [http://perchance.org/comments-plugin] and so on.
I.e. instead of adding comments as a “native” feature, I just add it as a
plugin, which allows me to be more nimble and experimental. There are limits to
this, of course. One native feature that is sorely needed imo is collaborative
editing - akin to Google Docs, so you can just share a link to start working on
stuff with others. Another is optional AI-assisted code auto-completion. For
both of those I need to upgrade to CodeMirror 6, but the Lezer stuff is kinda
gnarly. If someone managed to get the Perchance DSL highlighted with CodeMirror
6 that would be very handy, but this is definitely not a “good first issue”. I
did spend one day on it, thinking that’s all it’d take, but I now realize that
it’s something which I’ll need to set aside several days for, and I’ve been
putting it off. Here’s the basic setup for CodeMirror 6:
https://perchance.org/codemirror6-basic-html#edit
[https://perchance.org/codemirror6-basic-html#edit] And I originally thought I’d
use the same mixed parsing [https://codemirror.net/examples/mixed-language/]
approach that @codemirror/lang-html uses, except instead of the HTML script tags
triggering the transition from non-JS text to JS-highlighted text, it’d be
square brackets (and function headers), but I think the problem with that is
that the HTML parser has the advantage that the closing script tag in HTML code
always means “end of JS” (even if it’s e.g. in the middle of a JS string! this
can be somewhat surprising to many web devs), whereas closing square brackets
can ‘validly’ occur in JS code without necessarily indicating the end of a
square block. Someone here
[https://discuss.codemirror.net/t/template-style-language/5558] seems to have
come to the conclusion that Lezer might not be a good fit for this sort of
thing, and so a stream parser might be the way to go, but I’m not so sure,
because IIUC, @codemirror/lang-javascript manages to do it with template
strings. I.e. ${ to indicate start of JS, and } to indicate end. That’s almost
identical to what is needed for the Perchance DSL, so it seems like Lezer can do
this. But maybe @codemirror/lang-javascript is doing some non-Lezer stuff, since
IIRC there are some proprocessing/tokenization things you can do before it gets
passed to Lezer. Either way, using the official JavaScript (or html/markdown/etc
- which includes it as a sub-module) parser, with some minimal modifications, is
probably the way to go, since I don’t want to have to maintain a from-scratch
lib of that level of complexity. So that’s one thing that comes to mind right
now, but that said, probably the most helpful thing that community members can
to do to help Perchance is to create generators/plugins/games/etc. An
interesting one that I noticed a few days ago, as an example:
https://perchance.org/ai-roguelike [https://perchance.org/ai-roguelike] The
advantage of helping in this way is: 1) it’s fun and you can just build stuff
that’s interesting to you, and 2) it doesn’t require any coordination with me or
anyone else. The latter point is pretty important because I’m a pretty
solitary/hermit type of person, so it may be hard to get in contact with me for
several weeks at a time. I’ve spent quite a bit of time recently building
generators to try and provide examples of games/experiences/tools that can be
created with the AI plugins. The more people who are doing this, the more I can
move down to the lower levels of Perchance. My bottleneck is currently at the
higher “application” level, rather than the platform level, if that makes sense.