In Shape of Stories, Kurt Vonnegut discusses story arcs as peaks and valleys from good to bad. It reveals that we don’t know enough about real life to judge whether something that happens is a good thing or a bad thing. He uses Hamlet to illustrateโthroughout the story each event is neither good nor bad, despite the tragedy (and murder) Hamlet and the world appear no better and no worse.
-
Shape of Stories
A lecture from Kurt Vonnegut about how to analyze and critique fictional stories. By graphing the plot along two axes, Good to Bad and Beginning to Entropy, you can visualize the story and compare their shapes to other stories. It also shows that stories seldom tell the truth that we don’t know what the good news is and what the bad news is.
Watch Shape of Stories via YouTube.
See also:
- Story telling is also important for business writing. The Minto Pyramid Principle helps deliver the message, but SCQA could also be thought of as the same axes as the shape of stories.
Published
-
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.
Published
-
The Navigation Problem
This note does not have a description yet.
Published
-
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
Published
-
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:
- How the Blog Broke the Web by Amy Hoy which discusses how blogging caused the end of the ‘old web’
- The Garden and the Stream talks about the Stream as replacing topology (old web) with serialization (blogging, social media)
Published
-
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.
Published
-
On the Modern Web, the Absence of Recent Activity Greatly Diminishes Value
Due to the consumerist nature of the modern web, we expect a perpetual stream of activity from web content. For example, going to someone’s personal blog and seeing the last post was 2 years ago leaves the impression that it is not relevant and abandoned so it must not have been that good. Another example is open source software. The dreaded ‘Still alive?’ issue implies that the value we assign to something we can consume on the internet is proportional to the frequency it is updated.
See also:
- Reverse chronological content took over the web shows expectations of perpetual activity was not always the case
Published
-
Adding Dates to Content Provides Contextual Value Only When the Content Is Not Evergreen
Adding dates to content like a blog post provides value when the content can best be understood by the relationship with when the content was created. Otherwise having a ‘Posted on: yyyy-mm-dd’ does little more than to signal there is activity here and that you are the kind of person that writes regularly.
Evergreen content does not need a date to be understood and it’s context is derived by the content around it (content as topology rather than content as serialization). In fact, a heuristic for telling if a piece of content is evergreen would be to remove the date and see if it still makes sense to someone in the future.
See also:
- Reverse chronological content took over the web talks about the pitfalls of websites defaulting to a single sort order
Published
-
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.
See also:
Published
-
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.
Published
-
Digital Gardening Is a Grander Vision of Zettelkasten
Digital gardening is a superset of Zettelkasten principles applied to public content. The ethos of gardening is more free form and doesn’t emphasize the experience of the visitor. The reader of a digital garden would benefit from Zettelkasten principles such as atomicity (one concept or idea per note). Content in digital gardens should be structured at the leaf nodes for a more useful visitor experience.
Published
-
Examples of Digital Gardens
Examples of digital gardens I’ve come across:
Published
-
Digital Gardening
This note does not have a description yet.
Published
-
Pre-Compressed Brotli Files Are Smaller Than Compression at the Edge
You can achieve better compression ratios resulting in significantly smaller file sizes by pre-compressing files as part of the deployment process. That’s because brotli compression can be somewhat resource intensive, so edge computing tends to dial back the amount of compression to compensate.
Published
-
Loading a Public Roam Research Note Requires 5.59MB of Assets
Loading a ‘Public Database’ Roam Research note takes 1.65 seconds and 5.59MB of assets.
Subsequent note loading is faster so it looks like the majority of the weight comes from downloading the application the first time.
Published
-
Brotli Compression Makes Static Website Assets Significantly Smaller
Brotli is a compression algorithm developed by Google that is supported by all modern browsers. It can compress files more than gzip (usually ~20% smaller) and seems to better compress large JavaScript files. In my local tests with brotli compression set at 11 a 1.2MB js file was compressed to ~260KB.
This can help make large JavaScript bundles smaller and counteract js toolchains trading off ease of adding dependencies for bundle size.
Published
-
Frontend JavaScript Toolchains Trade Off Ease of Adding Dependencies Over Bundle Size
Modern JS toolchains like
npm
andwebpack
optimize for ease of adding third-party libraries over keeping bundle size (and page bloat) small.For example, using
aws-sdk
by default you end up including the entire library which is a few MB. There are numerous bugs in trying to import parts of the library despite claims of modularity. I needed to find the right tsconfig setting to import it in a certain way, then hack around a bug with importing the Lambda client which involved changing the Webpack configuration to resolve theutil
module. The default is bloat and requires large effort to reduce bundle size making it unlikely people will do it (convenience is king).
Published
-
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).
Published
-
The Complexity of AWS Lambda Stems From the Need to Internalize the Runtime Model
On it’s surface, AWS Lambda seems simpleโit merely invokes a function with some arguments. However, the complexity is deceptively high. This is best highlighted when something goes wrong.
Debugging can’t be done remotely so you need to rely on logging, which you need to get from CloudWatch (which is clunky in it’s own way). If you don’t have a log line in just the right place you need to do a full deploy which includes zipping all files that are needed to execute the functionโfor Node, that includes the entirety of
node_modules
which, even for simple things, can be 10s of MBs.You also need to contend with the async nature of Node. It’s easy to write your handler only to find that it runs, but doesn’t fully execute. Somewhere you are not awaiting a result and so an early return means the event loop is empty and the runtime thinks you are done. In one case, I could invoke the function locally and it worked just fine (using the
serverless
cli tool), but in Lambda it failed.Finally, the arguments passed in (an event and a context object) are themselves opaque. If you invoke a Lambda from a specific context, it may or may not include some authentication information when using AWS Cognito. You need to keep all of these details in your head, most of which can only be discovered by runtime failures (which I already mentioned are clunky to debug).
The overall feedback loop is slow (slowness begets more slowness) and difficult to debug due to incidental complexity.
Published
-
Humans Are Great at Accumulating Power, but Bad at Translating That Into Happiness
Throughout history, humans have shown incredible ability to acquire power (wealth, natural resources, technology, empires), but continually fail to turn it into increased happiness. For example, it’s unclear that modern humans are any happier than their nomadic ancestors from 10,000 years ago despite the clear progress in acquiring sources of power.
See also:
- Interview with Yuval Harari (author of Sapiens)
Published
-
People Forget the Other Half of the Saying, 'A Few Bad Apples'
A common rebuttal from police brutality apologists is that it is ‘just a few bad apples’ and therefore not all cops are bad. However, the complete saying is, ‘A few bad apples spoil the bunch.’ The toleration of the few undermines the integrity of the whole.
Published
-
Looking at the Screen Versus Watching the Movie
A metaphor for mindfulness, we can get caught up in the moment and swept up in our emotions and impulses (watching the movie), but if you can step back and recognize that it’s all light and shadow on a screen you can be reminded that everything arises in consciousness (looking at the screen).
Published
-
Heterarchical Note Taking
Notes can be organized and structured into heterarchies (nodes with multiple relationships without a strict hierarchy) by creating an entry note that encompasses other notes (a note of notes). In Zettelkasten, this is referred to as a ‘structure note’. This has the advantage of late binding, you don’t need to worry about the hierarchy of information up front and multiple associations can be created using the same notes (which would not be possible without duplication in a strictly hierarchical system).
Heterarchies provide a layer of abstraction over the constituent notes which makes it easier to make connections between areas of thinking. For example, when creating a new note you could review a structure note’s contents to spark ideas for how it might be related without doing an O(n) search through every note in the collection to see if there are connections.
See also:
- Structure notes provide a place to “hang ideas off of”
- Zettelkasten is a mind map where nodes are notes
Published