|
NEW!
I am a software consultant. My projects and research
span a lot of apparently unrelated topics, including
WordPress and Drupal, PHP,
interactive
Web sites, economics, category theory, spreadsheets,
Prolog, and artificial intelligence.
So rather than just plonk down lists
of the things and people I program with and program for,
I'll explain below my consultancy, research and
teaching, and how the things I've done are all related.
In my latest projects, I'm using various
tools, mainly WordPress, to build Web sites for local businesses.
I've written about some of these projects
in my blog.
Before that, I used
Drupal
to build a new Web site for
Applied Development Research
Solutions on which their customers could run economic models.
I also worked with
Bandolier, the
Oxford evidence-based
medicine
group run by
Andrew Moore, to
analyse clinical-trials data
using R. I've
worked with them for seven years, and our results have been written up in
a lot of papers, one of the latest being
"Faster, higher,
stronger?" This shows how the speed of pain-relief
drugs is related to their efficacy, something very
useful for doctors to know. Others are listed
here.
Earlier projects
include
extending
Moodle Web services for
Oxford Study Courses and
Triple-A Learning; writing
Visual Basic routines and
spreadsheets for
International Baccalaureate teachers to
record their
students' progress
in; and making Excel controllable from Web servers for
EASA Software.
I also do I.T. for community organisations in Wolvercote and
Cutteslowe, and am on the finance team for the
CWW
Cooperative Trust.
A lot of my projects have involved interactive and educational
Web sites, the Drupal one for ADRS being the latest. This began when I
worked with
Graham Stark
at
the
Institute for
Fiscal Studies to write
Be
Your Own Chancellor, a
program that
ran over the Web and allowed users to act as Chancellor of the
Exchequer. They could change taxes and benefits and see how this
would affect
growth, unemployment, and other economic variables.
The BBC took this up, and for several years, we
put
up a version
on their Budget Day page, reprogramming it
rather hastily during the Chancellor's
speech to reflect his policy changes. We also did
Budget
Ready Reckoner, into which users typed their income and
expenditure
to see how the Budget would affect their finances.
Since then, I've collaborated with Graham as part of his
Virtual Worlds group to
put
other models onto the Web. These
are:
Virtual
Economy and the biz/ed models;
Darts,
a model for the Distributional Analysis of the Russian tax and transfer
system; an
affordability
model
for the Office of the
Scottish Charities Regulator; and
Mefisto,
a Flemish tax and benefits microsimulation model.
Entirely outside economics, I've used this
Web programming experience to make demonstrations that
help students learn
category
theory.
This is an abstract but very
useful branch of mathematics.
As one writer has said, if maths exists to make
science and technology easy, category theory exists to make maths easy.
It
helps one
formulate problems,
has lots of applications in computer
science, and
was the foundation
of my spreadsheet research mentioned below, particularly that on
making Excel modular. Much of
this was inspired by
Joseph Goguen
and his
OBJ
family of languages. Have a look at my
demonstrations
of category theory for students and
of Goguen's
sheaf semantics of
concurrent interacting objects. How they work
is explained in
Graphical
Category Theory Demonstrations,
a thread in the n-Category Café
blog. I've also written some thoughts on
how
category
theory might help cognitive science and artificial intelligence.
As I mentioned, several of my projects have been about
writing spreadsheets, sometimes with Visual Basic. But spreadsheets
are not safe!
My interest in category theory inspired me to work out a way
to modularise Excel — and other spreadsheet systems
such as Google Sheets — so that spreadsheet developers
could build complete spreadsheets from pieces which can be
written, tested, debugged, and documented independently
of one another. As part of this, I've created a language
called Excelsior; a compiler which generates spreadsheets
from Excelsior programs; and a decompiler which
makes spreadsheets more readable by translating
them into Excelsior.
Spreadsheet
Components, Google Spreadsheets, and Code Reuse.
The category-theory demonstrations and my spreadsheet
software are both written in
Prolog.
This is a language I've used a lot,
particularly Jan Wielemaker's
SWI-Prolog. I've taught it
commercially
and academically, and have
written
compilers and interpreters for Prolog, as well as expert systems
and other software in it. Articles I've written about
the language include
Why Use Prolog?;
The
Prolog Lightbulb Joke;
an
introduction
to Prolog for mathematicians;
How to
Call SWI-Prolog from PHP 5; and the articles on implementing
Snobol patterns in Prolog linked from my list of Dobbs blog postings.
Two fun demonstrations are this
SF plot generator
(the origin of
the Excel one above) and
Traveller,
a little game where the student programs robot vehicles to buy and
sell goods from shops arranged round a board.
I used to teach
artificial intelligence at the Oxford University
Department of Experimental Psychology. For the practicals, in order to
get novice students doing interesting things quickly,
I provided them with microworlds containing A.I. agents
that they could experiment with and modify. Some of this is
written up in
Using Java and the Web as a front-end to an agent-based Artificial
Intelligence course. My practical notes
show examples designed to demonstrate
"classical"
A.I.,
and the
difference between it
and the so-called nouvelle
A.I. approach.
I have also taught computer science for
Cherwell College
and
The Oxford
Institute. My job for the latter was to
broaden students' horizons. I showed them, for
example, how rotation matrices are used in graphics —
and in relativity.
Here are some
links and notes concerning
Python,
and some simple Python functions. Here are
notes on Python functions as first-class
values that I wrote to introduce students to functional
progamming. And here is a
Pyret program that animates one of my
cartoons.
These are an ingenious method for storing structured data in
high-dimensional vectors. I have written a
Prolog
implementation of holographic reduced representations.
Also, here are some suggestions about
the use of category theory for elucidating
what
holographic reduced representations are really about.
From November 2004 to July 2006, I wrote
an AI Newsletter for Dr Dobbs.
In
January 2006, I did
a
special issue
on the 50th Anniversary of Artificial Intelligence.
For the complete
set, please visit
my
AI Newsletter
index page. Amongst these, you will find:
two AI Alphabets; the artificial life of Karl
Sims; programming the Aibo, World Wide Mind, and Ronald Reagan; why
Microsoft was really created;
and those disembodied rat neurons that, somewhere in Florida, dream of
flying a fighter jet.
Moving to less technical matters,
I've made many happy visits to the
Department of Informatics and Department of Economics at the
University of Minho in Braga in Portugal.
On my Imagens
de Braga page, you
can see
what Braga
looks like. While there, I enjoyed Interring the Cat.
(I was pleased to find a copy of that article in
RAIO-X,
the
magazine of the University of Minho's maths and computation group, edited
by Alberto Simões. Thanks
Alberto!)
As well as Portuguese academic rituals,
I've written about
Beating the Bounds, what it is like to be
foreign, why
object-oriented programming is philosophically defective, e-learning (an
interview I
did for the Greek X-RAM magazine), unrolling the loop in
the
primordial soup, how to
use the JJTree parser-generator, or economics on the Internet.
|
Somniloquacity
(cartoon)
Inside Job
Google Fish
(cartoon)
Incompatibility
Hear Me Croak
(cartoon)
Cover Pictures
The Ills That Steel's not Heir
To
(cartoon)
SQL Jokes
Amazing Story, Amazing Cover
Bubbles
(cartoon)
The Last
Evolution
Non-Representational Art
SAnTa NAV
(cartoon)
A Christmas Puzzle
How to Modularise a
Spreadsheet
Plain English
How to Reveal Implicit
Structure in Spreadsheets
Casting One's Bread
(cartoon)
Plain Language
Greater and Lesser
(cartoon)
The Ultimate
Computer Story
On the Drawbacks of Modern
Technology
(cartoon)
Google Aren't
Idle
Fearful Vista
(cartoon)
In Silicon
No One
Can Hear
You Scream
Googlewhacked
(cartoon)
A History of Computing in 100
Objects
Eggsamining Mereology
(cartoon)
Story of Your
Life
Gonna Sit Right Down ...
(cartoon)
Green Magic
Døt Døt
Dæsh
(cartoon)
The
Processes that Count
How to Survive as a High-Energy
Physics Sysadmin
(cartoon)
When Sysadmins
Ruled the
Earth
Wild Flowers
(cartoon)
Frivolous Uses of Time
Travel (2): All You Zombies
Little White Lies
(cartoon)
The Only Valid Measurement of Code
Quality
A4Billion
(cartoon)
Excel's Missing Ha'p'orth
R.I.P.
(cartoon)
Petter's
Computer Science
Songbook
Alien Imperative
(cartoon)
How to Build a Web Page in 25
Steps
Charity
(cartoon)
On the Properties of a
Sonic Screwdriver
Mis-Guided
(cartoon)
Two
Electrons Short of an Atom
Language Gap
(cartoon)
What Google Tells
Me
People Want
Secrets
(cartoon)
How to Eliminate Boredom at
Work
Getting Tough
(cartoon)
Why We Call Them "Lion
Food"
Proverbs in Pictures I: Don't Count
Your Chickens Before
They're Hatched
(cartoon)
Recaptioned (with
cartoons)
Good Weather for Ducks
(cartoon)
Unicode and the Shavian
Alphabet II
Unexpected News
Via Google
Accounting Error
Waiting for Moore
(cartoon)
Where I Want to Move to
Reprogramming Aibo
(cartoon)
Sony Aibo Images
Sweet Words (cartoon)
Doing Owt wi' Nowt
Bottles (cartoon)
Convergence to a
Pint
Unicode
and the Shavian Alphabet II
No Earthly Power
(cartoon)
MS Fnd in a Lbry
How NOT to Use
Excel
Mr. Excel (cartoon)
Unicode
and the Shavian Alphabet
The History and
Benefits of
Ada
Labels (cartoon)
The End-User and the
Expert Artisan
Demonstrating a
Mini-Compiler with a Stack-Machine Program that Calculates
Factorials
When the
Careless Killer Robots Come
When the
Clumsy Killer Robots Come
When the
Cultured Killer Robots Come
The PowerPoint
Sketch
Google's Window Tax
Come From
LiveHTTPHeaders for Tracing
URLs
Dress Code
What
Might Category Theory do for Artificial Intelligence and
Cognitive Science?
An Online Budget
Questionnaire,
JavaCC,
and the
Three Ways of Putting Together
The Hole in my
Budget
Hello Dear Leader
Operating
Systems as Beers
Windows Factory
Settings
Self-Depeditation
with PL/I
Microsoft Announces Improved Blue Screen
of Death
"Too many errors on
one line (make fewer)"
Stack Machines, Expression
Evaluation, and the Magic
of Reverse Polish
Nature's
Futures
Christoph
Lehner's
Tree Drawing Program
for Prolog
GRIPS: a Preprocessor for
Functional Notation in Prolog
How to Call SWI-Prolog
from PHP
5
How
to Get Tomorrow's Date in Perl
Snobol Patterns
in Prolog IV: bal, and the Use of Failure to
Diagnose Patterns
Associative
Programming and
Snobol's Unusual Indirect-Referencing Operator
Marc Stiegler's Gentle
Seduction
Snobol Patterns
in Prolog III: Sharing Code with
Higher-Order Programming
Snobol Patterns
in Prolog II: Span with Count
Arbno, the Cursor, and
Snobol Patterns in Prolog
More Technonecrophilia with
Snobol One-Liners
Programs That
Transform Their Own Source Code; or: the Snobol
Foot Joke
More New Year's
Resolutions
What We Did Fifty
Years Ago
To Prove Father
Christmas Exists
John Fremlin's Portable
Version of
Jess Johnson's
Joke Generator in Lisp
Computer
Science
Revues at Cornell's Upson Hall
Jess Johnson's
Joke Generator in Lisp
One Sum He's Owed,
By
Any
Road
Exhalation
Artificial
Intelligence Meets Natural Stupidity
The Life and Wisdom
of Father Aloysius Hacker
Office
of the Future Past
How to Avoid
Overpriced Science
Journals
Hair Today, ...
Perspective
The Curse of the
Thinking Classes (cartoon)
And
No Play (cartoon)
Ode on
the Automation of Imbecility
The
Usefulness of Mutant Code
The
Usefulness of Broken Glasses
Escher's Edict
Rhetorical Initiative II:
animating Reagan
Rhetorical Initiative
I
Prolog as a
Text-Hacking Language
Heroes and
Differences
Captioned
(with cartoons)
Primed
(cartoon)
I Tweet, You're a
Twit, He's a Twat
(cartoon)
Bound to be Called
(cartoon)
Fatal Addition
(with cartoon)
Defining Excel Functions without
Visual Basic:
a compiler that converts Excel function definition
sheets
to VBA
An Ounce of
Image (with cartoon)
Frivolous Uses
of Time
Travel (1)
Where am
I?
A Conversation
with
Einstein's Brain
Ram Shift
Tolerance
The European Spreadsheet Risks
Interest Group
Conference is in Paris Next Week
Functions
Ο
Μαθητής
Μαθαίνει
το
Μαθηματικά;
or:
You
Say Math, I Say Maths
Blog
Google and the
Priests
Crystal Nights
Thought for the
Day
Artificial
Intelligence
Lightbulb Jokes
Documenting
Spreadsheets with Pseudo-Code: an Exercise with
Cash-Flow and Loans
Applied
Mathematics Kits
An
Arc Through AI Space
Poem
on the Determination of Consciousness
Consciousness is not a
Window
How to Generate a
Tree-Building Parser in Java using JJTree
Eternal Flame
Flow Charts
Don't Explain
Maths; it's Easier to Explain how Hard it is to Explain
New Hope for the
Dead
Springy Applet Duck
The Consultant
How to Document a Spreadsheet: an
Exercise with Cash-Flow and Loans
Yet More XML: with
Prolog
Idiot Script
On Handling the
Data
Gliders, Hasslers, and the
Toadsucker: Writing and Explaining a Structured Excel Life Game
Poplog, continuations, Eliza, AI education,
and
Prolog
AM/FM
Thought for the
Day
The Prolog Lightbulb
Joke
An Excel Bonus
Sold
Salami with Wine
Salami in Oil
AI Phone Home (cartoon)
The Spreadsheet
Parts Repository for Excel and Google
Spreadsheets (with cartoon)
Filtering the
Inauguration (cartoon)
Intractability>
(cartoon)
Scenes from
a New Depression: Number 27 (cartoon)
Happy New Year (cartoon)
Why I Want to be
Transhuman
Drawn by TAB for TiBS
Trials and tribulations:
measuring drug
efficacy in clinical
trials, plotting graphs in Java with gnuplot, and reading Excel
with JExcelAPI
The Compressibility of
Useful
Information
The Incompressibility of Useless
Information
Old Soldiers
The Dog Ate My
Homework
Problem Solved
Piled Higher and Deeper
Refer to Drawer
Installing and Using Skippy
A Plea to the Future
Coding with
Dinosaurs
Clickaine
Famous First Words
Tipping the Spherical
Cow
When Bankers Only MOVEd
Choosing Easily Distinguished
Colours
with ColorBrewer
B&D with Lady Lovelace
Pestilence Goes
Solo
Category Theory
Interactive Demonstration and Text Adventure
Binary
Holographic Reduced Representations in SWI-Prolog
Through the Toilet-Roll Tube
The
New Hacker's Dictionary
Category
Theory and the Interesting Truths
Good
Versus Great
Finding
the Best Metaphors will be the Work of a Generation
The
Excel Monkey
Category
Theory
Spreadsheet
Humour
Which
Spreadsheet Components Would You Like to See?
Three
Men in a Bar Found a Spreadsheet Society
Entrapping Minnows in the Jar with PL/1
((What
((is) with (all)) of (the) ()s?) Hmmm?)
Lightning
or Line Noise?
Primes
Neural
Net Urban Legends
Spreadsheet
Components, Google Spreadsheets, and Code Reuse
Listless
Haiku
How to
Waste a PhD
Listless
Earth Falls Toward The Sun And Everybody Dies - A
science-fiction plot-generator in Excel
I C BB 2
E
Early
Calls
|