Nock: a fun, minimalist programming language

Why is Nock interesting? Just as another member of the menagerie of minimalist languages, with Turing machines and lambda calculus and SKI combinatory calculus and Graham’s Roots of Lisp lisp and Shen’s KL and asm.js and Haskell GHC Core and various other small languages and VMs (i don’t claim to know anything about most of those).

With Turing machines, you feel like the big thing is changing the state of memory locations; but with lambda calculus and SKI combinator and Nock, you are reducing expressions.

With lambda calculus, you feel like the big thing is substitution; but with Nock (and presumably with SKI combinators, i don’t know them that well), it doesn’t feel quite like substitution is the main thing.

Although Nock is functional, the first argument in the main Nock expressions (e.g. the ‘a’ in the expressions of the form (a SMALL_INTEGER b)) can be interpreted as a state, providing an intuitive bridge between the lambda-calculus-ish world of expression reduction and the Turing machine world of state mutation.

Unlike both lambda calculus and SKI combinators, there is a sort of ‘assembly language programming’ feel to Nock. It’s not quite as minimal as lambda calculus or SKI combinators but for the price of a little bit of extra initial complexity, you get a lot of bang for your buck in terms of more intuitive programming. And you might even think it’s more minimal than lambda calculus if you count the complexity of rules like alpha-conversion against lambda calculus.

Unlike both lambda calculus and SKI combinators, Nock gives you integers and lists (trees) as primitive data types, and HEAD and TAIL and GET-THE-NTH-LIST-ELEMENT and SUCCESSOR and ISEQUAL as primitive operations. Compare to e.g. lambda calculus where you don’t have the complexity cost of having to include integers in the language definition, but then when you want to program arithmetic you have to use Church numerals. Similarly, with the simpler Turing machine models, you just get a bunch of basic commands for moving a machine head on a tape and making and erasing binary marks, and you have to build arithmetic and lists out of that.

So, it’s more ‘full-featured’ than lambda calculus, SKI combinators, or Turing machines. But it’s much simpler than most VMs and programming languages, and is based on expression reduction, rather than variable or memory mutation.

Further notes:

First music video in space

ISS commander Chris Hadfield filmed this shortly before he went back to Earth:

DNA strand displacement cascades are Turing-universal

The ‘Turing universal’ part means that this is a computer that can run any computer program. Beyond that, i don’t understand the chemistry of this, but i can tell that it’s cool.

According to the talk, strand displacement cascades are not only Turing-universal but also “universal for chemical kinetics” meaning that they can “in principle mimic the
temporal dynamics of any other chemical system”. This won a 2012 nanotech theory prize from the Foresight institute.

Google App Engine introduces support option ($150/mo)

Google App Engine is a web development framework.

How quantum physics could help people coordinate

Summary: Using quantum physics, multiple parties can arrange to be fed the same string of random bits.

This could be useful if there are allies who can meet together beforehand but later on will be unable to communicate with each other, and need some way to coordinate their choices. Note that the allies are unable to send information to each other; they are only able to receive random bits, it’s just that they’ll all get the same random bits.

A classical analog is for the allies to pre-agree on the seed value for a pseudorandom number generator. I don’t understand yet what the quantum solution can do that this classical solution cannot.

Guess: perhaps using other quantum engineering, there could be a way for the allies to ‘cut off’ the receiver of one ally if it becomes generally known that that ally has been compromised by an enemy?

This reminds me of the zoku people in Hannu Rajaniemi’s sci-fi novel, The Quantum Thief.

Benford’s Law

Studies in Everyday Life: Benford’s Law and the Decreasing Reliability of Accounting Data for US Firms


the musical structure of t*((t>>12|t>>8)&63&t>>4)

From countercomplex: Algorithmic symphonies from one line of code — how and why?.

Bots Excel at Pushing Humans to Interact Online | Online Communities | Web Ecology Project | Social Robots | Tech News Daily

“The winning “socialbot,” JamesMTitus, kept interchanges going for a record of 12 consecutive tweets and garnered close to 200 overall responses from targeted Twitter users in less than a week. Humans who had created new Twitter accounts in a similar experiment garnered at most 60 responses, Hwang said.

To achieve this, Titus, a bot with a “very promiscuous, yet lovable persona” and who is “obsessed with his pet cat,” according to the blog of one of its creators, tweeted a generic question to one of the Twitter users being targeted about every seven minutes.

If the human responded, the robot replied with its own generic response. For example, when Titus asked one user what his favorite Dr. Seuss book was, the person responded, “the older cartoon of the Grinch, but not the Jim Carrey version.” “Rock on,” replied the robot.

…Not only did Titus’s tweets elicit responses, they also served as a bridge between individuals and communities. Twitter users unknown to one another began to interact because of the robot’s tweets…”

Bots Excel at Pushing Humans to Interact Online | Online Communities | Web Ecology Project | Social Robots | Tech News Daily.

Favorite Ubuntu desktop preferences and applications configuration HOWTO

as i installed Ubuntu GNU/Linux onto my new computer, i made notes on which desktop preferences i configured, which applications i installed, and how i configured them, including, among other things, general speed optimizations, Compiz preferences, making programs appear automatically upon startup, keyboard preferences, how to sync files and Firefox bookmarks and email between multiple computers, favorite programs, .muttrc and .emacs and .bashrc configurations:


How to install Ubuntu GNU/Linux onto the Fujitsu Lifebook T580

i just finished installing Ubuntu onto my new T580. I purchased an Intel X25-M SSD separately and installed it as the main hard drive. It was not very difficult; most everything Just Worked. There were a few special things I did to optimize the partitioning for the Intel SSD.

What works so far with Ubuntu GNU/Linux


  • Ubuntu kernel version 2.6.35-27
  • video card (both with internal screen and external VGA port)
  • Gnome/Ubuntu monitors Preferences control to control screens
  • networking (both wired and wireless)
  • sound (all of internal speakers, internal mic, and headphone port — havent tested the mic port)
  • usb (tried various usb keyboards, mice, and hard drives)
  • usb and networking ports on Targus docking station with video, ACP51USZ (Fujitsu calls this ‘Targus USB Docking Station(FPCPR104)’)
  • suspend
  • webcam
  • volume and brightness function keys
  • battery life indicator

Doesn’t work yet:

  • touchscreen, pen (N-Trig) (but they’re working on it: )
  • DVI video port on Targus docking station (that is to say, the only video port on the docking station. It uses Displaylink)
  • hibernate usually works when the computer is unplugged from everything, but not when all my USB devices are connected

Although installation was straightforward, I wrote a HOWTO:

Bayle Shanks’s website: tips-computer-fujitsuT580-ubuntuSetup