• Sushi Train

    Visualize your thoughts as a sushi train that constantly revolves around you with different dishes that represent the flavor of thought. Some are pleasant thoughts you take off the belt for awhile and then place back on it. Some are unpleasant thoughts that we hold on to and it’s difficult to put back.

    A useful model for mindfulness, we can observe our thoughts objectively as a sushi train constantly revolving. We can choose to put a thought down and pick up another if we can observe our thoughts.


  • Self-Compassion

    People tend to be more judgmental and harsher on themselves than on others. Applying compassion that you would have for a close friend, but to yourself is a powerful coping and support mechanism.

    Steps to self compassion:

    1. Acknowledging this is a moment of suffering, being mindful and not resisting what you are feeling.
    2. I am not alone, it’s natural to feel this way.
    3. What do I need right now? What would I say to a friend in this situation?

    See also:


  • Personal Note Taking Practice

    Knowledge work processes should be accretive (rather than ephemeral or ad-hoc). For note-taking, adding new notes should make other notes more useful and the accumulated knowledge should lead to new connections and thereby new ideas.

    I use a Zettelkasten-like system (org-roam) where notes are short and atomic, densely linked bi-directionally, and reviewed often to add more connections. Over time I hope this becomes a useful thought partner, helping me make new connections and formulate useful ideas.

    Tags provide light organization without imposing a strict hierarchy e.g. index for how I might want to retrieve this note in the future not a taxonomy.

    Certain tags have special meaning:

    • (draft) indicates a note that isn’t complete and not ready to publish
    • (private) should not be included in public notes
    • (journal) my reactions and feelings which can provide more context to how I was thinking about certain notes

    Notes are published (except when tagged as private or draft) to notes.alexkehayias.com. Care is put into making the notes pleasing for me to read and invite exploration of links and backlinks. It also adds a useful friction that forces me to understand what I’m writing better since it’s public.

    As an interesting side-effect of using git for version control, when I publish new notes the git diff gives a good indication of how many new connections I’ve made with each new note added (untracked files to unstaged modified files).


  • Knowledge Work Should Be Accretive

    Most knowledge work is ephemeral–we write documents, emails, code and then it’s done. The ways in which we work don’t tend to compound or accumulate over time. This makes knowledge work lossy. A good example of this is note taking–we tend to never look at notes once they are written.

    Ideally, all work we do builds on and increases our capacity for new ideas. Systems we put in place should allow us to add to and extrapolate from our knowledge.

    See also:

    • Andy Matuschak’s note where this idea came from (actually I heard it at talk he gave)
    • Zettelkasten is a note taking system which attempts to build up a ‘conversation partner’ by accumulating notes with a dense set of connections thus accreting knowledge systematically.

  • Three Tribes of Programming

    Describes the differences between programmers by grouping them into three buckets–poets, hackers, and makers.

    • Poets view writing code as a form of artistry and seek elegance.
    • Hackers view code as an extension of the machine seeking oneness (performance, correctness) with the hardware that executes the program.
    • Makers view code as the means to an end for building for other people.

    The dimensions in which these different camps diverge is in 1) source code 2) execution of the program 3) correctness and 4) UI. For example, makers want code to be clean because that makes it easier to change and iterate whereas poets want their code to be as concise and expressive as possible.

    Read the blog post


  • Formal System

    A formal system consists of axioms (statements that are true) and rules (how axioms can be manipulated). New axioms can be deduced from other axioms and rules. You formalize a system when you start defining these statements and rules.

    A formal system is consistent when you can’t simultaneously prove and disprove an axiom. An inconsistent system would not be very useful e.g. a weather forecasting system that predicts it will rain and not rain at the same time.

    A formal system is a complete system when all statements in the system can be proved or disproved thereby allowing you to know everything about the system.

    See also:


  • EBNF

    A context-free grammar can be described using Extended Backusโ€“Naur form (EBNF) notation. This higher ‘metasyntax’ describes how another grammar should be parsed. This makes it a useful portable format for multiple programming languages to parse the same thing (if your system can read EBNF grammars it can parse a multitude of other grammars).

    For example, this EBNF loosely defines org-mode syntax:

    <DOC> = preamble heading*
    preamble = [title] [author]
    title = <'#+title'> text EOL
    author = <'#+author'> text EOL
    heading = level heading-text content*
    <EOL> = '\n' | '\r' | #'$'
    <SPC> = ' '
    level = #'\*{1,}' SPC
    heading-text = [status SPC] !status #'^.+'
    text = #'^.+'
    <content> = (EOL (EOL | heading | !level text))
    todo = 'TODO'
    done = 'DONE'
    status = todo | done
    

    See also:


  • Modelica

    A modeling programming language and environment that provides a way to express, simulate, and optimize systems (usually physical).

    Most of the time, writing an algorithm is to write a specific solution to a certain problem. When doing mathematical modeling, we are collecting data from a simulation of equations that describe the problem.

    See also:


  • Gรถdel's Incompleteness Theorem

    A formal system (one that is consistent never yields a false statement) can not also be a complete system (containing all true statements)–there will always be statements that are unprovable yet true (i.e. G-statement).

    The proof is derived from Principia Mathematica (PM) logic looking at number theory. You can build new theorems from axioms that are true infinitely but, because it is infinite, it can not contain every true statement.

    That means there is always some truths that can’t be captured by a single system no matter how elaborate or seemingly robust. That’s why it’s important to have multiple systems and acknowledge you will always be limited in understanding the fullness of anything described by a formal system.

    See also:


  • Graphviz

    A declarative language for describing diagrams and an environment that renders .dot files into images. Since the diagram is written in code, it can be checked into version control and updated later which is much easier than a team need to use a separate (usually commercial program) to share a file to make updates.


  • COVID-19

    A corona virus that became a global pandemic. The number of cases has surpassed 2MM and over 500 thousand people have died (at time of writing).

    Besides a health crisis, COVID-19 also created an economic crisis as countries shut down and placed restrictions on gatherings of people and whether businesses could operate.