This is where I put cool stuff I found on the web in case Twitter ever ceases to exist.
- Build a Container Engine in 20 minutes
- Origins of Lisp
- Why it can be effective to use Lisp
- Lambda Calculus
- Software Engineering Radio
- Browser-based Presentations
- Practical Typography
- GNU Coding Standards
- Nerves - embedded Elixir
- English Language
Build a Container Engine in 20 minutes
This video is a walkthrough of starting to build a container system in a 20 minute talk, with an explanation of all the concepts involved (namespaces, hostname space/UTS, and a separate filesystem).
Of course it’s not of practical use, but it’s nice to get an idea how a container like Docker works. Here’s the finished code if you are impatient:
This workshop in Python goes even deeper with 10 levels to complete.
Origins of Lisp
Lisp is that legendary language of fairy tales long lost. I found this great article by Paul Graham on the origins of Lisp. Apparently it was not devised as a programming language, but as a formal language in a research paper to come up with an alternative to the Turing Machine. Only later because on of his grad students tried to implement it, was it possible to run Lisp programs. This is why Lisp was not concerned with machine limitations of that time (like Fortran), but was more like pure math.
An interesting point Paul Graham makes is that many features Lisp already had in 1958 are only now getting fully adopted by modern languages, these being: Conditionals, Function Types, Recursion, Dynamic Typing, Garbage Collection, Programs composed of expressions, symbol types, the AST notation and Lisp’s Metaprogramming facilities (that together make Lisp metaprogramming extremely powerful).
Why it can be effective to use Lisp
This is an article, by Matthew Butterick who struggled with the definition of Lisp as the language of fairy tales and wonders by most of its proponents without explaining exactly what makes it so good.
The reasons are in short: Everything as an expression, everything as a value or list brings high consistency, well-written documentation written mostly by CS professors, IDE ships with language, X-Expressions to represent XML-ish data, Scribble is a powerful templating language, syntax transformations in Racket itself and easy-to-define DSLs.
Smalltalk is one of those old languages that keep producing great ideas that everyone else copies (Object/Message-Oriented Programming, Virtual Machines, Images, Refactoring, Test-Driven Development, …). I recently attended an interesting talk by Nikolas Martens on it
Instead of a bit-grinding processor raping and plundering data structures, we have a universe of well-behaved objects that courteously ask each other to carry out their various desires
On manual memory management: an you imagine having to prepare someone for each thing you tell them or having to inform them when you are thro
Why objects are distinct The mind observes a vast universe of experience, both immediate and recorded. One can derive a sense of oneness with the universe simply by letting this experience be, just as it is. However, if one wishes to participate, literally to take a part, in the universe, one must draw distinctions. In so doing one identifies an object in the universe, and simultaneously all the rest becomes not-that-object
Why Design for humans:
The mechanisms of human thought and communication have been engineered for millions of years, and we should respect them as being of sound design. Moreover, since we must work with this design for the next million years, it will save time if we make our computer models compatible with the mind, rather that the other way around.
Why it is for small projects:
Personal Mastery: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual.
Lambda calculus is one of the things I heard of in passing during university, but never got a chance to dive deeper into. In Wikipedia’s words it is “… a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution. It is a universal model of computation that can be used to simulate any single-taped Turing machine”. In my own words it is programming in mathematics.
Why is this nice to know? Most functional programming languages (LISP, Erlang, Scala, …) in some way use Lambda Calculus as the base and add things like side effects and state to become useful programming languages. So, to understand some of the design decisions in these languages it is useful to understand where they come from.
Software Engineering Radio
Software Engineering Radio is a series of podcasts made by a awesome team of volunteers that interview a very broad and interesting range of industry experts on topics around Software Engineering, from very technical ones (like Consensus in Distributed Systems) to social/human ones (like Recruiting Software Engineers in San Francisco). I really like how it gives you a broader context in topics you are not very well familiar with and gives an insight into discussions by industry experts.
I have a blog post summarizing some of the learnings.
reveal.js is a tool/library for browser-based presentations with nice transitions that will work everywhere a webbrowser works. Is not as hard to setup well as Prezi or impress.js.
This online book about typography helped me as a technical person to make sense of all the endless CSS Stylings and HTML tags to structure a page (like this one). The author offers reasonable advice on when to use which technique to style text (i.e. typography) based on the vast amounts of wisdom in the typographer’s profession and adapts it to the modern web. The book is free to read, but I paid the author something to reward making this great resource.
GNU Coding Standards
An interesting side note I found in the HN comments on the different implenentations of very different complexity of
yes . While the Unix version is as simple as you would expect, the [GNU version] rather complex, aligning memory pages and bypassing the standard library, to optimize for throughput. One commenter points out that quite often GNU programs look “odd”, in order to avoid patent infringement concerns with UNIX. There is even a section in the (GNU coding standards)[https://www.gnu.org/prep/standards/standards.html#Reading-Non_002dFree-Code] to encourage this, e.g. by optimizing for speed instead of readability.
Nerves - embedded Elixir
Elixir/Erlang is not something you usually associate with embedded system. Here is a framework that bridges the gap:
I somehow found this online book that was published until May 2017 and has come to a (surprising) end. It is a very entertaining read, since it contains a lot of word-play and played with my conception how the world works. In principle it is a large pun, that assumes flipped roles for science and superstition/religion, a world where everything from religion is true, while scientific laws do not uphold anymore. For example in the chapter War and Peace, scientific facts that we consider a given through evidence are instead interpreted in a theological fashion:
When a scientist says “space is infinite and full of stars”, she does not literally mean that the crystal sphere surrounding the Earth doesn’t exist. She is metaphorically referring to the infinitude of the human spirit, the limitless possibilities it offers, and the brightness and enlightenment waiting to be discovered.
Bright Spots and Color Differences Revealed on Ceres NASA
https://www.nasa.gov/feature/jpl/bright-spots-and-color-differences-revealed-on-ceres * JPL Deflector * ## Smalltalk
Objects for smalltalk = actors (just hidden state nothing else) All the syntax is message passing Object oriented programming should have been nessage oriented programming (collaboration more important than state) Message not understood -> create
Shipping code means publishing it (the user runs it in the image) Collaboration used to be difficult, no obvious way to share (export to text)
Web dev create debugger session to suspend request create method and then execute request against it
The English language has a larger vocabulary than other comparable European languages like French or German, maybe because English speakers have more fun to play around with foreign words and use them in their own language1. For me, learning English will never top because of words like these:
Digging deeper on apricity brings to light this interesting history: According to Merriam-Webster the word brought into English by Henry Cockeram in 1623 when he recorded (or possibly invented it) for his dictionary. However, it never really made it out of the dictionary into general use and is probably exemplary for the fate of English words that come only from single authors and not from general speech.