Thermostat code release

I’ve released my simple fan control program described in this entry (see also part one). Download source code for version 0.1 THIS CODE MAY MELT YOUR CPU – download only if you plan to read it, test it, and/or hack on it. The license makes it clear that it comes with no warranty. I’ve already…

‘Code as Data’ != Closures

Today I googled for “code as data”. The first hit that came up was this, a tutorial on Groovy that cheerfully proclaims that what is meant by “code as data” is closures! No, no, NO!!!! “Code as data”, aka “code is data” signifies the ability to manipulate code, i.e. to construct and take apart programs.…

Making the client do all the work

This paper proposes to reduce the workload of SSL servers by making the clients carry as much of the crypto-related load as possible. I think it’s possible to do even better. Key agreement: In the above, the server only has to do an RSA public key operation, which is cheap if the exponent is low…

Thermostat defeat

When I started on this, I thought I'd be able to dash off a script to keep my CPU fan quiet in a few hours. I've just spent far too much of this weekend obsessively hacking on it and testing it, and after creating a tool of great sophistication, I have basically given up in defeat. I'm now using a thermostat-like approach; either the fans are on full or on minimum, nothing in between. First installment of the saga

Static analysis of Erlang communication

I had a brief email exchange with the developers of [Dialyzer](http://www.it.uu.se/research/group/hipe/dialyzer/), the static analyzer (some might call it a type checker) for [Erlang](http://www.erlang.org/) programs. Currently Dialyzer only performs analysis on the functional fragment of Erlang and I was enquiring whether to extend that to handle communication. That would allow the detection of basic input/output mismatches,…

E4X: I want my S-expressions back

E4X is a new ECMA standard (ECMA-357) specifying an extension to ECMAScript for streamlining work with XML documents. It adds objects representing XML to ECMAScript, and extends the syntax to allow literal XML fragments to appear in code. It also supports a very XPath-like notation for use in extracting data from XML objects. So far,…

Bruce J. MacLennan’s Programming Language Design Principles

As far as I can tell, no-one on the web has yet summarised in a single page all of the design principles MacLennan develops in his excellent Principles of Programming Languages (2nd edition, 1986, ISBN 0-03-005163-0): so here they are. I hope they’re as useful to others as they have been to me. * Abstraction:…

Overview of Javascript modes for Emacs

Emacsen.org has a nice roundup of the (apparently only) four javascript-mode implementations for Emacs. I went for number three, Karl Landströmm’s javascript.el, and it’s been working very well.

Adapting C3 Linearization for Java

One of the interesting issues in implementing dynamic dispatch for Java is that the basic C3 linearization algorithm isn’t a very good fit for the complexities of Java’s subtyping. (Note: the following paragraphs rely on the reader having a basic understanding of the details of C3 linearization.) Java lists a class’s implemented interfaces separately from…

Multimethods for Java

Dynamic dispatch is a mechanism for selecting a method based on the runtime types of the parameters supplied. Java dispatches instance methods dynamically, using the runtime type of the receiver to choose the code to invoke and ignoring the types of the other parameters (just like Python and many other object-oriented languages). This is called…