Mark Helprin’s Winter’s Tale is a delight, even if its apparent themes are little more than an excuse for the wordplay window-dressing. I might not have found perfect justice, but a hall of light and mirrors built from language is quite enough for me.
One thing that needled, not being the sort to read with dictionary in hand, was this:
Though Mrs. Gamely was by all measures prescientific and illiterate, she did know words. Where she got them was anyone’s guess, but she certainly had them. Virginia speculated that the people on the north side of the lake, steeped in variations of English both tender and precise, had made with their language a tool with which to garden a perfect landscape. Those who are isolated in small settlements may not know of the complexities common to great cities, but their hearts are rich, and so words are generated and retained. Mrs. Gamely’s vocabulary was enormous. She knew words no one had ever heard of, and she used words every day that had been mainly dead or sleeping for hundreds of years. Virginia checked them in the Oxford dictionary, and found that (almost without exception) Mrs. Gamely’s usage was flawlessly accurate. For instance, she spoke of certain kinds of dogs as Leviners. She called the areas near Quebec march-lands. She referred to diclesiums, liripoops, rapparees, dagswains, bronstrops, caroteels, opuntias, and soughs. She might describe something as patibulary, fremescent, pharisaic, Roxburghe, or glockamoid, and words like mormal, jeropigia, endosmic, mage, palmerin, thos, vituline, Turonian, galingale, comprodor, nox, gaskin, secotine, ogdoad, and pintulary fled from her lips in Pierian saltarellos. Their dictionary looked like a sow’s ear, because Virginia spent inordinate proportions of her days racing through it, though when Mrs. Gamely was angry a staff of ten could not have kept pace with her, and half a dozen linguaphologists would have collapsed from hypercardia.
— Winter’s Tale (New York: Harvest, 2005), 225-226
For reference (thanks, Oxford English Dictionary!):
Trawling the book for the rest of Helprin’s vocabulary I leave for someone else, but special mention is due to “amphibological” — of amphibology/amphiboly, ambiguity of speech, especially deriving from grammatical construction — for appearing in context in the title Amphibological Whimsey Dances. It’s a better name for wordplay than wordplay.
Microsoft hardware is fabulous, but — like everyone else ever to buy one — I was disgruntled to find that the Natural Ergonomic Keyboard 4000’s centre-keyboard lever is set to control zoom, and only zoom, rather than something like vertical scroll. Worse, IntelliType won’t let you change it, unlike almost every other special key on the board.
Luckily, it turns out that it’s a limitation of the interface, not the software; you can get a lot more done with a little registry tweaking and two XML configuration files in the installation directory:
C:\Program Files\Microsoft IntelliType Pro\commands.xmlC:\Program Files\Microsoft IntelliType Pro\mscmdkey.xmlThere are two different kinds of customisation possible:
mscmdkey.xmlcommands.xmlFirst, we want to look at mscmdkey.xml.
mscmdkey.xmlmscmdkey.xml lists commands sent out by the keyboard to IntelliType. It should probably be treated as read-only, but it’s informative; commands.xml can’t easily be edited without it. The commands look like this:
<Command name= 'VOLUME_UP_COMMAND' id='700' isUI='false' default='true' >
<ResourceIDs displayName='3809' description='4009' descriptionPlusAccel='0' osdText='4270'/>
</Command>
The magic numbers are inscrutable (a displayName of 3809, an osdText of 4270?), but the name and id are simple enough.
The name is a human-readable label. VOLUME_UP_COMMAND is the default action of the volume-up button. SAVE_COMMAND corresponds to the “Save” button above F11. Some of the commands don’t have buttons on all keyboards: the Natural 4000 has no “next track” button (MEDIA_NEXT_TRACK_COMMAND), but the Natural MultiMedia does. Some of the commands never have buttons: BATTERY_LOW_COMMAND is an automatic feature of the battery-powered wireless models.
We’ll need the id when we get to commands.xml. To change the Zoom lever we want:
<Command name= 'ZOOM_IN_COMMAND' id='319' default='true' ><Command name= 'ZOOM_OUT_COMMAND' id='320' default='true' >319 and 320, respectively.
Some commands have an MSReserved sub-element. The appCommand attribute corresponds to a WM_APPCOMMAND parameter (e.g., for NEW_COMMAND it’s 29, the defined value of APPCOMMAND_NEW).
I’ve had no success trying to add my own commands under high, unused ids.
The IntelliType software allows you to remap some, but not all, of the keyboard’s keys. When you do, the changes are saved to the registry at HKEY_CURRENT_USER\Software\Microsoft\IntelliType Pro\EventMapping.
The easiest way to find the key-code of a key you want to remap is to use IntelliType to assign it, then modify the values. The entry for my second favourites button looks like this:
[HKEY_CURRENT_USER\Software\Microsoft\Intellitype Pro\EventMapping\79]
"ShellExecute"="cmd.exe"
"Friendly"="Python"
"Arguments"="/K python"
"Command"=dword:00000320
The important one is Command. dword:00000320 is 0×320 hex, or 800 in decimal. Search mscmdkey.xml for a command with an id of 800 and you’ll find SHELL_EXECUTE_COMMAND — that sounds a lot like what we’re doing. You can use any of the commands from mscmdkey.xml here, though not all of them work.
Friendly is just a human-readable name (this entry displays in the favourites menu as “start Python”). ShellExecute and Arguments are specific to SHELL_EXECUTE_COMMAND.
IntelliType can only set the favorites buttons to applications and URLs, but I miss the next and previous track buttons from my Natural MultiMedia. I’ve put them as faves 4 and 5:
[HKEY_CURRENT_USER\Software\Microsoft\Intellitype Pro\EventMapping\81]
"Command"=dword:000002c0
[HKEY_CURRENT_USER\Software\Microsoft\Intellitype Pro\EventMapping\82]
"Command"=dword:000002bf
0x2c0 is 704, MEDIA_PREVIOUS_TRACK_COMMAND; 0x2bf is 703, MEDIA_NEXT_TRACK_COMMAND.
Some keys can’t be remapped. The “My Favorites” key, for example, can be disabled with DISABLE_COMMAND (400) but operates as normal with any other value.
commands.xmlcommands.xml lets us redefine what those commands actually do in any given context. It makes sense: not all software is alike, so triggering (e.g.) a spell check will require something different in OpenOffice.Org Writer than in Microsoft Word. Many of the mappings are simpler than you might think: SAVE_COMMAND (311), for example, is just a macro that performs the “Ctrl + s” keyboard shortcut!
commands.xml looks something like this, trimmed for brevity:
<DPGCmd>
<ENG>
<Application UniqueName="StandardSupport">
<C311 Type="5" KeySeq="ctrl s" />
<C401 Type="5" KeySeq="F7" />
</Application>
</ENG>
<ALL>
<Application UniqueName="Notepad" AppName="Notepad">
<C311 Type="1" wParam="0x10001" />
<C401 Type="0" />
<C309 Type="5" KeySeq="alt F4" />
</Application>
</ALL>
</DPGCmd>
We’re not interested in a lot of this. Each installed language has an element under the root DPGCmd node defining the function of a command in that locale. ENG means English. The special element ALL applies to all languages; unless you’re a hardcore polyglot then it’s all you’ll need.
Commands are mapped on a per-application basis, but AppName doesn’t seem to actually do anything: change “Notepad” to “Potato” and the keys will work the same.
UniqueName is the important one, and refers to the window class name passed to the relevant Windows API functions. If you want to do application-specific customisation, there’s third-party software around (e.g. The Customiser) that can get a class name from any active window. If not, the special UniqueName value “StandardSupport” applies to all window classes.
Be careful not to have conflicting rules. Commands defined under specific UniqueNames will override commands defined under StandardSupport, but they can’t be defined under specific languages if they’re also in ALL.
Every Application contains elements with names like C319, where 319 is the id of a command in mscmdkey.xml. All of these command-elements have a type attribute:
OFFICE_TASK_PANE_COMMAND, so I’m assuming it’s a hack just for that.The others are easier:
Type 6 takes an Activator which is passed to the window. Some of them are evidently application-specific — IllustratorZoomin, IE7Save — but others seem more general. An incomplete listing:
ZoomInZoomOutScrollUpScrollDownType 5 is the fun one, which takes a simple keyboard macro in its KeySeq attribute. As mentioned above, “Save” is implemented like this:
<C311 Type="5" KeySeq="ctrl s" />
i.e., it’s exactly the same as pressing “Ctrl” and “s”. Multiple chords can be separated with a | pipe character, so if you want a “Hello world!” button:
<C203 Type="5" KeySeq="shift h | e | l | l | o |
space | w | o | r | l | d | shift 1" />
Macros seem to be deliberately limited, possibly as a security feature. You can’t alt tab out, for example, or navigate menus with alt | f | downarrow | downarrow | enter. You can implement macros that reach into “Save As” or “Open” file-pickers, though, and presumably other kinds of dialog.
I wouldn’t even have considered looking for baroque XML configuration files if the internet hadn’t said it was possible. Joel Bennett’s guide has the most detail by far, plus a handy bit of XSL to remove the F-lock annoyance.
In 1952, Sight and Sound magazine followed up a Belgian poll of directors’ favourite films with a similar referendum, this time for critics. The result was sixty-odd top-ten lists and an aggregate “ten best films”, with Vittorio De Sica’s Bicycle Thieves coming in at number one.
The poll would be of relatively little interest if it had ended there, but it was repeated in 1962 — and 1972, 1982, 1992, 2002… Collected, the lists show the evolution of the cinematic canon (or at least the critical zeitgeist, which may not be precisely the same thing) over the last half-century. For example: 1962 saw Citizen Kane move to first position, where it’s stayed ever since, but in 1952 it shared thirteenth. Ten years later, it was even further in front.
I suppose that watching items move up and down lists is only of interest to a certain kind of person, but that kind of person is me. It’s annoyed me no end that so many of the websites collecting lists of greatest films only provide the S&S aggregate top tens: those by individual critics offer much greater variety, as well as scope for more interesting statistical projects.
To that end, now that I’ve dug up the original magazines, here they are in full (or close to it):
The BFI has graciously put all of the 2002 results online already.
Not every list was published in the magazine, though from 1962 onwards the effort was made. I haven’t included the comments, many to the effect of “you bastards, how can I pick just ten?”
There’s a remarkable range of creative interpretations of the words “top ten films”. Some included twelve or fifteen. Some included single entries like “The Apu Trilogy” (really three films), “Chaplin’s Mutual films” (more than ten), and in one case “Anthology of the works of W. C. Fields” (more than thirty). Some picked small extracts — like a single musical number — over films entire. One picked a specific, unreleased cut, subsequently destroyed by re-editing. Some sent in lists of directors.
Please forgive any missing diacritics: the OCR was hard on them, and I’m willing to sacrifice a cedilla here and an acute there to save time. All other corrections are welcome.
Drupal 4.2.0 was the first CMS I ever installed, back in 2003. A few weeks later it became the first CMS I botched an upgrade to, at which point I moved on to other pastures.
That was that until last week, when John demanded help with a custom module for his mountaineering club site, to enable users to enter unique codes in their profile area and have their membership “upgraded” to a new role. I gather the point is to pass out the codes in meatspace when members join or pay their dues — it’s a clever idea.
A day or three later and the result was this module.
Most of my experience developing plugins for other people’s PHP comes from WordPress, so it was interesting to use such a dramatically different API. WordPress requires explicit registration of hook functions, e.g.
add_action("edit_post", "my_edit_post_action");
But Drupal uses magic function names. If you have a module called “mymodule“, any function called mymodule_init will be automatically hooked into hook_init.
It’s an elegant solution, though I favour the Pythonic “explicit is better than implicit” philosophy too much to be comfortable with it.
One of the best (and worst) things about the whole experience was the Forms API. Instead of writing HTML, you just write some code like this:
function mymodule_form() {
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#description' => t('What are you called?')
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Yield!'),
);
return $form;
}
Hook the function in at the appropriate place, and Drupal renders it, themed prettily, with anti-CSRF nonces already handled. More magic functions, hooked in as mymodule_form_validate() and mymodule_form_submit(), can be used for validation and form submission actions respectively.
As always, the downside of a leaky abstraction is that customizations not provided for in the API are much harder than they should be, but I expect that the vast majority of modules never have any problems.
Drupal has lots of other niceties missing from WordPress too, like the watchdog logging system and documentation that doesn’t suck. I have issues with it as a user — the learning curve for administration is comparatively steep — but it’s flexible, powerful, and easy to extend. As a developer I’m extremely impressed.
<canvas> -- amazing.
)
#
See thou mine own coin-purse? It hath upon it written "Foul Oedipus."
JULES presses his knife to BRETT's throat
J: Speak 'What' again! Thou cur, cry 'What' again!
I dare thee utter 'What' again but once!
I dare thee twice and spit upon thy name!
Now, paint for me a portraiture in words,
If thou hast any in thy head but 'What',
Of Marsellus Wallace!
B: He is dark.
J: Aye, and what more?
B: His head is shaven bald.
J: Has he the semblance of a harlot?
B: What?
JULES strikes and BRETT cries out
J: Has he the semblance of a harlot?
B: Nay!
J: Then why didst thou attempt to bed him thus?
By Kevin Pease
Saved this link in January 2007 and expected a wave of imitators, but haven't heard much about it since, though I think del.icio.us uses something similar. Interesting, anyway: piggyback on the tag space with system identifiers like "filetype:mp3" or "geo:[lat],[long]" or "user:[username]".
Me know. Me have problem.
Me love cookies. Me tend to get out of control when me see cookies. ...
Sounds fantastic, plus:
Every Google App Engine application can use up to 500MB of persistent storage and enough bandwidth and CPU for 5 million monthly page views.
This is more CPU than you could expect to get from a cheap Dreamhost account etc., and presumably more reliable.
Fantastic free audio-novelette, like science-fiction Wodehouse as read by the tipsy shade of Vincent Price.
John Lydgate is the worst medieval offender that I can think of off the top of my head. For the prologue to his Siege of Thebes, he wrote himself into Chaucer's Canterbury Tales.
And so while the pilgrims were
At Canterbury, well lodged one and all,
I don't know what to call it,
Luck or Fortune -- in the end
That led me to enter into that town