|
I consult on spreadsheets (including Excel macros and Visual Basic for
Applications), programming, Web development, data
conversion, and writing — please
see my Spreadsheet
Factory page at www.spreadsheet-factory.com . In my
latest projects, I worked
with
Andrew
Moore and Sebastian Straube
of the Oxford
Pain Research Group as described in my Dr Dobbs blog posting
Trials and
tribulations: measuring drug
efficacy in clinical trials, plotting graphs in Java with
gnuplot, and reading Excel with JExcelAPI.
I also helped my friend Graham Stark of
Virtual Worlds
port a Gnat Ada program to
Windows as
part of an economic simulation for
the Office of the Scottish Charities
Regulator.
Do you need, quickly and reliably, to make different versions
of a spreadsheet, say by resizing it or changing its layout?
My Excelsior program may help. With it, you
can write spreadsheets as programs
in a language that uses meaningful identifiers
rather than A1-style cell names, then compile
them into Excel or Google Spreadsheets.
Excelsior separates
layout from calculation, so you can arrange the same formulae in many
different ways just by changing a few "layout" statements.
Because of the meaningful identifiers,
Excelsior programs are easy to read; and
with
Literate Excelsior,
you can list your programs as nicely formatted Web pages.
Considering how badly documented spreadsheets are, this
is important. Papers about Excelsior, plus
demonstrations and example programs, are linked from my Excelsior page.
You can get a free download
of Excelsior 1.3 for Windows, from my Spreadsheet Parts
Repository
Excelsior
page.
I am on the programme committee of the European Spreadsheet Risks
Group.
Excelsior is modular: you can store modules
in different files, then include them in
your program. I also have software for decompiling
or reverse-engineering spreadsheets into Excelsior
modules. Together, these let you share code between
spreadsheets, something impossible in plain
Excel.
Taking this idea further, I have
set up a Spreadsheet Parts
Repository, from which you can download
calculations you'd find hard to program yourself.
Please see that page
for more info, including demonstrations
with Excel and Google Spreadsheets, and the contents
list.
Inspiration for Excelsior
came from
a branch of mathematics called
category theory; and
from Joseph Goguen's
sheaf
semantics, which uses category theory
to model systems of interacting objects.
I put some
Web-based
category theory demonstrations
on my server:
see also my
n-Category
Café thread about Graphical Category Theory Demonstrations.
I am also interested in applying
category theory to analogical problem solving and to
machine learning. I've written a little about this in
Generalisation
is an adjunction; and
in an n-Category
Café posting about
the
benefits of category theory for cognitive science and
Artificial Intelligence. That posting is in several
sections, broken up by readers' comments, so
this copy
may be easier to read. I have some
experiments in mechanising sheaf semantics,
which I call System Limit Programming.
As well as the category
theory demonstrations, I've worked on a
variety of
Web-based
interactives. The biggest was
Virtual Economy,
a simulation for teaching economics over the Web. We
put up versions of this
on BBC
News Online for Budget Day, together with a JavaScript Budget
Budget Calculator. I worked with the Institute for Fiscal Studies and am part
of the Virtual Worlds Group.
Here's an early
article on how we connected the models to the Web, and here is lots of
technical information on VE.
I've also implemented the spreadsheet-based economic simulations on the
biz/ed Virtual
Learning Arcade. This is how
we did it.
I've also played with
generating news stories and diaries
from
economic forecasts.
Here are some experiments. How does the
story-generator work? It's described here.
Or you could read about Algebraic Web
Specification.
Other attempts, of a
quite different nature, at building tools for authoring interactive Web
pages are Web-O-Matic (based
on sheaf semantics) and WSM
(based on the notion of Web pages as functions in a state-transition
network).
Here is a program that
generates plots for SF stories.
That's one of the programs I used for teaching Prolog. Another
is Traveller, a
little game where the student programs robot vehicles to buy and sell
goods from shops arranged round a board. Here is
an
introduction to Prolog for mathematicians.
Here are an
automatic tester for Prolog;
the GRIPS pre-processor
for
translating functional definitions into Prolog; and
my thoughts on
Why Use Prolog?.
Free software in other languages is on my
free software page.
I used to teach AI at
Oxford.
In teaching my students,
I liked the whole-agent approach, and have
built complete agents, in their own
microworlds, to illustrate
classical AI, and to demonstrate
the difference between this and the "nouvelle AI" approaches.
I have done lots of commercial AI work, including implementing
expert systems and Prolog compilers, teaching AI and Prolog, and writing
a morphological
generator for the Alvey Natural Language Toolkit.
Here's an
SWI-Prolog
implementation of holographic reduced representations.
Here are some suggestions about
the use of category theory for elucidating
what
holographic reduced representations are really about.
I draw cartoons, which are linked from here. Most of
them are for Dr Dobbs
Codetalk, for whom I write a regular blog.
From November 2004 to July 2006, I wrote their
AI Newsletter.
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.
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.
Here are
photos
from
Romania, Bulgaria,
Portugal and other places. And I've already mentioned my
Imagens de Braga page.
From Portugal, and also Greece, Holland, Romania,
and Kidlington and Gosford gym:
recipes
I wrote up for
Elder Stubbs.
They include
Marrow Rum (from ex-sailor Ron in
the
gym); and
Afghan Leeks, sent by my friend Andrew Watson
from Kabul.
I enjoy collecting dialogues and quotes. Here are
The Excelsior
Dialogues, overheard in
Oxford's Excelsior café;
and a few Wharf House
quotes.
No one has done more to elucidate transhumanism than
science-fiction author
Greg Egan.
However, I want to do my bit.
Hence my Dr Dobbs blog posting Why I
Want to be Transhuman; and, with a look more at time than
powers, A Plea to
the Future.
|
NEW!
Free download
of Excelsior 1.3 for Windows, from the Spreadsheet Parts
Repository
Excelsior
page.
R.I.P. Morrells
Brewery.
Installing the Gnat Ada AWS Web
development framework on Windows XP.
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
Other
|