• Good Magic and Bad Magic

    Good magic just works. It’s invisible and you quickly forget that it’s there.

    Bad magic works sometimes. It’s mysterious and hard to understand.

    Good programming abstractions are the right kind of magic. You can depend on them and build on top of them with confidence.

    Bad programming abstractions are the wrong kind of magic. It’s equally a mystery when it works as when it doesn’t work. They’re leaky and you end up spending more time cleaning up after the magic than benefiting from it.


  • Airplane Test of Programming Languages

    The airplane test measures the (often binary) ability to write code in a specified programming language while secluded on an airplane with no internet access. It shows the programming language’s capability to unblock the programmer and is an indicator of productivity.

    Typed languages (such as rustlang) fair better because it’s easier to reason about code and jump to a definition when you need to understand what’s going on. However, other contributing factors include the legibility of error messages and stack traces, quality of documentation, quirks in the language, tooling, and whether it is ‘batteries included’. In this way, typed languages can also fail the test (e.g. TypeScript’s quirks with interoperating with JS libraries and Webpack generally requires access to StackOverflow).


  • Website Navigation Does Not Lend Itself to Discovery

    Modern websites rely on strict hierarchy of pages to help users navigate. This uses central pages to send users back to once they’ve completed reading an article. However, this rigidity does not optimize for serendipitous discovery and many important pages on a website can be inadvertently orphaned (either because it doesn’t fit neatly into a hierarchy or users don’t know to look for it).

    Digital gardens on the other hand eschew strict navigation and rely on hypertext linking to allow a wide range of paths to content in a self-directed way. This comes with a trade off of overall coherence between content nodes.

    Read ‘The limits of structure’ by East Gate.


  • Querying Stats From Org-Roam

    You can run queries directly on the org-roam database directly (it’s just a sqlite database) to get interesting stats about your Zettelkasten.

    The location of the database can be found by evaluating org-roam-db-location.

    Note: file names have the date embedded in it formatted as yyyy-mm-dd so taking a substring is the easiest way to group by dates.

    (Updated for org-roam v2)

    Total notes (not journal entries)

    select count(*) from files where file not like '%journal%';
    

    Notes per year (not journal entries)

    select substr(files.file, 24, 4) as year, count(files.file)
    from files
    where file not like '%journal%'
    group by year
    order by year desc;
    

    Notes per month

    select substr(files.file, 24, 7) as month, count(files.file)
    from files
    group by month
    order by month desc;
    

    Links per note

    select substr(files.file, 24, 7) as month, round(cast(count(links.source) as real) / cast(count(distinct files.file) as real), 2)
    from files
    join nodes on files.file=nodes.file
    join links on nodes.id=links.source
    where links.type = '"id"'
    group by month
    order by month desc;
    

    Notes per day

    select substr(files.file, 24, 7) as month, round(cast(count(files.file) as real) / cast(count(distinct substr(files.file, 24, 10)) as real), 2)
    from files
    group by month
    order by month desc;
    

    Words written for a given year

    Counting words written in org-roam


  • Reverse Chronological Content Took Over the Web

    The majority of websites of the ‘old web’ (1990’s) were hand crafted, highly customized places where creators acted more as librariansβ€”carefully maintaining a table of contents and some evergreen content. This all changed with the introduction of Moveable Type, a CMS that took the labor out of publishing content and democratized a minimal, organized, aesthetic.

    As a result of Moveable Type, reverse chronological content (blogging) became the majority of the web. This stemmed from the constraints of the software (only one way to sort content), but the effect was profound. A table of contents was replaced with a feed of content. It was far easier to publish new content so that’s what people did.

    See also:


  • Reflections on Writing 500 Notes

    I’ve now written 500 notes and roughly 84,000 words since May 25, 2020 in my Zettelkasten. Here are a few thoughts and observations.

    I started out writing too many notes that were definitions. For example, I would come across an interesting word or concept I want to recall later so I cut a new note for it. The problem with accumulating notes like this is that the collection becomes more of a dictionary which requires rote memorization to be put to use. I have a hard time remembering those notes and connecting them to other notes.

    Compared to definitions, notes written as a claim are far more interesting and useful. I find it avoids the wikipedia feel and leads to more creative ideas. I still write some definition notes, but they tend to serve as pointers to a group of related notes via backlinks.

    I’m certainly writing a lot moreβ€”adding notes at a rate of 1,000 per year[0]. I’ve built a durable habit of writing every morning[1] which I look forward to each day. I can see the daily progress because publishing notes visualizes growing knowledge.

    However, I’m not continuously synthesizing these notes into other durable artifacts like essays. There’s some amount of reaping and sowing that I’m missing. I’ll need to make this an explicit goal and set aside some morning writing time to work on essays occasionally.

    I have a better mental model for connecting content by adding links as if I am curating a path along a garden. The amount of links per note has noticeably increased over time[2]. I’m also better at spotting individual concepts and ideas so I can appropriately cut a new note. This leads to better connections because it’s easier to connect more specific things together than more general things.

    Publishing notes daily has resulted in twice the traffic to my personal site from search engine traffic. The effects of note blogging on SEO make it so I’m constantly extending the long tail of keywords the site is ranked for. This creates a virtuous cycle because my interests are wide and niche which adds more unique keywords which draws more impressions and clicks.

    I’ve evolved my workflow for writing and publishing over time to make it easier to contribute across devices (which I wrote about in Zettelkasten, Emacs, and Creative Thinking). It’s complicated, a bit clunky (need to constantly push/pull from a git repo), and would be difficult for others to adopt. This led to me starting a side project to focus more on note blogging and building tools that combine the benefits of a Zettelkasten with publishing.

    Finally, it takes some time to ‘get it’. I read somewhere that the benefits of note taking like this don’t kick in until around 500 notes and there is some truth to that. I have a much better idea of what I want to get out of it and I’m seeing evidence that my collection is like a second brain that I can consult when doing my own thinking. Pretty neat!

    [0] Notes per month

    Month Note count
    2020-11 25
    2020-10 88
    2020-09 73
    2020-08 110
    2020-07 108
    2020-06 86
    2020-05 13

    [1] Notes per day

    Month Notes per day
    2020-11 2.88
    2020-10 2.83
    2020-09 2.51
    2020-08 3.54
    2020-07 3.48
    2020-06 2.96
    2020-05 3.25

    [2] Links per note

    Month Links per note
    2020-11 2.57
    2020-10 2.20
    2020-09 1.79
    2020-08 2.17
    2020-07 1.90
    2020-06 1.86
    2020-05 2.50

    See querying stats from org-roam for how these queries were made.


  • The Garden and the Stream

    Streams are a metaphor for the majority of the Internet we interact with today characterized by time-ordered events that require context to understand.

    For example, try going back to a tweet from a few years ago and try to glean it’s full meaning. It requires contextβ€”when did it happen, what do we know about the author, what was it in response to, etc.

    Facebook, Twitter, Instagram are the pinnacle of the stream. Content is an argument (not even a dialogue, typically a nameless ‘them’), real-time reactions, and primarily ephemeral.

    Gardens are different. There is no singular relationship of elements (i.e. a heterarchy) in a garden, no strict hierarchy or chronology. It emphasizes the reader (or creator) to find their own connections between objects in and draw their own path.

    For example, content in a digital garden is evergreen and evolves over time. There are many links between content the creator places to connect meaning and generate context over time. Adding content and connections extends the meaning of what already exists without needing to rewrite it.

    As a counter example, consider a blog post. It’s a snapshot in time of a collection of ideas strung together. It’s unlikely to be updated and extended as the author acquires new information. They could write a ‘part 2’ sequel, but this introduces a new strict hierarchy of ideas and requires reading the previous parts to fully understand the context.

    Read the essay.

    See also:


  • Effects of Note Blogging on SEO

    Since I started publishing my Zettelkasten notes, I’ve noticed a large change in overall search engine traffic. My personal site and notes have doubled in impressions and clicks. Notably I receive more impressions from search engine visitors than I do from tweets from my Twitter account.

    I’ve noticed some compounding effects that lead me to believe these effects will continue. As more notes are published along a wider range of topics (I’m naturally curious!), notes rank for more keywords (a very long tail), which increases impressions and clicks which further improves ranking and page authority. Even better, this content is evergreen once it’s indexed by search engines and increases in value over time. This is the exact opposite of tweetsβ€”most impressions happen in the first few hours and is unlikely to be found again because they are primarily consumed in a stream.


  • Convenience Is King

    People tend to take the path that requires the least effort to satisfy a need or want. You can often predict people’s behavior by merely understanding the convenience of each option.

    See also:

    • Atomic Habits: you can improve the likelihood of forming a habit by making it easier to take an action (e.g. sleeping in your workout clothes so you don’t need to change to do a morning workout).