• AMMDI is an open-notebook hypertext writing experiment, authored by Mike Travers aka mtraven. It's a work in progress and some parts are more polished than others. Comments welcome! More.
Incoming links
from goddinpotty/TODOs
from About
  • All this hypertext goodness is based on Logseq, a newish note-taking tool which I've recently adopted. It's similar to Roam and was started with Roam, but after a brief fling with that I've decided that I can't use it, and Logseq is the best alternative. Because these new hypertext tools are a bit deficient on publishing tools I rolled my own starting from an existing open source project.
from goddinpotty/devlog
    • Mar 8th, 2022
      • Working on getting page hierarchicies handled right. I'm not sure I like this feature, it seems too old-school, why should I have rigid trees alongside my freewheeling graph? But the content is getting way unwieldy and this is a way of imposing some order.
      • How this works:
        • Slashes in page titles are interpreted as directory separators
        • There's code to gather the resultant hierarchies and render them in the side column
        • Because the web is terrible, the output is NOT in subdirectories, that broke every relative link in the output. Instead it writes into a flat output directory with a fake slash character.
      • Created some new hierarchies, for LWMap and Marvin Minsky. Seems like an awkward process and the resulting links don't flow. Oh well. Still a useful kind of structure to have.
from goddinpotty tutorial
  • A guide to publishing your own site using Goddinpotty.
    • State: in-progress.
from goddinpotty/sidenotes
    • Sidenotes are a complete hack on multiple levels.
    • First, the CSS required is nuts. But you don't have to worry about that, unless it breaks or looks ugly in your world.
    • Second, the way they are specified is by an ugly and unintuitive convention (the right thing would require changes to Logseq). Here's how it works:
      • Put the sidenote content in a child block.
        • Actually anywhere on the same page works I think.
      • Within the parent block, include the child as a block reference (using (()) notation).
    • Implementation
    • Redesign
      • The block-reference mechanism is very unintuitive and a pain to use. And there's no reason for it! I can use whatever syntax I choose
        eg something like this
      • OK, and
        should support formatting and AMMDI links
from roam
  • No real system for publishing or separating out personal notes from more finished text intended for the public (I had to make my own Goddinpotty)
from Critical Code Studies
  • Current-wave hypertext and knowledge management tools like Roam (not very code related, except I am coding my own Goddinpotty , and the Roam-tools all have a plugin/extension culture which is interesting in terms of having code and text intermingled).
from 2021 Year-end review
  • Built out Goddinpotty (renamed from the boring "Static-roam") and this website. Got mistreated by Roam so switched to logseq, which took a lot more energy than I thought it would. Somebody expressed an interest in using it to set up a pretty neat academic anthropology journal site, but that fell through. Lots of little formatting tweaks and adjustments, in particular I hid the hairball diagrams in the left-hand column under an expander, because they were very distracting (and stupid in other ways – if you want to spatialize your knowledge palace, you have to do it in a navigable and stable way).
from goddinpotty/TODOs
    • New

      • Should have block level links, I often want to point somebody to a quote or whatever
      • Should be a more persistent search results. Either hold them in the left-hand column, or make a dynamic page (harder).
      • Should have a way to capture embedded tweets as images, since Twitter is melting down and might vanish any day.
      • It's easy for links to become dead through page renames and other ways. So:
        • ideally, retain all historic page names and redirect
        • easier: have a custom 404 page that at least goes somewhere non-jarring
      • TODO minor bug, if you have ws/foo and ws is not a page but an alias, wrong things will happen. (basically both aliases and hierarchies are underspecified and have bugs, and their interaction has more bugs)
      • DONE bug On Dennett, link to The Society of Mind not rendering
        • also the italics in that quote come out with the stars rather than rendered properly. Might be a thing with quotes?
      • TODO performance – hack, but can skip parsing journal pages (under appropriate config)
        • would be more elegant to parse on demand, and then blocks that were under a private tag just wouldn't be parsed. But that would involve massive changes.
          • Might use :block/page for this, and other properties we aren't currently paying attention to you. As usual with logseq, seems janky. There are lots of blocks without this property.
          • There are certain private pages that are very long chat transcript and probably shouldn't be in here. But fuck, I don't want to have to think that way! Maybe I need to rethink more drastically.
          • 11 fucking minutes to build AMMDI with new changes...shit that is slower isn;t it?
          • Original: 10.4 mins, {:blocks {:total 40215, :published 9950}, :pages {:total 2160, :published 740}}
          • Enhanced; 10.8 mins, {:blocks {:total 40215, :published 9950}, :pages {:total 2160, :published 740}} Weird, no idea why it would be slower. Does a tiny bit more rendering but a lot less parsing.
          • {:blocks {:total 40306, :published 10000}, :pages {:total 2162, :published 747}}
      • DONE Title sections should be hidden (eg Marvin Minsky/vs Chomsky )
        • This happens only sporadically and I think can be fixed in the source...at least for now
      • TODO Make ToSelf work
        • ok, completely forgot and can't reconstruct what I meant...like, it indicates the block is a note to myself and should't be published? That is, it does what Private ought to do.
      • TODO Bug sidenotes in backlinks come out badly, should probably just omit. Example on page Meaningness, there's a backlink from nebulosity (note: thought I fixed this but its still there)
      • TODO Empty pages with one link don't get created (I'm being clever) but links to them should have ~~strikethrough~~
      • TODO Bug with play/Play, maybe alias related
        • May have been caused by Play having "play" as title property. undid that...yes that fixed it, but there is still an underlying problem.
        • Another: search for "goddin", you get a link that doesn't work, Goddinpotty (real link is lowercase)
          • hm, OK on local?
      • TODO new time system with nbb, seems to work but has some peculiarities that I don't have the patience to dig into now.
      • Oh wondered why some pages seem to have write dates that didn't make sense, turns out changing the name of a page will (of course) update any pages that link to it. Fuck, that kind of breaks using git for change dates...unless I make my thing a level or two hairier
      • Idea: have an escape to allow Hiccup, then I can do tables with pretty zero cost. Oh you can do that now. Here's a 2x2 template. Note you have to have it on a single line or it gets confused.
        • 012
        • No this does not currently render correctly, looks like you need to try to do a clojure parse on each block? Ugh, like it's not already slow enough.
      • Aliases still aren't working right; eg there is a separate Latour page output even though it is supposed to be an alias to Bruno Latour
    • Logseq related

      • see logseq/goddinpotty-issues
      • DONE seem to be a lot of broken block refs from import (well one at least), should check for those.
        • fixed so error would be caught at least
      • DONE have to do something with hierarchies
        • Should hierarchy links be treated as regular links? Would make sense, but also a bit dicey to implement. Hm how will it interact with inclusion. Hm yes they should be done, but now I want typed links.
        • Instead: Have hierarchy nav box at top of pages, it's easy (more or less) to generate
          • for all links, compute possible parent-child relations
          • for top links, compute the full hierarchy for display
          • render this in sidebar (I guess?)
      • TODO Automate graph export
        • Partly done, but still pretty sucky
        • It's even more sucky than I realized, I do not know how to force the most recent graph out of Logseq
      • DONE Pages with actual slash in name are causing fuckage
        • Not that bad, just a bogus parent page. Could have a flag to suppress, or use a fake slash.
      • DONE bug links to nonexistant page eg at top of Malcolm X College
        • Fixed but now looks dumb, should be styled as dead tags or left out or something.
      • DONE New page broken, doesn't got recents like it used to
    • Major features

      • Publish via git
        • Done, but needs some tweaks
          • Colophon will change on every page; maybe that can be hacked
            • temp simplified it.
      • SPA navigation
        • Currently uses naive Web 1.0 nav, which is slow ~~and blanks the screen~~, not the feel I want.
        • See logseq/publish for better
      • DONE Rename
        • DONE needs a new name, it's diverged enough.
      • green links (pre-nav popups)
        • Someone asked for these, but I don't feel like my own stuff would really benefit that much.
        • Logseq has these so maybe that will push me over the edge
      • Hosted publishing. See goddinpotty/saas
      • random idea: the computing-a-subset-graph-via-closure functionality is useful for Roam in general; eg if a graph gets too big and you want to split it.
        • could be another goddinpotty/saas service
      • Blogger import
      • Scaling
        • Map doesn't scale, ~~and publishing is getting slow (solution: use git)~~
        • Parsing is the slow step. One idea is to cache the parse on disk and only reparse and regenerate as necessary.
      • Make graph more dynamic
        • I probably will cut back radius to 1, but that makes it almost useless, all the links are already on the page.
        • Note: nav from graph should also be SPA-like, see above
        • Better yet, allow graph nodes to expand in place on user click.
        • Better yet, get rid of the hairball and have something better (but that's kind of a research project)
      • Publish for self
        • This already exists, although I never use it.
          • TODO Should be effortless, yes, that should be done automatically, can still gate release-to-public.
          • TODO visually distinguish the non-public text.
    • Minor features

      • TODO side graph highlighting should show path from hover node to current page; and in an actually legible way. This would make it actually useful, which it isn't really now.
      • TODO block properties for various things
        • Immediate need: adding a css class to an image so it can have a border; currently images with white background bleed into the page and looks weird.
      • Needs new front page strategy, but god knows what
      • Bare tags (like book in a line) should not render themselves in text. They should maybe appear as tags since that's what they are, or even trigger css variations or big icons to create some visual differentiation of the sea of pages.
        • Not quite sure what I meant by that
      • DataViz thing
        • sort of spontaneously grew
        • which I can't link to because it's implemented wrong
        • TODO graphics should match those in force-layout view, more or less.
          • would be cool to include edges but that might be out of scope
        • DONE adjust labels and legend
        • Version for me with all blocks, color-coded by public or not
      • Have an author tag that adds a byline; then can import other texts and have clear visual indication of authorship (see Marvin Minsky/True Names Afterword for an application).
        • That's for quoting stuff from other sources, but it might also be a feature to support multiple Roam authors. Not an issue for my solo site.
      • More curatorial features (replace dead links with archive.org links, check for bad Markdown, etc)
        • Really need a Roam write API (or equivalent) for this and Blogger import and other things.
        • It's easy to accidently paste in links (esp. images) that are temp urls from CDNs. These should be detected and copied if possible. Dead link detection would also be useful
        • Have an option to download all images on Roam servers and include as part of static site (if not, probably will break if you stop paying the Roam bills)
      • TODO links from Recent Changes and sidebar should be to particular block
        • TODO (which requires rendering anchors)
      • TODO Roam tables not being rendered right at all
        • Might not be worth supporting this and other Roam features; but there should at least be a warning when you do a build and hit a feature like this.
      • TODO for empty pages (or maybe specifed with flag) the Incoming Links section should be in main body of page – bare column looks weird
      • On-page about box with contact / feedback info
        • See meaningness for good example
        • Goes well with
          • Some kind of feed for subscribers
            • eg, post link to changes every week to a Twitter account
      • frequency table
        • Done the guts, but a UI won't make sense without a search for words to link to, or staticly creating fake pages
        • can do it now that we have search, but it turns out to not be that interesting, given the existing wiki-ish page titles.
    • Bugs

      • TODO If there are two pages whose names differ only in case (eg author and Author) you end up with broken links, at least if you are going through a case-folding filesystem like MacOS. Should detect and warn user.
      • Performance sucks
        • All the time is spent in instaparse
        • Trying to slim down the grammar actually made things worse for some reason
        • I'm wondering if dispensing with instaparse and using some hacky regex parser would be an improvement...prob not?
        • Noticing that it is even worse if you rerun -main ,,, like it crawls. Not sure why, suspect memoization? Nothing else should change between runs, but its hard to see that producing such a dramatic slowdown.
          • Might have fixed these, should test to make sure
        • OK, I now have a deploy script. takes 4.5 minutes (for around 300 pages)
          • Use git for deploy, would be a lot faster
          • Some kind of incremental page rebuild. It's parsing thats's slow, so cache locally and use Roam timestamps to invalidatate.
      • Mobile: Menubar not quite working, can't see New and other rhs options?
      • TODO isn't smart about quoting html like
        is probably going to get rendered as a rule, and it shouldn't.
      • TODO Apparent search bug? Query for "Minsk" matches somethings that "Minsky" doesn't, for no obvious reason (suspect handling of apostrophe, issue might be pages with "Minsky's")
      • TODO Vivarium Project page has colors inverted in the graph
        • Ah this is because Vega assigns colors in order.
      • Need to check the parser for ambiguities
        • Worked some on this, needs work.
    • Assorted ideas

      • Idea: bare urls are ugly; haxve some automation that goes and fixes them.
        • Good first step towards blogger, will have to solve computational update problem
      • Some nodes are hyperconnected (like Further reading) and might be better if they were excluded from the graph.
      • Idea (esp if I import blog posts) have system of icons for different page types; show them.
        • Old blog post
        • Notes
        • Essay
        • Review
        • Person (Author)
        • Subject matter
          • Hacks / technology
          • Politics
          • Agency
        • ???
      • Page/tag structure: now that the Rationality essays are no longer a main thing, they should be framed, given some kind of boilerplate and a different look. Not sure.
from goddinpotty/name
from goddinpotty/name
from RoamAway
  • Internally, this is some code from Goddinpotty packaged up with its own workflow and UI. A hack !
from my writing and publishing stack
  • Roam was somewhat deficient in the publishing department, so I rolled my own publishing software Goddinpotty.
from goddinpotty/user-guide
    • Not really, but at least this tracks features which need to be documented
    • General workflow, scripts
    • Configuration
    • Content features
      • Publish/Private mangement
      • class property
      • special tags
        • the register-special-tag mechanism
        • dataviz (crock)
        • incoming (not used)
    • Infrastructure components
      • Search (elasticlunr.js)
      • Visualization (vega)
    • Deploying via git
      • AMMDI deploys this way, it's pretty efficient and easy to set up
      • important to set ignorecase = false or you get weird case-folding-related bugs
    • Internal documentation
      • eg documentation of the block map, the central datastructure
from ToSelf
from goddinpotty/DONE
    • DONE Logseq uses different syntax for italics etc.
    • DONE do something with page aliases
      • DONE rewrite old klunky Roam aliases {{}} etc
    • DONE times are completely not working,
      • maybe use .md file times? Seems easy
      • for blocks, could mine git log, but that sounds hard
        • actually blame could do it, couldn't it??? Hm.
        • also autogit is not working any more (fixed I think)
    • DONE git publishing
      • a few more complications than I thought
      • DONE need to put in some linebreaks for git to have any chance
        • OR, is it possible to configure git...hm...looks like not
      • DONE need to eliminate the timestamp on footer, it will make each file gratuitously changed
      • DONE makes more sense now to separate out the map json...especially since map isn't even displayed by default!
        • TODO should have the same info on a special about page, just for grins
    • DONE Use git for incremental deploy, will speed up as well as make a record of changes.
    • specifically, the screen blanks for a noticable time as you switch pages. Ruins the mood and attention.
    • DONE Minor redesign in progress
      • Moved boxes to LH so sidenotes don't collide
      • Need to tweak widths, sidenotes now collide with main text!
      • Stick DataViz somewhere
      • Make Map box link to full Map rather than RH menu
    • DONE make side graph open/close sticky, not sure how?
    • DONE Sorry sidenotes look heinous when they overlap the sidebar (see AMMDI: nebulosity ) for example).
      • If sidebar didn't scroll, that would partly fix the problem; you could at least see the text which now is irrevocably occluded.
      • Fixed by moving main col to lhs
    • DONE bug when there are multiple italic areas in a block, see end of White Noise
      • Anyway, White Noise is thematically timely and one of the best novels of the late 20th century according to Harold Bloom, who placed it in the tradition of "American comic apocalypses" that includes Melville's The Confidence Man and Thomas Pynchon's Crying of Lot 49. (I guess I'd put Infinite Jest and the work of Philip K Dick in that bucket as well). And it's due to be turned into a movie this year.
    • DONE Looks like search index includes non-displayed text!!! (example: "Elder" matches hidden text at GBG).
from IAnnotate Conference
  • for all notes are part of conversations Goddinpotty not even a little conversational, sigh.
Twin Pages


Open in Logseq
    • Goddinpotty is a publishing tool for turning logseq or Roam graphs into static HTML See the source for details. .
    • Aside from Logseq/Roam, the tech relies on:
      • Vega (for graphs and visualizations)
    • Here's a first cut at a goddinpotty tutorial. Not clear anyone else has tried to run this, but if you do, let me know.
    • Features

      • Logseq/Roam features supported

        • Most normal formatting, italics, etc.
        • Blockquotes
        • Headers
        • Internal and external links
        • Backlinks and graphs
        • Block references
        • LaTeX
        • TODO TODO items
        • Some types of embedded content (images, youtube videos, twitter)
        • Search (page-level rather than block-level)
      • Roam/Logseq features unsupported (for now)

        • Drawings (and a probably other kinds of special blocks)
        • Tables
      • Add-ons to Roam/Logseq

        • Publication
          • Index
          • Map
          • Sister pages
          • Page hierarchy navigation
        • Flexible graph subsets and access control
        • Sidenotes
        • Recent changes page
          • currently out of service, Logseq doesn't do block-level timestamps very well