aqcom aqWiki Cantrip computing epistula escape forever Imported From Epistula quoth web development

Mod Rewrite as a virtual hosting environment

So, I’ve now got control of is going to have a number of subdomains, and I don’t really want to muck around with apache every time I want to add one, or get my Friendly Neighbourhood Sysadmin to do so.

Instead, I want mod_rewrite to do it, which it does. I have a virtualhost that handles *, and passes it on to the following .htaccess file:

RewriteEngine on
RewriteRule     ^.**$        -       [L]
RewriteRule   (.*) %{HTTP_HOST}/$1

Which redirects “” to ”~/sites/istic/”, which is what I want.

That shouldn’t have taken as many hours as it did, so I’m writing it down.

Secondly, I’ve moved my braindump – – to a temporary new home whilst the DNS resolves. By the wonders of my new domain name, it’s temporarily housed at which is possibly the best subdomain ever 🙂

So, my personal “hire me” site could go to “”, I could move all my open source projects to “”, set up a site about religion at ritual.istic, head of into the futur.istic and be all m.istic about it and whenever I got fed up with the whole blogging thing and needed to move, I can always go ball.istic.

This isn’t actually far from the plan, which is to move the far flung tin-pot empires of AqCom that are getting lost under five years of journal archives & articles, and move them to their own domains – or subdomains, or sub-subdomains – where they can live happily ever after.

Imported From Epistula MLP


Because lack of content is a dangerous thing, and people are occasionally interested in this kind of stuff. My bookmarks file, slightly edited:


  • Translate
  • Referer
  • Wayback
  • <a href="javascript:var verbsRE=/(b)(i'm|it's|he's|here's|she's|that's|there's|they're|we're|what's|who's|you're|is|are|am|are|was|were|be|being|been|go)(b)/gi;var lyRE=/(w)(ly)(b)/gim;function HL(node){if(node.hasChildNodes){var hi_cn;for(hi_cn=0;hi_cn<node.childNodes.length;hi_cn++){HL(node.childNodes[hi_cn]);}}if(node.nodeType==3){var tempNodeVal=node.nodeValue;if(verbsRE.test(tempNodeVal)){tempNodeVal=tempNodeVal.replace(verbsRE,%22$1$2$3%22);tempNodeVal=tempNodeVal.replace(lyRE,%22$1$2$3%22);newNode=document.createElement(‘span’);newNode.innerHTML=tempNodeVal;pn=node.parentNode;pn.replaceChild(newNode,node);}}}HL(window.document.getElementsByTagName(‘body’)[0]);”>Passivator
  • Random Joke
  • <a href="javascript:(function(){var root=document.getElementsByTagName('html')[0];var mydomtree=processdomnode(root);var;newwin.document.write('

    DOM tree

    ‘);newwin.document.body.appendChild(mydomtree);function processdomnode(n){if((n.nodeType==3)&amp;&amp;(n.nodeValue.replace(/[ nrt]/g,”).length==0))return;var mynode=document.createElement(‘div’);var mytitle=document.createElement(‘span’);if(n.nodeType==3){mytitle.setAttribute(‘title’,n.nodeValue);mytitle.appendChild(document.createTextNode(n.nodeValue.replace(/^[ ntr]*/g,”).substring(0,4)+’u2026′));mytitle.className=’content’;}else{mytitle.appendChild(document.createTextNode(n.nodeName));}mynode.appendChild(mytitle);for(var i=0;iShow DOM tree

  • <a href="javascript:(function(){var root=document.getElementsByTagName('html')[0];var mydomtree=processdomnode(root);var;newwin.document.write('

    DOM tree


    Hide text nodes

    ‘);newwin.document.write(”);newwin.document.body.appendChild(mydomtree);function processdomnode(n){if((n.nodeType==3)&amp;&amp;(n.nodeValue.replace(/[ nrt]/g,”).length==0))return;var mynode=document.createElement(‘div’);var mytitle=document.createElement(‘span’);if(n.nodeType==3){mytitle.setAttribute(‘title’,n.nodeValue);mytitle.appendChild(document.createTextNode(n.nodeValue.replace(/^[ ntr]*/g,”)));mytitle.className=’content’;mynode.className=’content’;}else{mytitle.appendChild(document.createTextNode(n.nodeName));}mynode.appendChild(mytitle);mytitle.referenceNode=n;addEvent(mytitle,’mouseover’,hover);addEvent(mytitle,’mouseout’,unhover);for(var i=0;i4)&amp;&amp;(n.nodeName.toLowerCase()!=’body’))apch.className=’longcn’;mynode.appendChild(apch);}}if((n.childNodes.length>4)&amp;&amp;(n.nodeName.toLowerCase()!=’body’)){var expander=document.createElement(‘a’);addEvent(expander,’click’,dntoggle);expander.href=’#’;expander.appendChild(document.createTextNode(‘+’));expander.className=’expander’;mynode.appendChild(expander);}return mynode;}function addEvent(obj,evType,fn,useCapture){if(obj.addEventListener){obj.addEventListener(evType,fn,useCapture);return true;}else if(obj.attachEvent){var r=obj.attachEvent(‘on’+evType,fn);return r;}}function dntoggle(e){if(window.event)t=window.event.srcElement;if(e&amp;&amp;;if(!t)return;ta=climbDomTree(t,’a’);t=climbDomTree(t,’div’);if(!t)return;minus=’–‘;for(var i=0;iShow DOM Tree II

  • Document Tree Chart
  • /g,’&amp;gt;’).replace(/</g,'&lt;').replace(/%22/g,'&quot;');}var q,h,i,z=open().document;z.write('

    Images linked to by ‘+hE(location.href)+’:


    ‘+q.innerHTML+’ (‘+hE(h)+’)
    ‘);}z.close();})()”>linked images

  • <a href="javascript:(function(){ function zoomImage(image, amt) { if(image.initialHeight == null) { /* avoid accumulating integer-rounding error */ image.initialHeight=image.height; image.initialWidth=image.width; image.scalingFactor=1; } image.scalingFactor*=amt; image.width=image.scalingFactor*image.initialWidth; image.height=image.scalingFactor*image.initialHeight; } var i,L=document.images.length; for (i=0;izoom images in
  • go to referrer
  • <a href="javascript:(function(){ function zoomImage(image, amt) { if(image.initialHeight == null) { /* avoid accumulating integer-rounding error */ image.initialHeight=image.height; image.initialWidth=image.width; image.scalingFactor=1; } image.scalingFactor*=amt; image.width=image.scalingFactor*image.initialWidth; image.height=image.scalingFactor*image.initialHeight; } var i,L=document.images.length; for (i=0;izoom images out
  • <a href="javascript:function toc(){var x = document.body.childNodes;var y = document.createElement('div');var title = y.appendChild(document.createElement('span'));title.innerHTML = %22Table of Contents%22; = 'toc';var z = y.appendChild(document.createElement('ul'));y.className=%22list%22;var toBeTOCced = new Array();for (var i=0;i<x.length;i++){if (x[i].nodeName.indexOf('H') != -1 ){toBeTOCced.push(x[i]);}}for (var i=0;iTOC
  • Search Site
  • Subscribe with Bloglines
  • BugMeNot











comics pending

blog this




Research &amp; Ref







psx emu




Quick Access

Leakytap customs

Search Engines










Internet Tools


Open Source

Courier Services

Mozilla Development









Imported From Epistula internet


I’m assuming everyone who wants a gmail invite has one by now, but in case not, I have a couple spare. Any takers?

All Gone

Imported From Epistula web development XML

Atom Comments

Looking up your hostname…
Got your hostname.
Welcome to the Internet Relay Network Aquarion
Your host is running tiamat-1.0(04).ylist.hfix via dircproxy 1.0.5
This proxy has been running since Tue, 24 Aug 2004 09:41:55 +0100
identify ****
Aquarion sets mode +i Aquarion
Now talking on #eddings
Topic for #eddings is: ‘I am A PRODUSER.’
Topic for #eddings set by itagne at Wed Aug 25 08:50:42 2004
[10:29] yeah
[10:29] occasionally I’ll log into the server via the website and delete the crap manually
Senji [10:41] continues to think that feeds should include magic information on how to comment on them, rather than you having to go to the actual entry’s page to comment.
[10:46] it would be useful, yes
[10:46] I’m betting taht will be ATom’s Killer Feature
Password accepted – you are now recognized.
(You Connected)
Er, no. I think that’s a really sucky idea
almost everything required to do it already exists in Atom, and the last stephas been mooted
Mostly because it dictates what I store (and can store) about a person
Aquarion – why?
Aquarion – the feature I want is basically a URL.
That already exists in RSS.
what else would you demand of the user?
It’s what the <comments />element is for.
<comments />– no comments? 🙂
So it does… 🙂
gilmae, For any Epistula entry, I store various things from the location from where I posted it, date, time. I could include mood, current music playing, a whole host of things.
for comments?
I could also do that with comments
you could
Aquarion’s comments have lots of tickyboxes.
The point is that any standardised comments interface wouldn’t let me.
And there’s that too. It’s why any given API cannot do everything, and the Atom API won’t ever work fully for all weblogs
The comments over Atom would just be a way for commenting for people who don’t want to go to your site though, in the same way that the feed is for people to read your posts without going there
people who want the frilly bits are going to read the site, and comment there
They can fuck off. If they can’t be bothered to go to my site, I don’t need their opinion.
Senji also wishes that people wouldn’t use javascript popups for comment interfaces…
It’s been al ong time since *you* were on dial up, eh, Aqn
frankly, when I was on dialup, I didn’t have the time to sit around for people’s designs to load up
gil – people’s designs were too heavyweight then 😛
I wanted to read what they said, not see the same design I saw yesterday
Because if it’s infinatly extendable, then no one client will support everything, and if it isn’t, then I can’t store everything I want.
obviously, Aqn excepted cause he changes his header image often :- )
gilmae: It’s not the design. It’s the validation, the optional info (And different sites having different optional bits)
Senji – I used to have javascript popups, but then I changed to a better blogging system. :-p
Senji, I read about two dozen feeds daily, about another three dozen weekly…even light designs start to add up over that 56K link
Aquarion has about 180 RSS feeds he checks at the moment
Aqn: validation? you can still do that over Atom
But I tend not to read them in the aggregator. If I want to read them, I go to the site they came from.
gilmae: Last I saw it, all atom’s validation was post effect. I can’t say “these you need”, and I still can’t include my tickyboxes
gilmae shrugs…behaviour differs obviously
I really don’t like the homogeneousness that reading everything though a aggregator (or a f/list, for that matter) dictates
I spend a while with my site making it look readable, and having it parsed though a sucky interface negates that
don’t get me wrong, I’m really trying not to be personal, but that is so arrogant
its a pretty short step to only allowing people to email you if they do it through the client you give them
I’d disagree with that.
My biggest problem with the comment-by-atom thing, and the reason why nothing I will ever write will use it, is that it’s an gaping hole with a large sign pointing into it saying “Free google-rank! Point your spambot here!”
the only possible response I can give to that is awful, cause it is “It will all be better in the future”ism
When we have jetpacks and a base on the moon, I shall possibly rethink my position
but the spec is pretty raw, and I just can’t see it going through without the ability to return reponse codes to indicate that an entry doesn’t validate, nor can I see it going through without allowing the author to close off comments, either permenantly or on a spam by spam basis
Yes, but that just means we have to run spamassassin on all our comments
And I’d rather not have another pile of “possibly spam” to sort though every week
I can’t see why something like mt-blacklist can’t be used for Atom comments
Me neither, but I don’t see blocking spam as preferable to having the hole in the first place
Aquarion considers pasting this conversation into an entry
actually, that’s very well done, Aqn
you just came up with The Perfect Reason for people to write their own blogging engines
“Well, I wrote my own so that my commenting system isn’t Movable Type’s”
Yeah, it’s a side benefit 🙂

(Slightly later)

shall i make a Perfect World statement? :- )
You can, I might even append it to the entry I just posted 🙂
In A Perfect World, and I accept that this is the same world as the one with Mr Fusion-powered-DeLoreans, you (Aqn) would be able to publish your schema/DTD/whatever of your commenting-frilly-bits, and the Atom client would be able to use discovery to see that you support this functionality and the schema would tell it how to support it
That is indeed a perfect world
Actually X-Forms would solve some of that.
Include an X-Form for the comment – which has validation information – for each entry
And, while we’re at it, I want a pony ana castle.
Computer Games Current Affairs Imported From Epistula Personal

Bring me that horizon

In brief then:

  • Am back from con. It was fun. Report later.
  • UK Media is back in “Qualifications” peanut-galleryery. Report later.
  • Doom 3 Rocks. Report later.
  • Sid Meier’s Pirates remake looks like it will rock. Report later.
  • Sims 2 has gone gold, and is on target for September release. Report later.
Imported From Epistula Personal

The saga of the cat, Part One

So, we have more or less been adopted by Arnold The Cat recently. Mostly because I tend to leave the back door open (Mmm, nature) and Arnold likes being fuzzled and so wanders up to my room when I’m home.

LoneCat, love of my life and co-inhabitant of this particular version of domestic bliss, is allergic to cats. Arnold, recognising this, prefers to sit on her bed if the doors open, and glare at her when she isn’t stroking him. Which is – obviously – always.

Thus the essential drama is maintained. LoneCat verses Real Cat. LoneCat is well trained. As she has mentioned she occasionally lets Arnold use the house as a thoroughfare, and today this ritual was once again performed. Arnold batted at the cat flap (installed by previous owners, one-way locked by us. Cats can get out, but not in), LoneCat let him in, failing to notice that it was pelting with rain outside.

Arnold, finding himself in a warm place in which he was not actively being rained upon, felt that this was a place in which he could remain. Specifically, he felt that halfway up the spiral staircase was the ideal place from where a small, cute, white and grey splotched feline could lay and carefully watch all that passed below. LoneCat – who couldn’t touch the cat – then tried to convince it vocally that this wasn’t a good place to be, and out in the nice, fresh rain was the ideal place for the well appointed feline this summer.

The cat didn’t swallow this. Instead, it batted at one of the yellow plastic ducks we have on our stairs for reasons I one day hope to explain. The cavalry – that is Me – was called in. I attempted to talk Arnold down from the stairs. I tried pushing, guiding it with strokes and fuzzles, and lifting it up. This was repulsed with tactics such as ignoring me, moving out of the way, and clinging to the carpet like industrial strength Velcro.

I used the heater to blow hot air at it, and it hid in an Amazon box. When I picked up the Amazon box, it went into the kitchen. I guided it out of the kitchen and it made a break for my bedroom – within the clutter of which a small feline could hide undetected for decades – whereupon the cat tripped on a rubber duck and hit the stairs face first.

At this point I could probably have picked up the stunned pet without any problem, save for the minor fact that I was trying not to laugh to much to do anything much. There then followed a short period of the cat attempting to pretend nothing had happened, whilst pointing out that it had a hurt paw now, and would quite like sympathy.

We left it. Score one to the cat.

Obviously, a little while after we left it alone it left of it’s own accord. It is, after all, a cat.

Once more with spellcheck

Computer Games Imported From Epistula


I now have Doom3


aqWiki Imported From Epistula

AqWiki release – beta testers wanted

I’ve released the very first version of AqWiki (Version Prerelease Alpha Milestone Zero Beta, not to underline the whole “Not final” thing too heavily. Or anything).

I’m looking for people to download it and run though the install instructions and report any problems to the bug tracker. It requires Linux, PHP, MySQL & Apache, and testers will earn my eternal gratitude and stuff.

Imported From Epistula Metablog web development

Subscribing to LJ RSS friends only feeds

Every LiveJournal publishes an RSS feed and an Atom feed, except those who are already syndicated accounts. The problem is that the main benefit of LJ beyond something like blogspot is the ability to block off some posts to everyone but your ‘friends’.

Much as I distrust the terminology, this is occasionally useful. So, how do you subscribe to a feed and see the ‘friends’ only posts? Like this:



Don’t, whatever you do, do this in something public like Bloglines, or you’ll be storing stuff other people want private in a database over which you have no control and they have no idea.

+(Incidentally, If you add a feed with a username or username & password to bloglines, it’s set as “Private” so nobody else can see it. It’s still in their database, though, so I suppose it depends on how much you trust Ask Jeeves not to be Evil).+

Observations that the first this is equally true to LJ are normally completely ignored.

edited to replace soft-hypens in the long URL with zero width spaces because Mozilla doesn’t support shy and it breaks the layout. I hate the bazaar model when it means that nobody else cares enough to fix a bug. The relevant bug had it’s fifth birthday recently

Imported From Epistula Politics

Trust the computer

From Preparing for emergencies

Page 14:

“To prepare for an emergency, you should take time to find out: […]

  • The emergency procedures for your children at school
  • The emergency procedures at your workplace”

Page 16:

“If you hear, see, or come across anything that may be linked with terrorist activity, please tell the police.
Have you seen anyone pay an unusual amount of attention to security measures at any location?”

So, report anyone you see reading PfE to the police. If they have nothing to hide, they have nothing to fear.

(No, don’t report me, I got this from ForeverDirt)

Stay alert, troubleshooters.