squaremobius dot net
Sometimes having grand plans is totally isolating. The bottleneck is
my brain.
— Paul Ford
Wed, 28 Jun 2006
Content subject to imperceptible change
Just recently I've been working on porting this site to fuschia,
which is really just some Python code I've been playing with for
slapping templates on RDF. I hope to make very little perceptible
difference to the site (posting here infrequently also supports this
aim). But I will be pleased.
There are some other things I want to work on that will make very
little difference to anyone but myself. I want to make a
JavaScript-and-DOM implementation of an Atom client (this will help
me post stories). I want to revisit the styles, and reform that
Dreamscape theme. I want to be a fully-functional member of the
semantic web (by providing all sorts of feeds and metadata).
Inevitably though, there may be some gee-whiz stuff. There may also
be some new content. Or—dare I say it (dare! dare!)—a
podcast. I'll try not to surprise anyone.
Top;
this story;
category (/geek/);
permalink (UpcomingSiteChange).
Tue, 04 Oct 2005
Code archaeology
I got down to looking at the directory that holds my code checkouts
the other day. There's a progression of version control software:
CVS -> Arch -> Darcs; and several false starts (some without
corresponding starts).
For example, there's PIJ, which amounts to the bare bones of a process-calculus based kernel in Java.
...
All data implements Channel. The channel provides a process view of
data. Most primitives (which are in turn just banged continuations
hanging off ports) will access data directly rather than going via
the process reflection.
...
Then, there's an implementation of join
calculus (concurrency again!) with some syntax-case
madness from TonyG, and a very simple scheduler from me.
(define (scheduler-step continue)
(and (not (queue-empty? *SCHEDULER-QUEUE*))
(begin (call/cc
(lambda (k)
(set! stop! (lambda () (k 'dummy)))
(if (not (queue-empty? *SCHEDULER-QUEUE*))
((queue-pop! *SCHEDULER-QUEUE*)))))
(and continue
(scheduler-step continue)))))
Then, Sake, which is supposed to be our
answer to both Ant and Make but fails through lack of working
... anything. I do like the idea of it though.
Rather than being discouraged by all this unfinished, possibly
abandoned code, I'm now feeling a little bit enthused about
reviving, redeveloping, and redacting.
Top;
this story;
category (/geek/);
permalink (CodeArchaeology).
Mon, 31 Jan 2005
Sat, 11 Dec 2004
hacking hacking hacking
I've been doing some guerilla hacking on zowie. Starting from the
SDL and Cairo
bindings
for Chicken, I added some makeshift protocols for building and
rendering scenegraphs, then classes representing some graphical
primitives and a camera. A small bit of fooling around with
events and we can zoom in and out on a simple scene with
transparent, filled and stroked rectangles and text.
The next step is to add an MVC layer; the views I am (perhaps
cheekily) calling 'zorphs'. Soon I should have input event
handling, damage reporting, and the other basic stuff I need to
for user interaction. Go the hacking!
Top;
this story;
category (/geek/zowie/);
permalink (ZowieHacking).
Tue, 28 Sep 2004
Mon, 20 Sep 2004
Tue, 14 Sep 2004
Wed, 01 Sep 2004
The design of fuschia--1
What I think are good points about fuschia-0:
- The template system is small, clean and simple. Not sure
about how arguments are represented (or whether there should
be any), but we'll see.
- The arrangement of templates works well —
using a
document template, then within that a
story template,
etc. Might be useful to supply a standard 'use a
template' function for customisers.
- Some of the utility (helpers) code is fairly reusable.
and points that need updating
- Keeping everything in the environment dictionary is just
silly and makes the code messy. Most things can just be
let in
configuration, with variables really the only things worth
keeping in the environment dictionary.
- Conceptually the storage/query abstration is in strife,
probably from trying to be too generic.
Better to assume more things and make things that are usable
— 80/20, man. It's worth checking out gyre to see
how queries are made there.
-
It's too complicated even just to bootstrap. More
assumptions, or better defaults. Relatedly, there could be
far less code.
-
I think I'm coming around to TonyG's view of the
difference between caching and storage; caching is not a
facade on storage, it's a facade on the model (or indeed,
it is the model).
- Filters were just chaotic.
- Query parsing (and unparsing) is a bit ad-hoc and introduces
problems with templates, though the code is probably reusable;
needs to be thought through a bit more first.
I think the new way of going about things is:
- Base classes (the default for bootstrapping) can be
'in-memory';
subclasses of those might load from the filesystem, etc.
- Keep a caching model of the stories à la gyre; apply
filters to stories when loading them (on demand according to
the query).
-
Bootstrap with some sensible settings but allow the user to
override them immediately, as well as in per-query
configuration.
-
Make sure nothing upsets static rendering!
and open questions:
- Will I just end up with gyre with a few extra hacks (and
should I therefore just branch from gyre)?
- How can I introduce some of the Zowian ideas about
semantic-to-spatial relationships? Are they even
in a state to be used?
Top;
this story;
category (/geek/fuschia/);
permalink (FuschiaOneDesign).
Where am I going with this anyway?
Ever start something then realise you have no idea where you want to
end up? 'course you have. You'll know how I feel about
Fuschia then.
Fuschia started as a response to blosxom being, well, Perl, and PyBlosxom being,
well, too far away
from blosxom (yes that's right, you can't win with me).
No sooner had I begun thinking about it than I formulated Grand Plans;
for example, Fuschia will have a flexible and powerful template system
and per directory configuration and … — you know how it
is. And very soon after that, TonyG up and implemented his own
blosxom-alike, citing irreconcilable differences. PALT.
So, it's back to basics: Is it worth rewriting Fuschia? What do
I want it to do that isn't available elsewhere?
The first question I'll have to think about (and find time for). This is what I want
it to do that's halfway novel:
- A templating system similar to blosxom, but 'safe' in
that the template variables have to be supplied as such explicitly
- per-query configuration and templates, with usable
defaults
- the opportunity to plug in different renderers, story filters,
backing stores, and whatever else makes sense
- Static rendering that Just Works
As it stands, it is over- (and poorly) engineered, and sketchy as
hell. With my new-found direction, maybe I can pull it back from the
brink of untouchability.
Top;
this story;
category (/geek/fuschia/);
permalink (WhereAmIGoingWithThis).
Tue, 24 Aug 2004
HCI as language
TonyG and I were talking about human computer interaction as a
conversation. If you consider a user interface to be a language, with
a vocabulary and a grammar, then user actions are sentences. More
specifically, taking the example of a direct manipulation style
interface: icons or selections of icons are noun (phrases), gestures
are verb (phrases). Dragging a file icon to the trash can is saying
FILE GOES TRASHCAN.
A few things are apparent when you look at things this way: most
direct-manipulation(-of-files) systems have effectively one verb
(gesture): that
is, GOES, usually indicated with a click and drag gesture.
Most sentences are just noun-verb-noun. Also, the
computer is mostly a passive partner in the conversation, aside from
'minimal encouragers' — brief sound effects and
animations as feedback that the gesture was recognised.
Using more than one verb
I said before that most systems only have one verb GOES;
you might contest that there is also INVOKE
(intransitive), so let me qualify my position by adding that
has meaning within the system. I'm saying that starting an
application or opening a file is stepping outside of the language
(more on this later, or in another post). In file manipulation, it may
be that one verb is sufficient — the rest is interpetation based
on the nouns in the sentence and the context. There seems to be a
trade-off between a rich set of interpretations and a rich set of
verbs, which is heavily weighted
in favour of interpretations. This is a little weird to me.
The contrasting situation is to have a rich set of verbs (hence,
gestures) and consistent meanings for the
verbs. For example, to delete something you could scribble over it;
delete should after all be intransitive, surely. If you want to
modify something, click in it (this is
half-arsedly approximated by the 'file-type associations'
pattern in desktop systems). If you want to move it, select (circle?)
it and drag it.
More complex sentences
Sentences in contempory graphical user interfaces are very simple;
usually NOUN VERB NOUN. There's no recursion, only
statefulness. What if you could form complex sentences? Sure, with
only one verb there are not that many interesting complex sentences
you can form. With many verbs you can make interesting noun phrases:
Text similar to this text should be copied here.
Having a conversation
So far the computer is listening to what we say, and interpreting it
as commands to update its state. The computer may as well not be
there, it's just the user (as TonyG puts it) shuffling
paperweights.
If we imagine the computer on the other side of the screen, and the
screen itself as the speaking-space between the user and the computer,
then we can have a 'proper' conversation. For a start the
computer should ask when it doesn't understand or needs more
information; and it should ask in the same language as we are using.
What does this mean, concretely? Good question.
Top;
this story;
category (/geek/);
permalink (LanguageAndInterface).