[ Blog | Software consultancy | Economics, distance learning, and interactive Web sites | Research | Category theory | Making spreadsheets safer | Prolog | Artificial intelligence | Other teaching | Holographic reduced representations | Writing | Publications | Free software | Contact ]
★ The Medium Wrecks the Message: Describing Artistic Style Using a Relational View of Art, The Polish Journal of Aesthetics, Issue 62 (Styles of Discourse), 3/2021.
★ Subscribe to my articles on art, meaning, maths, and cartoons. The introduction is here.
★ Mini-Patreon software in PHP. From the above link.
I am a software consultant. I specialise in R, WordPress, interactive educational websites, spreadsheet safety, and Prolog, although I have also worked on a variety of other languages and topics.
My R projects include a model of the UK economy, a prototype database of artistic techniques (see the two "Artistic Techniques Database" links above), and an animation generator. The longest project involved analysing clinical-trials data for Bandolier, the Oxford evidence-based medicine group run by Andrew Moore. I worked with them for seven years. 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. You can see a very nice reference from Andrew here.
R has its quirks, but it's versatile and equipped with excellent libraries for statistics, graphics, website creation, data validation and other tasks. As an experienced computer scientist with a good knowledge of programming-language theory, I can cope with the oddities, and I enjoy teaching it. If you'd like lessons, please contact me.
In WordPress, I've built several sites for local businesses. Some of these needed extensive PHP scripting, particularly to modify the behaviour of premium themes. I've also developed themes from scratch. One was for Bandolier, mentioned above, to make their WordPress blog match the rest of their site. Other jobs included coding a registration system for someone making antique home movies available to nominated family members and friends; and yet another was for a group setting up a barter-and-recycle site. For commercial reasons, I can't name them, but they wrote me a glowing reference.
For my work on interactive educational websites, spreadsheet safety, and Prolog, please see the sections following this one.
Miscellaneous 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 such as those in Wolvercote and Cutteslowe as well as private individuals, and have been on the finance team for the CWW Cooperative Trust.
Economics, distance learning, and interactive Web sites
A lot of my projects have involved interactive and educational Web sites. 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.
Making spreadsheets safer
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.
Holographic reduced representations
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.
Dr Dobbs blog
Google Fish (cartoon)
Hear Me Croak (cartoon)
The Ills That Steel's not Heir To (cartoon)
SAnTa NAV (cartoon)
How to Modularise a Spreadsheet
How to Reveal Implicit Structure in Spreadsheets
Casting One's Bread (cartoon)
Greater and Lesser (cartoon)
On the Drawbacks of Modern Technology (cartoon)
Fearful Vista (cartoon)
In Silicon No One Can Hear You Scream
A History of Computing in 100 Objects
Eggsamining Mereology (cartoon)
Gonna Sit Right Down ... (cartoon)
Døt Døt Dæsh (cartoon)
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
Petter's Computer Science Songbook
Alien Imperative (cartoon)
How to Build a Web Page in 25 Steps
On the Properties of a Sonic Screwdriver
Two Electrons Short of an Atom
Language Gap (cartoon)
What Google Tells Me People Want
How to Eliminate Boredom at Work
Getting Tough (cartoon)
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
Waiting for Moore (cartoon)
Reprogramming Aibo (cartoon)
Sweet Words (cartoon)
Unicode and the Shavian Alphabet II
No Earthly Power (cartoon)
Mr. Excel (cartoon)
Unicode and the Shavian Alphabet
The History and Benefits of Ada
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
LiveHTTPHeaders for Tracing URLs
What Might Category Theory do for Artificial Intelligence and Cognitive Science?
An Online Budget Questionnaire, JavaCC, and the Three Ways of Putting Together
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
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
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
Artificial Intelligence Meets Natural Stupidity
The Life and Wisdom of Father Aloysius Hacker
How to Avoid Overpriced Science Journals
The Curse of the Thinking Classes (cartoon)
And No Play (cartoon)
Ode on the Automation of Imbecility
The Usefulness of Broken Glasses
Rhetorical Initiative II: animating Reagan
Prolog as a Text-Hacking Language
Captioned (with cartoons)
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)
A Conversation with Einstein's Brain
The European Spreadsheet Risks Interest Group Conference is in Paris Next Week
Ο Μαθητής Μαθαίνει το Μαθηματικά; or: You Say Math, I Say Maths
Artificial Intelligence Lightbulb Jokes
Documenting Spreadsheets with Pseudo-Code: an Exercise with Cash-Flow and Loans
Poem on the Determination of Consciousness
How to Generate a Tree-Building Parser in Java using JJTree
Don't Explain Maths; it's Easier to Explain how Hard it is to Explain
How to Document a Spreadsheet: an Exercise with Cash-Flow and Loans
Gliders, Hasslers, and the Toadsucker: Writing and Explaining a Structured Excel Life Game
Poplog, continuations, Eliza, AI education, and Prolog
AI Phone Home (cartoon)
The Spreadsheet Parts Repository for Excel and Google Spreadsheets (with cartoon)
Filtering the Inauguration (cartoon)
Scenes from a New Depression: Number 27 (cartoon)
Happy New Year (cartoon)
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
Choosing Easily Distinguished Colours with ColorBrewer
Category Theory Interactive Demonstration and Text Adventure
Binary Holographic Reduced Representations in SWI-Prolog
Category Theory and the Interesting Truths
Finding the Best Metaphors will be the Work of a Generation
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?)
Spreadsheet Components, Google Spreadsheets, and Code Reuse
Earth Falls Toward The Sun And Everybody Dies - A science-fiction plot-generator in Excel
[ Belgium, Netherlands,
computing ... some jokes
[ MS-DOS, bureaucracies, APL, ... some quotes ]
[ Fortran, breweries, ants, ... some verses ]
[ The Excelsior Dialogues | Wharf House quotes ]
[ From Portugal, and also Greece, Holland, Romania, and Kidlington and Gosford gym, ... some recipes ]
[ From Romania, Bulgaria, Portugal, ... some photos | Imagens de Braga | Oxford Town Criers' Competition 2012 ]
[ Matt Carroll's
[ Dougal Lee's Richard Head and the Bomb at SPC ]