• 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 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 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 goddinpotty/name
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 ToSelf
from goddinpotty/name
from goddinpotty/dynamic-cheap
    • A lightweight plan to avoid the very slow publishing cycle.
    • A demon watches the Logseq directory
      • Picks up any changes
      • Regenerates select pages (note: changes in references make this a bit tricky or problematic)
      • Pushes them out
        • Hopefully with some kind of review step...sorry I need that
    • Goals / use cases
      • make small updates easily
      • publish new material easily
        • intersects with blog/mastodon features maybe
    • Issues
      • requires bringing publishing machinery into goddinpotty itself (rather than bash scripts)
      • requires some kind of demon machinery (probably easy)
      • how to avoid putting out half-baked stuff with inconsistencies (eg links that don't work)
        • updating ancillary stuff (graphs, new images)
      • seems like a kludge on a kludge and don't you want to write something new from scratch that is not a fucking hack? goddinpotty/dynamic-real
from goddinpotty tutorial
  • A guide to publishing your own site using Goddinpotty.
    • State: in-progress.
from Mastodon
from my writing and publishing stack
  • Roam was somewhat deficient in the publishing department, so I rolled my own publishing software Goddinpotty.
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/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 IAnnotate Conference
  • for all notes are part of conversations Goddinpotty not even a little conversational, sigh.
from RoamAway
  • Internally, this is some code from Goddinpotty packaged up with its own workflow and UI. A hack !
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/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.
    • Sidenote are specified with a special syntax that I probably can't reliably quote here, hm, let's try it:
      • {{sidenote Whatever fancy stuff you like, including links [[nebulosity]]}}
    • An older version of goddinpotty used a different way of specifying sidenotes, using a separate block and block-reference, but that proved unwieldy and the feature has been removed.
from goddinpotty/TODOs
    • Done tasks archived at goddinpotty/DONE
    • Random small issues

      • TODO external links should look more different
      • Testing \(foo\)
      • DONE Index stopped working on new laptop, why?
        • Just dates -- problem was now :block/file props are relative, they were absolute before I think
      • Index pages don't do reverse sort, which makes me realize, I should use ag-grid
      • DONE Build deletes the current version, which is a PITA when trying to iterate, Easy enough to generate in a temp directory.
      • Should be possible to get block-level histories using git, albeit awkward and kludgey
      • Should have block level links, I often want to point somebody to a quote or whatever
        • Gave blocks an HTML id, but in a way that isn't consistent across reindexing, argh.
          • This btw makes all kind of gratuitous changes, kind of fucks up the git strategy.
        • UUIDs could be used, they are kind of huge though. A big cost for every block.
        • Maybe limit to top-level blocks? Seems arbitrary.
        • Alt: have some kind of defined local block id.
      • 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}}
      • TODO external links to pages with slashes look like shit, because my clever trick is not so clever:
        • Need a better solution, like external names should have the real slash...this kind of stuff is such a PITA
      • 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

      • goddinpotty/reblogification
      • DONE 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.
      • Some kind of feed for subscribers
        • eg, post link to changes every week to a Twitter account
      • 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.
          • DONE 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
      • 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/dynamic-real
    • Blocks just live in a single graph database
    • Views are generated from this db on the fly, including private/public decision making
      • Editing view
      • Published views (public / private) etc
    • Hm. Too simple? Seems like I want that kind of ultra-simple infrastructure.
      • Yes. Something that you can build application-level stuff on top of (like Noodge).
    • Issues/submodules
      • Database – ez, just use Datomic or sqlite or something. Object format, ditto. Minimal, run-time extensible.
      • API – should be one and UI should use it. Goal: be able to edit blocks from Emacs or other alterantive if necessary
      • UI – the hard part. Duh.
      • Naming and search – need to be done at a pretty basic level. Some kind of structured or hierarchical namespace I suppose is useful, if annoying.
from goddinpotty/map
    • Problem: hairball maps are useless
    • Solution: actual map, where
      • items have stable location
        • so the thing is actually navigable like a real map
      • things are laid out so they don't overlap
      • links thus de-emphasized, but could highlight on mouseover
    • MVP
      • pages need stable graphic parameters (location, size, maybe color or icon to distinguish)
      • rendering: just 2d shapes. But could extend to fancier graphics someday
      • layout: interesting algorithmic problems, but need to find some minimal solution.
        • force-direction (with tweaks)
        • overlap prevention
      • needs some kind of editing capability, not sure how to do that cheaply (export and import to a drawking program I guess).
      • slack
    • 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)
from goddinpotty/TODOs


30 Oct 2021 02:15 - 17 Jun 2023 08:29
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