Writing is a useful skill to develop. It can help you discover what you think,
develop judgment, and become a critical thinker. Writing can also be pleasurable
in itself. You can feel the ownership of the results of your writing. 
 AI is there as a sharp contrast to us as beginners of writing. The ease with
which AI generates plausible and polished text is attractive. The pressure…

 If a thing is worth doing, it is worth doing badly. 
– G.K. Chesterton 
 This quote shows that we need room to do things badly. 
 I read this quote in a book about writing essays. So I thought how am I going to
brainstorm about this idea. I opened TLdraw and wrote the quote in a rectangle.
My next thought was to use a different tool, with which I could brainstorm…
I want to get more value from my Zettelkasten. When you see the notes as being
part of a tree, then there are three directions to go: Up, Down, and Horizontal.
Each direction has way to get more value by finding the questions and answers
related to the current card. 
 Down is the easiest way to go. When you go down this means that you ask a
question about the current card. Then…
Splitting branches of notes too high up, makes installing notes more difficult. 
 Problem 
 I have a branch “1050 Critical Thinking” and the card has a definition. If I
want to add another definition for critical thinking, I need to create a card
“1050A Critical Thinking” with the new definition. 
 Now I need to think about installing new cards in the…
Ever stare at your notes and wonder how to develop them further? I was reading
 The Pyramid Principle and it clicked for me. The book mentions the
top-down approach for writing articles. You start with the main idea and then
build up the argument. It seems to me that the Zettelkasten is also a good fit
for this approach. 
 The Pyramid Principle uses inductive arguments. This…
We version our code with Semantic versioning . Semantic
versioning adds structure and rules for working with versions. Semantic
versioning promises to solve the dependency hell problem. According to the
website, dependency hell is that sometimes dependencies are specified too
loosely, compatibility is assumed with too many future versions. When the
dependency is too strict, you…
When I take notes, I look at how I work and the workflows. I try to find how to
take more and better notes. This makes me feel productive and competent. But
this meta-work is also what keeps me safe. Why do I keep choosing meta-work
over real work? 
 When I’m productive on the safe meta-level, I avoid the risks of the practical
level. When I form and publish my opinions I…
People take notes to remember and learn from what they read. They highlight the
sections that interest them and comment on those notes. However, even when we
take notes about our opinions about these highlights, we find ourselves with a
big box of notes that don’t add to our lives. The notes exist as dead storage
and gather dust. 
 How to prevent your notes from gathering…
AI tools like ChatGPT, Claude, and Gemini have changed how developers solve
problems. We use them to debug complex issues, explore architectural patterns,
and generate boilerplate code. These tools have become as much part of our
workflow as Stack Overflow or documentation searches once were. 
 However, a troubling pattern has emerged in how we present AI-assisted…
I read the book The Pyramid Principle by Barbara Minto and specifically a
section about how build to a pyramid structure from the bottom-up. She says that
starting from the bottom-up is more difficult. I think that it is more difficult
to start from the bottom, because you don’t have the raw materials. 
 The raw materials the ideas to build the structure. When you instead…
TIL how to use Gemini to write a template for TIL. It was possible, but I didn’t get the result I wanted.
So in the end I used the templates from the other sections.
The succ function can be called prod(max) times. The function can also be
written with a carry or overflow “bit”. Then when i == len(counter) the return
value should be counter, True . The return value of the last line,
 counter, False . 
 def succ ( counter , max ): 
 i = 0 
 counter [ i ] += 1 
 while counter [ i ] == max [ i ]: 
 counter [ i ] = 0…
In the video Build the Hundred-Year Web Service with htmx Alexander
Petros talks about how to build a hundred-year web service. He talks about how
when you want to build, use and maintain a web app in a hundred, you should not
have to ask permission to deploy your app. 
 I saw this video a few weeks after my apps were removed from Google Play Store.
I had not made the changes…
Objects are three bit binary numbers. Morphisms exists when you can flip some
bits from 1 to 0 (but not the other way around). 
 digraph G {

'000';
'001';
'010';
'011';

'100';
'101';
'110';
'111';

'001' -> '000';
'010' -> '000';
'100' -> '000';

'011' -> '001';
'011' -> '010';

'111' -> '101';
'111' ->…
Below is a simplified chat bubble for an conversation with an LLM. 
 This template is written in Templ and uses htmx to fill the
chat bubble with incoming content. The incoming content is sent with SSE using
the v2 version r3labs/sse Server
Sent Events server. This version supports SplitData which makes it easier to
sent the HTML for htmx. Adding a <span></span> around every…
For a simple note-taking application I wanted to try out embeddings and
similarity search to find similar notes based on the content. In this post I
will show how you how to use the
 gonum.org/v1/gonum/blas/blas32 
package to calculate with embeddings. 
 Get your embeddings 
 When I started I used the OpenAI embeddings and saved these in the sqlite
database with the…
It seems I’m sentimental. I have difficulties with Archiving or Deleting
documents from the Readwise Reader Inbox. I’m always looking at the conflicts in
my live. and this seems to be one of them. 
 The problem in Readwise Reader is that I want
to remove, or archive documents. But sometimes these documents contain something
that I want to act on. If I Archive a…
The last few weeks I have been looking at Theory of Constrains (TOC). Today I
noticed that with note-taking there is this conflict between just taking notes
and taking notes to solve problems. 
 TOC is a management philosophy that emphasizes the identification and management
of constraints that hinder an organization’s ability to achieve its goals.
Instead of…
Necessity assumptions 
 Why is it necessary? 
 
 Our attention is limited . 
 There is a gap between how well we make decisions and how well we can
make decisions. 
 We want to make better decisions to be able to live a meaningful life. 
 
 Strategy 
 What for? 
 We want to avoid the following 5 decision mistakes. 
 
 Waste your limited attention…
The template 
 Title 
 The title of the strategy (and tactic). 
 Necessary assumptions 
 Why is this necessary? 
 Strategy 
 What for? 
 Parallel assumptions 
 Why is it possible? Why is it difficult? 
 Tactic 
 How? 
 Sufficiency assumptions 
 Why is sufficient? 
 Resources 
 
 The TOC approach to Strategy and Tactics 
by Eli…
A nice way to use the goal tree is to use a color scheme to show which goals are
already fulfilled and which are not. A schema that can be used is red, orange,
green. 
 
 
 
 color 
 when 
 
 
 
 
 Red 
 The condition is not fulfilled 
 
 
 Orange 
 The condition is partially fulfilled 
 
 
 Green 
 The condition…
A Goal Tree consists of nodes and arrows. The nodes are your goals, critical
success factors and necessary conditions. The arrows are the logical
connections. These arrows connect goals with the sub goals. 
 An arrow can be read as “In order to have X, we must have Y”. In a small
diagram, this looks like: X ← Y . 
 You start with the Goal. The Critical Success…
To improve a Goal tree , you need to examine the
items in the tree. Using a technique similar to five why’s you can improve the
goal tree. 
 Ask the question: why do you need it? 
 Example: garden shed 
 Let’s look at the goal of “Garden shed”. Why do I need a garden shed? Because I
need to store my garden tools. Why do I need to store my tools? I…
In Jira, an issue is a task and a note at the same time. The issue is a place to
focus the information to the point where you can complete some piece of work.
These are four obstacles to clear thinking. 
 Reality is complex 
 
 Reality is complex and you need complex solutions to solve problems. 
 Eli Goldratt defined the Principle of Inherit Simplicity. This means that
reality is inheritly simple. Because of this simplicity, conflicts can be
resolved using the following steps. 
 
 Clarify the conflict 
 Surface the…
The Theory of Constraints talks a lot about conflicts. Conflicts are what keeps
us from becoming better. On part to becoming better at TOC is to know when you
are in a conflict. There are certain words that can help you to notice a
conflict. 
 TOC often talks about the large conflicts. These are the conflicts that most
people have a problem with. When you dissolve these…
This current website is built with Hugo. I wanted to try to build my own theme
with Tailwind. With Hugo it is not very easy to use Tailwind. The biggest
problem I found was that Hugo does not reload CSS with livereload.
The Current Reality Tree is a sufficiency tree shows (part of) the current
situation of a system. It is used to model how causes and effects lead to
certain undesirable effects (UDE). The arrows in the tree show which cause leads
to which effect. 
 When there multiple arrows from a cause to an effect, then each cause creates
the effect by itself. Removing one of the causes will…
These are some of my thoughts about Markdown in Logseq. In this note I try to
find the assumptions behind the conflict. 
 This is thinking I did on my and is not associated with how Logseq will work now
or in the future, this also does not represent goals of the Logseq team. This is
what I think the goals could be. 
 The conflict 
 

 
 
 Goal tree
…
With a setting, a conflict between two options becomes a choice (or compromise)
for the user, instead of a situation to be solved by the designer. The conflict
itself has not been evaporated. 
 The checkbox to show or hide brackets in Logseq is an
example of this. I use Logseq as an example, because it is the software that I
use daily and like a lot. 
 The conflict 
…
I often see people searching for the perfect structure or method to use a tool
like Logseq. You don’t need that. You only need a simple structure and the will
and habit to fill daily notes pages. Logseq does not need much structure to
become useful. And when you use it more, it becomes even more useful. 
 The daily note page makes Logseq powerful without the need for much…
I found a piece of code and algorithm that makes it possible to collaborate
online on tree structures. I have been using Logseq 
for the last few months and this algorithm seems to be a way to make
collaboration on an outliner possible. 
 Evan Wallace described this
algorithm . The page
also includes a demo application. I have rewritten this demo application to
 Go and…
I started with Digital Ocean apps yesterday to try out a new static website. I
found that it is not possible by default to have redirects. So I switched the
platform to Netlify. It is possible to add redirects there.
In the beginning my website blog was generated with a Ruby app, that I wrote
myself. Later I rewrote that app in Perl. It used the same file structure.
Today I converted my files to a Hugo site, by copying the
files and adding YAML front matter. With Perl this is really easy. See
 convert.pl . 
 The index.yaml contains the title and date of the blog posts. Each $doc…
I was always interested in the Year in Review posts from people. It looks like it is
something that you can’t create after the fact. You need to keep some
notes, and perhaps log data about the things you did. Some people keep count
of the number of emails sent and received or kilometers traveled. After the
fact, these kinds of details are rather hard to come by. 
 To make…
Ekster is a Microsub server. As far as I know Ekster was
the second implementation of a Microsub server. 
 Microsub is a protocol for feed reader applications. Ekster fetches web pages
and feeds and gathers the entries into channels. A channel contains multiple
feeds, these feeds are combined into a timeline. 
 Ekster can find entries from pages that are marked up with…
Earlier this year I started to rebuild this website to work better with the Indieweb. At the same I build a new website P83 with Indieweb support from the start. 
 This website is generated from static files with a system that I created the
first time when I started writing in the website. Not much has changed, except
that I some point a few years ago I rewrote the whole system in…
This week I’ve been writing a WebSub hub. It’s server program that receives
subscription and publish requests and sends notications to the subscribers
when a website changes. The website itself sends a request when the website changes.
This way the subscribers know when to update their feeds. 
 Implementing the server is quite simple, especially with the help of a…
Sometimes you need to get a lot of information from the database and you need it fast.
The way to get this information normally would be to use the Magento collection for the model.
It would look like this: 
 $collection = Mage :: getModel ( 'customer/customer' ) -> getCollection () 
 -> addNameToSelect () 
 -> joinAttribute ( 'billing_city' , 'customer/city' ,…
XML lister is a small program that lists the elements, values and
attributes of XML files. 
 <?xml version="1.0"?>
<layout>
 <default>
 <reference name="root">
 <reference name="content">
 <block name="product.info">
 <action method="test">
 <param>test</param>
 <param2>test2</param2>
 </action>
 </block>
 </reference>
 </reference>
…
XML Starlet is a program that makes transforming XML documents really simple. 
 The command that you need to transform an XML document is the following. 
 xmlstarlet tr [ <options> ] <xsl-file> { -p | -s <name> = <value> } [ <xml-file-or-uri> ... ] 
 The XSL file that transforms a document to itself is this. It copies all elements, attributes and texts.
We can extend this file to…
I don’t update my DNS records often, but when I do I like these records sorted. 
 A DNS record consists of the following fields: domain name, type and prio (for
some types). I use these fields to determine the order of the records. That is
also the order in which these fields should be ordered. 
 The first insight I had about sorting domains was that the domain names…
Last week I wrote a small function in Perl that rotates and array to left. 
 The function takes the item from the front and appends it to the back. 
 # precondition: @list >= 1;
sub rotate_left_by_one {
 my $ar = shift;
 my $item = shift @$ar;
 push @$ar, $item;
 return;
}
 
 After calling this function as many times as the length of the array, it
leaves…
Google released the PDF code of Chrome just a few days. I took a look at it.
This file ( core/src/fpdfdoc/doc_vt.cpp )
is an example of how the code looks. 
 Sometime later it dawned on me that this code is built out of only low level
pieces. There are almost no algorithms extracted to functions. 
 An example would binary search. There are five copies of binary search…
I always forget what strict weak ordering means, but it’s quite simple, actually. 
 My explanation is based on the Programming Conversation of last week and I hope
this will help me remember the next time I hear about this. 
 Let’s start with ordering. A relation is an ordering if it is transitive. 
 ordering --> for all a, b, c: r(a, b) and r(b, c) => r(a, c)
…
In an article about creating a column layout I found the following two lines of code: 
 var min = Array.min(blocks);
var index = $.inArray(min, blocks);
 
 This first finds the minimum value in blocks and then the index of that
value. This combination of lines is very strange. Array.min already knows the
index of the minimum element and throws it away. Then the programmer…
I was reading the notes on programming PDF and found a discussion about
writing min and max functions for multiple arguments. I didn’t what to use this for.
Also there was a discussion about stability. Stability is when you leave
elements in the same position when they’re the same. This seems to be about
sorting. 
 At the same I was implementing a Pinterest like…
In the previous post I showed a
playlist of presentations by Alexander Stepanov, the creator of STL. In these
videos he talks about algorithms and data structures (written in C++).
This principled explanation of programming makes a lot of sense to me. And has
me take a renewed look at C++.