The way TypeScript adds incidental complexity to using libraries undermines the two most important values of using TypeScript and JavaScript. It makes it harder to use a non-typed library which adds friction to using the wealth of libraries available in the JavaScript ecosystem. It also makes the type system less valuable when you need to hack around poorly typed libraries or incorrect type definitions by casting to the any
type.
-
TypeScript Undermines the Value of the JavaScript Ecosystem and Static Typing
Published
-
List of Tools for Networked Thought
Below is a list of tools for networked thought I’ve come across:
Name Open source Self-hosted Publishable Athens Yes ? Roam No Yes (via public database) org-roam Bring your own org-export Obsidian No No Yes (via plugin) Logseq Yes No (but plans to) ? neuron Yes Yes Yes The Archive No No ? Notion No No Yes TiddlyWiki Yes Yes Yes Dendron Yes Yes Yes Silverbullet.md Yes Yes Yes
Published
-
Ease of Publishing Increases Disagreement
In traditional media, writers write and readers read. On the internet, publishing is nearly free and readers can easily respond in comments, forums, blogs, and so on. This leads to more disagreements merely because it’s easier to say something and people tend to get angry when they disagree on the internet.
See also:
- Paul Graham’s essay on How to disagree mentions this and is oddly prescient for being written in 2008
Published
-
We Don't Know What the Good News Is and What the Bad News Is
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.
Published
-
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
-
Kurt Vonnegut
This note does not have a description yet.
Published
-
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.
Published
-
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).
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
-
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