All, I’m looking for examples of tools with an end-user facing interface of some sort for using them, with accessible code repositories. My interest is in surveying how these are structured, built and distributed. A few scoping definitions:
End-user facing means intended for an end user to run for some purpose. This would exclude projects that are just pure packages intended to be included in some larger tool, though if the package includes a self-contained MWE that can be practically used as an end-user tool, that’s fine (in that case, ask yourself, would a user actually consider this ready-to-run, that is, there’s enough of a readme or whatever for them to get it going). But, generally, these are going to be Julia “apps”, or stand-alone GUI/CLI tools.
The “interface” might be a CLI, a GUI/TUI, or something an end-user would directly interact with to use the tool. We’re not including REPL-only applications where the user would be expected to write Julia code to interact (so manually calling package functions against-REPL-loaded data is out; includeing a file in the REPL and calling main() is OK if that’s all there is to it). Also not interested in things that present an API as the only interface (e.g. a REST service).
Just looking for links to repos in responses; thank you in advance!
Pluto.jl is pretty widely used, though the end-use is still writing Julia, just mostly in your own notebooks instead of Pluto API. Javascript implements the browser interface and bridges the Julia backend; pure Julia is hard to come by in a world where established contexts and frameworks rely on other languages.
The Pkg app system is fairly new (1.12+) and experimental, so expect older projects to use different methods, even a brief foray in the REPL. The Model Context Protocol server Kaimon.jl comes to mind as a Pkg app. To affirm the earlier point, while the repo is nearly pure Julia, the server connects Julia REPL sessions to MCP clients that are probably not implemented in Julia.
Yes! In fact, part of purpose here is because it is a little bit hard to write such tools only in Julia, so hybrids are fine. Julia just should do most of the work at the core of the tool.
Thanks for your reply!
After many months not being logged in a sign of life from me. Meanwhile I finished the application but moved its development from GitHub to Codeberg:
However, since Codeberg has a limit of 100 MB for binaries, the binaries are still offered at GitHub:
Meanwhile, I could also finish the paper describing the algorithm for which I created Juliastic (https://codeberg.org/donovaly/Juliastic) as connector between Julia and Lazarus:
Basically the idea is to provide the API bindings and data management, and then build an application around that. So it it’s a very modular way to build an OCPP stack, compared to something like SteVe which has everything built into a single application.
OCPP is very popular in the Netherlands and in Australia, and often mandatory in EV charger tenders as a way to connect to a charge point operator or to do things like providing grid services and V2G. I think Julia is ideal for this usecase, thanks to great multi-threading support, HTTP.jl, JSON.jl and multiple-dispatch. Just need to decide on the frontend now.
The first concrete application of this is a bridge between my Alfen OCPP charger, and my Victron EMS system. If you’re familiar with EVCC, that is more or less the end goal. Stupidly enough both companies are Dutch and their offices are almost across the street from eachother. Yet they just won’t talk to eachother!
Some frequencies are ruled out by the initial and boundary conditions. That’s part of what gives the sound its particular character.
It’s more obvious if you put the slider all the way to the right, which corresponds to the exact center of the string. Now all the even-numbered harmonics are eliminated, because they have a node at the string’s center—but the initial condition has a maximum there.
The Fourier series of a triangle wave will just be the odd harmonics as shown by the first summation here. Lee model is consistent with this. With an asymmetric triangular wave things get more complicated as the link shows.