- projects hosted on GitHub
- TBNL: Android system hacking in Clojure
- customized, self-contained config for the awesome window manager
- helper scripts for building/testing the Android Open Source Project
- helper scripts for building/testing the Linux kernel
- Common Lisp port-based server manager for, e.g., swank and hunchentoot
- Common Lisp utility collection
- development environment configuration for Emacs, Vim, SBCL, tmux, etc
- teaching data structure & algorithm with Common Lisp
- teaching notes
- PhD Comics downloader
- Wi-Fi access point on laptop
- fix Nikon DSLR SD card error
- install & use Perl modules as non-root
- Arch Linux setup II
- Arch Linux setup
These are some ideas I find useful in my experience.
- Language and bottom-up programming.
... we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.Abelson, Sussman & Sussman, Structure and Interpretation of Computer Programs.
As well as writing their programs down toward the language, experienced Lisp programmers build the language up toward their programs.Watching out for patterns vigilantly; abstract liberally; dissect a problem into a web of concepts in plain language, and implement the concepts and their interrelationship bottom up.Paul Graham, On Lisp.
all non-trivial abstractions, to some degree, are leaky.It pays off to know the underlying implementation that supports the abstraction, in case the abstraction leaks and is manifested as performance regression or, worse, bugs.Joel Spolsky, The Law of Leaky Abstractions.
- The Software Tool, or Unix, philosophy,
Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
- In modern programming, programming language is only part (albeit an important part) of the equation for success; the familiarity with its libraries and the ability to wield them efficiently make the real differences, and the latter parts only grow with experience and reflexive internalization.
- Write to inform, not to impress. When we inform, we impress.