<< October 2003 December 2003 >>

Saturday 29 November, 2003
#[linkfarm] HOWTO: Use the WebBrowser Control to Open an Office Document
[Add a comment]
Friday 28 November, 2003
#[linkfarm] Thinking Putty defeats Biometric Fingerprint Scanners!
[Add a comment]
#[linkfarm] CSS Crib Sheet
[Add a comment]
#

Trundled down to the Register Office to fill out Harry's forms on Tuesday. It's a reassuringly British and bureaucratic process. As you arrive at the Register Office, a board instructs which window to present yourself for births, deaths, marriages or just rootling around in your genealogical tree.

On presenting yourself at the births window, a functionary takes your details and looks them up in a big looseleaf binder, confirming that your bundle of joy really did arrive at the time and place given. Quite what happens here if the two don't agree, I fortunately didn't have to find out. You're given a docket, and told to wait until called.

Because I'd turned up mid-Tuesday morning, it wasn't busy and the wait was only for two or three minutes. Up those stairs there, to the office on your card, Mr Higgins. Accurate to a fault, but also rather redundant because there is only a single flight of stairs. Up I ran.

The stairs turn onto a long corridor, windows on one side, doors on the other. The door nearest has a little sign sticking out above it marked 'A', the next 'B' and so on into the distance at somewhere around 'P' or 'Q'. My docket said 'B', so that's the door I chose. Anything else would just have caused confusion and delay. The door opened onto a rectangular room, furnished only with a desk, a couple of chairs and a little trolley with hanging files. The Registrar sat on the far side of the desk, and invited me to sit opposite. Again for the avoidance of confusion and delay, I did.

In a brief acknowledgement of changing times the registration form filling is done on a computer. Once you've confirmed the baby's name, your name, occupation and so forth though, the Registrar opens a desk draw and pulls out a big, apparently leatherbound, book, the Register indeed. Using a dip pen the details are transcribed from screen to page, given a good going over with a piece of blotting paper, and presented to you for signing. You're given a little certificate, which the Registers signs and blots, and that's that.

Don't forget to hand the docket back in on your way out.

smellygit said Thats a special pen/ink combo I think - wouldn't be legal if done with a biro. [added 28th Nov 2003]

[Add a comment]
Thursday 27 November, 2003
# Being joe-jobbed again. Bastards, bastards, bastards.
[Add a comment]
#[linkfarm] Vnc2swf
[Add a comment]
#[linkfarm] Trampoline springen - beat 614 680 763!
[Add a comment]
Tuesday 18 November, 2003
#MS Agent: When he calls you, don't call him

One of the many strange things about MS Agent is that it runs in a single-threaded apartment when underneath it's plainly multi-threaded. Pop it and watch it perform little animations all of his own accord. Call a method on it, and it'll return immediately and do the action asynchronously.

You might actually be interested in when those asynchronous actions finish (so you can, say, hide your custom speech balloon when the Agent's stopped speaking), and in a rare display of common sense the Agent will tell you. Your code needs to implement the AgentServerObjects.IAgentNotifySinkEx interface and register the implementation with the Agent.

  public class AgentWrapper : IAgentNotifySinkEx 
  {
    private static IAgentEx srvEx_;
    public static AgentWrapper LoadAgent(string CharacterFile) { ... }

    private int notifyId_;
    private IAgentCharacterEx characterEx_;
    private int speakReqId_;
    // ...
    private AgentWrapper()
    {
      // set up stuff 

      srvEx_.Register(this, out notifyId_);
    }

    public ~AgentWrapper()
    {
      srvEx_.Unregister(notifyId_);
    } 

    public void Say(string thingsToSay)
    {
      characterEx_.Speak(thingsToSay, null, out speakReqId_);
    } 

    // ... more stuff ...

    ////////////////////////////
    // IAgentNotifyEx implementation
    public virtual void RequestStart(Int32 dwRequestID) { }

    public virtual void RequestComplete(Int32 dwRequestID, 
                                        Int32 hrStatus) 
    {
      if(dwRequestID == speakReqId_)
	balloon_.Hide();
    } 

    public virtual void ActivateInputState(Int32 dwCharID, 
                                           Int32 bActivated) { }
    public virtual void ActiveClientChange(Int32 dwCharID, 
                                           Int32 lStatus) { }
    public virtual void AgentPropertyChange() { }
    // ... and so and so on 
  } 
The fact that you register your class with the AgentServer object rather than the AgentCharacter is just one more piece of API strangeness.

Anyway, so you're all registered up and happily receiving callbacks from the Agent. You might even be doing other things as a result. What you absolutely can't do is call a method on the Agent during a callback.

  ...
  public virtual void Click(Int32 dwCharID, Int16 fwKeys, 
                            Int32 x, Int32 y) 
  {
    // x and y are click positions
    if((fwKeys & AgentCharacter.MK_LBUTTON) != 0) 
    {
      int ax, ay;
      characterEx.GetPosition(out ax, out ay);  // throws InvalidCastException
      balloon_.PopupAt(ax, ay);  
    }
  } 
  ...
If you need information about the Agent, its position or size for instance, during a callback then you have to cache it ahead of time.

I suspect that the reason you can't call the Agent is because the callback is made by the multithreaded AgentServer, while the Agent is in a single-threaded apartment. The callback is therefore in a different thread to the Agent, and the marshalling breaks down. The Googling around I've done states that all this cross-apartment stuff should work automagically, but it plainly doesn't.

Update - The right search term combo turned up this bug report: InvalidCastException When You Call a COM Component That Is Marked as STA

[More about MS Agent]


[Add a comment]
Monday 17 November, 2003
#[elsewhere] Bwah-ha-ha!
[Add a comment]
#Can you elaborate on that?

Prompted by an enquiry about Wheres Kal, I did a tiny bit of work on him over the weekend and he's back online as wheres_kal on YahooIM or whereskal@myjabber.net. He'll do basic eliza chat with you, or try google something or ask wheres jez.

As an aside, the Jabber-Yahoo gateway on the backend seems to have been improved over the last few months and is now much more reliable. Time was it seemed to timeout after some period, but he's been running all weekend and he's still there.


[Add a comment]
Friday 14 November, 2003
# US babies get global brand names - There are even two little boys, one in Michigan and one in Texas, called ESPN after the sports channel.
More baby name madness. ESPN? Is that one name or four? Do you call them E for short? Gah!

[Add a comment]
#[linkfarm] Dr Who - Scream of the Shalka
[Add a comment]
# It's old but new - the China Motorcycle spam page continues to gather comments ...
[Add a comment]
Thursday 13 November, 2003
#[elsewhere] ... much mentioned but rarely read ...
[Add a comment]
Wednesday 12 November, 2003
#[elsewhere] No weirder than any other family interaction
[Add a comment]
#[linkfarm] Microsoft does Ant
[Add a comment]
Tuesday 11 November, 2003
#[Arabica] Brief article on building SAX events from scratch - ie without an actual XML document. Code is Java, but easily translated to C++.
[Add a comment]
#MS Agent: Driving the Agent from .NET

.NET promises all things to all men. To some, it points to a happy future where contented programmers snap together besoke applications which delighted customers swoon over. For me, it offers a quick way to do the way to the easy stuff, and a whole load of pain for everything else.

Bootstrapping the Agent into .NET is straightforward. The Agent is driven through a set of COM interfaces, so generate wrapper assemblies with AxImp. Reference those assembly DLLs and off you go.

For simple stuff, you don't need anything else. However, for anything slightly more exciting, it gets a little awkward because the Agent runs in a single-threaded apartment. This is, in my experience, pretty unusual. If you haven't worked directly with COM stuff before, you probably won't have encountered it. This is why my workchums spent a week swearing and cursing trying to get this to work, before I had one of those strange slow-treacly-brain-churning only-realise-you-knew-it-once-you'd-worked-it-out revelations.

In my application I have something over there (possibly on another machine) talking back and forth to the Agent over here. The over here bit is multithreaded, which means the Agent won't work unless it's hived off into a seperate thread. More than that, it has to be completely isolated in that thread. For .NET Forms you can cheat by launching a Form in one thread, then calling methods on it from other threads[1]. Try that with the Agent, and it'll throw a System.InvalidCastException - "QueryInterface for interface AgentServerObjects.IAgentCharacterEx failed" - all over the place. To get the multithreaded part of your program working with the Agent you need to get friendly with Threads and Events. Here's the outline of what I've done -

public class AgentFace
{
  static private string toSpeak_;
  static private AutoResetEvent pleaseSpeak_ = 
      new AutoResetEvent(false);
  static private AutoResetEvent pleaseHide_ = 
      new AutoResetEvent(false);

  static AgentFace()
  { // class constructor to kick things off on demand

    // isolate the Agent in its own little place
    Thread nt = new Thread(new ThreadStart(AgentLoop));
    nt.ApartmentState = ApartmentState.STA;
    nt.Start();
  } // AgentFace

  static void AgentLoop()
  {
    WaitHandle[] handles = {pleaseSpeak_, pleaseHide_};

    AgentWrapper = AgentWrapper.LoadAgent("merlin.acs");

    while(true)
    {
      int h = WaitHandle.WaitAny(handles);

      switch(h)
      {
        case 0:
          agent.Speak(toSpeak_);
          break;
        case 1:
          agent.Hide();
          break;
      } // switch ...
    } // while(true)
  } // AgentLoop

  // here's the multithread facing part
  public AgentFace() { }
  public ~AgentFace() { }

  public void Speak(string sayThis)
  {
    toSpeak_ = sayThis;
    pleaseSpeak_.Set();
  } // Speak

  public void Hide()
  {
    pleaseHide_.Set();
  } // Hide  
} // class AgentFace

...

some_other_part_of_the_program_Class
{
  private AgentFace agent_ = new AgentFace();

  ...

  public something()
  {
    startSomeExternalHardware();
    while(askTheHardwareIfItsFinished() == false)
      Thread.Sleep(500);
    shutdownExternalHardware();
    agent_.Speak("Your coffee is ready.");
  } // something
} 
To expose more of the Agent functionality with this approach needs progressively more and more events, and correspondingly more and more cases on the switch. That isn't especially pretty or maintainable, so a nicer approach might be use a single AutoResetEvent together with a little family of command objects.

[More about MS Agent]

[1] Like this, for instance

public class BouncyBalloonWrapper 
{
  ServerForm.Dialogs.BouncyBalloon balloon_ = null;
  Thread worker_;
		
  public BouncyBalloonWrapper() 
  {
    worker_ = new Thread(new ThreadStart(this.FormWorker));
    worker_.Start();
  } // BouncyBalloonWrapper

  ~BouncyBalloonWrapper()
  {
    balloon_.Close();
  } // ~BouncyBalloonWrapper

  private void FormWorker()
  {
    balloon_ = new ServerForm.Dialogs.BouncyBalloon();
    Application.Run(balloon_);
  } // FormWorker

  public void Display(string str, Point pos, Size ext)
  {
    balloon_.Display(str, new Rectangle(pos, ext));
  } // Display

  public void BounceAround(string str, Point pos, Size ext)
  {
    balloon_.Bounce(new Rectangle(pos, ext));
  } // BounceAround
}


[Add a comment]
# A quick bit of Googling turns up a reference to McDonald's past leaning on the OED. Can't find how this came out, though. The same search also turns up several other dictionaries with entries for McJob. I'm guessing they applied pressure to the OED and Mirriam-Webster as they are regarded as the authorities on, and by entension arbiters of, language in the UK and USA repectively.
[Add a comment]
#McJob? What on earth do you mean?

Before/after of corporate dictionary fiddling.
Update on BoingBoing - "... the dictionary itself remains unchanged ..."
[Add a comment]
Monday 10 November, 2003
#South Africa win Rugby World Cup

At least in this house anyway. They've got the best national anthem by far, and not only that all their players seemed to know the words. Ok, given the political significance of rugby in South Africa there's probably a bit of pressure to brush up your Xhosa, but it was by far the most rousing of the various anthems on display over the weekend. I'd put Le Marseilles a distant second, with an honourable mention for Ireland's Call. Bottom of the pile is the absolutely rotton God Defend New Zealand, although I'm prepared to listen to arguments that since the band was Australian they played it badly on purpose.

After the matches, France look pretty super and everyone else still needs work. My guess is the winner of the France-England semi-final will win the final, which is a bit of shame. I'd like France to actually make the final this time, instead of finishing third again, but I'd have prefered it if they didn't have to beat England to do it.
[Add a comment]

#[linkfarm] A day after retiring from international rugby, Ireland captain Keith Wood was a confused man.
[Add a comment]
#AOL anti-spam - Close, but no cigar ...
From: Mail Delivery System 
To: evknguz@jezuk.co.uk
Subject: Mail delivery failed: returning message to sender
Message-Id: 
Date: Sun, 09 Nov 2003 15:52:53 +0000

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  stvn342003@aol.com
    SMTP error from remote mailer after initial connection:
    host mailin-03.mx.aol.com [64.12.138.120]: 554- (RTR:SC)  The information presently available to AOL indicates
    554- that this server has been repeatedly used to transmit unsolicited
    554- bulk e-mail to AOL.  Based on AOL's e-mail policies at
    554- http://postmaster.info.aol.com/standards.html, AOL cannot accept
    554- further e-mail transactions from this server for an extended
    554- period of time.  Please have your ISP/ASP contact AOL to resolve
    55

------ This is a copy of the message, including all the headers. ------

Return-path: 
Received: from user-1864.bbd15tcl.dsl.pol.co.uk ([81.77.183.72])
	by tmailt1.svr.pol.co.uk with smtp (Exim 4.14)
	id 1AIrrw-0003NF-Hp; Sun, 09 Nov 2003 15:52:52 +0000
Received: from 172.3.67.45 by 81.77.183.72; Mon, 10 Nov 2003 02:48:01 -0200
Message-ID: 
From: "Dee Corbin" 
Reply-To: "Dee Corbin" 
To: touchgoddess007@aol.com
Subject: Brand name meds at 70% off. 38881223232
Date: Mon, 10 Nov 2003 03:51:01 -0100
X-Mailer: Internet Mail Service (5.5.2650.21)
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="--02141612184245916473"
X-Priority: 3
X-MSMail-Priority: Normal
X-IP: 172.40.88.91

Blah-de-blah some normal spam rubbish 

AOL refuse an email on the grounds that it's spam coming from an address that's sent them spam in the past. Congrats AOL. So why send the email saying so to a blatently forged return address?

pol.co.uk is Energis, so we can see this mail was routed through an Energis broadband subscriber, who probably doesn't even realise they are running an open mail relay. 172.3.67.45 is an unassigned address, so that's probably been hijacked.

Forwarding to abuse@energis, for all the good it'll do anyone.

MFausey said AOL does not like the return-path header field. Try removing it and your problem will be fixed. [added 13th May 2005]

[Add a comment]
#[linkfarm] Blizzard Chess
[Add a comment]
#[Arabica] Committed a fix to the MSXML wrapper so it builds with VS.NET 2003.
[Add a comment]
#[linkfarm] Really fast method for solving Rubik cubes
[Add a comment]
Sunday 09 November, 2003
# Big swag of bounced mail messages that I didn't send. Mark it down to my first jezuk.co.uk joe-job, to go with the three or four previous jezuk.demon.co.uk jobs. Tossers. If I ever actually meet a spammer, he's in for a right bloody hiding.
smellygit said What u mean a spammer like Versim :p [added 10th Nov 2003]
A "do you want a bigger cock" spammer, who lies about where his emails are coming from, abuses other other peoples resources, and just wants to steal your money, not the occasional "sweep it into the Press Release bucket" type-mailings. [added 10th Nov 2003]

[Add a comment]
Friday 07 November, 2003
#MS Agent: He speak HTML

Agent with custom speech balloonIt needs bit more shiny-graphical super-shinyness, but it's the right size, it's in the right place, and it's yer actual HTML. The bubble is a little window with an embedded Internet Explorer web browser control. The web browser is rendering HTML written directly to it, has been resized to fit the text and also had it's scroll bar supressed. Microsoft's support for embedding IE is best described as grudging and when I set off this morning, I really didn't know if any of this was actually going to be possible and for extra pain its all done for .NET using C#. So I'm feeling a bit pleased, frankly. Techno-how-to-bollo to follow some time on Monday, fans!

The reason for all this blather about MS Agent, by the way, is so maybe Google can help prevent some other poor sod going through the same hassle.

[More about MS Agent]


[Add a comment]
#[linkfarm] Standalone Trackback Form
[Add a comment]
#Two from top, two from the middle and two from anywhere please, Carol
Englishman abroad Ben Hammersley directs us all along to Corriere dela Sera's reviews of next year's "glamour" calendars. Thoughtfully, they've provided all the photos from all the calendars, allowing the interested reader to get a really good idea of what might be in store next June, say. More than that, it allows the enterprising websurfer to create a mix-and-match calendar of their very own.
[Add a comment]
#[linkfarm] Sitemaps and Site Indexes: What They Are and Why You Should Have Them
[Add a comment]
#[linkfarm] Hello, World in XAML
[Add a comment]
# The Cooking with Pete page. Still to do - title tidying, searching, RSS feed.RSS feed is done - link on the Cooking page [added 7th Nov 2003]
smellygit said the rss link for the grounds page has disappeared tho? [added 8th Nov 2003]
just moved further down [added 8th Nov 2003]
smellygit said unless one has turned it off and forgotton :"> [added 9th Nov 2003]

[Add a comment]
#Cooking with Pete: Refried Beans - Frijoles Refritos

Refried Beans! Big, hearty yummy food that's quick and easy to make. If you've got a bit of time you can go for the whole hog Mexican spread with beans, flour tortillas, guacamole, salsa, cheese, heuvos, and so and so on. Less time, or can't be arsed you can have them by themselves, or just spread on a bit of toast, or just hit some happy mid-point.

You'll need

So here we go

  1. Get a nice big pan, preferably with a good thick bottom, and heat up some oil.
  2. While the oil heats, chop up the onion pretty finely. Sling it in and cook it around for a few minutes until it's nice and soft, but not too brown.
  3. Add the beans a spoonful or two at a time. Stir them around a bit, then mash them up with a fork or the back of a wooden spoon. Then add some more, until they're all in. If you used tinned beans, pour off the liquid they were tinned in, but don't leave the beans really dry - you want them to be a bit wet. If you boiled your own beans, add a bit of the cooking liquid if things start looking a bit dry.
  4. Once you've added all the beans, you're more or less done. Cook it on for a minute or two - it should all start to pull together into a big mass. You can serve it up now if you like. Alternatively, you can add some chopped up coriander leaf, some chopped up fresh or pickled chillis, you could stir in some grated cheese or pieces of cream cheese, spoon some salsa or avocado slices over the top. Whatever you fancy really.
  5. Serve. Just have them in a bowl, or with as many or as few Mexican-styly trimmings as you like. Easy and fun - open up a packet of flour tortillas, stick them on plate in the microwave for a minute or two, and wrap your beans, some cucumber and tomato, and a splash of salsa and guacamole in a lovely warm tortilla. It's ace.

While pinto beans are traditional, you can use red or black kidney beans instead, or a combination. Pinto beans give a very smooth bean mash, while kidney beans are a bit heavier and more mealy. I've also used borlotti beans, which give quite a sweet end result. I use 3 or 4 tins of beans, which feeds three or four depending on your level of gutbagness.

You can also boil up dried beans instead of using tins, but that takes a while so I tend to do that at the weekend rather than in the week. Put the dry beans in a pot with a quatered onion, and cover with water. Bring to the boil. If you're using kidney beans let them boil hard for ten minutes. Knock back to a simmer. When the beans start to wrinkle, add a bit of oil. Keep on simmering, topping up the water as needed, until the beans are nice and soft right through. Stir in a good teaspoon or so of salt. Depending on the age and type of your beans, this could take anywhere between 90 minutes and three hours or more. You can eat them as they are, if you don't want to wait any more. They also freeze well, if you can wait longer.

Don't worry if you make too much, because refried beans keep and reheat really well. I believe this might be why the beans are called refried - today's beans were made by adding more beans to yesterday's leftovers.

Jeanne Jackson [e] said You should know also, that if you don't boil the kidney beans long enough they can be poisonous or the very least give you a upset stomach. [added 23rd Jan 2005]

[Add a comment]
#[linkfarm] Multiple IE
[Add a comment]
Thursday 06 November, 2003
#[Arabica] I've just acquired VS.NET 2003 in the last couple of days. It won't compile the Arabica release, but that seems to be because the compiler is even more standards compliant. MS C++ compiler really does rock quite hard now. Should have fixes in CVS pretty quickly. I'll probably release again once I've built against the latest libxml2 and expat, both of which have had new drops in the last few days.
Terris Linenbach [e] [w] said I'm looking forward to using Arabic with vs.net 2003 to write some rocking cross-platform c++. Thank you so much! [added 24th Jan 2004]

[Add a comment]
#[linkfarm] Plugging the RSS Usability Hole
[Add a comment]
Tuesday 04 November, 2003
#Good to see someone has a sense of humour about this stuff
The Thread class is on page 666 of my C# reference book.
[Add a comment]
#MS Agent: Suppressing the Speech Balloon

MSDN. Loathe it or, well, just loathe it I guess. It's filled to the brim with information, a lot of it either out of date or not yet useful [1], is massively disorganised, fragments related information in lots of different places, is frequently just plain wrong, and it has a crappy search facility.

MSDN is quite clear that an Agent character with a speech balloon has a speech balloon for good, and there's nothing you can do about it.

This turns out to be not quite true. You can embed tags in the text to be spoken which modify the Agent behaviour. Merlin offers an opinion on The Chapman Brothers Most interesting is the map tag which lets you display one thing in the balloon but have something else spoken.

agent.Speak("Those Chapman brothers? What a pair of \\map=\"twats\"=\"c*nts\"\\");
The tags are \ delimited, so you have to double up in C like languages.

Where it get really interesting is if you map all of the text to be spoken to nothing -

\map="all"=""\
agent.Speak("\\map=\"A lot of talk but no balloon\"=\"\"\\");
No balloon! The little bloke speaks and lip-syncs along, but no speech balloon is displayed. Yes!

Now the speech bubble is not displayed, it gives a lot more room to throw up your own. Of course, you can't know animate it in the same way as the built-in one, but it's a small price to pay for the ability to put up something a bit prettier.

[More about MS Agent]

[1] - Right now for instance the front page barks Longhorn! Longhorn! Longhorn! Longhorn is the next version of Windows, and is due to ship sometime in 2006 or thereabouts. So yeah, loads of articles all starting This document supports a preliminary release of a software product that may be changed substantially prior to final commercial release are really, really useful right now.

angry_john said I suppose it's one step up from the Sun but really, obscuring letters in words so that they read as rude ones is really rather childish !

[added 6th Nov 2003]

Screw U, Angry John! [added 6th Nov 2003]
anonymous said Bah, this editing after posting sure makes for a confusing comment thread. [added 6th Nov 2003]
It's true - I fiddled the wizard's speech bubble from c*unts to c*nts, because that's what I thought it said (it's what I meant it to say anyway) in the first place. Haven't changed anything else though. [added 6th Nov 2003]
Nick [e] said Very nice!

And how about formatting strings in baloon?

IMHO there is no any tool (like tag) witch allow

to force "\n" in baloon text, where it needed. [added 28th Apr 2006]

From memory, no there isn't. The text in the balloon is just one long string. If you want any kind of formatting, you have to suppress the balloon and do your own [added 29th Apr 2006]

[Add a comment]
#Xenu loves you

Went down in to the city centre on Saturday to have a look at toys that the Bean might like for Crimbo, thus ensuring that grandparents (or at least a grandparent in particular who just can't manage by himself) are properly primed. After hoofing from the Early Learning Centre to The Entertainer (jolly good shop this) via the Lego Shop, Nattle took Harry away home and the Bean and I went off to get a pizza. Happily all the Pizza Huts along New Street had enormous queues so we lugged ourselves all the way up to Canal Basin and went to Pizza Express, which is much classier.

Attuned as I now am to Bean-fun stuff, I noticed as we walked several kiddiess with helium balloons. I didn't really pay attention to what was printed on them until one kind of swirled in front of me - an alien face and the words XEMU loves you. I wasn't quite sure I'd clocked it properly - the XE and MU were either side of the face - so I started to pay more attention. Yes, definitely - XEMU loves you. Well that rocks, but it was slightly perplexing. Did it mean there was some kind of anti-Scientology demo going on. Unfortunately, we missed whoever it was because I would have loved to parade around with a XEMU balloon.

A bit of image-Googling this morning confirms there was a protest outside the Scientology org. We must have just missed them. While I'm sure I read XEMU, the ballons said XENU loves you, but hey, not even L Ron Hubbard was consistent.

Lots more on the wackiness, if not outright criminality, of the Church of Scientology at Operation Clambake.

Hartley Patterson [e] [w] said Yes you just missed a demonstration by the Alt.Religion.Scientology Central Committee UK branch, bringing down the cult one thetan at a time. Next one is December 6th in London, not sure if we'll have balloons! All suppressive persons welcome. [added 11th Nov 2003]

[Add a comment]
#Welcome friends

mailgate.focus-solutions.co.uk - Gary?
sync34.avantgo.com - Pete?
neuron.neuron1.com - hello
cache2.ubswarburg.com - Mr Foxon, I presume
relay2.parliament.uk - Ali, I guess?
195.11.208.1 - looks like you Mr Singleton
66.151.128.23 (Bloglines) - Hi!
cltea-proxy1.sun.com - TV's Dr Marc, that must be you
and a special hello to my most dedicated readers, Googlebot, msnbot and the Altavista Scooter.

Yes? No? Then reveal yourself ...

Ronan [e] said The Avantgo.com might be me (Ronan). Hello ;-) [added 4th Nov 2003]
Hello [added 4th Nov 2003]
Pete [w] said Avantgo isn't me at the moment, though it might be in a few weeks. Bloglines is at least partly me, or at least I initiated it. Probably my main web ap after mail these days. [added 4th Nov 2003]
Marc said cltea-proxy1 is almost certainly me [added 4th Nov 2003]
Thought so - NetNewsWire Lite on OSX, yes? [added 4th Nov 2003]
mbi said The Avantgo.com might be me too, but how can I tell?

Mike, your old mucker from Taylor Hobson. [added 4th Nov 2003]

mbi said The Avantgo.com might be me too, but how can I tell?

Mike, your old mucker from Taylor Hobson. [added 4th Nov 2003]

mbi said oops [added 4th Nov 2003]
Garry [e] said Yep - the focus ones mine : ). The 'grounds' has become compelling daily reading for me. I'm even thinking of registering - cheers Garry (2 x r) [added 5th Nov 2003]
"compelling daily reading"

You should get out more :) [added 7th Nov 2003]

Gevs said of course I mean only on 'work' days [added 7th Nov 2003]

[Add a comment]
Monday 03 November, 2003
#[linkfarm] GNU-Darwin
[Add a comment]
#[linkfarm] Shaped Windows Forms and Controls in Visual Studio .NET
[Add a comment]
#MS Agent: Ooops! That wasn't supposed to happen ...
The MS Agent outlines his origin.

My current client lurrves MS Agent, so for the next few days I'm going to be wrestling with its limited and utterly crappy programming interface in an attempt to make it mildly less annoying and a tad more useful.

If you're lucky enough never have seen MS Agent, it's a little animated blokey (or parrot or robot) that pops up and talks to you. It's like that irritating paperclip you get in MS Word, but even less useful than that, if you can imaging such a thing. Up comes this word balloon, and it reads out the text in a croaky computer voice. Wow!

It turns out that underneath the Agent is quite a cool text-to-speech engine. You give it some text, and as it's spoken the engine tells you the phoneme its saying, the word the phoneme comes from and the accompanying mouth shape. As much as it might pain me to say, it's really pretty cool.

The Agent slaps a series of pre-canned animations (point-left, look up, etc, etc) over the top of the speech engine, and completely takes all the good bits away from you. It'll only tell you when the entire text has been spoken, so you can't do cool things like sync video to the speech. The word balloon is ugly and you can't put formatted text (not even line breaks) or input widgets on it. You can't hack around and subclass it (maybe you could if you escalate your security privs, but that's not going to be a general solution). If you grab the window handle and draw your own stuff on it, the speech stops. If you move it around, it gets move back.

I've come to the conclusion that the whole MS Agent is some demo that an MS drone stuck together that escaped somehow and became a "product". It doesn't give the useful stuff because it was just meant to get a few laughs at conferences. Unfortunately someone else thought hey cool, the kids'll love that as much as MS Bob, and out it went into the wide world.

[More about MS Agent]


[Add a comment]
#[linkfarm] HOWTO: write bad documentation that looks good
[Add a comment]
#Cooking with Pete: Linguine with feta and olives

Thought it would be good to start with something of my own devising. It's a bit of a mediterreanian mish-mash, because at the time I first slung it together that's the kind of thing I had in the fridge, but its no less yummy for that. It's pretty typical of what I cook during the week because it doesn't take that long to prepare, only needs one or two pans, doesn't really require any measuring of ingredients, and reheats well for your lunch the next day.

So then, you'll need

Let's go

  1. Get a pan which is big enough to hold everything, preferably one with a nice thick bottom. Pop it on over a lowish heat, and stick a good slug of oil in the bottom. I use olive oil for everything, but that's because I can't be arsed to keep lots of different oils round the place.
  2. While the oil heats, chop the onion up nice and fine, then sling it in the pan. Cook it round slowly for a few minutes until it's gone brown and caramelly.
  3. Chop up the tomatoes, if they arn't already, and fling them in. If you're using fresh, then it's nicer if you skin them first (score round with a knife then cover in boiling water for 30 seconds - they'll slip right off). Add a scant teaspoon of sugar, and the same amount of salt. Give it all a stir.
  4. Bring the tomatoes up to the boil, then knock back to a gentle simmer. Stick a lid on the pan, because it'll spatter everywhere if you don't. Leave it cook for 10 or 15 minutes, until it's thickened up a bit. The timing isn't really critical, but do give it a few minutes to cook rather then just heat through. Give a stir now and again to make sure it doesn't stick.
  5. While that's going on, boil up your pasta.
  6. Add the olives and capers to the tomatoes. Crumble up the feta and sling that in too. Give it a good stir round, so that the cheese starts to melt into the sauce. You can add some ground pepper too if you like, or a splash of wine or balsamic vinegar.
  7. Drain the pasta. Tip that into the pan with the tomatoes and stir it all around so everything's really mixed up together.
  8. Serve up - bowls are best. Sit on sofa with feet on coffee table.

You can make this at anytime of year. In summer, if you're feeling keen you can skin some fresh tomatoes to make the sauce. In the winter, use tinned tomatoes and passata and let it simmer down for a bit longer to get a richer, heavier sauce.

None of the quantities are really critical, and you can vary them really quite wildly. Less tomato and more cheese gives quite a nice sticky finish to the pasta, while more tomato and less pasta makes a bit more soupy and leaves lots of dribbly bits you can wipe up with a bit of bread. The timings arn't really critical either, other than ensuring the pasta isn't overdone. In fact, it might be best to slightly undercook the pasta, because it'll cook on a bit more when you mix it into the sauce.


[Add a comment]
# About one million years ago, Pete said You know what'd be really useful? The JezUK recipe page. All that groovy vegetarian stuff you make. Think about it. So I did. For a long time.
Pete [w] said Somewhat perfect timing. Now I'm actually eating regularly for the first time in a years I wasstarting to get a bit bored with my two staple recipies. Looking forward to this wee series! [added 3rd Nov 2003]
Yes, I had a feeling now might be a good time :) [added 3rd Nov 2003]

[Add a comment]
Saturday 01 November, 2003
#[elsewhere] Rub dahl on your lense or something?
[Add a comment]
<< October 2003 December 2003 >>