New books

Ordered on Amazon today:

I’m not sure what to make of the fact that these books are nearly 20 years old… totally out of date, but all that is available? What’s up with that?

Joe Armstrong – Keynote: The Forgotten Ideas in Computer Science – Code BEAM SF 2018

I watched Joe Armstrong – Keynote: The Forgotten Ideas in Computer Science – Code BEAM SF 2018. I made the mistake of starting my notes as I went along with the video. If I had have watched the video first I probably wouldn’t have made the notes. Anyway. Sunk cost. Here ’tis.

Two papers to read:

  1. A Plea for Lean Software by Niklaus Wirth
  2. The emperor’s old clothes by Tony Hoare

Four old tools to learn:

  1. emacs (vi)
  2. bash
  3. make
  4. shell

Four really bad things:

  1. Lack of privacy
  2. Attempts to manipulate us through social media
  3. Vendor lock-in
  4. Terms and conditions

Three great books to read:

  1. Algorithms + Data Structures = Programs by Niklaus Wirth (PDF)
  2. The Mythical Man-Month by Fred Brooks (PDF)
  3. How to Win Friends and Influence People by Dale Carnegie (PDF)

Seven reasons why software is difficult now:

  1. Fast machines
  2. Huge memory
  3. Hundreds of PLs
  4. Distributed
  5. Huge programs
  6. No specifications
  7. Reuse

One fun programming exercise:

  1. META II a syntax-oriented compiler writing language (PDF)

8 great machines from the past:

  1. Baby SSEM
  2. PDP11
  3. Vax 11/750
  4. Cray 1
  5. IBM PC
  6. Raspberry Pi
  7. iPhone/iPad
  8. Nvidia Tesla P100

3 performance improvements:

  1. Better algorithms (x6) (Interpreter -> Compiler)
  2. Better programming language (x50) (Prolog -> C)
  3. Better hardware (x1000 per 10 years)

5 YouTube videos to watch:

  1. Alan Kay at OOPSLA 1997 – The computer revolution hasnt happened yet
  2. Ted Nelson — Computers for Cynics [full version]
  3. Free is a Lie
  4. How a handful of tech companies control billions of minds every day | Tristan Harris
  5. Matt Might – Winning the War on Error Solving the Halting Problem and Curing Cancer

6 things not to do:

  1. Backdoors
  2. Violate privacy
  3. Put microphones in everybody’s houses
  4. Hijack our attention system
  5. Hijack our social systems
  6. Sell crap that we don’t want or need

5 sins:

  1. Crap documentation
  2. Crap website
  3. Crap dependencies
  4. Crap build instructions
  5. Group think

4 languages to learn:

  1. C
  2. Prolog
  3. Erlang
  4. Javascript

4 great forgotten ideas:

  1. Linda Tuple Spaces – David Gelernter and Nicholas Carriero
  2. Flow based programming – John Paul Morrison
  3. Xanadu – Ted Nelson
  4. Unix pipes

6 areas to research:

  1. Robotics
  2. AI
  3. Programmer productivity
  4. Energy efficiency
  5. Precision medicine
  6. Security

2 dangers:

  1. Group think
  2. Bubble think

4 ideas that are obvious now but strange at first:

  1. Indentation
  2. Versioning
  3. Hypertext across machine boundaries
  4. Pipes

2 fantastic programs to try:

  1. TiddlyWiki
  2. Sonic Pi

7 distractions:

  1. Open plan offices
  2. The latest stuff
  3. Twitter/Facebook (social media)
  4. Notifications (turn ’em off)
  5. Links (don’t click on them)
  6. Ban Scrum etc
  7. We can only do one thing at a time; our brains are terribly bad at context switching

3 general laws:

  1. Software complexity grows with time (because we build on old stuff)
  2. Bad code crowds out good (Gresham’s law)
  3. Bad code contaminates good code

3 laws of physics:

  1. A computation can only take place when the data and the program are at the same point in spacetime -=> get all the data + program to the same place (can be client or server or someplace in-between) (problem – easy to move data – difficult to move programs) This is why PHP is good :-)
  2. Causality – Effect follows cause. We don’t know how stuff is we know how it was (the last time it told us)
  3. 2nd law of thermodynamics – Entropy (disorder) always increases

6 common problems:

  1. Does not know how to delete files – when the system runs out of space they buy a new computer
  2. No idea of what MBytes, Mbits, Bits/sec, quad cores, etc means
  3. If the app doesn’t work immediately gives up
  4. Does not search for fixes – or does and does not understand the answers
  5. Does not want to try the latest things
  6. Uses a method that works (not the best) – e.g. to copy a file open it and then save it with a new name

5 more problems:

  1. The UI changes
  2. Passwords
  3. Stuff doesn’t work
  4. Terms & Conditions
  5. non-reproducible errors

Things can be small:

  1. Forth OS 24KB
  2. Forth compiler 12KB
  3. IBM PC DOS < 640KB
  4. USCD Pascal
  5. Turbo Pascal
  6. Turbo C

The old truths:

  1. Keep it simple
  2. Make it small
  3. Make it correct
  4. Fight complexity

Web is broken:

  1. It’s not symmetric; users read data but write very little
  2. Can every page be changed?
  3. Can I make new data by combining fragments from other data in a flexible manner? No.
  4. The Web is dominated by a small number of companies (Amazon, Apple, Google, Facebook) using huge data centers, it should be controlled from the edge network.
  5. The original vision was a Web controlled by “citizen programmers” (Search for Ted Nelson talks)

HTML and HTTP have several problems:

  1. Non symmetric
  2. Easy to read/difficult to write
  3. Pages get lost (disappear)
  4. Links are wrong (404-problem)
  5. Re-use, attribution, IP rights, payments is a mess
  6. Controlled by a very small number of companies

Math homework

I will let you in on a little secret: I love doing math homework. Always have, always will. I love the process. I love reading the problems, thinking of solutions, and checking the questions off one by one. Even when it’s easy, it’s still fun.

Just for fun I’ve gone back to my old high school math textbooks. I’m skipping years 7 and 8 and starting with year 9. Then I will do 10, 11, and 12, at the highest level.

At the moment I’m working through Australian Signpost Mathematics New South Wales 9 (5.1-5.3) Student Book, which is the year 9 textbook. I’m only up to page 10, fractions and ratios. I should work on it more than I do. Let’s see what I can do about that. :)

Netfilter and iptables

This evening I read the iptables man page and Linux iptables Pocket Reference from cover-to-cover; my notes are here: Netfilter.

I think at this point I am ready to use iptables in anger for the first time in a long time, and the first time ever on a router.

However, before I take that on, I’m going to have a quick diversion into the following books, and then sleep, and I will do my iptables programming when I wake up tomorrow.

The Divided Brain

Here is a presentation of the work of Iain McGilchrist: The Divided Brain.

McGilchrist has written a number of books, including: