<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:dewimorgan</id>
  <title>A title this would be, had I the originality.</title>
  <subtitle>Anna subtitle too</subtitle>
  <author>
    <name>Dewi</name>
  </author>
  <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom"/>
  <updated>2008-06-28T14:58:07Z</updated>
  <lj:journal username="dewimorgan" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://dewimorgan.livejournal.com/data/atom" title="A title this would be, had I the originality."/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:38283</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/38283.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=38283"/>
    <title>Eek! I'm almost an early adopter!</title>
    <published>2008-06-28T14:57:21Z</published>
    <updated>2008-06-28T14:58:07Z</updated>
    <content type="html">I tend ot be very conservative about which "social networking" sites I join. If they haven't been around for yonks, I feel I don't need them.&lt;br /&gt;&lt;br /&gt;&lt;a href=""&gt;plurk.com&lt;/a&gt;, which is a sort of improved more-fun twitter, sucked me in, though. It's nice. Join us. The water's lovely.&lt;br /&gt;&lt;br /&gt;I'm interested to know how you spend your day. That, and they give me more smileys if some of my friends join up :P</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:37914</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/37914.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=37914"/>
    <title>Even Government employees have a sense of humour...</title>
    <published>2008-06-26T16:56:20Z</published>
    <updated>2008-06-27T19:53:39Z</updated>
    <content type="html">I just ordered myself a birth certificate, as one of the steps required to get married.&lt;br /&gt;I was a little irked to discover that if I wanted them to avoid holding onto the certificate for 14 days for no reason (paying just the regular amount, they send it out on the 14th day after receipt of the order: not "when it's done", but deliberately waiting 14 days), I had to pay a premium, so they'd send it the next day.&lt;br /&gt;&lt;br /&gt;So in the "Customer Reference" field, I put "HighwayRobberyByTheGRO".&lt;br /&gt;&lt;br /&gt;With the certificates, I also received a compliment slip, bearing the handwritten message:&lt;br /&gt;&lt;br /&gt;"Re: Customer Ref.&lt;br /&gt;Thanks. Yes I agree&lt;br /&gt;But this pays for our X-mas&lt;br /&gt;Party."&lt;br /&gt;&lt;br /&gt;Really brightened my day, and gave me a good chuckle! :D I'd scan it and post a link here, but I'd be worried that the handwriting might give them away and get them disciplined.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:37862</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/37862.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=37862"/>
    <title>SYSTEMced! It came back to get me!!!</title>
    <published>2008-06-17T19:42:17Z</published>
    <updated>2008-06-17T22:57:54Z</updated>
    <content type="html">Regular readers (hahahaha*clunk*) might remember me blathering about SYSTEMced &lt;a href="http://dewimorgan.livejournal.com/34719.html"&gt;a few weeks ago&lt;/a&gt;. Well, after the latest windows update, it's back. I'll be editing this post as I battle with getting the drive back to life.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;For the moment, I have the drive out and in a drive caddy, and I'm booting up my other win2k machine, the laptop. It's SLOOOW. Hence, blogging it to pass the time.&lt;br /&gt;--&lt;br /&gt;So I got inveigled into a long conversation about politics. I might post some of those thoughts here someday.&lt;br /&gt;--&lt;br /&gt;Got the system hive, 10.4M (10,997,760bytes), mounted on the other machine now.&lt;br /&gt;--&lt;br /&gt;Exported, it's 9.86M (10,342,400bytes). Small enough, I hope.&lt;br /&gt;--&lt;br /&gt;Yay! It's booting again! Now to clean it...&lt;br /&gt;--&lt;br /&gt;Hey... it's offering to install MORE updates. Should I let it? SHOULD I???&lt;br /&gt;--&lt;br /&gt;I notice that AVG will tell you "All security features are working correctly and are up to date" even if the update failed due to a networking issue. So nice when you catch your security people lying to you.&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:37517</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/37517.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=37517"/>
    <title>IM greetings - what's the ettiquette?</title>
    <published>2008-06-15T17:58:48Z</published>
    <updated>2008-06-15T19:34:40Z</updated>
    <content type="html">I dislike getting greetings like "are you busy?" or "hi", or "are you there?" or in one recent case "x". I try not to leave such messages myself.&lt;br /&gt;&lt;br /&gt;Why? &lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, there are a couple of problems with "hi", and to a lesser extent, other greetings which don't say what you want to talk about, like "can I ask a question?" (which at least says that there's a question) or "are you busy?" (which at least suggests that the discussion may be time consuming).&lt;br /&gt;&lt;br /&gt;The first problem is, if they are afk and come back, then they will likely just reply "hi" back. But you might be afk too, by then. And IMs are meant to get rid of that kind of silly game of message pong.&lt;br /&gt;&lt;br /&gt;The bigger problem is that if they are not afk, but are "screening their calls", the recipient has to make a decision: do they reply, making it obvious they're not afk, and possibly getting involved in a conversation they would've avoided if they'd known the topic, or how long it was going to take; or do they not reply, and possibly miss out on a cool conversation?&lt;br /&gt;&lt;br /&gt;I made this mistake in real life once: my first day at university, I wanted some directions to somewhere, so I tried a guy in the street. "Excuse me, sir?" I asked. He looked at me distrustfully and walked on. "Sir? Excuse me!" He frowned and walked faster. I was getting cross at his lack of response, and tried one last time: "EXCUSE ME!"&lt;br /&gt;&lt;br /&gt;He shot me a look so black I could've polished my shoes with it, and I left him alone, but it was only a little further down the street that I realised it wasn't him being a jerk, it was me. I was doing it wrong, and his response was right and natural.&lt;br /&gt;&lt;br /&gt;So the next guy, I was ready. "Excuse me, do you know where I could find the bank?" (or whatever it was I was looking for). This guy, knowing that I wasn't trying to make him join some cult or beg for money, was all too happy to show off his local knowledge by directing me :)&lt;br /&gt;&lt;br /&gt;So, same with IMs. If you IM someone with "hi" or "hey, are you about?", and the only report you get is from their auto-away, then you have only yourself to blame. You gave them no reason to reply to you.&lt;br /&gt;&lt;br /&gt;Don't be afraid to say up front what you're after.&lt;br /&gt;"Hi, you free to chat? I just saw that new movie you were talking about and you're right, I'm sooo pissed!"&lt;br /&gt;"I'm having a problem with the phase arrays, can you help? Every time I realign them, they summon a Vogon construction fleet, and that's not even the right continuity!"&lt;br /&gt;"Hi! Isn't BillyJoe just dreamy-awesome?"&lt;br /&gt;&lt;br /&gt;If you think that they might not respond if they know what you're after, unless you have managed to trap them into conversation first, then you should probably ask yourself why you are talking to them about it anyway. If you need the conversation, then I'd personally be even weasellier and ask them about something unrelated to get them to respond first: otherwise they may well assume that you are about to talk to them about the worst possible thing, and not respond.&lt;br /&gt;&lt;br /&gt;If you think they might not respond because what you want to talk about is to unimportant... well, just think about that for a second :) Is it important enough to try to trick them into an unimportant conversation?&lt;br /&gt;&lt;br /&gt;People LIKE chatting, and LIKE helping other people. Give them a reason to, and make it easy for them.&lt;br /&gt;The polite greetings and roundabout conversation of yesteryear are an impolite obstruction today:&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;
A (10:00 Fri): Hi, you about?
B (18:15 Fri): Hi, sorry, just got in. [He's lying, he checked his IMs lunchtime, but skipped this one because he reckoned it'd be a long conversation]
A (19:00 Fri): Yay, you're back! 'Sup, dude?
B (19:01 Fri): Nobbad. Just killed my wife, stuffed her in the freezer, got food for months now.
A (19:02 Fri): Awesome. Hey, I had an urgent question.
B (19:03 Fri): OK, but make it quick, I need to pop out and get me a barbecue set before the store closes.
A (19:04 Fri): You know anything about FLEA technology?
B (19:05 Fri): I've used it a bit, but I'm not pro level. Why, what's the issue?
A (19:06 Fri): You know where I can find the setting to turn off acronym expansion?
B (19:07 Fri): Yeah, I did that once, forget how. Seem to remember it's a bit fiddly, tell you what, I'll have a rummage and tell you when I get back from the store.
A (19:08 Fri): OK
B (13:00 Mon): Sorry dude, ran into some friends at the store, invited them round to test out the new BBQ, we brought a few beers, and ended up having an awesome weekend, I forgot all about this. Anyway, it's easier than I thought, all you do is...
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Compare that to:&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;
A (10:01 Fri): Hi, you about? You know where I can find the setting to turn off acronym expansion in FLEA tech?
B (13:07 Fri): Yeah, I did that once, forget how. Seem to remember it's a bit fiddly, but I'll have a quick rummage.
B (13:08): Oh, it's easier than I thought, all you do is...
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;By giving a good question in the beginning, you saved yourself a DAY. Sure, you didn't find out that he served up his own wife at a BBQ over the weekend, but you didn't really want to know that anyway, right?&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:37332</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/37332.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=37332"/>
    <title>.NET 2.0 uninstall/reinstall errors.</title>
    <published>2008-06-03T19:16:09Z</published>
    <updated>2008-06-15T17:03:22Z</updated>
    <content type="html">I recently had a bit of a pain trying to run Oblivion Mod Manager ("OBMM" to those in the know). See, it needs a reasonably working .NET installation, which I don't have. I decided it was time to fix that.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;The trouble I've been having is that it would error on me whenever I tried to install or upgrade or even repair .NET.&lt;br /&gt;&lt;br /&gt;This came about because I deleted some files from C:\windows\install - don't do that, they look like they're just a bunch of .msi installers, and aren't needed for running anything, but they are sure useful when uninstalling, upgrading, or installing stuff.&lt;br /&gt;&lt;br /&gt;Then, looking at the text of the error log that would be sent to MS when the programs crashed, I was able to find what file it was looking for, and where. I could also have used something like truss, I guess. I then downloaded and placed that one, and rinsed, and repeated.&lt;br /&gt;&lt;br /&gt;I needed to download:&lt;br /&gt;NDP20-KB917283-X86.msp,&lt;br /&gt;NDP20-KB922770-X86.msp, &lt;br /&gt;NDP20-KB928365-v2-X86.msp,&lt;br /&gt;&lt;br /&gt;They needed to be downloaded from Microsoft. Searching for the KBnnnn bit on Microsoft.com usually gets you there. The download will be a compressed exe, so a quick unzip with winzip later and you have the .msp files.&lt;br /&gt;&lt;br /&gt;It was looking on a drive that no longer existed for the old tmp folder that it had installed from. Oh fun. So dismount that drive (CD drive), and "subst D: C:\" to  make D: a virtual drive pointing to C:, then create the folders it was looking for, each in turn, downloading each file as it complained about it being missing.&lt;br /&gt;&lt;br /&gt;Once they were downloaded and placed in their respective correct random directories within C:\Documents and Settings\Administrator\Local Settings\Temp\, it installed fine, and a quick reboot later, I was able to run obmm again! :D&lt;br /&gt;&lt;br /&gt;Others having the problem "oblivionmodmanager has encountered a problem and needs to close. we are sorry for the inconvenience." - this should hopefully help you. Most likely all you need to do is download and run the ".net framework" - Google for that and you should be fine. Apparently obmm requires 2.0 and above, and 2.0 is the last one to support Win95, Win98 or Win2k, so that's the one you'll need if you are using those OSs (as I am).&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:37002</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/37002.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=37002"/>
    <title>Buying from abroad - beware of ParcelForce.</title>
    <published>2008-05-30T15:04:48Z</published>
    <updated>2008-05-30T15:25:00Z</updated>
    <content type="html">Americans: when sending a package or gift to the UK, &lt;i&gt;please&lt;/i&gt; remember these notes on how to prevent your friends paying through the nose.&lt;br /&gt;&lt;br /&gt;Brits: When you are buying a £200 item from Ebay, it may well not be the seller that burns you.&lt;br /&gt;&lt;br /&gt;Here's the letter I got through my door today.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;blockquote&gt;We are holding an International parcel for you at our depot. Delivery of this parcel is subject to payment of charges raised by HM Revenue &amp; Customs. These charges are:&lt;br /&gt;&lt;br /&gt;Import duty: £11.12&lt;br /&gt;Excise duty: £0.00&lt;br /&gt;V.A.T.: £43.37&lt;br /&gt;Other:  £0.00&lt;br /&gt;Parcelforce Clearance Fee: £13.50&lt;br /&gt;&lt;br /&gt;[...]&lt;br /&gt;For an additional charge of £12 you may choose to have your parcel delivered using our special Saturday delivery service.&lt;br /&gt;[...]&lt;br /&gt;Parcels awaiting payment will be held at the above depot for 20 days.&lt;br /&gt;[...]&lt;br /&gt;Parcelforce are unable to enter into disputes regarding Customs charges. Unpaid parcels, resulting from disputes about Customs charges, cannot be delivered and will be returned to sender after the time stated above.&lt;br /&gt;[...]&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;A few points to note.&lt;br /&gt;&lt;br /&gt;1) If I *don't* get the Saturday delivery, I will get a note through my door while I'm at work, saying they couldn't deliver it to me. Once I get that, I can *then* arrange another delivery, to my local post office, for 50p. You can't arrange that delivery at the same time as paying the charges. So the £12 saves a fair bit of time, hassle and potential for things to go wrong.&lt;br /&gt;&lt;br /&gt;2) I could get a taxi to the depot and back for about £10, and a couple of quid for tip and waiting fee... so I wouldn't save anything, and in my experience the queue in the depots can be hours long, so the waiting fee for the taxi could end up being a lot more than the Saturday delivery.&lt;br /&gt;&lt;br /&gt;3) The £13.50 "Parcelforce clearance fee" is unavoidable, and is not from HMRC, it's from Parcelforce. But since Parcelforce has the complete monopoly on parcels coming into the country, there's nothing you can do to avoid it.&lt;br /&gt;&lt;br /&gt;4) They are holding the package hostage without actually telling you what the package IS. Someone could have sent you a box of crap as a joke and you'd still have to pay through the nose to get it off them.&lt;br /&gt;&lt;br /&gt;5) I already paid £30 postage on this.&lt;br /&gt;&lt;br /&gt;6) These charges would be levied even on used items, gifts, for personal use.&lt;br /&gt;&lt;br /&gt;7) There are few exceptions. No import duty is charged for items under £7, or from the EU; no VAT for items bought over the net &amp;lt;£18 (except alcohol, perfume &amp;gt;5ml, toilet water &amp;gt;0.25lt, tobacco); no VAT for gifts &amp;lt; £36 (same exclusions). &lt;br /&gt;&lt;br /&gt;8) VAT is charged on the total value of the package &lt;i&gt;including the postage cost&lt;/i&gt;! So, if you buy one of those things from China for £1 + £399p&amp;p, you'll still pay VAT on a £400 item.&lt;br /&gt;&lt;br /&gt;All told, that's £110 to get a £200 item delivered (Americans: that's &lt;b&gt;well over two hundred bucks in delivery charges&lt;/b&gt;). And &lt;i&gt;I knew this would happen when I ordered it&lt;/i&gt;. This is why I almost always buy from the UK, even though it costs more.&lt;br /&gt;&lt;br /&gt;Rip-off Britain's status quo is being protected from EBay-style internet prices by Parcelforce and the HMRC.&lt;br /&gt;&lt;br /&gt;The only exclusion I have found, is product returns. Ask the person returning the goods to the UK to write *very clearly* on the box and packing slip that the item is of no commercial value: something like "returned goods (defective/unsold): no commercial value" should do the trick.&lt;br /&gt;&lt;br /&gt;In that case, the delivery cost drops to nothing. No VAT, no import duty, no clearance fee, and no Saturday delivery charge - instead, just the 50p "please pop it in the post office two doors down, kthx" fee.&lt;br /&gt;&lt;br /&gt;If you have been charged for genuinely returned goods, you can claim the money back, but you need to apply for it, and there are hefty additional charges for false declarations if they decide that the goods weren't really being returned. You can't be told off for a declaration made by someone else outside the US, so it's best to get them to just declare it on the package. &lt;br /&gt;&lt;br /&gt;If you live outside the UK and have been ripped off by a UK resident, a good way to get even is to send them a few packages from a bogus return address, each containing light and non-dangerous junk (have a care for the postmen!), but marked as being "worth" a lot, from a few hundred to many thousands of pounds. If they are regular E-Bayers, they will feel they &lt;i&gt;have&lt;/i&gt; to pay the scam-fee get the items and find what they are: otherwise they might lose something valuable that they have already paid for.&lt;br /&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:36659</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/36659.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=36659"/>
    <title>dewimorgan @ 2008-05-24T16:45:00</title>
    <published>2008-05-24T16:14:25Z</published>
    <updated>2008-05-24T16:20:29Z</updated>
    <content type="html">I recently posted about &lt;a href="http://dewimorgan.livejournal.com/36551.html"&gt;the meaning of life&lt;/a&gt;, or at least what it means to be alive. &lt;br /&gt;&lt;br /&gt;I read a couple of articles in BoingBoing that built on this very interesting question, so, another post on the questions they raise.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;A woman with a stopped heart following two heart attacks, hypothermia, no neurological function, rigor mortis, her skin started to harden and her fingers to curl in death, arrangements are being made to donate her organs... is she dead?&lt;br /&gt;&lt;br /&gt;Perhaps she is, it depends on your definition of death. By the UK and US medical and legal definitions of death, she definitely is dead. And in that case, our definition of death includes the ability to be brought back from death (whether by the work of Man or God), even at this late stage. Because, it just happenned. &lt;a href="http://www.newsnet5.com/health/16363548/detail.html"&gt;http://www.newsnet5.com/health/16363548/detail.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Death isn't necessarily permanent, then? Grey areas like that make life fun!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But there's another article that is even more fun, and leads to even more thoughts. I'll explain in a sec, but first, some ground-thoughts.&lt;br /&gt;&lt;br /&gt;With protozoa, one-celled organisms, telling what an individual is, is easy.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"When I need a friend I just give a wrinkle&lt;br /&gt;split right down the middle&lt;br /&gt;and pretty soon there's two of me&lt;br /&gt;both as handsome as can be."&lt;br /&gt; - &lt;cite&gt;The Incredible String Band&lt;/cite&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;If it's a different cell, it's a different individual. I'll gloss over the fact that the exact moment when individuality strikes, exactly how many atoms can still be joined together and still call them the same cell, is maybe a little vague. Basically, it's quite clear.&lt;br /&gt;&lt;br /&gt;With people, it's fuzzier. We instead generally count it by "cell lines". If something has your genes, it came from your original fertilised egg, and so it *is you*. Your hand is a part of you because it shares your genes. (There are grey areas. Identical twins, and animals which reproduce parthogenically, or by bifurcation, all share genes, and hence cell lines: but I'm ignoring these grey areas for the moment!) &lt;br /&gt;&lt;br /&gt;Cancer cells in yourself are a part of you, since the tumour comes from your own cells, and is just malfunctioning.&lt;br /&gt;&lt;br /&gt;Is a donated organ, say a hand, part of you? It is not from you, and not from your cell line. It is alive, given life support by your body, but is it not really still a part of the donor? If the donor is still alive, that sort of implies that people can be split into pieces and still be alive, in multiple places at once.&lt;br /&gt;&lt;br /&gt;Which causes no problems for anyone, mentally... except theologians, if they believe in the concept of individuality, who then have to pick which organ contains the individual's soul (or self, spirit, individuality, etc). And then, if parts of that organ can die or be donated, which *cell* of that organ contains it, or else they need to deal with whether souls can be split up or not.&lt;br /&gt;&lt;br /&gt;Anyway, this donated organ can grow and its cells can split and the stem cells from the marrow in its bones can go on to repair (infect?) any part of your body with not-you-derived cells. Over the course of a few years, every cell in your body is replaced, or so I read (I am skeptical, but I'll go with it for the sake of this question). If all the cells that make up the hand are replaced by those from your own bone marrow's stem cells, does the hand become "part of you", if it was not before?&lt;br /&gt;&lt;br /&gt;What if someone were given bone marrow transplant, so that all their stem cells now came from someone else's genetic stock? In a few years, would they be someone else, once all their cells came, not from a combination of their own parents' genes, but from the donor's?&lt;br /&gt;&lt;br /&gt;Women are apparently often (always, to some extent?) chimeras, made up of multiple cell lines, and are much more prone to this than men. This causes birthmarks; complications in pregnancy where one part of the body is allergic to the child that another created; complications figuring out parenthood (if you take a sample from the woman that is from a different cell line than the ovary that created the egg, then parenthood may not be established); and so on. But we have no problem saying that women are individuals, and are only one being, not multiple ones.&lt;br /&gt;&lt;br /&gt;And then I find that some (very few) cancers can be sexually transmitted! Which quietly blew my mind. Because, you see, cancers are special. Unlike the hand, we *know* that every cell in a cancer split from itself. It is always from the original host's cell line.&lt;br /&gt;&lt;br /&gt;So the oldest living mammal cell line... the oldest living mammal, by some definition... is a &lt;a href="http://boingboing.hexten.net/2008/05/19/canine-transmissable.html"&gt;sexually transmitted disease for dogs&lt;/a&gt;. &lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:36551</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/36551.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=36551"/>
    <title>What is life?</title>
    <published>2008-05-20T18:17:36Z</published>
    <updated>2008-05-24T15:10:39Z</updated>
    <content type="html">Laundry aside, few of us have any problem distinguishing most things we see each day into separate "alive" and "not-alive" camps.&lt;br /&gt;&lt;br /&gt;This is generally seen as a binary choice, and from a religious point of view, which camp something is in can be critically important.&lt;br /&gt;&lt;br /&gt;But, like humanity, Life and death are not absolutes.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;Health workers know this as a matter of course: ask anyone who has spent fifteen minutes pumping away at someone's chest in CPR, only to declare the patient dead, whether there was a definitive moment of death. There is not, any more than there is a definitive moment where the machines change from keeping an alive person from dying, to keeping a dead person from rotting. There are just arbitrary guidelines, which change as we get better at restoring people from the grey areas.&lt;br /&gt;&lt;br /&gt;As there is often no definitive end to an individual life, so there is no definitive beginning. This becomes very political around the issue of abortion. The majority of people who believe that there is a black-and-white state of life or non-life define the beginning of an individual's life as one of birth, viability (where the baby could survive without the mother), or conception (when the egg is fertilised: the Vatican's choice).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thought experiment for birth: Births can be induced at any time from conception onwards. The only difference between one that survives or not is the viability. How does "life begins at birth" differ from "life begins at viability"?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thought experiment for viability: Which instant of time is it, at which a second either way means the difference between life and death? The point in time keeps shifting as we get better medical technology. Once someone finds a way to bring a fertilised egg all the way to birth in an artificial womb, so that every fertilised egg is "viable", what will the difference be between this and the conception argument?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thought experiment for conception: we could create people (eg by splitting a blastocyst to create identical twins) without a moment of conception: these are, most would agree, still human people. Equally, parthogenicaly-born lizards are still considered lizards, even though they have no father.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;As there is often no definitive beginning or end to a life, so there is no definitive boundary.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thought experiment: are twins separate people? If yes, are conjoined twins two people? If yes, then is a four-legged man with one head two people, or one? At some point, you place the division between "one being" and "two beings". At that point, separating them more or less by a single cell will change their nature from single to dual. What happens if that cell is there, but dies? Does a life die with that cell? What happens if it is not there, and grows? Is a life created with that cell?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;So, we've established that the life of an individual needn't necessarily have a clear beginning or end. Individuality itself is a concept with fuzzy boundaries.&lt;br /&gt;&lt;br /&gt;What is life? &lt;br /&gt;&lt;br /&gt;Some believe life is magic from the Gods. And fair enough to them, I can't argue with that. But now it's here, life seems to be some kind of continuous process of growth and reproduction. Something is alive if it's involved in that process.&lt;br /&gt;&lt;br /&gt;People have carefully mapped the processes of living things, and claim these are necessary, if not sufficient, for something to be classed as living.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Respiration, Synthesis and transport of metabolites, Nutrition&lt;/i&gt;: is a person starving to death or suffocating already dead? Is a mayfly dead?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Environmental response&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Locomotion&lt;/i&gt;: is a tree dead once it is planted?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Growth&lt;/i&gt;: is an organism shrinking during hibernation not alive?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Excretion&lt;/i&gt;: is an organism which stores its waste products dead?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Reproduction&lt;/i&gt;: Is a mule dead?&lt;br /&gt;&lt;br /&gt;They don't look that necessary for something to be alive, though they may all ultimately be necessary for successfully passing your genes on to the next generation.&lt;br /&gt;&lt;br /&gt;They are certainly not sufficient to define life: if they were then an automated factory that creates automated vehicles that automatically build factories would be "alive".&lt;br /&gt;&lt;br /&gt;Is a bacterium alive? A virus? What is the minimum physical thing that can be said to be a marker for "life"? What is the minimum involvement in the process we call life, that can be said to be "alive"? &lt;br /&gt;&lt;br /&gt;If we define that point, and then make a machine that has that property, is it "alive"?&lt;br /&gt;&lt;br /&gt;I feel that life is a process that started millions upon millions of years ago; the idea of an individual life starting and stopping is a convenient simplification for our daily use; but that abortion is more complex.&lt;br /&gt;&lt;br /&gt;So "alive" = "participating in the process of life". Circular definition, I know.&lt;br /&gt;&lt;br /&gt;A sperm or egg growing inside someone - part of a living being? Up until some point, yes, it has to be. The cell has to split off an existing cell, and that cell is part of someone.&lt;br /&gt;&lt;br /&gt;A detached sperm - alive? Yes.&lt;br /&gt;&lt;br /&gt;A detached egg - alive? Yes.&lt;br /&gt;&lt;br /&gt;A fertilised egg, then, is two individual, combining to make one. Nothing *starts* there - it only continues the processes begun by the egg and the sperm. Which are continuing the processes begun by the cells that bore them, and so on back for millions of years.&lt;br /&gt;&lt;br /&gt;The fact that they occasionally form into globs of cells called people is not terribly relevant, to Life's point of view.&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:36171</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/36171.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=36171"/>
    <title>A bad workman blames his tools...</title>
    <published>2008-05-17T18:37:04Z</published>
    <updated>2008-05-17T19:18:49Z</updated>
    <content type="html">So I'm feeling much happier, thanks to those that asked: I got over my emo quite fast, and am doing my best to become the programmer I want to be.&lt;br /&gt;&lt;br /&gt;I can't really blame my tools here: none of the things I'm about to grumble about are related to my badness at programming, they're just annoyances that I felt the need to vent about. Mostly with Microsoft software and languages, but that's to be expected since I have suddenly started working with them all, so they're all new to me. Not so much a reflection on the company as on the fact that my work is focused on their products at the moment.&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;Visual Basic&lt;/h2&gt;&lt;br /&gt;Remember back in the 80s when you were first playing with computers and there was a language called Basic? Well, that language, believe it or not, is still alive and... I guess I can't say "alive and well", but its rotting corpse is still stinking up anything that Microsoft touches, so people still have to code in it. Me too, now. Apparently VB.NET is "better", but I've not used it yet so can't comment.&lt;br /&gt;&lt;br /&gt;I have instead been working with three versions: VB6, VBA (which is like VB6, but is embedded in Office applications), and VBScript (which is like the bastard child of both).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Functions vs Subs is a great area for niggles. For those who remember "GoSub"... this is nothing like that. Instead, if a function doesn't return a value, then it's a "sub" not a "function". This varies a little between versions, and is apparently scrapped completely in VB.NET, but the annoyance comes because they both have different calling conventions. You put brackets around the parameters for a function, not for a sub, but this only matters if there's more than one parameter since brackets are also grouping constructs. Legal: mysub (param); Legal: myfn(param); Legal: myfn(param, param2); Legal: mysub param, param2; Illegal: mysub(param, param2); Illegal: myfn param. It's more consistent than it looks at first glance, but still stupid.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Functions can only be used where an rvalue is expected: that is, where a value is being assigned. So you can't call a function and just not assign it to anything: you must DIM a variable, then assign that variable to the function.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;They also have different creation conventions: functions are "Function &lt;i&gt;name&lt;/i&gt;(&lt;i&gt;params&lt;/i&gt;) &lt;i&gt;some code&lt;/i&gt;Exit Function&lt;i&gt;some code&lt;/i&gt; End Function", subs are "Sub &lt;i&gt;name&lt;/i&gt;(&lt;i&gt;params&lt;/i&gt;) &lt;i&gt;some code&lt;/i&gt;Exit Sub&lt;i&gt;some code&lt;/i&gt; End Sub"... which means that if you decide to return a value from a sub, you have to change the start, end, and any exits from that sub, rather than just adding a return line.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Which leads us to the crazy mechanism for returning from fns. Instead of a "return" command like all reasonable languages, it requires that you assign (with or without "Set", depending on the return type of your function, see below) to a "Magic" variable that you never created with the same name as your function. So if you change the name of your function, or you copy one function to make another, you need to change the code in two places. Obviously, when creating a bunch of similar functions, this is really prone to cut-n-paste bugs.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VB has the "Set" command. Assign an object to a variable, you use "Set". Assign a non-object to a variable, you don't. This seems arbitrary, and gets worse: arrays, dates and strings are not objects, for example: collections and recordsets are. If you have a variable which could store either an object or a native type (called a "Variant" in Microsoft-speak), then which do you use? Who can tell? And if the variable has been strongly typed, why is it even needed? Allegedly this silliness is gone in VB.NET.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You've got "End For", "End Sub", "End Function", "End While"... so how do you end a "Do" block? I know what you're thinking: "Done". And you'd be wrong, it's "Loop"!&lt;br /&gt;&lt;li&gt;You've got "Exit For", "Exit Sub", "Exit Function"... so how do you think you exit a while loop? That's right! You don't! No command for that. But there is "Exit Do", so you can do "DO WHILE &lt;i&gt;test&lt;/i&gt;:&lt;i&gt;code&lt;/i&gt;EXIT DO&lt;i&gt;code&lt;/i&gt; LOOP&lt;/li&gt;" (yeah, "Exit Do" not "Exit Loop").&lt;br /&gt;&lt;li&gt;There's no system for block quoting, which makes SQL queries uglier than you would ever think possible. The best you can do is use '" &amp; _' at the end of a line, then '" ' at the start of the next line, to continue a string.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Both '&amp;' and '+' work to concatenate strings, but '&amp;' should be used as "var + var" may add them numerically, or concatenate, depending on type.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There's no &amp;=. A minor niggle, perhaps, until it comes to building strings, when it just gets ugly. In fact, the general construct, +=, *=, etc, is unknown in the language.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It's space-sensitive in places that you wouldn't expect it to be. '"str" &amp; var' is fine. '"str"&amp;var' is unfine. Because '&amp;var' is a dereference, I suspect. But a real language (take perl for instance) would take context into account. A dereference makes no sense where a string concatenation does, and vice versa, so whitespace should not matter.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;VBScript&lt;/h2&gt;&lt;br /&gt;Basically, this language seems to be a wrapper around the windows scripting host, made as much in the style of VB as they could. Or at least, as much as they could be bothered to. Which means it has all the flaws of VB6 above and more...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There's no struct. This alone is clearly enough to move VBScript from "real language" to "toy". You can't, for example, return more than one piece of information from a function in a nice structure, and instead have to use ugly kludges like modifying the function parameters in the function.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There's no ternary operator. VB uses the "iif()" function, and it's easy enough o build your own in VBScript... but why isn't it a builtin?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Awful error messages. This, I think, comes from it being a halfassed wrapper around the scripting service. So it gives errors at that level, rather than at the code level. "Type Mismatch" is VBScriptese for "Function not found", for example.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VBScript has no optional parameters to functions. In VB you can say "Function myfunction(optional param1)"... not in VBScript. This is made more confusing by the fact that the scripting host definitely permits it for JScript and Javascript, so it's not like it was impossible for them or anything. They just didn't do it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VBScript has no strict typing. In VB you can say "Function myfunction(param1 as String)" or "Dim myvar as String"... not in VBScript.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Because of this, the strongly typed versions of functions seem to be missing: Chr() exists, Chr$() does not.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Internet Explorer&lt;/h2&gt;&lt;br /&gt;Not a lot to say here, other than I hate the tab management there and there's no way to change it. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start a search, go to a new address, and it opens in the current tab rather than a new one. Which is silly: if I type a URL or a search it's to find more about what I'm currently writing about in the current tab. I don't want to browse away from that form!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And although it can remember tab sessions, it wont let you close the last tab... so you have to open a new tab and then close that one, if you don't want the site you're on to reopen the next time you open the browser.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Vista&lt;/h2&gt;&lt;br /&gt;The epitome of MS Suckage.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Explorer opens when I click links in Furcadia and other apps. Even setting IE to be the default, then Firefox to the default again, doesn't fix this.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In XP and below that's easy to fix. Explorer -&amp;gt; Tools -&amp;gt; Folder Options -&amp;gt; File Types -&amp;gt; N/A: Internet Shortcut -&amp;gt; Advanced -&amp;gt; Open -&amp;gt; Edit. Piece of cake. In Vista, that tab is missing and has been replaced with Start-&amp;gt;Control Panel-&amp;gt;Default Programs, which is a collection of the ugly vista-style webpages that have replaced proper dialogs. They have removed anything that used to be under the "Advanced" button, so basically file associations are crippled, can't be created, edited, or renamed, unless you edit the registry or use a third party app.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Filetypes can still be reassigned, though. Except when I tried that, reassigning the .URL filetype to Firefox, the application hung and wouldn't let me.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I made a commitment to keep UAC turned on and try to put up with it, because I was entirely sold on the theory, at least. If implemented at least semi-reasonably, it is as good and sensible as having to type your root password in Linux for sensitive tasks. But, THREE confirmation dialogs just to delete one shortcut from my start menu? This was the point at which I turned UAC off. That is unacceptably broken. No Linux programmer would do that, I would not be permitted to write code so broken, and I will not accept it on my machine.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The reboot when turning UAC off took hours. Literally. I played a game on my other machine while I waited. Eventually I caved in and just hit the power switch.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;With UAC off, I no longer have access to write to folders on my own machine! I can't make a folder in "C:\Program files"!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Windows security centre will always display as red in your taskbar if you turn off UAC.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Visual Studio&lt;/h2&gt;&lt;br /&gt;There are in fact a few IDEs that I'm using. For VBA, I tend to have to use MS Office's internal editor. For VB6 I have to use "Visual Basic 6" which I'm guessing is some earlier version of Visual Studio by another name, and for VBScript, I use a different Visual Studio, with a macro to hook into the script and debug it, since that's not a built-in ability.&lt;br /&gt;&lt;br /&gt;But I'll lump them all together as one.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;F3 while searching. This is just stupid and infuriating. If the selection is on the search box and I hit F3, then nothing happens. If it's on the text, then I search for the next occurrence.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No line numbers by the text. And this is meant to be an IDE for programming.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Most measurements are in TWIPs, except those that aren't. That is, multiples of 1/1440th of an inch. Not pixels, not anything intelligent that would transfer to mobile computing, projected screens, etc. But makey-uppy measurements based on an assumption of how many pixels per inch the average screen is (updated in each windows version), an arbitrary constant (1/1440), an an imperial measurement. Awesome! And you can't change to any other system of measurement, no. In small fonts mode, 15 twips = 1 pixel. But of course, you can't rely on that or anything.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When I said "except those that aren't", I of course meant that there are other measurements that are in a different scale that cannot be converted to TWIPs. Like borders seem to be in pixels, font sizes are in points (tip: 1 point = 20 TWIPS).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In all versions of this editor, the file explorer isn't a real explorer, so to unlock a file in CVS you also have to have a real explorer window open.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you open a file from that real explorer window, though, it won't open it as a file in the current project, but instead as a file in a new copy of Visual Studio that it opens up for the purpose. There's no rightclick option to open it in the current project, even.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you open a file that's readonly, either because you are debugging it, or because it is locked in the CVS, then some IDEs will allow you to edit and just silently not let you know they couldn't save; others will not allow you to edit at all; others will allow you to edit, then let you know that you can't when you try to save, then undo all your changes without prompting... some will change their behaviour between these extremes depending whether you are debugging at the time. Some will open a file a second time, in another tab, for debugging, then when you quit debugging, save or close the wrong one. It's all very Russian roulette and unintuitive, and the only safe way seems to be to make sure you never try to accidentally edit a locked file, and always save before changing into or out of debugging mode.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some let you copy forms. Some don't. Want a form that works just like that other form? Create a new form, copy the code, copy the components, then in the GUI form designer tool, go through all the settings of the two forms and manually copy each one. Because, a "copy form" button would have been evil, or something.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Microsoft software seems to hate to remember paths. So you're working in a database or project, and want to add a new file, save a file you just added, or import or export a table from the database. Should it default to showing you: 1) a random directory it just decided to make in your documents folder, 2) a random directory it just decided to make under its own application path, or 3) the folder that it knows you are working in? Answers on a post card. For extra points, try to guess which of the three it will pick the second time you do it, when you've effectively set your preferences.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;IIS&lt;/h2&gt;&lt;br /&gt;Probably the most-scorned webserver out there. Why? Well...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IIS is single threaded, and runs the scripting host in that thread. So, an infinite loop means the server falls over. Compare that to PHP+Apache where it just means that after a few seconds, the thread serving that page times it out and closes it, and you can see why VBScript+IIS is not recommended for serious web applications. Allegedly this is fixed in .NET or something. In my opinion, any job involving work on a system which contains VB, IIS, or Access as components, should include pricing to move it to a real database and a DB-friendly language, at least anywhere that security is an issue.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;MS Access&lt;/h2&gt;&lt;br /&gt;To be fair to this, it... no, sorry, it stinks like a bad day at a fishmarket. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can't quote integer fields. Which means you need to know which fields are integer and which are string, when escaping your data, or be vulnerable to injection attacks. In MySQL you can just replace all quotes with escaped quotes, then slap values in quotes, and you're safe from naive attacks.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Access is inconsistent with its wildcards. When typing the query into Access, it expects '*' as a wildcard. When getting the query from VB it expects the ANSI standard '%'. This causes problems when debugging, trying to copy a query from the debugger to run it in access...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Access is inconsistent with its date fields. Though I've not run into this much it seems that sometimes it allows '#dd/mm/yyyy#", sometimes it allows "'dd/mm/yyyy'", sometimes both, with no immediately apparent reason, though I suspect that sometimes it wants ANSI compatibility, and sometimes VB-compatibility. Personally, I try to pass VB Date fields in instead, which avoids the problem.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Booleans are known as "yes/no fields" and accept "yes" and "no" as well as "true" and "false". Some foolish programmers actually use this "feature", which will naturally cause problems when porting their code to a real database.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Access too is guilty of bad error messages, and this time doesn't have the excuse that it's got a scripting engine behind it. "No value given for one or more required parameters" means "field not found" for example, not that one of your comparisons or assignments is null or something.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This one bit me recently. "null + 5" is null in Access, 5 in MySQL. So in MySQL, it's safe to do: "UPDATE TABLE SET counterField = counterField + 1 WHERE idfield = blah". In Access, it's also "safe", in that it doesn't throw an error. But in Access, your counter will never increment if the field's default value is null! The correct solution is to set all null values to 0, but that's not always possible. The alternative is to SELECT counterField WHERE idfield = blah, then put that in a vb variable, set it to 0 if it's null, then "UPDATE TABLE SET counterField = " &amp; kludgeyVariable &amp; " WHERE idfield = blah"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VBA is tied into access, as is the form and query design. Tied so tightly that they are all one glob, and you can't just pull one part out (the data in the database) and migrate it to a proper program: you'd need to redo everything from scratch, forms, code, and database, at the same time. This is an ugly form of lock-in, and one in which many companies are stuck.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The SQL interface is the worst bit though. Want to type a SQL query? OK, open the DB in Access, which will then lock the database so that your code can't use it. Go to the list of stored queries, and click to create a new one. Click OK to use the query builder, cancel the list of tables to include in the GUI, click the dropdown on the view button, select SQL view, and delete the default query "SELECT;" in that view. Now you can enter your query. If the result will be a table, select table view in view dropdown, to run the query and see the results. Otherwise, click the red exclamation mark button to run the query. Remember to close the database before returning to your debugger or it will still be locked, even if you have opened it readonly (as a workaround, you can copy the database, and run queries on that while you are debugging the real one). Compare this to MySQL where you just type "mysql" at the commandline, then run your query, and can have those results open on your screen without locking the database.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;But it gets worse. If the database is a readonly file (CVS checked out, wrong version for your database, etc) then you cannot create stored queries, because that would mean changing the file... so you can't run SQL queries through Access AT ALL!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;The Programmers&lt;/h2&gt;&lt;br /&gt;VB Programmers themselves seem prone to some habits that bug me.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lvalues on the left in comparisons. This is generally understood to be evil. 'IF "" = var THEN...' is safe in any language.  'IF var = "" THEN...' is OK in VB and a subtle bug in most other languages; it will always branch the same way, regardless of the value of 'var'; and it will set 'var' to the empty string. There is no excuse to use this unpleasant form of the construct in vb though, since it forms bad habits, and often makes the meaning of the code less clear. In some cases ("IF var = 1 THEN var = 2 ENDIF") it is arguably clearer. Not in any non-trivial cases though:&lt;br /&gt;("IF varA = 12 AND varB = 59 THEN varC = 3 ENDIF")&lt;br /&gt;("IF 12 = varA AND 59 = varB THEN varC = 3 ENDIF")&lt;br /&gt;In the latter, assignments and compares are clearly distinguished, and the things that are being compared TO are clearer: 12 and 59 are the important things here, not varA and varB. Generally it's best to have the thing you're testing FOR to be as far left s possible so the eye doesn't need to search for it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sticking everything into the database. The idea here is that you get away from hardcoding stuff because that is allegedly unutterably evil. But if the business requirement is for, say, one report to be done in one way, and all others to be done in another, you have some tradeoffs to make. You have several options. 1) In a single place in the code, hardcode that report ID to be different, and format and comment it well to be obvious. To me this is the simplest, clearest, most maintainable option, which can easily be scaled to other options if necessary. 2) Make the code the same for all reports by sticking the query for each report into the database as a string. But the query string is now unformatted, uncommented, and duplicated for all others, so when a new requirement is added to the normal ones, you have to edit every single instance of it in the database. If the requirements change in a way that can't be dealt with just by changing the query, you still need to change the code anyway. 3) Stick the option to make that variation as a checkbox on the report generating form. The code no longer has hardcoded IDs, but the report creation tool rapidly becomes cluttered with controls that are only ever set to "yes" for a single report, which eventually become obsolete fossils but still need to be maintained as it is too much work to remove boolean fields from the database, checkboxes from the forms, and all code that refers to either; simply not maintainable.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Calling database result sets "tables". They're not. Access sort of blurs the line, with stored queries being able to be referred to as tables, and with a simple table name being able to be used as a query without a preceding "SELECT * FROM ". The recordset object even allows you to use it as an LValue, then call it's update() method, and it'll modify the table! But they're very different. This causes confusion in code which is referring to reading in a recordset and writing out to a html table, for example. Just call a recordset a recordset.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:36043</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/36043.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=36043"/>
    <title>skiddiot emo.</title>
    <published>2008-05-14T18:32:35Z</published>
    <updated>2008-05-14T19:10:07Z</updated>
    <content type="html">Feeling low and emo, gonna let it out on LJ because that's what it's there for darn it.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;I am, in some circles, moderately respected for my programming skills. I get people to look impressed or happy on a regular basis, and I measure my success by that. Programming is my job. But it's more than that, it defines me.&lt;br /&gt;&lt;br /&gt;I am a Programmer.&lt;br /&gt;&lt;br /&gt;If you don't have something that defines you, I probably can't explain to you what that means to me. Suffice to say it's important to me.&lt;br /&gt;&lt;br /&gt;I take care and pride in my work: I comment carefully, debug thoroughly, document well, format my code with care and choose good consistent names for my functions, variable names, databases, tables, fields... it matters to me. I use words like craftsmanship and mean it. I make comparisons between programming and poetry, and mean it.&lt;br /&gt;&lt;br /&gt;But I've never worked in the same place as other programmers. I've always been "the department's programmer", or "the company's programmer". I've basically been comparing myself to secretaries and students, and feeling I was pretty good in comparison. And I am. Comparatively.&lt;br /&gt;&lt;br /&gt;Now, though, I have a job as a programmer. And it's really obvious that I suck. I suck at the thing I am best at in all the world. And I don't just suck, I fail so badly it's painful.&lt;br /&gt;&lt;br /&gt;My boss is lovely, and that's half the problem. I got the job mostly to be able to work with him, a programmer I've admired for about 15 years. "It's OK," he says, "you're not used to..." and he finds some excuse. Excuses!&lt;br /&gt;&lt;br /&gt;Nobody has *ever* had to make excuses for my code before.&lt;br /&gt;&lt;br /&gt;The shame is crushing.&lt;br /&gt;&lt;br /&gt;I feel like a singer, all of who's friends have always said she's great, hearing her recorded voice for the first time, and being horrified at how out of tune she is. And her friends make excuses, "you just had a bad day", "the acoustics were bad", "the mic was wrong", "you aren't used to working in a studio." But she knows, she's got ears, she can hear it: she can't bloody sing! It's her life to her, but she can't get away from that truth.&lt;br /&gt;&lt;br /&gt;There's a vicious cycle. I was slow, so I tried to get faster, cutting corners, commenting less well, testing less well. Yesterday, my poor commenting was the talk of the office. Bad commenting! That's almost the ultimate programming sin, after bad naming choices. A non-programming manager lectured me on commenting style. And he was right, I needed it. Ow, ow, ow. Today, it was my testing.&lt;br /&gt;&lt;br /&gt;BAD TESTING! I lead a team of dozens of testers. I teach them how to do it. I wrote the book on testing! What went so horribly, horribly wrong that I stopped testing my &lt;i&gt;own code&lt;/i&gt;?&lt;br /&gt;&lt;br /&gt;There's a table that I misnamed. It grates on my mind every time I think of it. And bad variable names as I tried and failed to match the elusive "house style" rather than just using my own preferences.&lt;br /&gt;&lt;br /&gt;And the vicious cycle gets tighter: today I spent too much of my work-time thinking about how I sucked, sinking ever deeper into depression, traitrous tears escaping my eyes. So I got even less than usual done. I slipped further into suckage.&lt;br /&gt;&lt;br /&gt;I feel like I'm in school, but even in school I was at least respected by my peers. I have no peers. I am the most junior of juniors. My opinion counts for nothing. My experience and knowledge isn't useful, except as much as it can be twisted to learn new stuff. I can't *help* anyone, be useful to anyone, make anyone happy.&lt;br /&gt;&lt;br /&gt;Instead, I have to ask for help with the most remedial tasks, distracting people from more important work, and feeling useless every time I do. I take four times longer than a proper programmer. I've checked, against the estimated times for my jobs. And even after that time, the result is rushed and low-quality.&lt;br /&gt;&lt;br /&gt;It's been a long time since I've felt this low. Since I've cried, let alone in public (though I'm hoping it wasn't noticed).&lt;br /&gt;&lt;br /&gt;I know: I need to get over myself, tell my ego to shut up, and relish this chance to improve and hone my skills and soak up this free education and training, no matter how painful, and become the great programmer that I feel I should be. And I will. I don't want anyone to ever have to make excuses for me again. I want to improve, and fast.&lt;br /&gt;&lt;br /&gt;Just as soon as I get over the sting of this most horrible discovery, and grow to accept it instead: I'm not an awesome programmer, or a good one, nor even just a mediocre programmer, I'm a &lt;i&gt;bad&lt;/i&gt; one, the kind who's work I have winced and laughed at in the past.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:35639</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/35639.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=35639"/>
    <title>Dragonwars savegame format</title>
    <published>2008-05-13T23:56:31Z</published>
    <updated>2008-05-14T00:00:51Z</updated>
    <content type="html">Been playing DragonWars a little lately. Nice enough game, but...&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think I'll give up on it. In order to play all 4 games I intended to (Dragon Wars, Bard's Tale 1-3) and enjoy the game plots and story arcs without being bored to tears, I'd have to: &lt;br /&gt;&lt;br /&gt;1) hack the save files (done);&lt;br /&gt;&lt;br /&gt;2) write a savegame-backup script (they have only one save slot!) (done);&lt;br /&gt;&lt;br /&gt;3) hotkey the whole tedious combat experience (could do easily); because combat really gets old fast, two or three combats and I'm sick of them already. I've done hundreds. I spent 20 minutes clicking buttons for one combat - and got 4XP for the party at the end!&lt;br /&gt;&lt;br /&gt;4) script an automap for the three that don't have one (feasible); DragonWars has a nice enough automap, the others don't, and I can't be bothered with graph paper nowadays.&lt;br /&gt;&lt;br /&gt;5) script a paragraph-display for Dragonwars (tricky); this is because it occasionally pops up "read paragraph 287" or somesuch, and you have to flip through the manual to find it. I have both the manual and a PDF of it, but still... distracting, I just want to play the game!&lt;br /&gt;&lt;br /&gt;... but I think I'll just go play something more interesting instead. There are limits to even my gamer-masochism.&lt;br /&gt;&lt;br /&gt;But I thought I'd save what I'd done so far here, just in case anyone else was feeling masochistic.&lt;br /&gt;&lt;br /&gt;First, the savegame format. For Bard's Tale 1-3 it's a matter of record and plenty of places have it. For DragonWars, nowhere seems to have it, so here is what I could find out.&lt;br /&gt;&lt;br /&gt;Each character's info is 200Hex bytes long.&lt;br /&gt;&lt;br /&gt;The characters are stored at 2E26, 3036, 3226, 3426, 3626 and I presume onwards if you have more than 5 characters in your party. The order they are displayed on screen is the order they are in the savegame.&lt;br /&gt;&lt;br /&gt;Name Strings for items and characters are stored a little unusually. They are allocated 12 bytes, and the high byte of every byte except the last character of the name is set. So, the string ends after the first character that does not have the high bit set. If the name is less than the full 12 characters then generally the next character is a null, and the rest are random, but they don't need to be. If you put in the string "Sword" (no high bits set) then you will see the string "S" displayed, since it ends after the first character that has no high bit set, regardless of what follows.&lt;br /&gt;&lt;br /&gt;All numbers are stored little-endian, so the least significant byte first. For example, 0x0201 (513dec) would be stored as "01 02" in your hex editor. I doubt any of these numbers are signed, but I generally never took them high enough to be sure.&lt;br /&gt;&lt;br /&gt;The character information blocks are pretty obvious in a hex editor, but to make sure that they aren't in a slightly different place, find the name of your first character as a NameString, and work from there. At least &lt;a href="http://seegras.discordia.ch/Essays/CheatersGuide.txt"&gt;one site&lt;/a&gt; reports the info at a different address, claiming to find the health info  where I see the name. That site also has Bard's tale save file info).&lt;br /&gt;&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;Each character information block is split up as follows:
2E26 - 2E31 12 bytes. Character name as Name String (see above).
2E32 1 byte. Str - each of the next 4 stats is repeated, I guess for current and max values.
2E33 1 byte. Str
2E34 1 byte. Dex
2E35 1 byte. Dex
2E36 1 byte. Int
2E37 1 byte. Int
2E38 1 byte. Spr
2E39 1 byte. Spr
2E3A - 2E3B 2 bytes. Current health.
2E3C - 2E3D 2 bytes. Max health.
2E3E - 2E3F 2 bytes. Current stun.
2E40 - 2E41 2 bytes. Max stun.
2E42 - 2E43 2 bytes. Current pow.
2E44 - 2E45 2 bytes. Max pow.
2E46 - 2E60 27 bytes. Skills, see list below.
2E61 1 byte. Number of advancement points left to spend.
2E62 - 2E69 8 bytes. Bitfield for spells. See below.
(The following may all be arranged in a more complex bitfield, I dunno.)
2E6A - 2E71 8 bytes. [Unknown purpose, always seems to be 0?]
2E72 1 bytes. Status bitfield. 0=OK, 1=dead, 2=chained, 4=poisoned. (part of a larger bitfield? Setting other values seems to do nothing.)
2E73 1 byte. [Unknown purpose, always 0?]
2E74 1 byte. 0 if male, 1 if female. (part of a larger bitfield?  Setting other values seems to do nothing, though the manual does claim "Male, female, sometimes, never" as values for gender.)
2E75 - 2E76 2 bytes. Level.
2E77 - 2E7A 4 bytes. XP.
2E7B - 2E7E 4 bytes. Gold.
2E7F 1 byte. Armor Value.
2E80 1 byte. Defence Value.
2E81 1 byte. Armor Class.
2E82 1 byte. (unknown purpose, but not 0).
2E83 - 2F11 143 bytes. (unknown purpose, always 0, possibly padding?).
2F12 - 3025 276 bytes. The inventory, as 12 items * 23 bytes. See below.&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Inventory&lt;/b&gt;&lt;br /&gt;I haven't done a whole lot of work on the inventory. It's clearly a bitfield and there are bits that I haven't figured out the meaning of yet. &lt;br /&gt;&lt;br /&gt;Byte addresses are for the first item in the first character's inventory.&lt;br /&gt;&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;2F12 - 8 if wielded, 0 if not.
2F13 - Bits 2 &amp; 3 are the stat required to use the weapon. 0x02=Dex, 0x04=Int, 0x06=Spi. Bit 0 seems to do nothing, and using any higher bits in the byte gives garbage skillnames when taking the item to be evaluated at a trader.
2F14 - Bits 1-5 are how many points are required for the above skill, 0 to 31. Don't know what the top 3 bits are for, but setting them does not affect the displayed skill requirement when evaluating.
2F15 - Unknown. Seen as 0x00 (hand axe) and 0x10 (battle axe, dagger, shortsword).
2F16 - Type, see below.
2F17 - Unknown. Only seen as 0x80.
2F18 - Unknown. Only seen as 0x00.
2F18 - Unknown. Seen as 0x40 (hand axe), 0x80 (battle axe), 0x00 (dagger), 0x20 (shortsword).
2F19 - Unknown. Only seen as 0x00.
2F1A - Unknown. Only seen as 0x01.
2F1B - 2F26 (12 bytes) Name string for the item. See above for explanation of name strings.

&lt;b&gt;Item types&lt;/b&gt;
0x00 - General Item
0x01 - Shield
0x02 - Full Shield
0x03 - Axe
0x04 - Flail
0x05 - Sword
0x06 - Two-handed sword
0x07 - Mace
0x08 - Bow
0x09 - Crossbow
0x0A - Gun
0x0B - Thrown weapon
0x0C - Ammunition
0x0D - Gloves
0x0E - Mage Gloves
0x0F - Ammo Clip
0x10 - Cloth Armor
0x11 - Leather Armor
0x12 - Cuir Bouilli Armor
0x13 - Brigandine Armor
0x14 - Scale Armor
0x15 - Chain Armor
0x16 - Plate And Chain Armor
0x17 - Full plate Armor
0x18 - Helmet
0x19 - Scroll
0x1A - Pair of Boots
0x1B and above - blank (no text).&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skills list&lt;/b&gt;&lt;br /&gt;Each of these skills has 1 byte each.&lt;br /&gt;&lt;br /&gt;What "Merchant" does, I don't know - it does not appear on the "X" experience point list, but will appear under your character's general skills list if you hack some points into it. An unimplemented or hidden stat?&lt;br /&gt;&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;2E46 - Arcane Lore
2E47 - Cave Lore
2E48 - Forest Lore
2E49 - Mountain Lore
2E4A - Town Lore
2E4B - Bandage
2E4C - Climb
2E4D - Fistfighting
2E4E - Hide
2E4F - Lockpick
2E50 - Pickpocket
2E51 - Swim
2E52 - Tracking
2E53 - Bureaucracy
2E54 - Druid Magic
2E55 - High Magic
2E56 - Low Magic
2E57 - Merchant
2E58 - Sun Magic
2E59 - Axe
2E5A - Flail
2E5B - Mace
2E5C - Sword
2E5D - 2-Handed Sword
2E5E - Bow
2E5F - Crossbow
2E60 - Thrown Weaponry&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Spells bitfield&lt;/b&gt;&lt;br /&gt;I'm giving the bytes in the "reverse" order here, as it is little endian and this makes the spells group more logically. One of the things I always worry about spells is that spells are often used for "quest gates" - you can't complete the quest until you have the spell to unlock the gates, or turn the statue to a living person or whatever. I don't know if this is done in this game, but if you want to follow the plot, it might be worth just going with hacking the purely offensive, defensive, and healing ones, rather than the world changing ones like summons, wall creation/removal, etc.&lt;br /&gt;&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;2E4E
0x01 - [Not used]
0x02 - [Not used]
0x04 - [Not used]
(Misc spells)
0x08 - Poison
0x10 - Kill Ray
0x20 - Zak's Speed
0x40 - Charger
0x80 - Summon Salamander

2E4D
0x01 - Radiance
0x02 - Guidance
0x04 - Disarm Trap
(Sun Spells)
0x08 - Major Heal
0x10 - Heal
0x20 - Sun Light
0x40 - Armor of Light
0x80 - Light Flash

2E4C
0x01 - Mithras' Bless
0x02 - Column of Fire
0x04 - Battle Power
0x08 - Holy Aim
0x10 - Inferno
0x20 - Fire Storm
0x40 - Wrath of Mithras
0x80 - Rage of Mithras

2E4B
0x01 - Exorcism
0x02 - Sunstroke
0x04 - Wood Spirit
0x08 - Beast Call
0x10 - Invoke Spirit
0x20 - Soften Stone
0x40 - Create Wall
0x80 - Cure All

2E4A
0x01 - Exorcism
0x02 - Sunstroke
 (Druid magic)
0x04 - Wood Spirit
0x08 - Beast Call
0x10 - Invoke Spirit
0x20 - Soften Stone
0x40 - Create Wall
0x80 - Cure All

2E49
0x01 - Greater Healing
0x02 - Brambles
0x04 - Scare
0x08 - Whirlwind
0x10 - Insect Plague
0x20 - Fire Blast
0x40 - Death Curse
 (High magic)
0x80 - Fire Summon

2E48
0x01 - Water Summon
0x02 - Earth Summon
0x04 - Air Summon
0x08 - Sense Traps
0x10 - Cloak Arcane
0x20 - Group Heal
0x40 - Healing
0x80 - Cowardice

2E47
0x01 - Vorn's Guard
0x02 - Sala's Swift
0x04 - Reveal Glamor
0x08 - Mystic Might
0x10 - Dazzle
0x20 - Big Chill
0x40 - Ice Chill
0x80 - Poog's Vortex

2E46
0x01 - Elvar's Fire
0x02 - Fire Light
 (Low magic)
0x04 - Mage Light
0x08 - Lesser Heal
0x10 - Luck
0x20 - Charm
0x40 - Disarm
0x80 - Mage Fire
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Batch file for backing up saves&lt;/b&gt;&lt;br /&gt;This is pretty sucky - it doesn't diff the files and only save if it's different, for instance, so you'll get way more saves than you need if you save rarely... and if you want to restore from backup, you'll need to copy it yourself.&lt;br /&gt;&lt;br /&gt;It's modified from a similar but more complex version I did for Falcon's Eye, which worked better.&lt;br /&gt;&lt;br /&gt;Anyway, for what it's worth... (obviously this is public domain code, use it all you want!)&lt;br /&gt;&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;@echo off

:loop
echo Hit enter to restore from your latest save.
echo Or anything else to quit.
set /P in=Your call: 

if X%in%==X goto play
goto end

:play
dragon.com
if exist data1 goto save
goto loop

:save
REM Yes, this does check for the existence of 500 files. Yes, it is faster than you'd think: the dir info gets cached.
set b=test
for /L %%a in (1,1,500) do if exist saves\save.%%a set b=%%a
set /A b=%b% + 1
echo Saving to saves\save.%b%
copy data1 saves\save.%b%
goto loop

:end
echo Quitting at user request.
set /P a=Hit enter
pause&lt;/pre&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:35530</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/35530.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=35530"/>
    <title>Nightmares!</title>
    <published>2008-05-13T18:16:46Z</published>
    <updated>2008-05-13T18:22:06Z</updated>
    <content type="html">Had some *really* fun nightmares last night&lt;a name="cutid1"&gt;&lt;/a&gt;, which meant I was all tired in the morning from lack of sleep. Still a pretty productive day though.&lt;br /&gt;&lt;br /&gt;Think this is because I'm unused to this big bed, which makes me end up lying on my back a lot more That's the position I tend to get the awesomest nightmares in.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nightmare the first: Anaconda!&lt;/b&gt;&lt;br /&gt;Can't remember this one very well. But there was some kinda big python, and it was trying to crush me, and I think in the end I got eaten. I woke up and was not tangled in the blankets, either.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nightmare the second: Zombies!&lt;/b&gt;&lt;br /&gt;This is awesome, I don't think I've ever had a zombie dream before. Can't remember much again, but I think it started out as my ruminating about the latest Resident Evil movie as I fell asleep again, and became a dream. Myself and some other guy (Lee or Al maybe?), were holed up in a house, and I had left the shotgun in the porch. We were out of shells anyway, but still, I regretted leaving it there because getting it would be risky.&lt;br /&gt;&lt;br /&gt;The house turned into a car, the porch was the boot (trunk, area behind the back seats), but it was still risky to get the gun because  that meant poking my head up in the back seat, and maybe being seen by the shambling (well, running) hordes, who could be seen and heard chasing the last few survivors down and killing them.&lt;br /&gt;&lt;br /&gt;And then my companion stuck his head up - there were others there at the time, a woman (my sister? fiancee?) and they were sticking their heads up too. I tried to make them duck down again but they wouldn't... the zombies came for us, and smashed the windows. We were doomed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nightmare the third: Mad Steampunk Scientists!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;And if zombies and giant snakes wasn't enough awesome, when I fell asleep the next time, &lt;i&gt;I was a mad scientist in a steampunk laboratory&lt;/i&gt;, a laboratory large enough to house a zeppelin, if it were not for all the scientific equipment and telescopes and other mysterious mad-scientist paraphernalia cluttering up the vast space.&lt;br /&gt;&lt;br /&gt;I was urging my Egor-tastic assistant to help me pack quickly and flee, as I had decided to leave my evil fellow scientist, and knew he would be unhappy. But he found out! As I prepared to leave, a huge pipe came crashing down onto the appliance I most wanted to escape with, some gleaming assembly of brass and lenses and stuff, the size of a washing machine. My partner in madness was not happy with my desertion! He left the building, having fired the self-destruct, and the whole laboratory started to collapse, the domed green-glass roof shattering and falling down. In the distance a spinning chunk of ceiling-struts and glass began began to fly across the vast space of the laboratory towards me. The laboratory's scale was deceptive, and I did not realise the size of the fragment, thinking it was only a handspan across, easily dodgable. I realised its true size, and the danger it posed, far too late. I turned to run, treacle-dream-slow, but it caught up with me, fifty feet of arching, riveted cast iron and thick glass shards, spinning as it tore through the equipment around me, striking me and shattering my spine (the phrase "shattering my spine" came through my mind).&lt;br /&gt;&lt;br /&gt;I knew that somehow I would survive past this setback, but I would need to craft myself some mechanical legs for the day I faced my new nemesis again!&lt;br /&gt;&lt;br /&gt;Yes, this one definitely from too much &lt;a href="http://www.girlgeniusonline.com/comic.php"&gt;http://www.girlgeniusonline.com/comic.php&lt;/a&gt; and &lt;a href="http://www.boingboing.net"&gt;http://www.boingboing.net&lt;/a&gt;. That and moving out from sharing the house with Lee, my business patner, and rather feeling I am leaving him in the lurch. But hey, I get a whole flat for the same money, so I can't feel too guilty.&lt;br /&gt;&lt;br /&gt;I feel really lucky to have had three awesome nightmares in the same night - normally I can go a whole year without ONE! I love this new bed!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:35075</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/35075.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=35075"/>
    <title>New job tomorrow</title>
    <published>2008-03-27T18:09:58Z</published>
    <updated>2008-03-27T18:09:58Z</updated>
    <content type="html">Bit scary really. Tomorrow morning I go off to my new job. I have only the vaguest idea of what I'll be doing, when I'll be paid, where I'll be living, how it'll all work out.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;Still, it's only for a couple of months (possibility of longer term, but we'll see).&lt;br /&gt;&lt;br /&gt;Probably the biggest question is "how much stuff should I take?" My tower case and large flatscreen would seem like overkill. But it'll need to come up at some point.&lt;br /&gt;&lt;br /&gt;Looks like I'll be going up to Leeds for a couple days to get an idea of the job, then across to Crewe to meet my sister, then down to south west Wales to visit my mum, then back to Leeds. It's going to be expensive: hundreds of pounds just in train fare.&lt;br /&gt;&lt;br /&gt;*sigh* I need to pack.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:34912</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/34912.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=34912"/>
    <title>Say no to copyright term extension.</title>
    <published>2008-03-03T23:05:36Z</published>
    <updated>2008-03-03T23:05:36Z</updated>
    <content type="html">&lt;a href="http://www.soundcopyright.eu/"&gt;http://www.soundcopyright.eu/&lt;/a&gt; Please sign their petition.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;You know me - you know that I think the public domain is the only way to go to preserve our works and our future.&lt;br /&gt;&lt;br /&gt;The FSF has said it better than I could:&lt;br /&gt;&lt;blockquote&gt;when this time is up, these works join Goethe, Hugo and Shakespeare in the proper place for all human culture – the public domain.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Yes! Strangely though, they continue:&lt;br /&gt;&lt;blockquote&gt;In practice, because of repeated term extensions and the relatively short time in which sound recording techniques have been available, there are no public domain sound recordings.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;No public domain recordings? I sincerely hope they mean "no copyrights have expired on any recordings". Either that or, f'rinstance, the US government can have been making no recordings.&lt;br /&gt;&lt;br /&gt;But anyway, please, sign this petition. Fifty years is enough: commercial agencies make poor caretakers of our cultural heritage: they tend not to make copies available once they're no longer profitable.&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:34719</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/34719.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=34719"/>
    <title>Two windows errors: 1) \winnt\system32\config\SYSTEM 2) Error A2210</title>
    <published>2008-02-17T04:56:23Z</published>
    <updated>2008-06-17T22:41:56Z</updated>
    <content type="html">Well, three nongeek posts in a row was quite enough, I think.&lt;br /&gt;&lt;br /&gt;Today, Windows 2000 would not boot up. I got the dreaded error message:&lt;br /&gt;"Windows could not start because the following file is missing or corrupt: \winnt\system32\config\SYSTEMced"&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;The -ced at the end is just because there was a string behind it ending in the letters "ced", and the error message overwrote it - but you get a lot of hits (3760) on Google for that message with the "ced" on, so...&lt;br /&gt;&lt;br /&gt;My first instinct was to slap in the recovery disk, and try to fix it: this is where I ran into "Internal Consistency cannot continue Error A2210" - which actually means "You need a floppy drive interface enabled even if you don't have a floppy drive or win2k recovery won't run, kthx". Going into the BIOS and enabling the FDDC made this freakishly unhelpful and pointless error go away.&lt;br /&gt;&lt;br /&gt;So I ran the recovery tools, and they said my drive was unrecoverably corrupted. Oh, arse. Time to hit Google.&lt;br /&gt;&lt;br /&gt;Turns out that the problem is because the "system hive" of the registry needs to be loaded at boot time. And it has limited memory to load in, which means it has about a 10.4M maximum size. And because I've been running win2k continuously for about 8 years now, and before that was running win95, and I've plugged in and unplugged lots of hardware in the meantime, mine went over that limit today, when I updated my Nvidia drivers.&lt;br /&gt;&lt;br /&gt;Microsoft's recommended fix (&lt;a href="http://support.microsoft.com/?kbid=269075"&gt;http://support.microsoft.com/?kbid=269075&lt;/a&gt;) is to boot to the command console, trash your system hive, restore from backup (what backup?), then reinstall all your hardware and drivers. Yeah, I'm serious. Well, they actually say to restore it from the last manual backup you made, and then install anything new after that. My last manual backup was 3Mb, so that's basically everything. If you were wondering how to make a backup, you go to the... no, I'm lying, you just plain don't do it, because the backups are only created when you create an emergency repair disk, and you can't do that without a floppy disc ("No floppy drive available. Operation aborted"). Despite the fact that the backup is stored on the hard drive. Yeah.&lt;br /&gt;&lt;br /&gt;If you want make one without a floppy drive, vfd might help. Personally, I found a way without using the stupid recovery console and crap.&lt;br /&gt;&lt;br /&gt;1) whip the hard drive out, slap it into your USB caddy, and plug it into another machine. Ideally another Win2k machine! Can't do that? Guess you're stuck reinstalling then.&lt;br /&gt;&lt;br /&gt;2) open regedt32, "file-&amp;gt;load hive". Do this with somewhere definitely writable by you, like the root of "HKEY LOCAL MACHINE" selected. Mount the file \winnt\system32\config\SYSTEM from your USB drive somewhere in your registry: when prompted for a key name, pick a throw away name like "systemp". Then save (file-&amp;gt;export) that key somewhere. Then unload the hive again so you can overwrite the file: until you unload it, it will be locked and unwritable.&lt;br /&gt;&lt;br /&gt;3) The saved version should be quite a chunk smaller, since it wastes a ton less space. For me, it was 9.86M, plenty small enough to boot. Back up your old SYSTEM file, replace it with this new one, stick the drive back in and presto changeo, windows will boot again.&lt;br /&gt;&lt;br /&gt;4) Now clean up your system hive (it's in HKLM\System\CurrentControlSet), deleting any crap you don't need. Old, removed devices and such. The instructions on the microsoft page are in fact useless here: they presume that the space is all used by LanmanServer - and it's not. Not in my case at least. There's a good chunk gobbled up by Creative (seriously, wtf? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Creative Tech\EmuPIA\Public\CLSID and HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Creative Tech\Ctstring\Strings are HUGE! Why??? Nothing by Creative is required for booting up! The System hive is ONLY for stuff required when booting.) But I've no idea what deleting that stuff would do.&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\ and HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Redbook\SpecialTargetList look like you could hack out a chunk of devices you don't have.&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatibility looks like you could delete a bunch of crud for ancient apps you never intend to use.&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print looks like it's only needed if you have a printer - but goodness knows what side effects trashing it would have.&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SystemResources contains some rathr chunky hex fields - but darned if I'd touch them with a bargepole.&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume seems to be a list of drives I've plugged in over the years - a huge list and ripe for deletion I think. &lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB and HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR same again, for USB devices.&lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services largeish, vaguely promising.&lt;br /&gt;&lt;br /&gt;I couldn't find anything truly vast in there - so my suspicion is that it's mostly used up in large binary lumps that grow over time. I may write something to hunt for the largest, some day. Heck, there's likely a program out there to do that already.&lt;br /&gt;&lt;br /&gt;For the time being though, I'm 600k away from the danger zone, it took me 8 years to grow to 10.4M, so I'm not too worried. Sometime this year, though, I'll most likely need to do something about it.&lt;br /&gt;&lt;br /&gt;When that time comes, though, I now have a recentish backup of my SYSTEM file, and I know what the errors mean.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:34550</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/34550.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=34550"/>
    <title>Naughty poem!</title>
    <published>2008-02-13T19:21:39Z</published>
    <updated>2008-02-13T19:21:39Z</updated>
    <content type="html">A friend of mine wanted ideas for a song for "a lovesong to a socially awkward geek who wouldn't know a girl was coming on to him if she stripped off and snogged his face off".&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;This was my contribution:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
He looked up from his screen and there she stood, 
   mumble mumble mumble mumble wood, 
 A geeky angel amongst a sea of n00bs, 
   mumble mumble mumble mumble boobs, 
 She leaned over with a breathy giggle, 
   mumble mumble mumble mumble jiggle, 
 She needed help with her username and pass, 
   mumble mumble mumble mumble ass, 
 He helped her, avoiding her limpid eyes, 
   mumble mumble mumble mumble thighs, 
 Her voice meltingly asked "Pardon?", 
   mumble mumble mumble mumble MUMBLE!
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ithankyew! *bow*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Side chuckle: I originally typoed "limpid eyes" (calm, clear eyes) as "lipid eyes" (fat eyes). &lt;em&gt;Not&lt;/em&gt; the effect I was after!&lt;br /&gt;&lt;br /&gt;According to Google, this is a fairly common typo:&lt;br /&gt;"Limpid eyes" (&lt;a href="http://www.google.co.uk/search?q=%22limpid+eyes%22"&gt;google&lt;/a&gt;) (&lt;a href="http://en.wiktionary.org/wiki/limpid"&gt;wiki&lt;/a&gt;): 12,600 hits&lt;br /&gt;"Lipid eyes" (&lt;a href="http://www.google.co.uk/search?q=%22lipid+eyes%22"&gt;google&lt;/a&gt;) (&lt;a href="http://en.wikipedia.org/wiki/Lipid"&gt;wiki&lt;/a&gt;): 64 hits (0.5%)&lt;br /&gt;"Limpet eyes" (&lt;a href="http://www.google.co.uk/search?q=%22limpet+eyes%22"&gt;google&lt;/a&gt;) (&lt;a href="http://en.wikipedia.org/wiki/Limpet"&gt;wiki&lt;/a&gt;): 28 hits (0.2%)&lt;br /&gt;&lt;br /&gt;And according to Wikipedia, limpets are snails. Who knew?&lt;br /&gt;&lt;br /&gt;[Seems gastropods that whether you class a gastropod as "snail", "slug", or "limpet" is really more about form than relation.]&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:34024</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/34024.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=34024"/>
    <title>Kellogs promoting Christianity?</title>
    <published>2008-01-30T13:35:52Z</published>
    <updated>2008-02-13T19:31:46Z</updated>
    <content type="html">I think Kellogg's is trying to convert me to Christianity. My landlady recently gave me a box of &lt;a href="http://www.kelloggs.co.uk/products/Rice_Krispies/Cereal/Rice_Krispies_Multi_Grain_Shapes.aspx#"&gt;Kelloggs Rice Crispies Shapes&lt;/a&gt;. Which contain four different shapes, all with a Christian theme: Fish, Christmas trees, Stars, and &lt;a name="cutid1"&gt;&lt;/a&gt;Lepers.&lt;br /&gt;&lt;br /&gt;Fish: Well-known symbol of Christianity.&lt;br /&gt;&lt;br /&gt;Christmas Trees: can't be sure there, but I mean it's an evergreen tree, c'mon.&lt;br /&gt;&lt;br /&gt;Stars: 5-pointed stars, could be a pentagram, but the arms are too long, more starfishy. I reckon it's the star of Bethlehem thing.&lt;br /&gt;&lt;br /&gt;Lepers: At least, I presume they are lepers. The stars, fish, and trees are all intact, but all the people shapes are missing limbs. I am expecting to get a bowlful of little arms and legs at the end of the box.&lt;br /&gt;&lt;br /&gt;Gross.&lt;br /&gt;&lt;br /&gt;And they're feeding these to children!&lt;br /&gt;&lt;br /&gt;I'm quite serious about the wholesale disfigurement of the people ones though. I've eaten about half the packet now (they make excellent dry nibbles). And I've found only one intact human.&lt;br /&gt;&lt;br /&gt;Who I promptly ate.&lt;br /&gt;&lt;br /&gt;Oh no. I think I might have eaten the Jesus of Rice Crispies.&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:33621</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/33621.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=33621"/>
    <title>Dreams of flying.</title>
    <published>2008-01-15T14:27:57Z</published>
    <updated>2008-01-15T14:27:57Z</updated>
    <content type="html">I rarely get dreams of flying, so it's nice when I do. &lt;a name="cutid1"&gt;&lt;/a&gt;I take them as signs of hopefulness in myself. And a sign of having control over my destiny.&lt;br /&gt;&lt;br /&gt;I had one today. I was myself but varied in age from my own, to being a child... there was a social event, perhaps a wedding, perhaps even my wedding. I didn't know the people well, but they were good and friendly.&lt;br /&gt;&lt;br /&gt;I discovered that I could sit on the floor with my legs outstretched, but only my heels touching the floor. This did not seem too remarkable, but the fun bit was that I could cscoot along with just my heels on the floor, without expending effort. Wheee! It was like being on a go-cart. People were impressed, but only like you would be by a minor skill like juggling, rather than a skill that breaks the laws of physics.&lt;br /&gt;&lt;br /&gt;Then I tried crossing one leg onto the other, and it still worked. I went zooming along on the road outside, but there were too many cars.&lt;br /&gt;&lt;br /&gt;Then I discovered I could lift both feet up, and glide!&lt;br /&gt;&lt;br /&gt;Then there was a brief non-flying thing where we were taken to another building, in an interesting gizmo where people got into groups of chairs behind eachother in a row, all facing forwards like those small train carriages you see at some fairgrounds. These were then towed side-by-side, up to six abreast, so you got a very high density of people, in a scalable sized vehicle.&lt;br /&gt;&lt;br /&gt;Anyway, when we got there, I was the first out, flying around, gliding higher and higher. Always gliding: I rarely have the ability to provide my own propulsion in these dreams.&lt;br /&gt;&lt;br /&gt;It was night. I got braver, leapt off a building, and went out into the air... but I got caught by the wind, and although I could get as high as I wanted, I could not make headway towards the place I'd started even if I plummetted into it almost straight down to get the most speed.&lt;br /&gt;&lt;br /&gt;The place, a broad, dark and imposing four-storey mansion when we had approached it, seemed so small now. It was revealed to be just a small feature of the huge metal bridge that it was on. I had to strain to make it out, and eventually I only knew where it was from the position on the bridge. To scale, then, the bridge must have been many thousands of feet high, and miles long. I think it was the Golden Gate bridge, grown vast in my imagination, with buildings upon it like the old London Bridge, except the buildings were so small in comparison that even the tallest barely made a change in the shape of the bridge.&lt;br /&gt;&lt;br /&gt;Diagnosis: this is a dream about my move to the US. I do not anticipate the people I will meet at my wedding to be unpleasant; I  am glad to be on the move again; I am optimistic and uplifted; but it is a big, scary move, and if I'm not careful I might end up become powerless and dragged in directions I would not want to go.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:33503</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/33503.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=33503"/>
    <title>Housekeeping, Dewi-style.</title>
    <published>2008-01-14T08:49:50Z</published>
    <updated>2008-01-14T08:59:26Z</updated>
    <content type="html">So I wanted to install &lt;a href="http://www.realmcrafter.com/"&gt;RealmCrafter&lt;/a&gt;, but I found it it would mess up trying to read drives over about E:. I'd installed it to I:, so this was a problem.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;So I decided to sort my drives out...&lt;br /&gt;&lt;br /&gt;See I had 3 hard drives, and drive letters like:&lt;br /&gt;C:\ 5G "Boot" part'n on Drive 1&lt;br /&gt;D:\ 20G "OS" part'n on Drive 1&lt;br /&gt;  (&amp; a ton of wasted space on drive 1...)&lt;br /&gt;E:\ 180G "Backup" drive, all of a removable drive.&lt;br /&gt;F:\ 180G "Media" drive, all of drive 2.&lt;br /&gt;G:\ DVD Drive&lt;br /&gt;H:\ 64M Thumbdrive&lt;br /&gt;I:\ 180G "Apps" drive, all of drive 3.&lt;br /&gt;J:\ Encrypted &lt;a href="http://www.truecrypt.org"&gt;TrueCrypt&lt;/a&gt; drive for password file on thumbdrive&lt;br /&gt;K:\ and onwards are virtual drives for things like Daemon tools, other truecrypt drives, etc.&lt;br /&gt;&lt;br /&gt;How had it got like this?&lt;br /&gt;&lt;br /&gt;Back in the 90s, I started out like everyone else, with everything on C:, a CD drive on D:. So there was C:\windows, c:\program files, C:\autoexec.bat, and so on... &lt;br /&gt;&lt;br /&gt;I upgraded my drives over the years, going from 120M to about 5G.&lt;br /&gt;&lt;br /&gt;As time wore on, my 5G drive filled up, as they do. So I bought another 20G drive, D:, and installed all future programs to "program files" on that.&lt;br /&gt;&lt;br /&gt;And then I upgraded to Win2k. Well, that got installed to D:\win2k\ of course, because that's where there was space, and I didn't want to trash 95, I wanted to dual boot!&lt;br /&gt;&lt;br /&gt;So D: became the OS drive, apart from the programs already on it, and I got another drive, 180G, I:, on which I installed all future apps. (I'm simplifying, I've gone through lots more drives than this really).&lt;br /&gt;&lt;br /&gt;Now, years later, those original two partitions have been copied over to a new disk, but were left as they were because... well partly because this layout is really handy for testing installers (I've also set most of my shell paths to abnormal places for this reason). Back in the '95 days tstuff would try to write to C:\windows or c:\program files, and I could notice that. But the biggest reason I kept it like that was that changing drive letters would be a nightmare.&lt;br /&gt;&lt;br /&gt;But today I decided the time had come, after 8 years, to face this nightmare.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First step was of course to plan it all out.&lt;br /&gt;&lt;br /&gt;My tool of choice for this is &lt;a href="http://en.wikipedia.org/wiki/PartitionMagic"&gt;PartitionMagic&lt;/a&gt; (PM) - it has almost never let me down, and has bailed me out so many times. Great utility, I couldn't imagine doing stuff like this, or even basic disk stuff, without it.&lt;br /&gt;&lt;br /&gt;* Have a general clear-out. Empty caches, delete unused programs, etc.&lt;br /&gt;&lt;br /&gt;* Scan C: and D: with Windows' scandisk for any problems and fix them.&lt;br /&gt;&lt;br /&gt;* Delete that \r\n file that's been bugging me. I had a file with the filename "0x0D0A": two invalid bytes long. I was unsure if partition manipulation would barf on this, so I  Even the normally wonderful freeware &lt;a href="http://ccollomb.free.fr/unlocker/"&gt;UnLocker&lt;/a&gt; (the best file unlocking/deleting app I've yet found) could not delete it. In the end I used the for-pay program &lt;a href="http://www.winhex.com/winhex/"&gt;WinHex&lt;/a&gt;, which has got to be the best disk editor I've every played with. I'm sticking it right next to Partition Magic in my recovery tools. This was the only utility I found which even noticed there was anything odd about this file. Using this program, I was able to hex edit the directory entries - basically just overwriting the bad directory entry with the entry for an adjacent deleted file.&lt;br /&gt;&lt;br /&gt;* Reboot to scan the disk surface for problems. None found, but still wise. I suspect windows' scandisk only scans allocated space, so for this I used PM to create a partition in the free space, and scanned that as well as the two existing drives. I'm sure there are better apps for scanning disks than this. I also ran &lt;a href="www.excessive-software.eu.tt"&gt;Power Defragmenter&lt;/a&gt; (a windows Gui around SysInternals' defrag engine) to make sure everything was tidy.&lt;br /&gt;&lt;br /&gt;* Back everything up.&lt;br /&gt;&lt;br /&gt;* Convert C: and D: to NTFS. Could have done this at a much later stage, but it seemed sensible to do it early on, so everything would be using the same format.&lt;br /&gt;&lt;br /&gt;* Use PM to copy both partitions into the ton of unused space on that drive. At first I tried merging the copied partitions using PM, but it barfed on that, so instead I enlarged the "copy of C:" so it could hold all the files from the "copy of D:".&lt;br /&gt;&lt;br /&gt;* Back in Windows, manually copy everything from "copy of D:" into the "copy of C:". I would have had to do this even using PM's "merge" option, since the merge places all files on the hard drive into a subdirectory, like "D:\CopyOfE\", so I woulda had to move everything out. There was some faff merging the program files dirs, since some apps had folders from both C and D, but I just went with the newest version in each case. Knowing the "shift-click 'no' means 'no to all'" trick really helped here - meant I could drag-move a folder's contents like "Program Files"'s, and click shift-no to leave any folders that already existed, so I could deal with them manually in turn.&lt;br /&gt;&lt;br /&gt;* Use PM to delete the "copy of D:" and move the original D: to the end of the disk.&lt;br /&gt;&lt;br /&gt;* Check it'll still boot (I did this after prettymuch every PM change. Slower, but MUCH better than setting a whole queue of PM actions to go, then have the queue barf halfway through and find you can't boot).&lt;br /&gt;&lt;br /&gt;* Edit boot.ini so that I have a menu option for partition numbers 1-5 on that disk, just in case. I mean, the new C: *should* be partition 1, just like the old one, but I'm paranoid...&lt;br /&gt;&lt;br /&gt;* Delete the original C: and move the merged copy to replace it at the start of the disk.&lt;br /&gt;&lt;br /&gt;* Pray it still boots... it did, using the menu option for partition 2. So I have a partition 2 and no partition 1. OK.&lt;br /&gt;&lt;br /&gt;* Run the PM drive letter changer. &lt;br /&gt;&lt;br /&gt;* Do a registry search-replace to move everything from D: to C: that PM missed. For this I used &lt;a href="http://www.funduc.com/registry_toolkit.htm"&gt;Funduc's Registry Toolkit&lt;/a&gt; since it lets you search/replace regular expression bulk search-replaces - I woulda liked proper Perl-style regexes though, I wanted "\bD:".&lt;br /&gt;&lt;br /&gt;* Reboot, repeat last two steps to be sure you caught everything.&lt;br /&gt;&lt;br /&gt;* I had to fix a few apps that had broken in the move. &lt;a href="http://www.editpadpro.com"&gt;Editpad Pro&lt;/a&gt; needed re-registering. The freeware apps &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt; and &lt;a href="http://free.grisoft.com/"&gt;AVG&lt;/a&gt; needed reinstalling. All the connection titles in SecureCRT became uppercase, I suspect that's from the change from Fat32 to NTFS.&lt;br /&gt;&lt;br /&gt;* Finally, the PM letter changer only works for valid shortcuts. I had a few shortcuts that were not valid but which I wanted to redirect anyway: shortcuts to folders I'd archived off but might restore at some point, that kinda thing.&lt;br /&gt;&lt;br /&gt;For that, I stole some &lt;a href="http://cwashington.netreach.net/depo/view.asp?Index=841"&gt;code by Rob Dunn&lt;/a&gt; which searches through a folder tree and replaces the servername in all shortcut paths, and modified it so that it could also change drives and paths as well as servernames.&lt;br /&gt;&lt;br /&gt;Sorry, I'm too lazy to update the generated HTML to be "proper", at least unless someone shows an interest in it.&lt;br /&gt;&lt;br /&gt;My first experience of vBscript - what a very basic language! Goto and subroutines but no return or continue... &amp;lt;&amp;gt; instead of !=, And instead of &amp;&amp;, = instead of ==. Now that, more than plots of games, takes me back to my childhood, and Spectrum BASIC.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;
'~~Author~~. Rob Dunn
'~~Updated slightly by~~. Dewi Morgan, Jan 2008
'~~Blatently borrowed a little bit of code from~~. Jim de Graff
'~~Email_Address~~. qc_metal@hotmail.com
'~~Script_Type~~. vbscript
'~~Sub_Type~~. SystemAdministration
'~~Keywords~~. Update Shortcuts Migrate New Server Desktop lnk

'~~Script~~.
Dim Silent, CurTime
Dim newlink, oldfull, fullname, oldfile, targetpath
Dim w, ws

const ForReading = 1
const ForWriting = 2
const ForAppending = 8

On Error Resume Next

'Find current time that the script runs
set wso = CreateObject("Wscript.Shell")
set fso = CreateObject("Scripting.FileSystemObject")

' pull the system's process variables (we'll be using TEMP
' for the output file and WINDIR for default location of
' user's desktop folder - whether 9x or NT/2k/XP)
Set WshSysEnv = wso.Environment("PROCESS")

'pull the system's profile environment variable
userprofile = wso.ExpandEnvironmentStrings("%userprofile%")

'set your variables here
'silent = 0/1/2
'    0 - verbose
'    1 - turns off verification prompts
'    2 - turns off verification and initial config prompts
'curserver = server string you wish to replace
'newserver = server string you wish to change curserver to above server vars
' are needed only for when silent = 2
'ouputfile = location of output filename, you can use a string in place of
' all the code after the equal sign (i.e. outputfile = "x:\temp," etc.)
'curtime = finds time of execution of script

Silent = 0
OSType = WshSysEnv("OS")
CurServer = "//oldsrvrname/oldpath"
NewServer = "//newsrvrname/newpath"
OutputFile = WshSysEnv("TEMP") &amp; "\" &amp; "migrate_shortcuts_log.htm"
CurTime = Now
WinDirectory = WshSysEnv("WINDIR")

If OSType &amp;lt;&amp;gt; "Windows_NT" Then
  CheckFolder = Windirectory &amp; "\desktop"
Else
  CheckFolder = userprofile &amp; "\desktop"
End If


'check to see if ouputfile exists or not, deletes it if it does
If CheckFileExists(OutputFile) Then
  Set oldfile = fso.GetFile(OutputFile)
  oldfile.Delete
Else
  'wscript.echo oldfile &amp; " does not yet exist."
End If

If Silent &amp;lt;= 1 Then
  Call CServer
End If

Dim msg, title
msg = "Enter a '//Servername' or 'drive:' to search for in your shortcuts."
title = "Enter old target."
CurServer = getShortcutPath(msg, title, CurServer)
msg = "Enter a '//Servername' or 'drive:' to replace " &amp; CurServer &amp; " with."
title = "Enter replacement."
NewServer = getShortcutPath(msg, title, NewServer)
call CFolder

'set fso = Nothing
'set wso = Nothing

'Start writing the HTM Log file...
Set w = fso.OpenTextFile (OutputFile, ForAppending, True)

w.Writeline ("&amp;lt;html&amp;gt;")
w.Writeline ("&amp;lt;title&amp;gt;Changing Shortcuts in root folder " &amp; CheckFolder &amp; "&amp;lt;/title&amp;gt;")
w.Writeline ("&amp;lt;table BORDER=0 width=100% cellspacing=0 cellpadding=3&amp;gt;")
w.Writeline ("&amp;lt;tr&amp;gt;")
w.Writeline ("&amp;lt;th bgcolor=#000080 colspan=3 width=100&amp;gt;")
w.Writeline ("&amp;lt;p align=left&amp;gt;")
w.Writeline ("&amp;lt;/th&amp;gt;")
w.Writeline ("&amp;lt;/tr&amp;gt;")
w.Writeline ("&amp;lt;h0&amp;gt;&amp;lt;B&amp;gt;&amp;lt;font face=Arial color=#000033 size=2&amp;gt;Shortcuts located in: &amp;lt;font color=#CC0000&amp;gt; "_
&amp; CheckFolder &amp; " &amp;lt;font face=Arial color=#000033 size=2&amp;gt;, searching recursively at " &amp; CurTime &amp; "&amp;lt;/B&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/h0&amp;gt;")
w.WriteLine ("&amp;lt;TR bgcolor=gray colspan=3 width=100&amp;gt;")
w.WriteLine ("&amp;lt;TD&amp;gt;&amp;lt;font face=Arial size=1 color=white&amp;gt; Shortcut Path&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;")        
w.WriteLine ("&amp;lt;TD&amp;gt;&amp;lt;font face=Arial size=1 color=white&amp;gt; Target Path&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;")
w.WriteLine ("&amp;lt;TD&amp;gt;&amp;lt;font face=Arial size=1 color=white&amp;gt; Updated to&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;")
w.WriteLine ("&amp;lt;/TR&amp;gt;")

'process the shortcuts
ModifyLinks CheckFolder

w.Writeline ("&amp;lt;/html&amp;gt;")

'if silent = 2, then it will not open the log file
If Silent &amp;lt;= 1 Then
  'set command variable with path in quotes (for long filenames)
  Command = Chr(34) &amp; OutputFile &amp; Chr(34)
  'run htm file in your default browser
  wso.Run Command
End If

' The End.
wscript.quit


'--------------------
' Subs and functions follow.
'--------------------

Function getShortcutPath(msg, title,defaultpath)
  Path = InputBox (msg,title,defaultpath)
  Do While (Path = "") Or ((InStr(Path, "//") &amp;lt;&amp;gt; 1) And (InStr(Path, ":") &amp;lt;&amp;gt; 2))
    If Path = "" Then
      MsgBox "Input cancelled, quitting."
      wscript.quit
    End If
    MsgBox "Drives must be a single driveletter and a ':' colon;" &amp; VBCrlf &amp; "servers must be a '//' doubleslash and a servername."  &amp; VBCrlf &amp; "You may include a path, eg '//newserver/stuff', 'C:\stuff\'."
    Path = InputBox (msg,title,Path)
  Loop
  getShortcutPath = Path
End Function

'Bring up inputbox for root folder to search (recursive)
Sub CFolder
  CheckFolder = InputBox ("Type the root folder path that you wish to"_
  &amp; "start your scan from (recursive).","Begin shortcut (lnk) scan"_
  &amp; "from:",CheckFolder)
  If CheckFolder = "" Then
    MsgBox "Input cancelled, quitting."
    wscript.quit
  End If
End Sub

Sub ModifyLinks (foldername)
  CurServer = LCase(CurServer)
  dim file 'for stepping through the files collection '
  dim folder 'for stepping through the subfolders collection '
  dim fullname 'fully qualified link file name '
  dim link 'object connected to the link file '

  'process all the files in the folder
  For each file in fso.GetFolder(foldername).Files

    'check only link files
    If strcomp(right(file.name,4),".lnk",vbTexctCompare) = 0 then

      'Find full path of shortcut
      fullname = fso.GetAbsolutePathName(file)
      oldfull = fullname

      'Find full path of target within shortcut
      set link = wso.CreateShortcut(fullname)
      targetpath = link.targetpath
      newlink = "Skipped (link not relevant)"

      'Displays current shortcut that is being checked (good for
      ' troubleshooting the script).
      'If Silent = 0 Then
        'MsgBox "Checking shortcut: " &amp; fullname &amp; "." &amp; VBCrlf_
        '&amp; "Shortcut target: " &amp; targetpath
      'End If

      'Figures the starting position of the server name
      'MyPos should = 1 for both //server/path/ and D:/path/
      MyPos = InStr(LCase(targetpath), CurServer)

      'If the current server (one you want to change) is found at the start of
      ' the target path, then run the following code
      If 1=MyPos Then
        If link.workingdirectory = "" Then
          link.workingdirectory = "not set"
        End If

        'if you are running in verbose mode, you will be prompted with
        'each shortcut and working folder.
        'If Silent = 0 Then
        '  MsgBox "Path contains " &amp; CurServer &amp; ". Full Path is: " &amp; targetpath &amp; "." &amp; " Working path is " &amp; link.workingdirectory &amp; "."
        'End If

        'Set numerical length of server name you want to replace
        VarLengthSrv = Len(CurServer)

        'Set numerical length of full target path
        VarLengthPath = Len(targetpath)

        'Subtract length of \\servername from full path to parse rest
        ' of path to PathwoServer
        PathwoServer = VarLengthPath - VarLengthSrv

        'Sometimes shortcuts don't have working dirs (not sure why)
        'If there is a working dir, then run following code
        If link.workingdirectory &amp;lt;&amp;gt; "not set" Then
          'Set numerical length of working directory
          VarLengthWorking = Len(link.workingdirectory)

          'Subtract server length from total working dir length to
          'parse rest of path to WorkingPathwoServer
          WorkingDir = VarLengthWorking - VarLengthSrv
        Else
          link.workingdirectory = ""
        End If

        'Parse the actual text of PathwoServer by using the numerical
        ' length of the path without the \\servername; do the same
        ' for WorkingPathwoServer
        PathwoServer = Right(targetpath,PathwoServer)
        WorkingPathwoServer = Right(link.workingdirectory,WorkingDir)

        'wscript.echo "Path of shortcut is " &amp; PathwoServer_
        '&amp; ". Working folder is " &amp; WorkingPathwoServer &amp; "."

        'Display input box to modify each shortcut as the script finds them
        If Silent = 0 Then
          ModifyPath = InputBox ("Modify path for " &amp; targetpath &amp; "and replace with " &amp; NewServer &amp; PathwoServer &amp; "?","Type 'yes' to modify.","yes")
        ElseIf Silent &amp;gt;= 1 Then
          ModifyPath = "yes"
        End If    
        If ModifyPath = "yes" Then
          'Set link target path attribute to
          ' \\newservername\targetpath
          link.targetpath = NewServer &amp; PathwoServer
          newlink = link.targetpath
          oldfull = link

          If VarLengthWorking &amp;lt;&amp;gt; "" Then
            'Set link working dir attribute to
            ' \\newservername\workingpath
            link.workingdirectory = NewServer &amp; ""_
            &amp; WorkingPathwoServer
          End If

          'Save the shortcut with the new information
          link.save

          'If answer above is anything but yes, the script will proceed
          ' to the next shortcut
        Else
            oldfull = "Skipped (user cancelled)"
        End if
        'Clear link variable
      End if
      'write output to logfile
      Call WriteEntry
    End If
  Next

  'process all the subfolders in the folder
  For each folder in fso.GetFolder(foldername).Subfolders
    call ModifyLinks(folder.path)
  Next
End Sub

'--------------------
' Function WriteEntry to write change history to logfile in outputfile path
'--------------------

Function WriteEntry
  If newlink &amp;lt;&amp;gt; "0" Then
    w.WriteLine ("&amp;lt;TR&amp;gt;")
    w.WriteLine ("&amp;lt;TD&amp;gt;&amp;lt;font face=Arial color=#000033 size=1&amp;gt;" &amp; "" &amp; oldfull &amp; "&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;")        
    w.WriteLine ("&amp;lt;TD&amp;gt;&amp;lt;font face=Arial color=#000033 size=1&amp;gt;" &amp; "" &amp; targetpath &amp; "&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;")
    w.WriteLine ("&amp;lt;TD&amp;gt;&amp;lt;font face=Arial color=#000033 size=1&amp;gt;" &amp; "" &amp; newlink &amp; "&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;")
    w.WriteLine ("&amp;lt;/TR&amp;gt;")
    oldfull = "0"
    newlink = "0"
    targetpath = "0"
  End If
End Function

'-------------------
'Function to see if outputfile already exists
'-------------------

Function CheckFileExists(sFileName)
  Dim FileSystemObject
  Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
  If (FileSystemObject.FileExists(sFileName)) Then
    CheckFileExists = True
  Else
    CheckFileExists = False
  End If
  Set FileSystemObject = Nothing
End Function
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:33074</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/33074.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=33074"/>
    <title>I've lost the plot!</title>
    <published>2008-01-12T16:53:26Z</published>
    <updated>2008-01-12T17:01:32Z</updated>
    <content type="html">I was lying awake a few days back and thinking to myself: there is so much I can't remember about my childhood. It's like I muddled through it in a haze of uncertainty, and never asked any questions.&lt;br /&gt;&lt;br /&gt;In particular though, the thing that got to me was that I can't remember the plots of any of &lt;a name="cutid1"&gt;&lt;/a&gt;the games I played.&lt;br /&gt;&lt;br /&gt;Now, I had those Star Wars action figures, with their guns and retractable light sabres. I had Action Man. I had Matchbox cars. I had a carrier bag of plastic soldiers. And I spent hours with them. But I can't remember what I did with them. I can't remember the least bit of plot.&lt;br /&gt;&lt;br /&gt;Thinking back, I can remember setting up elaborate scenarios with the action figures. But I don't remember actually playing the scenarios out. I'm sure I must've though.&lt;br /&gt;&lt;br /&gt;I do remember spending an endless amount of time &lt;i&gt;building&lt;/i&gt; stuff. Meccano, Airfix projects, and more than anything else, Lego. I remember any number of complex gizmos I would design and build - I built transformers that would really transform, guns that would fire, things like that.&lt;br /&gt;&lt;br /&gt;I remember rampaging and exploring through the wilderness with a big bowie knife and a spear.&lt;br /&gt;&lt;br /&gt;But, no plots.&lt;br /&gt;&lt;br /&gt;So I asked my sister, who always has a far better memory for these things than I. She wrote:&lt;br /&gt;&lt;blockquote&gt;The games were pretty fuzzy at the time, as I recall.&lt;br /&gt;They were like the NaNoWriMo of games.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;How beautifully put! That reassured me. Perhaps, then, I couldn't remember the plots because there were none?&lt;br /&gt;&lt;br /&gt;But then she added:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I remember one you were playing with some plastic soldiers and matchsticks in Apolissies. Remember that one? &lt;br /&gt;[Naturally, I didn't.]&lt;br /&gt;On the kitchen floor. You were sobbing away, you were.&lt;br /&gt;The plot was similar to The Walrus and the Carpenter.&lt;br /&gt;These soldiers befriended these bits of wood during some kind of adventure in the wilderness, and night came, and the soldiers were cold. So they decided to build a fire.&lt;br /&gt;The bits of wood got piled up, while they were trying to reason with the soldiers.&lt;br /&gt;The soldiers tried to explain that they needed the fire because they were cold, and it wasn't that they had anything against the bits of wood... and the bits of wood were crying and pleading and saying, "but Why?  WHY? We haven't done anything to you. We thought you were our FRIENDS."&lt;br /&gt;And their voices went all high-pitched as you sobbed on their behalf, and the soldiers felt really awkward, but couldn't really get their side across, and eventually burned the wood, which died in screaming agony.&lt;br /&gt;:D&lt;br /&gt;It was very entertaining to listen to.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Do you remember that one we played with Honey in London, that caused such a huge argument we had to get Gareth [our dad] in on it, and he was no help at all because he thought it was hilarious?&lt;br /&gt;Ok, Honey was this rich woman and she was in love with two men. They were very different from each other. I was her friend, who was supposed to be married or something to one of them. You played both men.&lt;br /&gt;I'm sorry, i don't remember most of the details, but think soap opera. Honey was basically running this game.&lt;br /&gt;Anyway, things got really complicated inasmuch as Honey's dilemma needed to be resolved, but both men were great in their own way. Eventually, one guy emerged as being more appropriate, but as both were still madly in love with her, one of them needed to be got rid of somehow.&lt;br /&gt;I then played a doctor, examining you with Gareth's stethoscope, and pronounced one of you to be suffering from leprosy.&lt;br /&gt;That way, you could die off and leave the other you with Honey, happily ever after. Honey and I were immensely pleased with ourselves.&lt;br /&gt;You, on the other hand, were horribly indignant.&lt;br /&gt;Yeah, well, you refused point blank to have leprosy, and we kept begging and pleading with you to reconsider.&lt;br /&gt;We reasoned that you were playing 2 people, so it was ok.&lt;br /&gt;[You could have chosen a different disease!", I pointed out.]&lt;br /&gt;But you were attached to your characters, and, yeah, well, I'd been reading those Thomas Covenant books...&lt;br /&gt;And you kept refusing to lie down and die.&lt;br /&gt;So then we tried to FORCE you to have leprosy.&lt;br /&gt;And we went and got Gareth, saying we'd come up against a plot problem and could he help out. He was all keen and asked about the game,&lt;br /&gt;and as soon as we got to the leprosy bit, instead of using his magical parental powers of persuasion on you, he nearly killed himself laughing and took your side.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Well yeah - he has always been a GOOD dad!&lt;br /&gt;&lt;br /&gt;But I remember neither game, nor any similar ones. So I've forgotten a ton of the hopes and dreams and fantasies my childhood. Which is kinda sad.&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:32789</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/32789.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=32789"/>
    <title>Multiplicity</title>
    <published>2007-11-23T19:30:28Z</published>
    <updated>2007-11-24T00:37:27Z</updated>
    <category term="parable allegory multi psychology psychi"/>
    <content type="html">Been speaking to some multis, mostly gateway multis, though a fair few people I know are spiritbond multis - the furry community seems to have a lot of them, on some level or another.&lt;br /&gt;&lt;br /&gt;It's been fun. &lt;a name="cutid1"&gt;&lt;/a&gt;I learned stuff...&lt;br /&gt;&lt;br /&gt;And I thought I'd write another parable, because they're fun and nano is being slow to write itself.&lt;br /&gt;&lt;hr width="50%"&gt;&lt;br /&gt;The semi-autonomous planetary rover landed on the new planet. Overhead, a strangely coloured sun beat down. It recorded the scene, sent it back to the orbiter, and thence to base.&lt;br /&gt;&lt;br /&gt;It had landed in thick vegetation. With some work, it managed to extricate itself, finding itself beside some kind of track, along which, on of the native animals was approaching, chewing on a short brown stick.&lt;br /&gt;&lt;br /&gt;The animal bent over the rover. "Well, I say. What have we here?" It blew smoke over the rover: the stick seemed to be smouldering.&lt;br /&gt;&lt;br /&gt;The rover was not equipped to parse or respond automatically to speech, but loyally continued sending back its recordings from the small antenna pack. Back at the base, the team scrambled to put on headsets: they had not been prepared to make contact so soon!&lt;br /&gt;&lt;br /&gt;"Um, hello, hi, this is Dave here over in mission control. Um, we're all pleased to meet you, we hadn't expected to meet a sentient nearly so early in our travels." The voice came out from a speaker on the top of the rover, tinny and harsh.&lt;br /&gt;&lt;br /&gt;The animal straightened and looked around. "You say 'We'? There is only one of you."&lt;br /&gt;&lt;br /&gt;The speaker sounded again. "Only one rover, yes. But you see, we're not really in the rover. You're speaking to Dave, in mission control. With me here are Andy, Sean, and our team leader, Peter. Say hi, Peter."&lt;br /&gt;&lt;br /&gt;The tinny voice changed imperceptibly. "Hi, Peter here."&lt;br /&gt;&lt;br /&gt;The creature did not seem convinced. "You are broken. I will fix you." It examined the rover carefully.&lt;br /&gt;&lt;br /&gt;Worried, the engineers turned the rover's sensors to point at itself, scanning for signs of damage. They found none, and turned the sensors back to the native. "Thanks, but really, we are fine. We would rather that you did not tamper with the rover. Um... not to seem rude or anything, but your food appears to be on fire."&lt;br /&gt;&lt;br /&gt;The native looked at the rover for a long moment longer then slowly took the stick from its mouth, and looking at it. Suddenly, it jumped in theatrical shock. "Oh my! A fire stick Those are dangerous!" It threw the stick away from itself.&lt;br /&gt;&lt;br /&gt;The rover's sensors turned, tracking the flight of the cigar until it landed behind the rover in a shower of sparks. But while it was distracted, the creature swooped, grabbed a rock, and smashed the antenna pack on the rover.&lt;br /&gt;&lt;br /&gt;"There, fixed."&lt;br /&gt;&lt;br /&gt;The rover tried to send information on the damage to the base, to obtain further instructions, but there was nothing. The radio umbilicus was gone, so it switched to its default explore-and-record program.&lt;br /&gt;&lt;br /&gt;The creature watched, chest puffed in pride at the help it had provided, as the rover trundled off. It bent and picked up the fiery stick.&lt;br /&gt;&lt;br /&gt;"Sometimes, a cigar is just a cigar."</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:32682</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/32682.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=32682"/>
    <title>OK, run out of money.</title>
    <published>2007-11-10T18:12:36Z</published>
    <updated>2007-11-12T14:12:31Z</updated>
    <category term="finance"/>
    <content type="html">It was fun, but now I need to throw in the towel on the "start your own business" thing.&lt;br /&gt;Anyone want to hire a geek? Looking for £30k/year or better but really, anything over £12k/year considered, particularly in low rent areas.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:32115</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/32115.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=32115"/>
    <title>fanciful horticulture is generally insipid.</title>
    <published>2007-11-04T13:25:17Z</published>
    <updated>2007-11-12T14:19:00Z</updated>
    <category term="search humor humour"/>
    <content type="html">&lt;a href="http://askwiki.com"&gt;http://askwiki.com&lt;/a&gt; is surprisingly good - seems to do better at answering questions than ask.com at least.&lt;br /&gt;&lt;br /&gt;"what is the air speed velocity of an unladen swallow?"&lt;br /&gt;The air speed of a fairly typical unladen European swallow is estimated to be roughly 24 miles per hour.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;So far so good...&lt;br /&gt;&lt;br /&gt;"how many gooseberries to the pound?"&lt;br /&gt;Single gooseberries of nearly 2 oz. in weight have been occasionally exhibited; but the produce of such fanciful horticulture is generally insipid.&lt;br /&gt;&lt;br /&gt;"Who was Rumplestiltskin?"&lt;br /&gt;Rumpelstiltskin is a dwarf character in a fairy tale of the same name that originated in Germany [...]&lt;br /&gt;&lt;br /&gt;Oh, it's goood!&lt;br /&gt;&lt;br /&gt;Let's try some contextless nonsense questions...&lt;br /&gt;&lt;br /&gt;"who died and made you god?"&lt;br /&gt;The Aten cult is often cited as the earliest known example of monotheism, [...] Akhenaten's program to enforce this monotheistic world-view ended with his death; [...]&lt;br /&gt;&lt;br /&gt;"what is the difference between a duck?"&lt;br /&gt;Most ducks have a wide flat beak adapted for dredging.&lt;br /&gt;&lt;br /&gt;No answer found for the question "how long is longcat?"&lt;br /&gt;No answer found for the question "what will computers be like in the future?"&lt;br /&gt;No answer found for the question "how can I stop procrastinating?"&lt;br /&gt;&lt;br /&gt;"how rich is bill gates?"&lt;br /&gt;There is also a bronze statue of the goat just inside Gate 1, the main gate to the Academy ground. -  From Article: Bill the Goat&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dewimorgan:31887</id>
    <link rel="alternate" type="text/html" href="http://dewimorgan.livejournal.com/31887.html"/>
    <link rel="self" type="text/xml" href="http://dewimorgan.livejournal.com/data/atom/?itemid=31887"/>
    <title>dewimorgan @ 2007-10-30T06:30:00</title>
    <published>2007-10-30T06:39:15Z</published>
    <updated>2007-11-12T14:29:08Z</updated>
    <category term="english grammar"/>
    <content type="html">&lt;div width="100%" style="overflow:auto;padding:5px;border-style:double;font-weight:bold;color:#00ff00;background-color:#000000;"&gt;&lt;pre style="white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;_white-space:pre;"&gt;
%listlength == 0 ? "There are no top things" : %listlength == 1 ? "This is the top thing" : "These are the top %listlength things"&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;How can I write this in English?&lt;br /&gt;&lt;br /&gt;The goal is to make a passage that refers to a list of items, mentions the exact number of items in the list, and yet copes elegantly with singular and empty lists.&lt;br /&gt;&lt;br /&gt;The best English can do is: "If the list is empty then there are no top items. Otherwise, if there is precisely one item, that item is the top thing. Otherwise, the items as a whole comprise as many as there are items in the list of the topmost things."&lt;br /&gt;&lt;br /&gt;Or possibly "The following list enumerates all the top priorities", which I am sure everyone will agree is even less readable and intuitive, since it gives you no idea as to how many items are in the list, while the preceding entry gave you the number by reference.&lt;br /&gt;&lt;br /&gt;Yes it's early in the morning and my mind is rambling.&lt;br /&gt;&lt;br /&gt;[Edit: You may be wondering why I wanted a sentence that could do this.&lt;br /&gt;&lt;br /&gt;Well, I often write a sentence to introduce a list. "There are three reasons why this is a bad idea: first reason; second; and third." This is fine, until I remember another reason, and add it in. The "three" in the introductory paragraph is often left unchanged.&lt;br /&gt;&lt;br /&gt;"The are a few" works until there are lots, or fewer than three. "There are several", "There are various", "There are the following"... these are workarounds which fail with various numbe