Read on and leave a comment
or return to our portfolio.

Posts in the ‘General’ category

6 Nov 2006

by Noel

Voting Systems: Theory Meets Practice

Suresh posts on tamper-proof voting systems. Why do you care? Apart from the application to democratic government, it’s a problem that all Internet companies that aggregate user behaviour (for example, social networking sites) face. Be sure to read the comments.

I love applying theory to real-world problems, if only because it justifies my over-education :)

Posted in General | Comments Off on Voting Systems: Theory Meets Practice

6 Nov 2006

by Noel

A Farewell to Alms

Tyler Cowen writes

The book is not yet out, but it is the best of its kind since Guns, Germs, and Steel.

The book in question is A Farewell to Alms, and 4 pages into the draft I’m hooked.

cp>Till a few days ago a full PDF draft was available online. This has been replaced with a few PDFs of individual chapters. The author tells me this was done at the request of the publisher, and he intends to put the first eight chapters online.

Posted in General | Comments Off on A Farewell to Alms

5 Nov 2006

by Noel

Firefox 2.0 Find Again

Incremental search is one great feature in the Firefox 1.x series. Press /, or simply start typing, and Firefox searches as you type. Firefox 2.0 has the same feature, except it is missing the “Find Next” and “Find Previous” buttons. Here are three ways you can get this functionality back:

  1. Press F3 to find next, and Shift-F3 to find previous
  2. Start your search by pressing Control-F (Command-F on OS X).
  3. Muck around with your Firefox configuration to turn on the buttons

Mozilla call this feature Find As You Type. Follow that link and you’ll find a few more usage tips.

Posted in General | Comments Off on Firefox 2.0 Find Again

10 Oct 2006

by Noel

Think Fast and You’ll Feel Better For It

Want to feel better? Think fast. A study shows that people forced to think quickly feel better:

[Emily] Pronin and … Daniel Wegner … experimentally manipulated the pace at which participants read a series of statements … The researchers found that regardless of the content of the statements, people felt happier, more energetic, more creative, more powerful, and more grandiose when they read the statements at a fast rather than a slow pace.

This type of behaviour is very similar to manic behaviour, so whether it is beneficial in the long term in debatable, but it’s at least an interesting result. Perhaps it explains why so many of us put off work till the last minute — we want the rush of working at a fast pace. At least we now have a plausible argument for such behaviour!

Posted in General | Comments Off on Think Fast and You’ll Feel Better For It

24 May 2006

by Noel

Of Interest 24/05/2006

If you’re a web developer then you pretty much have to readBrendan Eich’s slides on JavaScript 2 / ECMAScript Edition 4. The quick summary: it looks like Scheme with an optional type system, which is a way of saying it looks damn good. All Hail Professor Bloggy McHerman!

Gilad Bracha’s rant against continuations and the subsequent followups are interesting and infuriating in equal parts. Once again Prof B comes to the rescue. His pedantic aside is particularly important. I’ll also add my own brief rejoinder: I’m not an idiot. Give me all the tools in the toolbox, and I’ll make the decision when to use them. In some situations it is appropriate to use cookies (e.g. login), for others encoding continuations in URLs is the right solution (e.g. persistent URLs), and for others server-side continuations are right (e.g. temporary pages such as form validation)

Seems like no-one really knows how much sleep you should get, but a drug is in development that might do away with the need, for short periods of time. When travelling around Spain I found siestas worked really well. I got by better on 2 sleeps a days, and studies of experts have shown the highest performers often take an afternoon nap.Matt’s on to something in his tree-house.

Posted in General | Comments Off on Of Interest 24/05/2006

18 May 2006

by Noel

Interesting Stuff 18/05/2006

Amazon is a platform, not a retailer. And an interesting platform at that.

The algorithmization of science is the next step to applying mathematics to problems that have been difficult to model equationally. Humanities students better dust up on their computer science!

Google releases a AJAX framework. Catching up to Yahoo on this one. Does anyone care? Well, pundits say AJAX is no different than eating large quantities of chocolate so I guess a lot of women should.

Posted in General | Comments Off on Interesting Stuff 18/05/2006

17 May 2006

by Noel

More Dagstuhl Talks


Matthew Flatt

A module is “the way you share code with other programmers”

Module systems in different languages: Python, Ruby

Mutually dependent modules are the first issue

Ruby example: mutually dependent modules sometimes work
(when required from files) but dependent on order of
execution. Shows that a module definition is a
side-effecting operation. Similarly a module may be
extended. Hence a module is a runtime concept.

Ruby modules also function as mixins.

MzScheme modules are not side effects. Runtime order does
not matter. However expand time (aka static analysis time)
order does. Mutually dependencies disallowed. Use units
for mutual dependencies. (New!) Unit/signature modules. A
module can be written in a unit or signature language.
External linking — the module no longer decides what it
links to (cf internal linking, the usual method).

Scheme48 modules, known as structures. Similar to MzScheme
units and ML functors. However allows units to export
macros, unlike MzScheme.

Smalltalk modules


Smalltalk 80 has no modules. Distribute changesets.
Changesets have no composition.

VisualWorks/Squeak packages track their changes and so can
be uninstalled. Packages have prerequisites.

Selector namespaces in Modular Smalltalk. They are not
reentrant. Seems to have strange scoping rules.

Classboxes allow re-entrance.


Mike Sperber

Pragmatics and deployment.

Tools create boilerplate. Standard format for packaging and

Online distribution (CPAN) and shell for retrieval and
installation. Can automatically install dependencies.

Perl code may branch depending on installed modules and

Social features (e.g. number of available modules) make it
difficult to change the implementation. For instance, you
can only have 1 version installed at a time. Cf PLaneT
allows multiple versions. However there are still issues
with loading multiple versions at once.

Java’s Future

Gilad Bracha

JSR-277 attempting to add a module system for Java. Main
interest is deployment, versioning etc.

Initial proposed system: modules are like units –

Actual proposed system: no language changes allowed.
Instead embed using reflective API. Turing complete
therefore any particular implementation possible
(first-class, higher-order, etc.)

Module implementations check for prerequisites at runtime.
Just code, so anything is allowed. Lots of state.

My comments: As usual for Java has taken a
reasonable idea and turned it into a huge hairball.

Soapbox Session

Context-oriented Programming

Pascal Constanza

Make program change behaviour due to context of use
(e.g. personalisation) without making it a huge hairball.

Basically a new type of modularity. Similar to aspects, and
OO inheritance / overriding.


Philippe Mougin

Open source scripting language for Cocoa / OS X

Unifies OO and array programming

Interactive environment.

Source Code Mining for Latently-Typed Languages
Dave Mandelin

Extracting information from source code. Perhaps to find
out how to use a library from example code.

Example: what are the types of the arguments in a latently
typed language?



Trygve Reenskaug

Modularity, again.

My comments: I didn’t really get this talk, so my summary is brief and perhaps incorrect.

Ambient Oriented Programming

Ambient resources and volatile connections

Non-blocking communication

Reified communication traces

Reified environmental context

OO sans classes to handle code updates


Laurence Tratt

Pythonic language with compile time metaprogramming ala
Template Haskell.

Converge’s role is to host DSLs, and so must be very
flexible. In a senese a Lisp with curly braces.

Customisable parsing.

Father Time

Greg Cooper


Guillaume Marceau

My comments: I’ve seen FrTime and MzTake before
so I didn’t take notes. If they’re new to you check them
out — they come as part of PLT Scheme

Posted in General | Comments Off on More Dagstuhl Talks

4 May 2006

by Noel

Dagstuhl 06181

Due to what I can only assume was a clerical error, I was invited to the Dagstuhl seminar on latently typed languages. I accepted before this error could be rectified, and so it is that this blog post comes to you from room 23 in Dagstuhl.

There have been a number of talks of various topics of
interest. Being a good student, I’ve taken notes, which I
intend to put online as time allows. You’ll have to fill in
a few gaps but I hope they’ll give you an idea of what has
been discussed. The first talk is below:

Cross Language Runtimes

Wolfgang De Meuter, Marc Feeley, Robby findler, Roel Wuyts et al.


  • not true, but illustrates a problem
  • the programming language used determines how we see and
    think about the solution e.g. malleable syntax Java vs

Ralph Johnson: study at IBM on what characteristics making
people learn Smalltalk more easily. Number one
characteristic was how many languages you already knew. The
more you know the easier it is to pick up new languages.

Matthias F: Productivity of programmers is directly
dependent on number of languages they know not the number of
years of experience.


  • mix several languages, choose the right tool for the job
  • problem mapping concepts betweeen different languages

Survey cross language systems

Gambit-C (Scheme) FFI to C/C++

  • (c-define (f x y) (int int) int "f" "" (* x y))
    Defines a procedure called f in C, and wraps Scheme
    around it.
  • c-lambda (inline C)

Matthias F: Scheme is not a safe language as the spec
leaves many things undefined.


  • Java extended with dynamic, Scheme with contracts.
  • Java types mapped to Scheme contracts

Robby F: dynamic is like the Any (TST) type for Java. Too
much to explain now.

SCM2JS Scheme to Javascript

  • Embed Scheme is web pages like Javascript (neat!)
  • Compile to JS

SHard Scheme to VHDL

  • Allow programming techniques and transformations to be
    applied to hardware
  • Dataflow language: extends Scheme with par like Occam
    for parallelism
  • CPS analysis of control flow
  • Allows calls to VHDL components
  • Key was to implement function calls — so full
    programming language can be comiled to hardware

Soul Prolog and Smalltalk

  • Logic programming language interpreted by Smalltalk
  • Prolog symbols are Smalltalk objects
  • Reason about code, using reflection
  • LogicAJ Generic AOP language
  • Logic meta variables
  • Carma Smalltalk + Soul
  • Generic AOP language
  • Very dynamic

etc [other examples]

Linguistic symbiosis

  • Making data and operations from one language accessible
    in tohe other language
  • Essentially quote/unquote between languages
  • Requires careful distinciton between evaluation
    contexts (between languages) to handle (un)wrapping and
    (more importantly) semantics

Robby F: sometimes wrappers must stay around to enforce
constraints when, for instance, mixing static and latently
typed languages.

Andrew Black: copying implementations don’t work in parallel
systems with mutable state

My comments: There were a lot of questions so the talk ended up being a bit rushed. A lot of time was spent on the survey (and answering questions) which unfortunately left little time to really tease out the interesting issues.

Posted in General | Comments Off on Dagstuhl 06181

24 Apr 2006

by Noel

Programming in Film Making?

In the software engineering literature people like to make analogies between programming and other disciplines, typically civil engineering (e.g. programming is like building bridges). But these analogies don’t fit very well. Programming seems to be ill-suited to the extensive modelling that can be done in, civil engineering, nor does it have the same high cost of change (you can’t move a bridge easily). Here’s an analogy that seems to fit: film making. And I’m not just saying that so I can grow a goatee and hang out with the cool kids (you reading, Geoff? ;-) )

Posted in General | Comments Off on Programming in Film Making?

18 Apr 2006

by Noel


Just like Citeseer and Google Scholar, but better! Rexa is at core a search engine for the computer science literature, but with additional functionality beyond what the others offer. The key improvement is that Rexa knows about more types of data than just papers — it can also track people, for instance. It also has w00ty Web 2.0 tagging, and a dodgy .info domain. If they only had rounded corners and a day-glo colour scheme they’d be a dead cert for an acquisition.

Posted in General | Comments Off on Rexa!