Hebi's Personal Wiki

It makes no sense to go through the long research again when I forget something, so I created this wiki.

1 The Workbench

It's ok to have something "just works", but it would be a sad story if it is something you extensively use. It might be because you are not aware of a better way, i.e. a cognition issue. Paul Graham had a Blub Paradox 1 about that.

Although I would definitely go for it if the lisp machines are still available, a Linux distribution also gets the job done. Since it is a workbench, you might want to consider ArchLinux because of the rolling release. In my mind, all other distributions are for specific purpose, like servers CentOS, Debian due that they are "stable" because they care so much about backward compatibility.

The POSIX standard is what makes linux and all versions of unix feel at home. docker creates machines to play with very cheaply.

For software, I use StumpWM as my X11 window manager because it is the tiling one written in lisp. When connecting to remote server, use Tmux for session management. conkeror used to be my default browser but I go back to chromium because the performance. I still hope to see (or make) a better emacs-integrated browser.

There seems to be less than 1% developers are using Emacs. Well, this is good, we want to way way way above the average 1.

2 Language

If the workbench is something we work on, the language is the tool we are using. There is probably also less than 1% developers are using lisp, well, the history from computing is only just more than half a century, there are plenty of time for people to realize they made a big mistake to deviate from the lost wisdom. The main lisp dialects are Common Lisp and scheme (Racket is my favorite). Clojure is based on JVM and the authors are advertising it a lot. Prolog is similar to lisp.

Haskell completes the part of a properly typed language. ML is strongly typed, impure, eager evaluation one.

It is beneficial for a 3rd langauge to be low level. The legacy C is small and elegent. It is a good start point if you want to learn serious compilers. C comes with C standard library. C is tightly related to Unix features, for example Signal Handling for C.

Some newer languages can be interesting, but I haven't got time to look into yet. Of course there are tons of new languages coming up, most of which is reinventing some small (and not so important) part of lisp. Those will not be documented for sure. For system programming, a recent alternative to C is Rust.

That's it, stop from here! That's all language you need. The following contents are just for a reference of old writings.

C++ is the language that achieve a good balance between performance and morden features. It even continues to offer many fancy features. C++ has a lot of libraries. Standard Template Library(STL) defines containers and its algorithms. The most functionalities not specified in the standard librareis can often be found in Boost. Some 3rd-party C++ Libraries that is small enough to put into one page. Pugixml is Data processing libraries for xml. Use Google Test for unit testing. Debugging using GDB, of course. Here are some C debugging techniques. Unix Programming Interface.

Java is dying for 20 years.

Scripting. shell concept and all shell utilities is specified in POSIX standard. awk and sed can make really elegent scripts for simple tasks. Regular Expression is very important in almost all unix scripting tasks. Moving to some more modern ones, I found python now is pretty easy to use thanks to the pretty complete python standard libraries and it python 3rd party libraries, although I'm stronly against using the stupid indent as part of syntax. R is very good at processing data, runs natively inside emacs.

3 Architecture

This section contains computer architecture (TODO), compiler infrustructure, as well as programming paradigms and design patterns.

The area of compiler is interesting and pretty hard. Some misc staff for real-world compiler implementation. make, cmake, autoconf makes the ecosystem of compilation. Profiling of you code by gcov, gprof. When building compiler tools for Program Analysis, LLVM and Clang toolchain can make it pretty easy.

Faminilar with Design Pattern when coding, and this can be learned best by doing refactoring. git is a preferred VCS.

4 Writing

Writing documentation, latex is fantastic. tikz provide the ultimate way to create academic figures. markdown is not recommanded from me. Instead I use Org Mode extensively. Doxygen generates good documents and UML figures using Graphviz.

5 Misc

Apart from building software, I also enjoy making hardware, including working on my Miata and making some wood stuff.