Jug 1.0-release candidate 0

New release of Jug: 1.0 release candidate

I’ve put out a new release of jug, which I’m calling 1.0-rc0. This is a release candidate for version 1.0 and if there are no bugs, in a few days, I’ll just call it 1.0!

There are few changes from the previous version, but this has reached maturity now.

For the future, I want to start developing the hooks interface and use hooks for more functionality.

In the meanwhile, download jug from PyPI, watch the video or read the tutorials or the full documentation.

Modernity II

Modernity II

An obvious missing addition in my previous Modernity post was (as pointed out by Franklin Chen in the comments) was LaTeX, developed in the early 1980s as a set of macros for TeX (released in 1978).

By the way, if you prefer Microsoft Word, that technology is from the same era (first released in 1983), although it was a copy of early 1970s technology [1]. I remember using it on a Mac (I think it was the Macintosh SE) in the late 80s and, although it was black&white, it was already very close to today’s versions in look-n-feel.


Some of our ideas of what’s modern in other areas of life are similarly off:

As our family debates education options for our children, we are choosing between Montessori schools, with Waldorf coming in a close second. Sometimes people will say oh, exploration-centred learning, how modern you guys are!

This reminds me of the classic quip about Brazil: it’s the country of the future! It has always been the country of the future and will always be the country of the future.

The first Montessori schools were opened over 100 years ago, while Waldorf is just slightly newer as the first school opened in 1919.


Obviously, my point is that we tend to think that change is fast in our current society while we live in a Great Stagnation. A subsidiary point is that much of this feeling comes from ignorance.

[1] Yes, LaTeX is newer, more modern if you wish, than WYSIWYG editors.



The Bourne shell was first released in 1977 (37 years ago).

The C Programming Language book was published in 1978 (36 years ago), describing the C language which had been out for a few years.

Python was first released in 1991 (23 years ago). The first version that looks very much like the current Python was version 2.2, released in 2001 (13 years ago), but the code from Python 1.0.1 is already pretty familiar to my eyes.

The future might point in the direction of functional languages such as Haskell, which first appeared in 1990 (24 years ago), although the first modern version is from 1998 (Haskell 98).

Vim was first released in 1991, based on vi released in 1976. Some people prefer Emacs, released a bit earlier (GNU Emacs, however, is fairly recent, only released in 1985; so 29 years ago)

The web was first implemented in 1989 with some preliminary work in the early 1980s (although the idea of hypertext had been around for longer).


The only really new software I use regularly is distributed version control systems, which are less than 20 years old in both implementation and ideas.

Edit: the original version of the post had a silly arithmetic error pointed out in the comments. Thanks

Friday Links

1. A nice talk on category theory

2. Reevaluating electroshock therapy

3. It’s world homeopathy awareness week! I’ll quote @mocost on twitter:

It’s World Homeopathy Awareness Week, apparently. Are you aware that homeopathy is pseudoscientific bullshit?

4. Angst in Germany over English invasion. I liked this bit about the lounge at train stations:

“I’m not sure if calling it a ‘lounge’ is better than using the German word ‘warteraum,’ ” Renner says. “I guess it’s more modern or hip.”

Warteraum just means waiting area (both literally and not-so-literately).

Recently, I got enough points to get “frequent travel status” on German trains. One of the perks is free access to the lounge area. Somehow, that perk would not feel like such a perk if they had written free access to the waiting area.

Quote of the Day

Shipping is a feature. A really important feature. Your product must have it. — Joel Spolsky

Papers are the same. Submission is an important argument. Your paper must have it.


I was in Denmark last week, teaching software carpentry. The students were very enthusiastic, but they had very different starting points, which made teaching harder.

For a complete beginner’s to programming course, I typically rely heavily on the Python Tutor created by Philip Guo, which is an excellent tool. Then, my goal is to get them to understand names, objects, and the flow of control.

I don’t use the term variable when discussing Python as I don’t think it’s a very good concept. C has variables, which work like little boxes you put values in. If you’re thinking of little boxes in Python, things get confusing. If you try to think of little boxes plus pointers (or references), it’s still not a very good map of what Python is actually doing.

For more intermediate students (the kind that has used one programming language), I typically still go through this closely. I find that many still have major faults in their mental model of how names and objects work. However, for these intermediate  students have, this can go much faster [1]. If it’s the first time they are even seeing the idea of writing code, then it naturally needs to be slow.

Last week, because the class was so mixed, it was probably too slow for some and too fast for others.


A bit of Danish weirdness:


 A sausage display at a local pub

[1] I suppose if students knew Haskell quite well but no imperative programming, this may no longer apply, but teaching Python to Haskell programmers is not a situation I have been in.

2048 is just cow clicking in binary.

How to win at 2048 or why 2048 is a stupid game

(This post contains a 2048 spoiler)

I too was caught up in craze about 2048. Unfortunately, after a while I realised it’s a stupid game. It’s a stupid game, because it’s actually a puzzle. Once you figure out how to play it [1], there is no challenge, it’s just trivial and boring.

2048 becomes cow clicking in binary.

How to win at 2048: play without ever pressing the UP key and keep your largest values on the bottom row, aligned left-to-right [2]. Just make sure you keep your highest tile on the corner and keep feeding the bottom row as best as you can. The newly born 2s & 4s will appear on the top portion and you will always be able to put them together. The only dangerous moment is when you score at the bottom as you risk destroying the organization if you’re not careful.


Above is how the board looks just before scoring the 2048 tile: Now go left, down, right, right, right, and you will have clicked all your cows.

[1] Or at least one way of playing it.
[2] This strategy can, of course, be applied in rotated form: play to the top-left corner instead of bottom-right.