techhub.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
A hub primarily for passionate technologists, but everyone is welcome

Administered by:

Server stats:

4.7K
active users

#SilverBullet

0 posts0 participants0 posts today

My next fools errand (after I finish fixing and reimplementing the weather station in Slint) will be remaking #SilverBullet. It’s too janky for how important it is to me, and there aren’t any options. To save labour I’ll reuse as much software as I can.

- sync with syncthing (terrible on iOS but what do you do)
- markdown editing in Some App (I’m sure someone’s implemented it)
- a HTML-only viewing system (this is the part I make) with an edit button that triggers the markdown

Continued thread

Or: Progressive Notes App. Analogous to progressive web apps, that start out with the basics and (can) functionality progress (get fancier) from there.
In #SilverBullet’s case: start out with simple notes, progress to links, queries and custom widgets, commands etc.

Ok #Silverbullet has started glitching out for me in exactly the same way Org-mode and similar systems used to. That "rewrite, with 1/10th of the feature set" itch I've had is now getting much, much worse.

I'd have to do this in three steps:

1. Extend an existing Markdown LS slightly for autocomplete & context I'd need (backlinks, wikilinks, frontmatter, snippets)
2. Full-text search index
3. Web server that renders it all, read-only.

The idea that Internet is available everywhere I’m sure will happen any day now, but that day for sure is not today. This becomes super clear whenever I travel. #LocalFirst software still matters and I don’t see that change any time soon realistically. Still happy with the choice to now make this the default mode in #SilverBullet v2.

Continued thread

7. Bridging Lua and JavaScript APIs and values was actually more doable than I anticipated. They map quite cleanly if you’re willing to make a few compromises. One of few issues is to deal with the fact that Lua just has one data structure: the table, which functions as a list, a map and can be used as a set as well. And again, its start indexing at 1. AT ONE!!!1

Introducing #SpaceLua in #SilverBullet has been one of the best decisions I've made in the last three years of SB development. I foreshadowed how it would develop here: youtu.be/t1oy_41bDAY

And eventually this lead to a much cleaner SilverBullet v2. Intro video here: youtu.be/mik1EbTshX4

youtu.be- YouTubeEnjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.

Ok, so I’m now a few months into building a custom (almost from scratch) #Lua implementation for @silverbulletmd dubbed #SpaceLua (for reasons).

A few things that panned out really well, and a few surprises that I did not anticipate:

0. General recommendation: don’t do this. Don’t just implement a full programming language because you think it’s a good idea. I also told this myself. It didn’t work. It was a “I’ve don’t this stuff before, I can do it again” type of deal. I was mostly right. But don’t do this.

1. Initially I opted for a custom interpreter (implemented in TypeScript) because I wanted to expose asynchronous (promise based) JS APIs to Lua, and I didn’t see how to do that nicely with a #Wasm-compiled version of the official Lua interpreter. Also I felt that having full control of the running system would turn out to be valuable down the line (I was right on this one).

2. I got the parser part mostly free. I found an existing Lua grammar for the Lezer parser library that #SilverBullet uses. Had to add a few things and had some struggles. This part was pretty seamless with a few glitches here and there.

3. Implementing the core interpreter runtime was actually quite easy. Lua is a mostly simple and small language. Again, I’ve done this before so that helped. Writing good test suites makes this doable and AI helped a lot generating those test suites (because it knows Lua).

4. What I didn’t anticipate is the pain in implementing the full Lua API, especially the `string.*` one which has its own pattern matching language (similar but distinct from regular expressions), which honestly I could do without. But it’s there, and people want to use it, so I need a full implementation. Issues keep coming up, though.

Continued thread

I'm definitely having fun hacking away at #silverbullet. 😄

Right now, getting used to using the #javascript import. Which can effectively pull almost any js module. And with #jsr being a thing... let's just say silverbullet instance is going to get weird. 😅

I'm honestly surprised it took this log to learn of this gem. Likely due to my still very much liking #logseq. Although... give me a few weeks... I'll likely build my own journaling system on this thing. 😇

silverbullet.md/API/js

silverbullet.mdAPI/jsAPI docs for Space Lua's js module, which provides JavaScript interoperability. js.import(url)Imports a JavaScript module from a URL. Returns the imported module.Example:-- Import lodash librarylocal lodashLib = js.import("https://esm.sh/lodash@4.17.

I am unfortunately now convinced that a solid 90% of my use of #SilverBullet could be improved by replacing it with a language server.

Presumably I can just fork one of the markdown ones and start tweaking it to add some features to handling the front matter.