• Working Copy

    An iOS app that provides version control over folders using the Files API. This provides a git workflow across multiple apps where each app can directly modify files and then can be sync’d with GitHub.


  • 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.


  • Visitor Pattern

    A pattern for traversing a tree of heterogeneous objects. Decoupling the algorithm for traversing the tree and the code operating on the objects leads to a much cleaner (and easily extensible) code.

    Example usages include traversing an AST, the AST does not need to be changed to accomodate new code that is operating on it e.g. linters.


  • 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.


  • Silurian Hypothesis

    Posits that there were previous civilizations on Earth before humans. Some scientists are conducting research to see if we could detect changes in things like atmospheric carbon, plastics, and nuclear fallout since it’s highly likely no other physical evidence would exist e.g. buildings and artifacts.


  • Literate Programming

    Intertwines documentation and source code which emphasizes the need for code to not only be understood by the compiler, but also by future engineers trying to reason about your code.

    Introduced by Donald Knuth in his book Literate Programming written in 1984 and implemented in the CWEB tool.

    Literate programming with org-mode

    Here’s an example of weaving the execution of code into this document which exports both the code block and output:

    import random
    print random.randrange(0, 100)
    
    54
    

    To tangle this code such that it exports to a source code file we can add the following heading to the source block tangle: hello_world :exports none which will export the code block to a file hello_world.py.

    Read more about literate programming in org-mode using org-babel