Tuesday, July 18, 2006

Gadgets, Gadgets, Gadgets

Filed under: — Patrick M Brennan @ 5:44 pm

My wife gave me a TiVo. I like it a lot more than I expected to, especially considering I am nobody’s idea of a couch potato. I also try to convince myself that I don’t love gadgets excessively, but this is getting harder and harder all the time. For now, though, I’m happy with TiVo.

Of course, right after I thought my gadget lust was sated, this thing comes out…

Thursday, May 11, 2006

Ah, Memories

Filed under: — Patrick M Brennan @ 8:01 am

A memory from high school visited me very vividly last night. I recall sitting in my high school library, and I was working on some science assignment, but I’ve forgotten the details. Nerd that I was (and am), I was solving the problem by creating a program on my handy TI-59 Programmable calculator. To create this program, I had written the program steps – essentially keystrokes – in a column on a couple of sheets of paper. A program would look something like this:

RCL 1
x
RCL 0
x2
+
RCL 2
x
RCL 0
+
RCL 3
=

The paper was at my left hand, and my calculator on my right as I keyed the steps into it (in “learn” mode).

As I was doing this, an older woman – whom I had never seen before or since – toodled up beside my table and without a word of introduction, she said:

“In my day, we didn’t need a calculator to add up a column of figures.”

And then she shambled away, smugly, without even waiting for an answer.

I think she was an administrator of some sort at the school.

Friday, April 28, 2006

Duck, Meet Water

Filed under: — Patrick M Brennan @ 12:23 pm

It was an awkward moment when I had to tell my manager and my coworkers that I had accepted a new job. I was working at a great company, and I was happy to work there, and I liked the people I was working with … but I received a really good offer from another company and it was just – well, it was one of those opportunities that only comes along once or twice in your career. The only problem was that I had been working at the new job for only about a month! Talk about your inconvenient timing. (Well, it’s not the worst problem I could have had; after all, how often do I get a chance to choose between two really good jobs?)

Here’s the thing: I left my last job to go to this new company in February. I didn’t continue my job search at that point – I wasn’t still looking for a new position somewhere else. However, little did I know there was an old friend who was looking for me. The timing was bad, but the job was exactly right – developing software for robotics applications.

Now, I don’t have any problem with selling paper and ink for a living, and there certainly were plenty of technical challenges at this place. Also, I am not easily bored – I find a lot of things to be interesting, and this of course has served me well in my career. But robotics isn’t just something I find interesting, it’s something I am fascinated with, and it’s something I went to school to study. I haven’t done it in a long time, however, having been diverted into various other sidelines by the vagaries of life and career. I thought I had left robotics behind forever, until my friend called me with an offer. It entailed a small pay cut and a big increase in my commute, but it offered the possibility that I could work on something that I loved, rather than just something that paid.

I told my supervisor that although it was awkward to leave a new job so soon, I didn’t want to turn the offer down and end up regretting it for the rest of my life. Fortunately, everyone at the old place let me know they understood. In fact, my immediate manager said that in my position, he’d do exactly the same thing. What can I tell you? They’re great people. They’re hiring, by the way – you should apply.

I’m now almost a month into this new job (– the new new job), and so far I’m really, really glad I jumped. (My friend has said that I was exactly right for this job, and what do you know? She was right.) The work is extremely interesting and the people are better than I hoped for. I jumped right into it and I felt exactly right. I am already making a contribution and it feels really good.

PS: If you’re one of the three people on the planet wondering why I’ve been so remiss with updating the blog lately, now you know. Getting up to speed at two new jobs while helping to raise my infant daughter and producing a small local theater festival has a way of eating into one’s blogging.

PPS: Comments are working again.

Monday, January 30, 2006

The Page Turns

Filed under: — Patrick M Brennan @ 5:03 pm

For the past three years plus, I’ve been working for Convoq, and it’s been a great time. They’re a great company to work for and I’ve really enjoyed myself. I’m proud of the work I did there and I like to think I contributed to their success.

Now I’m moving on to VistaPrint, where I’ll be doing a very similar sort of work. The technology is a little different, and I’m hopeful that I’ll be up to the challenge of tackling it. I can’t hope that the people at VistaPrint are nicer than they are at Convoq, because the people at Convoq were nicer than at any job I’ve ever had; but I can hope that they’ll be as nice. Wish me luck!

Saturday, December 10, 2005

A Little Open Source Push-Back

Filed under: — Patrick M Brennan @ 10:01 pm

Someone who knows asks the question: If this suite’s a success, why is it so buggy? Andrew Brown’s got a good point. I like OpenOffice and I use it on a daily basis, though I don’t think it’s terribly buggy. It’s never mangled my documents the way Microsoft Word has. However, I have never contributed money or code to OpenOffice, even though I really should.

Friday, November 4, 2005

Want Some W& 0Od?

Filed under: — Patrick M Brennan @ 4:32 pm

Spammers really bug the crap out of me. I manage my own spam filters, and naturally I don’t have any interest in Viagra, so one of the words I add to my filters is “Viagra". If you’ve had email for 5 minutes, you already know where this is heading. It’s true that I no longer receive any mail exhorting me to buy “Viagra". In other words, the filters work! Instead, now I am solicited to buy “V1A G’ra” and “vi 4grA” and “V!a6ra", and so many more permutations that the mind reels.

What are they thinking? I mean, when I set up my filter to reject Viagra ads, wasn’t that sufficient to convince someone that I’m, I don’t know, not interested in buying Viagra? Someone obviously thinks that the fact that I’m not interested in Viagra, spelled correctly, clearly implies that I am interested in “V1A G’ra". Some moron, somewhere, must actually imagine that I’m sitting there saying, “Say, that’s not how I usually spell Viagra! That looks interesting! I think I’ll click on that message!”

And of course, it’s not just Viagra. I’ve had my current email address for an Internet Age (since 1992), and it’s been exposed on the web more than once, so it’s had time to get on a lot of lists. Prescription drugs and every variety of the Nigerian scam are big hits on my inbox, along with viruses, worms, and phishers, and I can’t even begin to tell you some of the varieties of stupid, vile and disgusting spam which comes across my email queue. (Hm, maybe I should rephrase that.) I’ve taken to adding even the common mispellings to my filters, but this is a sucker’s game, obviously.

And obviously, the spammers know that I’m not really interested in “v i g a r a". They just don’t care.

The economics of the spam game are rigged in favor of the spammer, and they’re rigged in favor of the spammer doing things which would be irrational in other contexts (say, direct mail advertising). The marginal cost of sending out a spam is essentially zero, so there’s no penalty for sending out millions of messages to addresses which don’t exist, or to people who aren’t apparently interested. And spammers don’t pay for bounced messages, since they forge the return header. So maybe I’ve changed my mind about Viagra since setting up my spam filters, and maybe this message is the one I impulsively click on the exact moment after I’ve changed my mind, so the probability that I’ll return this message isn’t zero, it’s just really, really tiny; and that is enough for a spammer, since sending the message cost him nothing. Therefore, he has a perverse incentive to beat my spam filters by spelling his product wrong, because even though I said I didn’t want it, maybe, maybe … maybe, I do today.

Talk about not taking no for an answer.

Wednesday, August 24, 2005

Larry King Is An Idiot

Filed under: — Patrick M Brennan @ 1:43 pm

I’m sorry, but Larry King is an idiot. For proof, see this actual quote from last night’s program :

LARRY KING: “…how can you out-and-out turn down creationism, since if evolution is true, why are there still monkeys?”

Yes, ladies and gentlemen, he really said that. And that is why Larry King won’t do two shows a night. He just won’t. It wouldn’t be fair to him or to his audience.

Saturday, August 20, 2005

Copilot

Filed under: — Patrick M Brennan @ 10:53 pm

I wish I had had Fog Creek Copilot a long time ago, but they only just released it last week. It really helped me get out of a jam!

See, I spend a lot of time providing computer tech support for my family. This is more by chance than by design. Most programmers I know are also the designated tech-support persons in their families. (Even though programmers aren’t necessarily the best people to do tech support – but I digress.)

I don’t mind providing advice and troubleshooting for my family (and some of my friends); the way I look at it, it’s one way for me to be useful. However, since my family is spread out across several states, inevitably much of my tech-support duties are performed over the phone. This can be an unbelievably frustrating experience, as anyone who has tried it knows very well. Here’s an actual transcript of a portion of one such conversation:

“Press Start. Yes. Start. Start, in the bottom left-hand corner. Right. Then Programs. No? How about ‘All Programs’? Okay. Never mind. Click your desktop. Your desktop. The big blue area that doesn’t have any windows on it. Behind all your other windows. Okay. Is that Microsoft Office bar up now? Is it on your screen now? It is? On your screen? Okay, good. Now, is there some kind of a menu attached to it? Okay, is there something there that looks sort of like a title bar? A title bar. A title bar – some type of area that isn’t an icon? You’d mentioned that you click in the upper-right hand corner to make it go away, but is there an upper left-hand corner to it?…Yes, go ahead and try, I’ll wait…”

My wife had to leave the room while I was on this call. She later told me that listening to this conversation made her want to stick needles in her eyes. Unfortunately, I didn’t have the luxury of either leaving or sticking needles in my eyes. Instead, I kept trying for another 45 minutes, until finally I gave up. One of these days, when we are visiting family, I will sit down at my relative’s computer and probably take about 2 minutes to make the fix the trivial problem he was having.

I’m not relating this call to make fun. I’m relating it to make a point, and to celebrate a real breakthrough which will provide real relief for this pain.

Providing tech support to family and friends can be frustrating for two reasons. The minor contributor is that although my clientele tends to believe I know everything about computers, inevitably they ask me about applications which I don’t know or don’t use. A much bigger problem is that every computer really is different, and I have no way of knowing how your computer is set up unless I see it.

Example: How do you get to the mouse settings? Well, on my computer, I press “Start", then I hover over “Settings", then I hover over “Control Panel", then I press “Mouse". The way to get to your mouse settings is probably a little different. And once you get to the mouse settings, you may have a completely different set of tabs than I do. So I can’t just tell you over the phone how to open your mouse settings. You and I will have to work together, with you telling me what you see, and me telling you what to press. (If I say, “open your mouse settings,” and you say, “OK, now what?” then you probably don’t need me to do tech support for you. If, on the other hand, you say, “how do I do that?” then you have probably had this experience. Hi, Dad!)

So this is why providing tech support to people over the phone is so frustrating. I’m driving blind, and you’re describing what you see. But we don’t have a shared vocabulary for describing things! It would make my tech support job a hundred times easier if the folks I am supporting knew what I was talking about when I say things like “Taskbar", “Desktop", “Right-click,” and “Title Bar".

It just so happens that just a couple of days after Fog Creek Software announced Copilot, another relative called with a problem. He couldn’t play preview clips from Amazon anymore. He was used to listening to preview clips in Windows Media Player while shopping for music, and suddenly they weren’t working anymore. I asked him if fixing the problem was worth ten bucks to him, and he said yes, so we both hooked up through Copilot.

The great thing about Copilot is that there’s no setup and no configuration, for either of us (although one of us has to send a credit card payment through first). After that, it enables me to see exactly what’s on the other person’s screen, and to take command of the keyboard and the mouse of the remote machine.

I would never, ever have been able to figure out and fix my relative’s problem the old way. He had inadvertently blocked the content from Amazon in his 3rd party firewall software. In order to find it, and fix it, I had to do a bit of poking around, not entirely sure myself what I was doing, because I’d never used this particular piece of software. But fixing it, once it was found, was trivial, and that’s why I think Copilot has a big future ahead of it – and my wife will be spared sticking needles in her eyes.

Tuesday, July 19, 2005

Secret Means Secret

Filed under: — Patrick M Brennan @ 7:04 pm

At several points in my career, I worked for companies which did business with the US Government, and as part of that work, I was sometimes obliged to handle secret information. Before I was allowed to do so, I was thoroughly checked out by the government, and I was required to fill out a small mountain of paperwork to promise that I would never, ever reveal anything that I learned in the course of my work.

I don’t remember any more whether I actually filled out a Standard Form 312, but it’s likely that I did, and if I didn’t, I certainly filled out something which is essentially the same. Everyone who handles classified information fills one of these out. That applies to drones like me, and it applies to everyone else up the chain, all the way up to the top. It’s worth reading, but intimidating.

The sort of information I used in these jobs was boring and technical, and was classified at the lowest level of security, but even so, I’m here to tell you that the US Government takes the protection of that information very seriously. In addition to the original mountain of paperwork, I was also required to submit to random drug screening (the first and only time in my career), the office was subject to periodic security audits, and I worked in a locked and electronically sealed windowless steel vault, where I couldn’t even take a bathroom break. The hard drives for the computers were locked up in a safe every night, and the computers could absolutely never be left unattended with the drives in them – even though they were in a locked vault. I once spent an entire night in the vault while the computer churned through a complex (and secret) calculation. In order to start working on a more normal day, I would have to enter no fewer than seven access codes or passwords (that’s counting doors, safes, and computers, and we didn’t have swipe cards). Of course, disclosure of the secret information I handled, even if inadvertent, was a firing offense, and would also be investigated as a possible crime.

Now, I say the information was boring and technical, but I have no idea where some of it came from, and for all I know, it was extremely valuable. It’s not for me to say whether “my” secrets were important secrets. I made a legally binding promise to keep them secret, and I have kept that promise. That’s not just because I fear the legal and career consequences of breaking that promise – it’s because I want to do what’s right, because I obey the law, and because I love my country. (Apparently these days, unless you shout that loudly in public, often, then it’s not true.)

I’m fairly annoyed, therefore, at some talking points being circulated around the outing of a covert CIA employee (Valerie Plame) by somebody in the Bush White House (Karl Rove, probably Scooter Libby) as an act of political retribution against somebody (Joseph Wilson) who had the nerve to use facts to criticize the one of the administration’s main rationales for attacking Iraq (they were supposedly developing nukes, and buying uranium from Niger). Some of the people defending Karl Rove say that the identity of Valerie Plame wasn’t a “real” secret, or an “important” one. But Karl Rove doesn’t get to decide which secrets are freely available to share, and which ones aren’t. He made the same promise I did, and he should be held to the same standard. Period.

Sunday, July 17, 2005

Attack of the Comment Spammers!

Filed under: — Patrick M Brennan @ 2:31 pm

My blog is currently under attack from the vermin known as comment spammers. You may have heard of these cockroaches. Striking from cleverly-hidden bases in their parents’ basements, they boldly overwhelm the defenses of unsuspecting blogs’ comment systems, turning what was once an interesting, fun and useful tool for socializing and intelligent discussion into advertising space for their useless and parasitic web sites. In this case, it’s impotence pills and hair-loss products. I mean, gosh, where’s a guy to go when he needs to pill to produce an erection, after all? Or something to prevent hair loss? These products are so difficult to get, you know? Clearly, he needs to turn to the comments posted in a very obscure, rarely updated, and nearly-unread blog!

In the time it took for me to write this post, 13 new spam comments appeared. No doubt by the time I’m done typing this sentence, another two or three will show up. Fun, huh?

I’ve had to put up some additional defenses against these worms, and I’m confident that I’m not done yet. For one thing, I will have to personally approve all new comments. For me, that means that simply maintaining this blog, and guarding it against fat assholes with no talent, no brains, and more time than they can usefully employ – oops, sorry, I got off on a rant there. Now where was I? Oh yes …

For me, it means that guarding my blog against these lowlife scum becomes yet another chore, not unlike the daily grind I already endure guarding my email from mail spammers. USENET isn’t even useful any more due to spam. It’s sad and pathetic that there are jerks who have nothing better to do than waste good tools in this way, and it’s even sadder that people who have something to contribute must spend their time fighting the abuse.

Thursday, June 23, 2005

Alan Turing

Filed under: — Patrick M Brennan @ 6:25 pm

Andrew Sullivan posted this remembrance today:

Today is the late math genius’s birthday. Turing was a brilliant Englishman, one of the founding fathers of computer science, and a patriot whose cracking of the Nazis’ Enigma Code was critical to winning the war against Hitler. His amazing work was rewarded by being offered the choice in 1952 of choosing chemical castration or imprisonment for being gay. Two years later, a broken man, he killed himself. Today is a day for honoring him and the countless men and women over the centuries whose gifts and dignity were obliterated by ignorance, oppression and hate, hate that is still being excused and perpetrated today. May those of us lucky enough to have been born in their wake never forget what they went through, never forget the cruelty and evil they had to confront, and do everything we can to prevent these wounds being passed to the next generation.

I wish I believed that a lot has changed since the 1950s. Turing was an atheist as well as an intellectual and a homosexual. I am confident that he would not last long in the political climate of these times, regardless of his accomplishments and contributions.

Wednesday, June 22, 2005

All It Takes Is One Character In The Wrong Place

Filed under: — Patrick M Brennan @ 7:06 pm

Last week, I was assigned to fix a very subtle bug in our product, and I found myself very hard-pressed to figure out what exactly the problem was. A little bit of digging convinced me that it wasn’t a client issue, and I am primarily involved in the client side of our product. I asked a couple of the server guys what their opinions of the bug were, and we narrowed the search down to a single flag which was apparently not being set correctly… even though we could plainly see the code which was setting the flag correctly.

This is one of those bugs which causes programmers to tear their hair out in frustration. We can see it’s correct, the code is clearly correct, yet the output is clearly wrong. Of course, in this case, as in most such cases, we aren’t seeing what we think we’re seeing, which is even more occasion for a programmer to tear out his hair.

My colleague discovered that in an obscure bit of server-side JavaScript code, there was a simple and maddeningly easy-to-miss error. In fact, the flag was being set correctly, but the thing that it was being compared to wasn’t being set correctly, due to a pseudo-syntax error in the JavaScript code. My colleague had inadvertently typed a ‘:’ where he meant to type a ‘.’, so a line which should have read
foo.bar = 1;
turned out as
foo:bar = 1;
Instead of creating an object property foo.bar which equals 1, we set a global variable bar which equals 1, and the statement which does that is labelled as foo. (How useful is that?) Later on, we evaluate flag == foo.bar, which will always be false, because foo.bar was never initialized, and this was the proximate cause of our bug.

Technically, the typo is not a JavaScript syntax error. JavaScript lets you define statement labels for reference by the break and continue statements. Therefore, when my colleague ran this code, the compiler gave him no indication that there was an error of any sort. However, there were three opportunities for JavaScript to help us out before this trivial error propagated into something which sucked up several expensive hours of our company’s time. See how JavaScript failed:

(1) the typing mistake was repeated three times in the file, creating three labels with the same name, and JavaScript never complained that we were recycling labels.
(2) the label name was identical to a previously defined object, and JavaScript never complained that there was a collision between the names. (this is a “feature” of JavaScript.)
(3) when bar, a previously undefined variable, was written to, JavaScript never complained about that, either. (this is another “feature".)

JavaScript is great, but it’s a simple language meant for small-scale rapid development. It’s not a good match for large-scale system programming, and unfortunately we’re locked into it here for a number of good reasons. Though they’re good reasons, we could still use better tools, to scrub this code for more errors I’m sure are lurking in there somewhere.

At the same time, I can take comfort in the fact that we’re still a small company, so the impact of our typos aren’t very widespread. Some of the worst bugs in history have been due to simple typos, such as the Mariner 1 crash. Of course, nobody would dare to write a control system for a rocket using JavaScript. No, instead, they’d use a serious, industrial-strength programming language for the job, like Ada.

Monday, June 20, 2005

Blog Madness!

Filed under: — Patrick M Brennan @ 5:54 pm

I started a Blogspot blog today: patrickmbrennan.blogspot.com. This is another idea I had to get around the trouble I’ve been having with Blogger. No FTP issues between Blogger and Blogspot! (Well, what would I expect? Probably Blogspot’s servers are sitting right next to Blogger’s; the publish was certainly quick.) And I can blog again that way. Seriously, I’m starting to get annoyed by this problem. How many blogs do I have to maintain, after all? The count is up to four at the moment:

www.pbrennan.net : Where I want to blog, but Blogger won’t let me.
www.pbrennan.net/wordpress : Where I don’t want to blog, but I can.
patrickmbrennan.blogspot.com : Ditto.
world.std.com/~pbrennan : Where I used to blog, but I don’t anymore.

Obviously, I want to pare this list back down again. To ONE blog. Are you listening, Blogger?

Thursday, June 16, 2005

It’s Official: Blogger Sucks

Filed under: — Patrick M Brennan @ 9:20 pm

So, I’m thinking about just giving up and moving everything from Blogger to WordPress. Blogger has taken three weeks so far to fix a simple FTP issue with my ISP, and they haven’t responded to repeated email requests for information. Rather than rely on them, I’d rather have my own solution installed on my server. It’s just simpler all around, except for one major problem – migrating all my posts from Blogger format to WordPress format. There is an easy way to do it, but I can’t use the import script everybody else uses, because that relies on Blogger’s FTP working correctly – gotcha!)

Do I really want to do this? Suffer through weeks of translating hundreds of posts, and more weeks of tweaking my template, until I’ve got some reasonable approximation of what I’ve had for the past couple of years? I don’t know. It’s not as if I need a project to fill all my time – I’ve got those in spades.

<whine>All I wanted was a simple tool which enabled me to make timely posts to my website without fussing with a lot of nitty HTML code. Why is everything so much more complicated than it seems at first?</whine>

Monday, May 9, 2005

Google Ubiquity

Filed under: — Patrick M Brennan @ 3:42 pm

How did this happen so fast?

I use a lot of different bits of software on a daily basis. The heavyweights in my software universe – the companies that supply a hefty percentage of that software – are Microsoft, Macromedia, Adobe, Palm, Mozilla, OpenOffice, and WordPerfect (Yes, WordPerfect). I run their applications every single day.

This lineup has a new member lately: Google. I have suddenly found myself in the position of using a lot of Google software, and doing so on a daily basis. Of course I’ve been using Google for search for a long time (who doesn’t?), and I’ve been using Blogger for a couple of years; but it’s only been in the past couple of months that I really incorporated Google into my daily routine, with a new Gmail account, Picasa and Google Desktop Search. I just never noticed until now that I’m running a lot of Google software.

Why shouldn’t I run a lot of Google software? It’s always high-quality, and it’s usually free (although Gmail and Google Search are both laden with advertising). What has surprised me is the sudden ubiquity of Google in my life. Since I’m not a reflexive upgrader, I am usually behind the curve on these things. Based on that fact, I’m guessing that Google has achieved a similar ubiquity in a lot of other people’s lives.

Another indicator that Google has grown up: Bill Gates is bothered by Google. He’d like to do to Google what Microsoft has done to countless other entities in the past. I mean, take a look at my list again (except for Microsoft): Macromedia, Adobe, Palm, Mozilla (standing in for Netscape), OpenOffice, and WordPerfect. It’s a Microsoft hit list. They’ve all been beaten and bruised by Microsoft; some of them driven out of business by Microsoft. Most of them made technically superior products, but were routed because Microsoft could leverage its Windows monopoly against them and “cut off their oxygen". (The only reason Mozilla and OpenOffice are still around is that their products are offered for free.) Google, with its own free and web-based products, will be much harder for Microsoft to compete against. It will be interesting to see what happens as these two square off against each other.

I expect to keep using Google software for a long time to come. Whether this will be a good thing or a bad thing, I can’t say just yet. In the meantime, it is great software.

BillG: What, Me Worry?

Filed under: — Patrick M Brennan @ 3:41 pm

“I played around with [Firefox] a bit, but it’s just another browser, and [Microsoft’s Internet Explorer] is better …. So much software gets downloaded all the time, but do people actually use it?”
     – Bill Gates, quoted on the BBC

Thursday, May 5, 2005

Saving Throw Against Stupid Ad Copy

Filed under: — Patrick M Brennan @ 3:54 pm

Dice's latest ad

Dice has pretty much fixed their embarassingly bad ads for tech jobs. I can’t find a whole lot wrong here, because they’ve finally quit trying to write an ad that’s supposed to read like code. See: they’re writing comments in the code instead! (Clearly, Dice has received the recent memo that Comments Are More Important Than Code. In any case, comments always compile.) And find_great_jobs() is a perfectly respectable function call. But … isn’t that an unbalanced brace at the end? Or is the matching brace just somewhere up beyond the top edge of the ad? I guess we’ll never know…

Wednesday, April 20, 2005

Adobe and Macromedia

Filed under: — Patrick M Brennan @ 11:56 pm

That was a bolt out of the blue! Taking a train back to Boston from New York, I picked up a newspaper and learned that my two favorite companies have decided to get married! How exciting!

The past five years of my professional life have been dominated by Adobe and Macromedia. When I was working for Adobe, I was helping to build LiveMotion, and directly competing against Macromedia’s Flash. I have spent the past three years with Convoq, developing a client application in Flash, and Adobe has been less of an issue in my life. I don’t know how the merger will affect the direction of our product, but I’ve always considered Adobe to be a very well-run company, so I’m not really worried. Besides, with a baby on the way and another release of my own company’s application to get out the door, I’ve got bigger fish to fry.

That doesn’t mean I don’t wish I’d bought some Macromedia stock, as I’m sure this guy did.

Thursday, March 17, 2005

No, No, Dice!

Filed under: — Patrick M Brennan @ 8:37 pm

Dice persists in posting bad code on their online ads!

Since their last ad, they’ve definitely improved, but good syntax doesn’t mean their logic has gotten any better.

The ad still says, in plain English: “If you’re salary isn’t good, go to Dice.com. If your salary is good, suck it up.”

What?

I thought “Suck it up” meant something like “endure pain bravely", or “be strong“.

Maybe somebody knows an interpretation of “suck it up” that I’m not aware of. Maybe it means “good for you!” or “way to go!", or “guess you don’t need Dice.com!”

I have a suggestion for their advertising folks:

if ((You.workFor("Dice.com") || You.haveAdClient("Dice.com"))&&(You.writeAdCopy()))
{
   You.stopTryingToWriteCode(please);
}

Wednesday, March 16, 2005

Why Graffiti 2 Sucks

Filed under: — Patrick M Brennan @ 8:38 pm

I have had a CLIE NX-80V for a few weeks now, ever since my last CLIE died on me. (It turned out it was only playing dead – but it didn’t rise from the grave until after I had the new machine in my hand.) Even though I knew that the NX-80V was an excellent machine in nearly all respects, I had resisted upgrading for a couple of years anyway, since I knew the NX-80V used Graffiti 2, and I feared that Graffiti 2 would be a disaster. My initial fears have proven sadly true. Graffiti 2 sucks. I tried really hard to adjust, to unlearn eight years of Graffiti and relearn the new system, and although it doesn’t suck as badly as I thought at first, it’s still bad enough that I had to finally find an alternative.

I’ve been using Graffiti ever since 1997, and it only took me a couple of weeks to reach a plateau of proficiency at which it was really useful. For short pieces of information, i.e. phone numbers or email addresses, it was excellent; and in settings such as classes or business meetings, I could very nearly take decent notes with the thing. (I still prefer paper and pencil for free-form notes, because it’s faster and less error-prone, plus it’s less confining than ASCII text – I can draw diagrams, for example. At the same time, it’s always nice not to have to type up my notes – because they’re already typed.)

That was all with the original Graffiti. I find that with Graffiti 2, I can’t achieve anywhere near the speed and low error rate I had with the original. The worse failure, however, is that with Graffiti 2, I am concentrating far less on the content I am entering, and far more on how to enter it, than I was used to.

Here are three examples of how much Graffiti 2 sucks:

Using Graffiti 2, it is common for me to attempt to enter a word ending in an L, followed by a space. Usually, this case ends up with a T at the end of my word. (Turning “the full effect", for example, into “the fulteffect".) This error is extremely common, occurring 90% of the time.

Graffiti 2 almost always (75%) renders my H’s as N’s.

I tried to enter someone’s phone number, in which a group of digits began with a 1. What did I end up with? Not “999-999-1999″; I got “999-999+999″.

These failures are representative, but they are only a subset of what I was seeing. Graffiti 2 is constantly frustrating. It sucks.

The original Graffiti isn’t just single-stroke, it’s stateless, meaning that when I’m making a stroke, I don’t have to think about what my last stroke is. Each stroke uniquely maps to a character. If Graffiti 2 was stateless, if, for example, a left-to-right stroke was only ever the horizontal line on the T, then it would be OK. But sometimes, when I draw a vertical followed by horizontal, I mean “T", and sometimes I mean “L-space", and so I have to think more carefully about what I’m doing. I have to remind myself, “I just drew an L. Now I either have to wait a second before entering my space, or I have to draw my line down on the bottom of the Graffiti entry area". But I only want to be thinking about the text I’m entering, not how to enter it. With Graffiti, I didn’t have to think about it. With Graffiti 2, I do. Therefore, Graffiti 2 sucks.

Why does Graffiti 2 suck so bad? Based on its name, you might expect that Graffiti 2 is the second revision of Graffiti, with improved functionality and more features. If that’s what you thought, you’d be wrong. Graffiti 2 is a direct result not of any engineering or marketing decisions, but of a court decision that the original Graffiti infringed on a patented Xerox technology called Unistrokes. I don’t know a lot about the lawsuit, but apparently the court decided that Graffiti infringed Unistrokes precisely because of its one-to-one correspondence between a single stroke and a character. Therefore, Graffiti 2 is pretty much a crippled Graffiti, crippled just enough that it doesn’t infringe on Unistrokes.

(To be precise, Graffiti 2 is a slightly modified version of CIC’s Jot, itself created to sidestep the Unistrokes patent. The effect is the same. Jot had been trying to supplant Graffiti for years without much success. Now they have succeeded.)

Now, I know Palm didn’t want to foist this garbage on me intentionally, but they did try to put lipstick on this pig by claiming that Graffiti 2 is “easier to learn", “more natural and intuitive” than Graffiti, but that’s baloney. If it was really easier to learn, I’d have achieved a similar level of proficiency with it by now. Instead, I’m far behind where I was at the same point in learning Graffiti.

Graffiti 2 isn’t all bad. To be fair, its design has some good points. I like Graffiti 2’s “a” and “e", for example, and using the middle of the writing area for capitals is a good idea. The trouble is that its good points don’t go anywhere near outweighing its deficiencies. And the deficiencies are all in the state-bound nature of the system. It’s like any other aspect of product design: good design gets out of your way and lets you concentrate on what you’re trying to accomplish. Bad design forces you to think about details of how the machine works, details which are irrelevant to your task.

Fortunately, there are alternatives. For example, I could always switch to using one of the way-hot Xerox PDAs, using Unistrokes.

Oh, wait. There’s no such thing as a Xerox PDA, with or without Unistrokes; and there never has been. (Clearly, Xerox loves to develop technology that it never sells; and then it gets mad when somebody else successfully brings something similar to market.)

Since I do have a Sony CLIE, I can use the built-in keyboard, or one of two (two!) on-screen keyboards.

Another alternative, built into the NX-80V, is a system called Decuma, which is definitely very cool. This is a good high-resolution handwriting recognition system which isn’t as fast as Graffiti, but it is more fun to use. I use it occasionally, and I can see how someone might use it as their primary means of entering text. Check it out and try it.

For a really good solution to this problem, however, what I really needed was to be able to install the original Graffiti on my new handheld. Fortunately, a little desperate digging produced a procedure for accomplishing just that, provided I had a Palm handheld with Graffiti already installed; and fortunately, I had one at hand: my CLIE NX-70V, the rumors of whose demise had been exaggerated. The procedure was easily followed, and worked exactly as advertised.

Now, I have a late-model CLIE with the original Graffiti installed, and it’s great. And that’s the way I’m going to keep it, until Xerox sues me.

Thursday, March 3, 2005

“Temporarily Out of Service”

Filed under: — Patrick M Brennan @ 11:43 pm

At what point does it become more trouble than it’s worth to own a computer? Or several? This is the question I’ve been asking myself after a rather hellish string of failures. In the space of a single week, my main computer checked out, my Sony CLIE fizzled, and my office Thinkpad came down with a bad case of Adware. In the process of restoring from these failures, I came dangerously close to the point of fundamentally questioning whether the investment of money, time and energy I put into these machines is really paying a worthwhile dividend.

Now consider. I have been a computer enthusiast for as long as I can remember. I have programmed computers for my entire adult life and my whole professional career. Not only do I have a lot of knowledge and experience regarding how to work around computer difficulties, I have also gained a certain level of immunity from computer frustration. Plus, I am fanatical about keeping my data backed up (and so far this week, I haven’t lost any data), so I don’t have any anxiety and frustration around that. But even with these provisions in place, the past week has been really trying. What do ordinary people do when they’re faced with these issues?

I’m starting to think they just grin and bear it, until they can’t take it anymore, and then they just bail. My father was so frustrated by the internet, for example, that he permanently disconnected from it, deciding that email and the web weren’t worth the hassle of spam, viruses and pop-ups. He hasn’t bailed on computers entirely, but I know that he is constantly experiencing inexplicable failures and weird behavior with his applications. He asks me about them –- a lot -– but he uses obscure programs which I am not familiar with (like Serif), and I rarely get a chance to sit down with him at his computer to see the behavior, so I can’t help him much.

Another couple of friends of mine, after valiantly trying to make do in the Windows world, have decided to bail into the Macintosh world. Macs seem to cost more upfront, but apparently they are happier and less frustrated now. That’s not really an option for me, not yet, but who knows? A couple more weeks like this one, and I might be tempted.

I thought my friends and my father were just outliers. I’m beginning to wonder about that now.

So what was my week like?

First to fail, naturally, was my main computer, the one I do most of my work at home with. I have a real love/hate relationship with this laptop, which I bought back in August 2004. When it works, it works great. It’s fast, it’s powerful, and it’s very pretty. The trouble is that in the six months I’ve owned this machine, I have brought it back to the shop to be serviced four times, and it’s been in the shop for a total of about a full month. The last time I brought it in, it was because I had plugged a USB device into the computer, only to watch it turn off like a light bulb. (No blue screen, no restarts, just –- pffft! – dead.) It took the manufacturer a month to decide it wasn’t worth repairing the motherboard, so they just sent me a new machine. This time, I plugged a USB device –- not the same device! – into the computer, and promptly lost the use of all my USB ports. Granted, that’s better, and less panic-inducing, than simply checking out, so that’s an improvement. But it still puts a crimp in my ability to use the computer, because now I can’t print, I can’t use my mouse, I can’t Hotsync. I couldn’t even use the built-in flash card readers, because they’re USB devices internally. So now, for the fourth time, I brought this computer down to the service department (which is an hour’s drive from my home), to be fixed or replaced by, oh who knows? Let’s just say, at some unknown date in the future. Maybe in another couple of weeks. When I complained to the service manager about the level of reliability of this machine, this is what he actually said:

“If you were to come into the store today, I would refuse sale of this machine to you. This machine is pressing the envelope of what’s really possible in a laptop. You’re the sort of customer that falls in love with the specs, and you don’t have a realistic expectation of how reliable these machines really are.”

See? I’m just being unrealistic. It’s clearly unreasonable of me to pay $2500 for a computer and expect better than 80% uptime. It’s just absurd of me to expect that when I plug a USB device into my computer, the machine continues to run. Who ever heard of such a thing?

It will probably take another two, or possibly three or four weeks for this machine to be replaced. They were nice enough to remove the main drive and put it into a nice USB drive enclosure for me, so I’m able to keep working. In the meantime, I’ve renamed this machine to “Hangar Queen”. Fortunately, it’s still under warranty, so it’s only costing me a boatload of my time, and I have the last laptop I bought from these people, which is still running like a champ. (Ironically, I bought the new machine because I’d had such a good experience with this last computer.)

A couple of days after this failure, I put my handheld (a CLIE NX-70V) into its cradle to Hotsync with my work computer. Now this is something I have literally done about 500 times before without any trouble at all. This time, my CLIE decided to check out. In a fashion eerily similar to the experience I had with the laptop, this machine’s screen went black, and it simply stopped working. It wouldn’t react to a hard reset or any other action I could think of.

Well, I can make do without my laptop, especially since we have other computers in the house, but I was really put out by losing my handheld. I’ve had a Palm of some type ever since 1996, and I’ve got practically my entire life encoded on the thing. (Ever since my car got jacked in ‘95, with my Day-Timer in the trunk, I knew I needed a way to keep my data safe, and the original Palm Pilot fit the bill. Since then, I was hooked.) I didn’t lose my Address Book, my Calendar, or my legendary To-Do List: I’ve got it all backed up Nine Ways To Tuesday. But I couldn’t carry it with me without the CLIE.

I don’t know if it was because of my computer dying earlier in the week, or because Sony has discontinued their whole PDA line, but I kind of panicked. Since they’re no longer available in stores, I got on to eBay and immediately bought a replacement CLIE. This was the NX-70’s big brother, the CLIE NX-80V, but I wasn’t going to have it for another few days. Like I said, I was in a bit of a panic. I went down to the local Staples and I bought a brand-new Palm Tungsten T5.

“You did what?” said my wife. “We’re about to have a baby, and I’ve been working hard for the past six months to save money on all the baby gear we have to buy, and you go and blow almost a grand on two new PDAs? I’m OK with you getting one to replace the one that broke. I know how much you rely on that thing. But two? No. You have to return one of them – and get the money back.”

Well, that’s what my wife would say if we were living in TV Land.

In real life, where my wife’s understanding and patience are truly astounding, she said she would really, really like it if I would return one of the two units and get the money back. I told her that I would take a few days, try them both out, and let her know. So I spent about five hours laboriously reconstructing my life on the Tungsten, restoring files and settings from my backups, reinstalling software, and ensuring that everything was safe (It’s about a 20-step process. I know that because I’m thorough. But it wasn’t conceptually hard, just tedious). Then I spent a couple of days living my life out of the Tungsten, to see if I liked it. And so, when the CLIE arrived, I wasn’t sure I wanted to try it. Suppose it was better than the Tungsten? Then I’d have wasted my time, and I’d have to go through the exercise of migrating my data all over again.

In the end, of course, that’s what I did. I found a lot to like about the Tungsten, but in the end, I had to bring it back. It’s a marvelous machine, but there’s not much it does better than the CLIE, and the CLIE does quite a few things better than the Tungsten. Like, it has a camera. And a voice recorder. And Wi-Fi. And it’s faster, even though it’s running a “slower” processor. And I had all these CLIE peripherals around already. And I could put the CLIE into a real cradle. One thing the Tungsten had over the CLIE was that the newer OS5 apps were more polished, and did a few minor things better than the CLIE’s versions. In the end, this didn’t outweigh the value of the CLIE.

So now I had one new live CLIE, and I had one old dead CLIE, and I had just returned the Tungsten, and I was searching on the net for any information about CLIEs dying the way mine had a week ago. And just by accident, I found an article which recommended a procedure I hadn’t tried before; in fact, I had never heard of it before: an “In-Cradle Reset". Since I had nothing to lose, I tried it on my old CLIE, and what do you know? It came up just fine. After all that time and money…

Finally, this past weekend. After all my computer woes, I was looking forward to a nice quiet weekend without any major failures. That’s when my wife said:

“Honey? Can I surf the web using your work laptop?”

Isn’t there a joke that starts this way?

I didn’t think twice about it. What could go wrong? My wife is not a novice computer user. She knows her way around a machine and around the net. She reads the news and her favorite blogs.

So why, after only a few minutes of my wife’s surfing, was my work machine crawling with popups, adware, and spyware?

When she asked me about it, I was surprised. I wasn’t getting any pop-ups or spyware before my wife started surfing. “What did you do?” I asked her, perhaps with a little bit too much of an accusatory tone to my voice.

“Nothing! I was just surfing.”

“With what browser?”

“Internet Explorer.”

That told me pretty much everything I needed to know. See, I don’t use IE on my work machine, except to access a few inhouse applications. For general web surfing on my work machine, I only use Firefox, and I manage the security on Firefox pretty well. Unfortunately, because I only use IE inside a well-protected network firewall, I don’t manage the security there so well, and apparently it only takes a few minutes of surfing before malicious programs take advantage of a poorly-secured instance of IE, and my machine was badly infected. The adware had burrowed deep into the guts of Windows, and IE pop-ups were appearing even when I used Firefox to browse to a site!

The infestation proved to be very hardy and difficult to remove. When I used Spybot – Search and Destroy to clean out the infections, they managed to reinstall themselves by the next reboot. They were hardy little devils. When I used msconfig to disable Startup items which might be reinstalling these applications, I noticed that they were adding themselves back to the startup list! ("Who writes these things?” my wife asked. It’s a good question.) A little bit of detective work actually yielded two Spyware items which had installed themselves just like normal applications, with their own folders, their own start menu entries, even their own uninstallers. One had a text file explaining itself:

“You downloaded Preview AdService from a Website that is able to offer its content for free because it shows the Preview AdService ActiveX popup. The Preview AdService program is installed only once the user has agreed on it by clicking on ‘yes’. Through the ActiveX, the user can review the license terms and privacy policy before installing the software. Each and every distributor is carefully reviewed to make sure that their distribution techniques abide by a strict code of conduct.”
See, that’s total bullshit.

“I never downloaded anything or clicked on any license agreement,” my wife told me, and I believe her. It’s my work machine -– she wouldn’t download anything on it. “All I did was surf to some sites and read.”

It took me a while longer to finish fixing the problems with the pop-ups. In the end, I had to manually delete files from the WindowsSystem32 directory, which I do not recommend for the faint of heart. I kind of think I overdid it, in fact, because now I seem to be unable to connect to my company’s VPN from home. However, otherwise, my work computer seems to be fine, which is a good thing, and the pop-ups have not afflicted it since. Total cost to me: practically the whole weekend. And I still wish I understood what I was doing better.

All three of these little tales of computer woe, different as they are, have a few things in common. In each case, a very large failure occurs for poorly understood reasons, each failure is followed by a tedious restoration to the status quo, and in each case, there is no good reason to expect that it won’t happen again – without warning.

People do not get a kick out of maintaining their computers. They do not derive enjoyment and life value from backing up, troubleshooting, and restoring their computers. They derive enjoyment and value from having access to their applications and data. When a computer fails, it often marks a profound downward shift in the value it represents to the owner. When the owner is someone like me, who has the time, patience, knowledge, experience, and cash to solve the problems, that’s one thing. I’m just put out by my computers. But I think computers have gotten both so complex and so fragile, in such a short period of time, that nonspecialists have no good recourse when their machines fail. They either replace the machines –- if they can afford to -– or they simply stop using the machines. In either case, they usually lose whatever data they had on their machines.

A machine which is not reliable and unobtrusive, which calls attention to itself, which requires undue amounts of bother and care just to stay stable, is not a machine which is creating value. When snarky technicians claim that I’m being unreasonable for demanding an entirely appropriate level of service, they’re not helping the problem.

I’m not sure what it is about my computers I fear more: their unreliability or their opacity. If I could count on my computers more, I wouldn’t care so that they’re black boxes. On the other hand, if I could understand my computer better, I wouldn’t fear their failures so much. But I doubt I’m going to get either wish. The way we build computers, and the software that runs them, seems only to head in the direction of increased complexity, meaning increasingly unstable and insecure systems, exposing fewer clues about their inner state to the user. I wonder whether this will reach a point where it starts to turn off ordinary users, and whether they will turn away from what they view –- correctly, in my judgement – as a hostile technology. I wonder whether that’s already occurring. It almost happened to me this past week.

Thursday, February 10, 2005

Now All He Needs Is A Space Ship

Filed under: — Patrick M Brennan @ 11:00 pm

John Pultorak is my kind of nerd. This guy has built a replica of the Apollo Guidance Computer, the computer that flew on the Command Module and Lunar Module of the Apollo manned missions to the moon in the 1960s and 1970s.

Pultorak built the replica over the course of four years of nights and weekends, with some assistance from his son and a lot of understanding patience from his wife.

Recreating a 40-year-old computer is not an easy task, even if the hardware isn’t exactly cutting-edge. Pultorak didn’t just simulate the AGC (although that’s what he did as a first step). He didn’t even just emulate the AGC (i.e. build a modern computer and program it to pretend to be the AGC). He built real hardware which works just like the original. He didn’t replicate the original in all respects, because he discovered that some of the parts which were used to build the original AGC weren’t available any more. (Just try to find core rope memory these days.)

The AGC was definitely cutting-edge for its time (roughly 1962). It was the first digital computer to replace discrete transistors with Integrated Circuits, which were new and risky. It also was the first digital autopilot for any kind of piloted vehicle, and its user interface (the Display and Keyboard Unit or DSKY) was far ahead of its time, even if it seems a little quaint to us, and is one of the earliest examples of a real-time interactive user interface. In the 60s, after all, most computer users interacted with the machine via punch cards and printouts.

Others have implemented simulations of the AGC/DSKY. The Virtual AGC Project is one such effort, and the NASSP Project has implemented a DSKY in their Orbiter add-on (See this image). A more accessible, but less complete, partial implementation of a DSKY can be found here. I recommend it to anyone who is curious but doesn’t want to be overwhelmed. It’s a nice introduction, but it only works in Internet Explorer.

All of these efforts to replicate the space flight experience inside our modern computers are commendable, but for sheer geeky bragging rights, nothing really beats being able to say, as Pultorak can, “I built the real thing myself.”

Sunday, February 6, 2005

The Journey of a Privatized Social Security Dollar

Filed under: — Patrick M Brennan @ 5:31 pm

This is George.

This is George.

George is in charge of the biggest and most successful retirement insurance program in the world.

This is George’s friend Ken. You might remember the company he used to run.

George's friend Ken and his company.

George has a terrific idea for you …and Ken. Mostly for Ken. Here’s what he’d like to do.

First, George will borrow a dollar from Ken. He’ll do this by selling US Treasury Securities to Ken. Ken knows this is a pretty good investment, because they’re backed by the full faith and credit of the United States, with a low rate of return but with virtually no risk.

(George has been borrowing a lot of dollars on your behalf from Ken lately, but that’s another story.)

Next, George takes a dollar from you in Social Security payroll taxes. Right now, when you give that dollar to George, you’re paying part of some retiree’s monthly Social Security installment, and you expect that somewhere down the line, some other person will help pay yours when you retire. That’s the contract that forms the basis of Social Security.

Well, George takes your dollar and gives it to the retiree just like he’s always done. However, George says he’s got a better idea for the second part of the deal: you know, the one where you get paid back that dollar when you retire.

Here’s the deal, says George. (He almost said New Deal.) He’s got that dollar that he just borrowed from Ken. He says, instead of giving it to you when you retire, he’ll give it to you now, and then let you invest it in the markets. He says that he’s sure that by investing it in the markets, you can earn a high rate of return. High enough, he says, that you’ll end up with much more money in your retirement than you’d end up with if you just had Social Security.

Well, that sounds pretty good, doesn’t it? Who wouldn’t want more money when they retire, right? So you say, Sure, George. Sign me up. And you hold out your hand for that dollar.

Oh, no, you don’t understand, says George. He didn’t say he’d just give you your dollar back. See, what he meant was: He’s going to invest this money in the markets for you. And then, when you retire, he’ll give you that dollar back, plus whatever you earn on it from investing it in the market.

That’s not exactly what George said at first, but what the hell. You’re still going to get those great returns from investing in the market, right? So okay, you go along with it.

George takes the dollar he borrowed from Ken, and he puts it into an account with your name on it. Then, he uses that dollar, from that account, to buy a share of stock in Ken’s company. Now, your account is just one of many millions of accounts that George controls this way, so when he starts buying stock in Ken’s company, he’s buying a lot of stock, and the price of the stock starts to rise. Pretty soon, the stock that George bought for you for one dollar is worth two dollars.

Ken has a few shares of his company’s stock, too. Ken likes the fact that his stock price is going up, especially since he didn’t pay anywhere near what you paid for the stock. But hey, as long as stock prices are rising, who cares? After all, it’s worth a lot more than you paid for it, isn’t it? So everybody’s happy. Pretty soon, the stock that George bought for you for one dollar is worth three dollars.

At this point, George tells you that there’s something else about your account you need to know about. Since it’s a private account, he’s going to charge you a quarter to administer it for you. Well, what the hell? After all, you put a dollar in, and now it’s worth three dollars, which is two dollars more than you would have gotten back with old Social Security. So even minus a quarter, you’re still way ahead of the game.

A few years later, Ken is found to have committed a few felonies in the conduct of his business.

Ken gets caught.

It seems his company wasn’t doing nearly as well as everyone thought it was doing. Ken was lying about the state of his company’s finances in order to get people to keep buying his company’s stock. That’s called securities fraud.

Of course, Ken has known for a long time that the jig was up. (When you have friends like George, you know when the FBI is on its way.) That’s why he sold all of his stock, at three dollars per share. Ken made a lot of money. But by the time word of his arrest and his company’s collapse reaches you, the selling frenzy has already begun. Ken’s company’s stock is worth a penny a share.

Remember that dollar? All you have left of it is one cent.

There’s nothing I can do about that, says George. Investment carries risk. You read the prospectus before you signed on.

That’s right, says his friend Paul. “Part of the genius of capitalism is that people get to make good decisions or bad decisions. And they get to pay the consequences or to enjoy the fruits of their decisions.”

Well, says George, now that it’s time for you to retire, let’s see how you did.

You have one penny in your account.

You owe George a quarter for managing the account. That doesn’t depend on how well you did.

Oh, and remember the dollar you started the account with? George borrowed that dollar from Ken, but in thirty years, a 2.5% bond has doubled in value. Remember, George borrowed it in your name.

So now you owe Ken two dollars and George a quarter. Those are tax dollars, by the way, which makes George’s IRS, in effect, Ken’s collection agency.

You haven’t got it? You were counting on that three dollar return? That’s too bad, but George will be all too happy to help you out by liquidating your house or anything else you have of value.

Ken needs that money, after all.

See, after bankruptcy reorganization gets that company back on its feet, Ken has some penny stock to buy.

Sunday, January 23, 2005

Working Definition of Reality

Filed under: — Patrick M Brennan @ 5:47 pm

“Reality is that which, when you stop believing in it, doesn’t go away".
         – Philip K. Dick

Powered by WordPress