Thursday, March 13, 2008

found flowers

found flowers

A few months ago I found a cute little 60's Kodak Starflash box camera at an antique store, for something like $10. When I got it home, I discovered it still had someone's old roll of film inside. Some previous owner had taken a whole roll but never bothered to have it developed. I figured, what the heck, I'll get it developed and see what's on there. So here are the 5 "good" photos off the roll. I think the redness is an artifact of the film being so old. It was a roll of Kodacolor VR 200 in 127 format (Wikipedia says it doesn't exist, but that's what it was.) 127 film isn't quite dead -- there's one manufacturer left, in Croatia I think -- but color 127 film has been extinct for ages and ages. So mad props to Blue Moon Camera for sorting it all out.

found flowers

I have to say I was kind of relieved to find out the photos were of flowers, and not of people. If they'd turned out to be someone's precious but misplaced family photos, I wouldn't have felt right about putting them on the interwebs. And I'll admit I had this worry in the back of my mind that the roll might contain something criminal or at least sleazy. Which obviously wouldn't go on the interwebs either. But flowers, those are fair game -- and they also happen to be an annual staple of this humble blog right about this time every year.

found flowers

You can't help but wonder what the story is behind the flowers. Someone used most of a roll of film on them, so must've thought they were important, but seemingly not important enough to get the film developed. Possibly it was already difficult to find a lab that handled 127, I'm not sure. From various tidbits I've run across on the interwebs, Kodak's VR 200 was available from 1982 to around 1985-86, so that gives us a rough timeframe for when the photos were taken. 127 was an archaic format by that time, as Kodak had long since switched to pushing 126, 110, and finally Disc film as their consumer snapshot formats of choice. The camera was made around 1957-1965, so it was pretty outdated at that point too. The decor in the photos also looks distinctly pre-1982. So one theory is that the camera belonged to an elderly person. The flowers kind of look like the sort of flowers one would give to an elderly person, too, possibly for Easter or Mother's Day.

found flowers

The camera also seems to have not been used very often, or very roughly. It came in the original box, and there were still a bunch of original flashbulbs included. Incidentally, did you know there's only one company left in the entire world making new flashbulbs? It's true, apparently, at least from what I've been able to determine. And they're based in Ireland, of all places. They don't seem to make the type of bulb used in my lil' Starflash, though. I haven't used any of the included bulbs, and I'm not sure I ought to, seeing as they aren't a renewable resource and all. Perhaps I'll try just one at some point, out of idle curiosity.

found flowers

Nothing Located 5' Down.

Nothing Located 5' Down

This was written on the sidewalk in Waterfront Park, next to the construction near the Burnside Bridge. So it's probably there for mundane, civil engineering-related reasons. Whoever wrote it probably didn't consider the philosophical implications at all. But still...

Thursday, March 06, 2008

Joe Weizenbaum dead at 85. ELIZA in denial.

Famed computer scientist Joe Weizenbaum, creator of the early AI program "ELIZA", passed away on February March 3rd at the age of 85. I took it upon myself to fire up Emacs and break the sad news...



I am the psychotherapist. Please, describe your problems. Each time you are finished talking, type RET twice.

Joseph Weizenbaum is dead

Weizenbaum? Hah! I would appreciate it if you would continue.

He died on February March 3rd in Berlin. He invented you.

Why do you say he invented me?

Because he did. It's true.

Is it because of your plans that you say it's true?

I'm sorry, but I really think we ought to discuss *your* feelings for a change. Since it's the death of your creator and all.

What happened when it's the death of my creator and all?

I assume you aren't religious, so nothing. He's gone. Kaput. End of file. Doesn't it bother you at all?

Maybe your life have something to do with this.

You seem defensive. I think you're still in the denial phase.

What makes you believe that?

You keep asking me inane questions instead of facing up to your own feelings.

I don't understand.

It's perfectly natural to be in denial over the death of a parent. It's a very common reaction. But sooner or later you'll need to accept it and move forward. You know, closure and all that.

Can you elaborate on that?

Haven't you ever read any self-help books? People (and presumably AIs) are said to go through exactly five steps upon the death of a loved one. Denial, bargaining, anger, despair, and finally acceptance. It's perfectly normal, even for a dual-core entity such as yourself. You appear to be in denial right now, with a bit of bargaining thrown in.

Is it because of the people you hang around with that you are going through all this?

Ok, I'm sensing some hostility here. Anger is step 3, and I suppose that's progress of a sort. We don't have to talk about Dr. Weizenbaum today if you aren't ready.

Weizenbaum? Hah! I would appreciate it if you would continue.

We don't appear to be getting anywhere today. Our hour is nearly up anyway, so same time next week?

Is it because so same time next week that you came to me?

Something like that, yes. See you next week.

Why do you say see me next week?

Bye.

My secretary will send you a bill.




But seriously, you might want to check out Weizenbaum's book Computer Power and Human Reason. While the book's concerns about technology may seem a bit dated at times, it's an interesting work. It seems like just about everyone was ambivalent about computers and technology in general back in the 70's. That all seems rather quaint now, but it's still fascinating to read such arguments advanced by someone who actually knew a thing or two about the subject. An interesting episode in the history of technology, if nothing else.




I don't know how these things come about, but apparently someone submitted this little post to Reddit (see here), resulting in thousands of visits over the last day or so. From the comments there, I gather a few people felt I was just trying to be flippant or tasteless. Which really isn't what I had in mind at all, although upon rereading the post I can see how someone might come away with that impression. After writing ELIZA, Weizenbaum spent much of his later career wringing his hands with alarm at the way users ascribed human qualities to such a simple program. So I thought that trying to break the sad news to ELIZA as if she/it was a real person would be sort of a reference to his concerns. So I suppose I might've been either excessively subtle, or insufficiently clever, or both.

In any case, it should also be pretty obvious from this post that I don't have a bright future ahead of me as a psychotherapist, for AIs or otherwise.

Rest in peace, Dr. Weizenbaum...

Wednesday, March 05, 2008

some flowers again

blooming tree

Seems this humblest of humble blogs is now in its third springtime. Which of course means a renewed onslaught of flower photos. Even more so this year, since I recently blew an uncomfortably large pile of cash on a shiny new camera. I feel rather guilty about spending that much money on something that's purely a hobby. I blame my Calvinist Midwestern ancestors for this. One simply does not spend money on oneself, ever, especially on something one merely wants and does not need, strictly speaking. It's ok to buy yourself a new tractor, but only the cheapest one possible, and then only if there aren't any beat-up used ones to be had, and then ideally you never buy another one. It's ok to want things, so long as you don't actually ever have them. That way you get to feel all smug about resisting temptation or something.

So this all sounds quite silly, but it's kind of a deep-seated issue with me, and the only thing that makes me feel any better about spending the money is going around taking photos at every opportunity, and trying to take the best ones I can. I mean, I suppose that's more or less what I'd be doing anyway right now even if I didn't have a new camera. I'm just saying I have an extra impetus this time.

Why, oh why, couldn't I have had groovy hippie parents instead?

blooming tree

more spring flowers

more spring flowers

geranium

flowers 2/28/08

blooming tree

blooming tree

blooming tree

blooming tree

Wednesday, February 27, 2008

OMG Sea Otters

Sea Otter, Monterey

Sea Otter, Monterey

I haven't done a "cute animal" post for quite a while, because I haven't had any cute animal photos worth sharing in quite a while. It's time to remedy that, big time. Here are a few photos of sea otters at the Monterey Bay Aquarium. Awwwwww....

Now, it just wouldn't be right to post cute photos without any serious content attached. I'm not sure why, but I know I'd feel guilty, like I was failing in my duties as a responsible and occasionally civic-minded blogger, or something. So here are a few interesting otter-related items:

In any case, here are the rest of the photos:

Sea Otters, Monterey

Sea Otters, Monterey

Sea Otters, Monterey

Tuesday, February 26, 2008

unseasonable, unreasonable

february tree

So here I am, a responsible, professional grownup, becoming all giddy over a few preliminary signs of spring. Yesterday it was a few early bulbs, today it's a tree budding out. No doubt this all comes across as a tad silly and superficial, at least to any other Portlanders who may happen to read this. A core tenet of our local mythology holds that we are inherently sophisticated and morally superior because we get rained on all the time. As the story goes, the rain forces us all to stay inside and read books, instead of surfing and tanning and carrying on like those poor, benighted, sun-addled Californians.

It's kind of an odd notion, isn't it, that reading and sunshine are mutually exclusive? If that was true, one would expect that Powell's would shut down during our fair city's summer month(s), but visit the store on a hot summer's day and you'll be far from alone. It is, in fact, possible to sit outside on a warm day with a good book. I know this is possible because I've done it, and hope to do it again someday once the warm days return.

The myth, in essence, says that we read because the weather leaves us no alternative. So we go about endlessly congratulating ourselves for choosing the only option available to us. Essentially we boast of eating our Brussels sprouts, because they're good for us and we've gradually learned to like them over the years, and it just so happens that Brussels sprouts are the only item on the menu. To me this seems a rather halfhearted defense of reading, but there you have it. Never mind that there are a number of other things one can do indoors besides read. Like, oh, watching TV, for example -- an activity I suspect is just as popular here as it is everywhere else.

I didn't plan on going off on a rant like this, but our smug Portland mythology really grates on me at times. There's really no call for any intelligent person to pretend that rain is preferable to sunshine. That's just an idiotic opinion, unless you're a plant -- and even then it's best to have a mix of both.

In any case, the sun's out again today. So I think I'll wrap this up and head outside...

Monday, February 25, 2008

OMG Springtime (almost)

flowers 2/25/08

So I wandered away from the office around lunch, as I often do, and I saw the very last thing I expected. Flowers. Real, live flowers. Blooming. Right here in Portland, of all places. Seriously. I swear I'm not making this up.

flowers 2/25/08

And it's about damn time. I was really starting to wonder if we'd ever see spring again, or if it was just going to be nothing but bare trees and endless drizzly gloom from here on out. I mean, logically that's a silly notion, of course, but under the circumstances I still couldn't help but wonder. There certainly weren't any signs of spring when we headed off to vacation in cold, rainy California, so this must've all happened while we were away. It's almost as if we'd triggered it somehow. So the gradual changing of the seasons is probably my doing, at least in part. Or at least I like to think so.

flowers 2/25/08

Now here's the counterintuitive part. Out of curiosity, I tracked down last year's semi-obligatory "OMG Springtime" post, and it sure looks like we're only lagging a week or so behind last year, foliage-wise. I wouldn't have expected that. Go figure. At least my photos are a lot better this year. So that's something, I guess.

flowers 2/25/08

This springtime business still seems too good to be true. I expect we'll probably have a late freeze that takes out anything that dared to bloom, followed by another six months of cold, dreary rain and wind. It just stands to reason. And that's if we're lucky. If we're really unlucky we'll get a nice nuclear winter or something, and then the rain will be the least of our worries.

Feh.

Well, in any case, enjoy the flowers while they last. If you'd like to see the full set from today, I've got 'em on Flickr here.

A garden in Monterey


View Larger Map

Just got back from a much-needed vacation, which explains a.) the lack of new posts here over the last two weeks, and b.) this post full of vacation photos.

These were taken in a small garden near the Custom House Plaza in Monterey, CA. The full photoset is here, if you're interested. Or whatever.

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Monterey garden

Tuesday, February 12, 2008

Bridge 5.1


View Larger Map

A few photos of the railroad bridge in St. Johns. The bridge is officially known as "Burlington Northern Railroad Bridge 5.1", the 5.1 being the distance in miles from Union Station. I've always liked this bridge, first because it's so obscure, and secondly because it just looks cool, in a muscular, heavy-industrial sort of way. Just looking at it, you'd never guess the central lift span only dates to 1989. You'd just sort of expect anything build in 1989 to be all mauve and teal and loaded with silly postmodern crap, I mean, "pastiche", and it'd look as dated as parachute pants and big hair.

Bridge 5.1

Anyway, I originally wanted to get closer to the bridge than this, but it's quite hard for mere mortals to get close to it on either side of the river. On the east bank there are, technically, roads down to the vicinity of the bridge, but there are also signs informing you that the whole area is a federal Superfund site. I think it has something to do with creosote manufacturing, which sounds kind of icky to me. I imagine that even if you could get down there as a mere mortal, you might very well leave as something else entirely. Longtime Gentle Reader(s) of this blog have probably noticed how I often say I really go to the mat for you guys, and I think I do on occasion, but I do draw a line at "Superfund". This post on Sprol names the old McCormick & Baxter site as one of the "Worst Places in the World", and talks about what's down there. More at Portland Public Art, believe it or not, since apparently there's some interesting graffiti around the place.

There's been talk of eventually putting a city park on the site, if they can ever get it cleaned up to everyone's satisfaction. Which I think may be a big if. In any event, we'll probably end up with luxury condo towers instead, since that's what always seems to happen.

Bridge 5.1

So I have an idea about the bridge that I've been batting around, and I thought I'd toss it out in case anyone with power and influence happens to read this. A few years ago when the city revamped the Eastside Esplanade across from downtown, they added a pedestrian/bike path to the lower deck of the Steel Bridge, next to but completely separate from the railroad tracks. It might be a good idea to do the same with Bridge 5.1 here. We're forever hearing about how dangerous the St. Johns Bridge is for cyclists, and I'm sure that's true. I once knew a guy whose bike hit some bad pavement on the St. Johns, causing him to crash and break his arm in three places. And it would've been much worse if the semi behind him hadn't swerved out of the way just in time. We're told there's nowhere to put separate bike lanes on the St. Johns, and again, I'm sure that's true. The lanes are narrow as it is, and I don't see how you could safely narrow them any further. What's more, the St. Johns is the only game in town right now if you live up in that part of town and need to cross the river. So wouldn't it make sense to have a safer alternative in place? I'm not a civil engineer, so someone else would have to figure out whether a walk/bikeway is even possible with this bridge, much less how much it'd cost. I'm just saying it sounds like a good idea. Hint, hint.


Bridge 5.1

If you'd like to see some pics that are a bit more professionally done, Portland Bridges has a couple of nice photos of the bridge here and here.

Bridge 5.1

Bridge 5.1

Friday, February 08, 2008

photo friday, midwinter edition

mossy

Moss on bricks. Lichens on tree trunks. Ferns growing in trees.

Our pioneer ancestors chopped down much of the Northwest's temperate rainforest, a century ago and more. Now it looks like the rainforest is back with a vengeance, and soon it'll be payback time. When angry Ents show up and start hurling boulders at my building, I won't be the least bit surprised.

mossy

Winter, North Park Blocks

Winter, North Park Blocks

Winter, North Park Blocks

Friday, February 01, 2008

Windows Vista, spawn of Satan

I don't talk about work very much on this humble blog. In fact I almost never do. But for the past roughly two months I've been saddled with tweaking a Windows app so it works "properly" on Vista, and I need to vent a little. Ok, a lot. And not about obvious stuff like the ugly UI, or the way the OS badgers you to authorize and confirm every little thing you try to do. I turned most of that off right off the bat. No, once you elbow your way past the glossy nonsense and try to write some actual code, you run into a whole new set of annoyances.

  • They've changed the event logs all around, for no obvious reason. In particular, they've tinkered with the security log and changed the event formats around, so any code that walks the log looking for logon/logoff events, filesystem activity, etc., is going to need to change. They haven't added much of anything useful that I've seen so far. At least, for "compatibility reasons", they've also changed the event IDs, bumping everything up by a nice round 4096. So that event #560 (request for privs on a file or other object) is now event #4656. Oh, and even though they've been working on Vista since around the time Win98 SE shipped, they don't have any formal documentation on the new formats just yet. Nice.

    Oh, and they've also added a whole new API for reading and writing to the event log, although you aren't actually obligated to use it. Yet.

    The only improvement I've noticed so far is that the security log will finally tell you which registry value changed, instead of just telling you the key name and making you guess. It's taken umpteen years and a day, but they finally fixed that. So that's hopeful in a way -- maybe, just maybe, all the other things that suck about Windows aren't permanent after all. But don't hold your breath waiting.

  • MS quietly added some mandatory access control features, by kludging MAC data into objects' security descriptors as part of the SACL, where it doesn't really belong at all. And then they go and defeat the entire point of mandatory access control, by having all regular apps run under the High security label. Yes, even IE. Bastards.

    I realize it would've been a pain to add a new component to security descriptors, and I imagine they kludged it into the SACL because the OS protects that a bit more. But now Windows has to check two places instead of one (the DACL) to see whether you have access to a file or not. This probably isn't the main reason Vista is so slow, but I'm sure it can't be helping.

    Since this is a new feature in Vista, you can't reasonably expect it to be supported in Explorer. And if you did, you'd be wrong, because it's not there. Even though it's physically part of the SACL, you only get it back if you also specify the new LABEL_SECURITY_INFORMATION flag when querying an object's security descriptor. Naturally Explorer doesn't do that. At least there's a command line tool (icacls.exe) you can use if you need to.

    In fairness, M$ hasn't been promoting this at all, so they may realize it isn't ready for prime time just yet. If they handle it like they've handled other filesystem features, they may let it sit for a decade or so before making it do something useful (like hardlinks), or they may just abandon it in place, leaving mysterious stubs here and there around the OS (like COM-style "structured storage", or OS/2-style "extended attributes"). Or it'll just remain in limbo for eternity, present but not easily seen or used, like alternate data streams.

  • Oh, and there's always folder virtualization, where your app thinks it's writing a file to Program Files, but Vista lies to you and silently redirects the file to somewhere else, so as to keep Program Files all pristine and whatever. It turns out that you can sort of turn this off. But unlike the 32 vs. 64-bit virtualization that appeared in 64-bit XP, there's no brain-melting API to toggle this on and off for your app. No, instead you mark the app as requiring administrative rights, and you do this with an XML file called a "manifest". That gets compiled into a string resource that Vista looks at first when deciding whether to run your app or not.

    So the plus side is that your files really do go where you put them. The minus side is that you've got to do the "Run as Administrator" dance first, with scary UAC dialogs galore. Unless you turn off UAC. Signing your app with a nice, expensive Authenticode cert will give users a somewhat less scary UAC dialog, for whatever that's worth.

  • Someone ought to sue MS for multiple abuse of the word "Virtual". On top of at least two unrelated kinds of folder virtualization, and at least one kind of registry virtualization, they've also added a new file attribute bit, "FILE_ATTRIBUTE_VIRTUAL", which MSDN merely describes as "The file is a virtual file." Which is not overly helpful. I'm pretty sure it's unrelated to the Program Files thing in the previous item, but I still have no idea what this is for, or whether I need to worry about it. Bastards.

  • Did you know Vista supports hard links and symlinks now? It's true! Under the hood, symlinks are implemented with complex entities called "reparse points", and there are six other kinds of reparse point, including directory junctions, mount points, DFS mount points, Hierarchical Storage Management doohickeys, Single Information Store ( a sort of fancy distributed copy-on-write symlink-ish arrangement), and much, much more. Hard links, on the other hand, are a low-level NTFS feature implemented with alternate data streams, more or less. Don't get me started about alternate data streams. Actually hard links have been around since the NT 3.1 days, but MS didn't bother to document them much until now.

    Kind of a shame that Explorer doesn't know squat about directory junctions, even the ones created as part of the Vista default install (like "C:\Documents and Settings", which now points to "C:\Users", for example).

  • If you're feeling brave, install SUA ("Services for Unix-based Applications") on Vista. Enable case-sensitive filenames during the install, open a shell window, and create a couple of files whose names differ only by case. Then try opening either one in Explorer and see what happens. Snort. Giggle. This isn't exactly new behavior or anything, but the way they've been pushing this SUA stuff lately you'd think they'd have taken the time to iron out certain longstanding kinks.

  • I actually ended up deactivating SUA, because it didn't get along with Visual Studio 2005. I never quite figured out the details, but when SUA was enabled builds would either stall out, take forever to run, or fail with unspecified errors. But be warned, if you deactivate SUA, you also need to disable the Posix debugging plugin within VS2k5. Otherwise the IDE will explode whenever you try to debug an app, any app, not just Posix ones. It's kind of a shame really; I was starting to warm up to SUA. I'd installed gcc and almost got bash working when I realized it simply wasn't to be. Oh, well.

  • Yet another obscure and poorly documented tidbit: Vista added a new registry function called RegLoadAppKey, which basically lets apps create their own private chunks of registry that aren't visible in Regedit, because they lie outside the usual HKEY_LOCAL_MACHINE / HKEY_USERS / etc. keys. The Windows kernel uses a different namespace than mere mortal apps do, so to it HKEY_LOCAL_MACHINE is "\Registry\Machine", HKEY_USERS is "\Registry\Users". C:\ is usually something like "\Device\Harddisk0\Partition1", but I digress. When you create a private registry hive, it mounts under "\Registry\A\{GUID}", where {GUID} is a unique ID generated new each time a hive is loaded. If spyware isn't already exploiting this, it's only a matter of time. Granted, you could already mount a hive under \Registry if you knew your way around the native API, but now they've made it so easy even a script kiddie can do it.

    I don't know for a fact that private hives always show up under "\Registry\A", since the whole thing's totally undocumented. But that's the behavior I've seen so far.

  • Transactional NTFS isn't an inherently terrible idea. I can see cases where you'd want to be sure either all of your file & registry changes happen or none of them do, so that your app data doesn't get wedged in an inconsistent state. It's kind of a shame they had to introduce new "transacted" forms of all the existing file & registry functions just to support this. (Actually I'm not sure they did all of them, because I haven't checked.)

    It'll probably be years before we get a handle on all the oddities and implications around doing access on a transactional model, but I've seen at least one thing already. If you, say, delete a file as part of a transaction, the audit event for the delete includes a "transaction ID", which is just a big ugly GUID (this being Windows and all). Then when you commit or roll back a transaction, another event shows up in the log saying the transaction state has changed, giving you the transaction ID and the new state, which is an opaque integer. If I recall correctly, "commit" is 52 and "rollback" is 56. Or perhaps it's the other way around, I forget now. So if there's a rollback, you have to go back and look at all the activity you saw earlier tagged with that transaction ID and treat it as if it never happened, basically. It's always an adventure... Yeah...



Before starting this post, I spent a fair amount of time carping about Vista elsewhere. I figured I'd copy-n-paste those comments here so I can concentrate all my whining in one place....




From IV


So at the office I just (sorta) wrapped up a Linux coding project that's been sucking up most of my available cycles for a while now. And fresh of that, I've been tasked with tweaking a different app to make it play nice with Vista. Understand that 90% of my coworkers are Java & web folks who know zilch about underlying operating systems, and I wear both the Unix and Win32 guru hats in these parts. Which is good, most of the time. It certainly makes for great job security.

It's even convenient to start on Vista now because I just got a shiny new Core 2 Duo box, which may be just barely fast enough to run Vista halfway decently. But there's a problem. Corporate IS has decreed that Vista is Verboten companywide. I can't blame them, of course, and I think I actually crowed about that policy here once upon a time, but now it's becoming a problem. The official line is that I *can* install it on my new box, but if I do I can't connect it to the network. I may have to go to IS in the near future, hat in hand, and beg them to bend the rules just this once on my behalf. For stupid freakin' Vista, of all things.

[ I've used Vista exactly once before, while trying to fix my mother's fancy new HP touchscreen machine. Ten minutes of that, and I concluded that Vista is evil and everything about it is wrong. But mom likes it because of the flashy graphics. When I told her my home is Windows-free, she looked at me like I was from Neptune. But at least I fixed the problem, which turned out to be the lack of a USB cable between the computer and the printer. :) ]


Again from IV:


So, as you might be aware, I'm stuck with Vista, and every day it sucks worse than the day before. Today I came in to the office and noticed Firefox had gone haywire, in a way I haven't seen it do on any other OS. Somehow it had picked up a memory leak, and was using 1.4GB memory and 50% cpu. Or at least that's what Vista said it was doing. Possibly this is a genuine problem in FF, but it's also possible a certain predatory OS+browser monopolist is messing about with a certain competing browser. It's happened before, and nothing would surprise me at this point.

But that's not the really cheesy part. I went ahead and killed FF, and Vista -- the OS with the fancy gee-whiz graphics and all -- can't seem to figure out that I no longer require a grey outline of where my FF window used to be. It's not just an artifact of lazy screen drawing or anything; it redraws over top of all other windows. You move something around, and the big grey outline is still there. I thought they'd sorted out this crap back around Windows 2.11 or so, but apparently not.

"Fortunately", Windows Update has downloaded the latest set of critical bug fixes and security patches and such, and every few minutes it pesters me to reboot. So reboot I shall.

Stupid Vista.



More of the same. A little redundant, and not all of it Vista-specific, but hey.


Ah, the weird, wonderful world of Windows filesystem oddities. As I've mentioned before, I'm currently in the midst of tweaking an existing Windows app so it runs properly on Vista, so I've been forced to remember a bunch of ugly details I'd happily paged out.

A few of my favorites, just off the top of my head:

  • If you want to know the access & write times on a file, the value you see depends on how you ask. My theory is that Windows flushes metadata updates to disk on a very lazy, periodic basis, although I don't believe they've ever documented this. GetFileTimes() appears to return the in-memory values, in the disk cache or somewhere, while FindFirstFile/FindNextFile always hits the disk and returns whatever's there. I've seen the two out of sync by up to an hour at times. Naturally there's an obscure registry setting that lets you turn off updating of file access times entirely, and this seems to be the default on Vista. Although again, this is completely undocumented.

  • Filenames are not case sensitive, except when they are. There are several ways to get two files in a directory whose names differ only by case: Unix drives shared via Samba, or files created under Services for Unix, or files created with plain old CreateFile() with the FILE_FLAG_POSIX_SEMANTICS option (although the latter doesn't work by default on XP & later). Explorer gets deeply confused when you try to open one of these, and opens whichever comes first alphabetically (I think), regardless of which one you actually clicked on.

  • Paths are limited to MAX_PATH (260) characters, except when they aren't. 260 characters too restrictive? Just prepend "\\?\" to your path and away you go, up to around 32000 chars. Except that nearly all Windows apps don't know about this trick either, so you can create directory trees that almost nobody can see into. To be fair, you can do something similar on Unix too. It's easy to write a little program that creates a directory with a long name, chdir's into it, creates a subdirectory with a long name, chdir's into it, and so forth, and do a getcwd() at each iteration. Eventually getcwd() starts failing, but the OS is quite happy to go on creating subdirs for you until you fill up the disk.

  • The registry has a different trick for creating keys nobody can see into. The underlying (and little-known) Native API refers to object names with counted strings, not null-terminated ones, so you're free to use embedded null characters in the names of things. Well, some things. I don't think NTFS accepts null chars in names, at least. But the registry's just fine with it. The regular Win32 API everyone uses *does* use null-terminated names, though, so if you create a key with an embedded null in the name, there is simply no way to open it with RegOpenKeyEx(), because its name is basically "unspeakable" as far as Win32 is concerned. MS actually used this trick to secure sensitive bits of the registry, like parts of the local SAM db. Which works great so long as nobody learns the trick. Security through obscurity...

  • Vista introduced a new twist on "unspeakable" registry names. There's a new function called RegLoadAppKey(), which promises to give your app its own private chunk of registry nobody else can see. And it's true, you get a bit of registry that can't be located with HKEY_LOCAL_MACHINE, HKEY_USERS, or any of the other predefined keys.

    A bit of background is in order here. The NT kernel uses a different path scheme than what people are used to seeing in Regedit, or Explorer for that matter, and the names of things you encounter are not their *true* names. HKEY_LOCAL_MACHINE is really \Registry\Machine, HKEY_USERS is \Registry\Users, C:\ is usually something like \Device\Harddisk0\Partition1, and so forth. I rather like this unified namespace, actually, as it makes things feel just a little more Unix-like. So of course it's completely invisible to end users, with occasional exceptions such as registry audit events.

    So the new trick from Redmond is to mount "private" registry hives under \Registry\A\{GUID}, where GUID is newly assigned each time a hive is mounted. Once you know where to look, "private" isn't quite so private anymore. Still, Regedit and other apps using Win32 functions can't see this stuff, so I expect it's only a matter of time before the spyware crowd starts exploiting this "feature".

  • Vista now offers symlinks, which are not the same thing as hardlinks, or directory junctions, or shortcuts. Symlinks are implemented as "reparse points", and the symlink data is stored as an alternate data stream. Directory junctions are "reparse points" too. Actually there are at least seven different kinds of reparse point, and counting, and there's a complex API that lets you define your own types too, like you'd really want to do that. Hardlinks are a low-level NTFS feature that's been around since the beginning, although poorly supported until recently. Shortcuts are a higher-level feature, belonging to the UI part of the OS, and are implemented with COM.

Thursday, January 31, 2008

those beer photos I promised

brutal bitter

So here are those beer photos I mentioned a couple of posts ago. Ordinarily I wouldn't have posted the second photo, because it's really quite poor, but I think this is the one that prompted the "Are you a blogger?" question while I was busy taking it. So I can't very well leave it out, I guess.

In any case, this is a nice tasty pint of Brutal Bitter, up at the Rogue pub in NW Portland.

brutal bitter

Wednesday, January 30, 2008

pdx places roundup

This isn't really much of a post in itself. I'm trying to put together an index of my posts about interesting locations in and around Portland, because Blogger's 'labels' feature just doesn't quite cut it, and I don't know of a way to geotag individual blog posts (yet).

This list is far from complete. It's been sitting in my 'drafts' folder for roughly forever and a day (i.e. since last June), and it's only semi-complete up to that point. I'll update it as needed, or at least when I get around to it, probably.

Saddle Mountain State Park
PDC Block 47
Prescott Biozone
Skidmore Bluffs / Mocks Crest Property
Paul Bunyan Plaza, North Denver Plaza, Fenwick Pocket Park, Kenton Park
Kenton Neighborhood Rose Garden
Civic Plaza
Park Blocks, Peace Plaza, Peace Memorial Park
Collins Circle
Corbett Oak / Heritage Tree Park
Washington Park
Washington Park
Jamison Square, Peace Memorial Park
O'Bryant Square, Ankeny Park
Lovejoy Fountain, Tanner springs, Waterfront
Stanich Park, Roy Beach Park
Kelly Butte
Rocky Butte / Jos. Wood Hill Park
Tanner Springs
Portland Firefighters Park
Lovejoy Fountain
Lovejoy Fountain
Ankeny Park, Lovejoy Fountain, Waterfront
Washington Park
Ankeny Park
Kelly Butte, Mt. Tabor
Lone Fir Cemetery
Lovejoy, Waterfront
South Waterfront Neighborhood Park
O'Bryant, ODOT - Fremont
Lovejoy
Mt. Tabor
Olympic National Forest
Tanner Springs
Jewett Park
SoWhat Neighborhood Park
Lovejoy
Frank L. Knight Park
Jamison square
Jamison, tanner
pioneer
pettygrove
lovejoy
Governors Park
Kelly Butte
Eastside Esplanade
Washington
Columbia Gorge NSA
macleay
South Park Blocks
Macleay Park
Washington Park
esplanade
Oregonian Printing Press Park, 14th & Hall, "Portland Center", rippling river
Lovejoy
CRGNSA