21: What's Next
So to recap, last week I decided to go back to the project that started off this newsletter, Fancynote. Being incredibly dim, I decided to do this right as things are kicking in gear with hyperlink.academy. That's why I'm just starting to write this newsletter, at 12:48AM. Alas.
Anyways, I set my self the goal1 of getting my experimental notes software outputting to fancynote.awarm.space and well, there it is!
What you're looking it is some very basic HTML that's generated from my very basic markup language.
It looks like this:
#[Fancynote]
This is l[my https://awarm.space] first attempt at an environment and programming language for thinking
in. I'm calling it b[fancynote].
##[Goals]
The long term goal of fancynote is something approaching a i[maintainable
wiki]. Sustainable digital gardening. A permaculture of thought.
You can read more about the language features in the note on the architecture.
If you're familiar with markdown you may be rolling your eyes right about now. This just looks like markdown with some extra brackets. But, there are a couple key differences here.
- This language is super easy to parse. Seriously, the lexer and parser 2 combined come in at just over 100 lines. For contrast see the reference markdown parser commonmark
- It's trivial to define new functions as everything works and looks the same way.
Basically, it's a very simple core you can build almost anything on top of!
What's the point
This may all seem very pointless. After several hours of work3 I have a language that works in some ways worse than markdown. But! I have a language that I understand every line of. That's a pretty empowering feeling!
It enables a learning loop like no other, where you can be operating on one level (writing/notetaking), have an idea for a feature you wish you had (say, block level links), and jump right into implementing it. Of course this can be extremely dangerous to your productivity, but productivity isn't the reason to do any of this.
A much better reason is to have fun, and closely following, to explore interesting ideas. There's something lovely about a learning by taking notes with a notetaking tool you're building to learn.
What's next for Fancynote?
With this loop, I want to slowly grow the things I can do with the language. There's a lot I'm interested in, as you can see in the todos note.
Two things I'm particularly excited for right now are making a repl and types.
A REPL is read-evaluate-print-loop
. Basically, it's a terminal tied to a
programming language. In particularly I'm interested in making an interactive
environment in which I can query and process my notes.
I've been using notion a lot lately to collaborate with others and it has some fantastic features for treating notes like a database. I was trying to imagine how you could acheive something similar with a text-only constraint and was having a really hard time until the aha moment. If you view each note file as a program, you could just load that program up in a REPL and interact with it! This is extremely loosely speced out, but I think there's something interesting here.
What about typing?
The other thing I want to tackle is types. Past readers may remember me gushing about types on prior occasions. If not, see: https://awarm.space/newsletter/14-databases-maps-and-manuals
Strong types and notes seems like a wierd combination, but I think they make a lot of sense. Notes span the gamut from loosely defined to extremely rigid, and a lot of the value in (re)writing them comes from moving between the two. Most often notetaking systems lean to the loose side as it's the more general one, but a sufficiently advanced typesystem should let you conciously choose where you want to be precise.
If you want to have a series of notes where every entry must have a certain shape, you should be able to do that. Likewise, if you want to have notes be loose and fit any structure that should work too!
The future of this newsletter
Speaking of fitting any structure, as you may have noticed, this newsletter seems to be shifting focus. I used to have more musings and essay approaching things in here, and it seems it's now evolving into more of a work log, a [Working with the garage door up][https://notes.andymatuschak.org/Work_with_the_garage_door_up] type thing.
So I think I'll explicitly change things up a bit. Think of it like Season 2.
- I'll be sending these out Sunday evenings from now on.
- I'll be setting aside a couple hours each week (tentatively Friday evenings) for longform writing
- Each newsletter will contain:
- links to writing I update or publish throughout the week
- A recap of what I've been working on with Hyperlink.academy, along with some off the cuff explanations of challenges and exciting developments
- A recap of the state of Fancynote, and a goal for the next week for it.
I might evolve this structure more as the weeks go on. I'd love to start linking out more to other people's interesting work, so it might make sense to create a space for that. Experiments abound!
Anyways...
By my newsletter next week I will:
- Implement a filter/query function in fancy note
- Add proper error messages (i.e not just throwing JS errors but my own system)
- Start defining html outputs in fancynote itself via something approaching functions.
Til then! Thank you for reading.
-
Out of the various constraints I set myself I managed to hit all except one: Erroring on invalid internal links. It would've been fairly easy to do it a pretty jank way but I decided to hold off for something more robust. In general the handling of errors is pretty jank, and something I want to spend time on. ↩
-
lexing and parsing are the two parts of the process of taking a file written in a language and turning it into structured data you can do things with. Lexing splits the file up into a series of tokens (think, individual words and punctuation), and parsing assembles those tokens into a structure, usually a tree. ↩
-
While the overall structure is pretty simple, I got to deal with several fun problems along the way! Chief of which was figuring out how to handle newlines nicely so you don't have to make each paragraph a distinct block. I'm tracking problems I have to solve here. ↩