About exobrain
Finally starting an exobrain
Liking https://beepb00p.xyz one a lot. Especially annotation style. Done some more research on Org and org-mode. Might not be the right thing. Org is serialization format for org-mode, using it outside of it is kinda meh. Going with asciidoctor for now as it is practical to write and edit right now.
Adopting a daily journal filing method for this: avoids creating complex taxonomies and it is efficient to parse incrementaly having a cache file somewhere.
must think of a nice retrival system for this knowledge base. It must be an active app. There isn’t really a way to make it static.
Importing old stuff from exobrain v0.1
This is technically the 2nd revision of my exobrain, so i’ll call it v0.2.
Old version was just a bunch of pages in Hugo.
Reorganizing it in a way that makes more sense.
User experience
Want to take a journaling approach to adding content: a file per day, append only. When rendered in Hugo should look like one single page.
DONE: Merge note files under a single section in a single view. * Completed on 2023-06-17 with note #1
TODO: Still need to figure out how to manage headings. Should i manage them at all ?
TODO: Still need to inject some Hugo magic into files to make this work. I need tooling to export stuff from exobrain in a machine-readable format.
TODO: Figure out tags for Zettelkasten functionality.
Editing friction
Experienced first friction moments with the system.
Currently using Syncthing to sync exobrain across personal devices and Git to
export it to the public cloud.
Today i was looking to write a note and noticed something was wrong.
The directory that contains this very note was missing, couldn’t figure out
where it was gone.
Checked sync history on phone and pc, couldn’t figure it out.
Started developing some migraine-inducing thougths about distributed state
failure modes.
Then it hit me: i was one revision behind on the Git side of things.
Git pulled. Problem solved.
But the tought sill haunts me: in the event stuff gets messed up i struggle
to repair the system state. I could lose data and not have the ability to
tell with mathematical certainity.
I need to make the distributed editing process more reliable.
Considerations in solving reliability problems
Keeping the authoritative copy of exobrain in a backed-up CIFS share sure can solve desync problems, but then availability concerns arise.
For the system to be useful i must be able to edit it at all times.
System architecture at 2023-04-27
Lowering publishing friction
Separating the exobrain source from the website has been a great idea, using a
submodule to relink them a dumb one.
The exobrain isn’t something inherently versioned, only the latest version
matters at all. So using Git for this job brings nothing but worthless mental
overhead.
I still had to manually sync the submodule in the website to the exobrain repo,
that in turn had to be quite artificially be synced to the
authoritative copy.
Directly rsyncing the website copy from the authoritative one is a much simpler and effective method to manage publication.
On removing "Hugo magic" from exobrain files
Currently to correctly render exobrain via Hugo, exobrain files need to include
some Hugo-specific data.
Since this repository is not indended to be consumed by just Hugo in particular
i was searching for a workflow alternative to "just plop files into a Hugo
project", that being the very thing requiring "magic" to be there.
For a variety of reasons this is quite challenging at the moment.
Today tho i come across this thread, that may provide a very interesting intermediate solution.
A good-ish content view for journaled notes
Figured out how to render journaled notes as a single page in Hugo: iteratively
fetching the .Content
property for each note from Hugo DOM proved a quite
inflexible but simple and effective method.
While current result is satisfactory from the visual standpoint it definitely
isn’t from the codegen one, this mainly due to the underlying Asciidoctor
codegen combined with the inflexibility of certain Hugo features.
The table of contents for example results in this:
<nav id="TableOfContents">
<h1>Table of Contents</h1>
<nav id="TableOfContents"> <ul> <li><a href="#_why_make_websites_simple">Why make websites simple ?</a></li> <li><a href="#_cool_android_stuff">Cool Android stuff</a></li> <li><a href="#_a_list_of_things_i_want_to_do_in_the_long_term">A list of things i want to do in the long term</a></li> <li><a href="#_dns_resolution_chain_from_my_local_system">DNS resolution chain from my local system</a></li> </ul> </nav>
<nav id="TableOfContents"> <ul> <li><a href="#_the_case_for_biparted_project_structure_buildsrc">The case for biparted project structure ( build/src )</a></li> </ul> </nav>
<nav id="TableOfContents"></nav>
<nav id="TableOfContents"></nav>
</nav>
TODO: Figure out how to customize Asciidoctor codegen
Overall this tecnique is is still an inferior solution to the data driven one, but it’s slighly better than before.