This site is called mmx
mmx was built at the start of 2021. Largely inspired by others on {^webring}, especially {^Devine}, the site aims to be a long term repository for my writing, notes, and research. Entries on my previous site (a precarious tower of javascript dependencies) were ported over.
The site's compiler is written in {^Go}. It generates the static site you are reading by building a graph of entries from a bespoke markup language {mmxup}.
Go's {^templating engine} is lightly used, but it's often more straightforward to concat the html directly into a string.
If you want to learn more, see the {^source code}.
Building mmx
I've historically defaulted to the technology du jour to build and rebuild my personal and company webpages. It's worked fine - there have been moments of fantastic efficiency, and others of abysmal reverse engineering of an errant configuration or plugin.
In the spirit of {low tech}, and heavily inspired by others on the {^webring}, I sought out to simplify my dependencies, build something myself, and learn some new technologies in the process.
To start, I mapped out my hoped-for characteristics of the end result. I landed on:
- low friction, so as to promote more writing;
- low-level - no automagic frameworks or dependencies
- long-term, with limited dependencies and render to straight html; and
- extendable (I want this to be something that evolves with me over the next 5, 10, 15 years)
I opted for GoLang as a learning opportunity. Compared to my day-to-day work languages of Javascript and Python, GoLang is miles closer to C. The last time I thought about pointers was my senior year of college, if that. I never imagined saying this, but I missed pointers! My impression of GoLang so far is fine. I hardly tapped into the features it is known for, such as concurrency. But this project served as a gentle introduction.
Another reason I wanted to create the compiler myself was so that I could add features over time that are typically only available on "hosted platforms," such as bidirectional linking and other memex-style data graph functions. I noticed that Oscean as well as others on the webring were able to do this. How cool.
The compiler is able to pull context from inbound links to pages. This is achieved by building a node tree when compiling the templating language to HTML. The correct a
tag is located in the tree, and the node's parent content is pulled in as html.
In a moment of doubt, I played with {^11ty} as well as {^gatsby plugins} that promised functionality I sought. But after speedbumps with each, always grappling with the obfuscation that make them "magic," I felt confident that growing something from seed was the right path.
I've updated mmx to no longer rely on external dependencies (like markdown) outside of Golang's standard library. In order to do that while maintaining a nice writing experience (as much as I love html...), I created my own markdown language, {mmxup}.
Other features of established web frameworks are replicatable with bash, usually. For instance, "live reloading" is achieved with the following bash:
#!/bin/sh
bash build.sh
while inotifywait -qqre modify ./src ./links ./data; do
bash build.sh
done
The site is hosted using Github pages. This is great, because there is no build step. I check in the built html files (in /doc) and they are served within seconds. CNAME setup was a breeze.
The wood thrush, it is! Now I know
who sings that clear arpeggio,
three far notes weaving
into the evening
among leaves
and shadow;
or at dawn in the woods, I've heard
the sweet ascending triple word
echoing over
the silent river —
but never
seen the bird.
Learning the Name by Ursula K. Le Guin
2021-06-19
- Simplify jrnl images
- Optimize {mmxup} rendering
Pull in backref excerpt for contextChange reading to include other consumed media, like movies, videos, significant articles, etc. "reading logbook"Create running, climbing, exercise log
2021-06-28
2021-07-18
Now
This is the first entry in what I hope will be recurring format. It's an experiment in a different organizational structure on {mmx} to move from topic-based organization on the site to regular writing that spans different projects and interests. I've updated pages less often than I thought I would, mainly because of how distributed the content is across the site. I think this sort of diary-tag-entity relationship is how all those hot tools like Roam and others do it (is it the zettel-whatever pattern?). Topics can have their own content but will also be supplemented with extractions from other page's references to those content. This already happens, but it's hidden at the bottom of a page in a details
tag. I'm also interested to see if topic pages can be created without being explicitly defined. This change will need some small technical changes in mmx, but minor in the scheme of things. I am glad at how general-purpose mmx is, and pulling out some of the last technical idiosyncrasies will be a welcome refactor.