Subscribe: mike's web log
Language: English
Tags:
api  article  book  email  find  formatting  mdash  new  options  part  people  posts  styles  text  time  tumblr  word
Rate this Feed

Feed Details and Statistics
Preview: mike's web log

# mike's web log

## mike pope's Web log

Published: Friday, January 19, 2018 3:10:48 AM

Last Build Date: Fri, 19 Jan 2018 03:10:48 GMT

Mind the gap

Mon, 20 Nov 2017 21:30:05 GMT

I find it harder and harder these days to ride as a passenger when other people drive. Some of that is just part of getting old. But it's not just that; as I've noted before, learning to ride a motorcycle has helped make me a better driver.

One tactic I've worked on is how much space I leave between me and the driver in front of me. To my mind, most people follow too close. You really don't want to do that. Here's why.

Note: If you want the tl;dr, skip to So what do I do?

## Speed and distance

Let's start by examining what sort of distance you're covering when you drive, because it might be more than you think. At 10 mph, in 1 second you cover about 15 feet. At 70 mph, in that same 1 second you cover 103 feet. Here's a graphic that illustrates this ratio.

(image)

An accepted measure of a car length is 10 feet. This means that if you're going 60 mph, in 1 second you will travel 9 car lengths. Even small differences in speed result in significant differences in how far you travel—the difference between driving at 60 and at 70 is that in 1 second at 70 you will travel an additional 15 feet (88 vs 103). More than one car length.

## Braking distance

Let's imagine that for some reason you have to slam on the brakes. Alas, physics tells us that you cannot stop on the proverbial dime. The faster you're going, the longer it takes to get to zero mph.

There's no standard chart for stopping distance for cars. Cars weigh different amounts and they have different brakes; for example, newer cars have anti-lock brakes a.k.a. ABS [more]

Library Extension for Chrome

Sat, 28 Oct 2017 14:36:07 GMT

Here's a keen thing I learned about from a Vox article: a Chrome extension named Library Extension that adds library information when you're viewing books on Amazon or Goodreads. The extension tells you whether the book you're interested in is available in one or more library systems.

Let's say you're interested in the book The ABC of How We Learn, so you look it up on Amazon. In the bar at the top of the page, the library extension icon lights up to tell you that you're on an enabled site:

(image)

On the actual page where you're viewing book information, the extension displays library information:

(image)

If you want to get the book from the library, you click the Borrow button. This sends you to the library site with the book preloaded.

To configure the extension—for example, to tell it which libraries you want to look in—you click the icon in the toolbar, then click Options:

(image)

In the options dialog, you find the library you're interested in, then click the add (+) button:

(image)

[more]

Hearphones

Mon, 21 Aug 2017 21:11:57 GMT

Not long ago I posted something about saving your hearing via the diligent use of earplugs if you are around loud things. (In my case, a motorcycle.) I didn't note then that my problem with being able to hear clearly is not new. I've had trouble for a long time hearing conversation in loud restaurants or understanding dialog in movies.

In fact, I had my hearing tested a while ago. Paradoxically, the results said that my hearing is great in some sort of Platonic sense, as in, when tested in ideal conditions in a lab. But Dr. Ears admitted that there was nothing to be done about my filtering problem—being able to pick out from background noise the sounds I actually wanted to hear.

Hearing aids are an option, I suppose. But good hearing aids are shockingly expensive, and often are not covered by insurance. And it's not at all clear to me that they solve this specific problem of attenuating the background noise specifically.

Well, in the creepy way of modern internet advertising, which can apparently read your mind, I recently started seeing ads for something pretty new: "conversation-enhancing headphones." For example, Bose has a product that they call Hearphones. Doppler Labs (which is suing Bose over all this) has a product they call Here Active Listening headphones. (Here, hear, get it?)

(image) [more]

Subs in VBA: calling and exposing

Fri, 23 Jun 2017 12:24:13 GMT

I rassled a bit recently with a couple of dumb issues when creating some Word macros, so I thought I'd better write these up for my own future reference. To be clear, "dumb" here means that I should already have known this stuff, and I wasted time learning it.

1. Calling subroutines

I was trying to call a sub like this:
`Sub SomeMacro    SomeOtherSub(p1, p2)End Sub`
Word got so mad about that `SomeOtherSub` call:

(image)

Turns out that when you call a subroutine in VBA and pass parameters, you do that without parentheses:
`SomeOtherSub p1, p2`
The parameters can be positional, as here, or named. For the latter, use the `:=` syntax:
`SomeOtherSub p1:="a value", p2:="another value" `

2. Exposing subroutines (implicit access modifiers)

Here was another kind of bonehead mistake I made. I wrote a subroutine sort of like this:
`Sub MyMacro(param1 As String, param2 As String)    ' Code hereEnd Sub`
Then I tried to actually run this macro (Developer > Macros). The macro stubbornly refused to appear in the Macros dialog box. If I was in the macro editor and pressed F5 to try to launch it in the debugger, Word just displayed the Macros dialog box for me to pick which macro to run, but again, did not display the actual macro that I actually wanted to run.

Anyway, long story short (too late, haha), the problem was that the `Sub` definition included parameters:
`Sub MyMacro(param1 As String, param2 As String)`
[more]

Paste unformatted text in Word

Wed, 19 Apr 2017 14:35:11 GMT

Another quick post about Word, primarily for my own benefit (when I forget this later).

Word has several options for how you can paste text:

(image)

They are (in order):
• Keep Source Formatting. This option keeps the original formatting (both character and paragraph formatting), but converts it to direct formatting.

• Merge Formatting. This option copies basic character formatting (bold, italics, underline) as direct formatting, but does not copy any paragraph formatting.

• Use Destination Styles. This option copies the text and applies styles that are in the target document. (This option appears only if there matching styles in the target doc.)

• Keep Text Only. This option copies the text as plain text, with no formatting.
I need the last one (paste plain text) more often than any of the others, so I want it on a keyboard shortcut. You can do this by recording a macro of yourself using the Keep Text Only option. But I realized there's an even easier way—just assign a keyboard shortcut to the built-in `PasteTextOnly` command.

I keep forgetting that most anything Word can do has a command. If a gesture requires just one command, you can assign a keyboard shortcut directly to it. Maybe writing this out will help me remember.

Word macros for displaying styles in the Styles pane

Mon, 14 Mar 2016 00:01:22 GMT

This is another in a series of blog posts about how I configure Microsoft Word, which I add here primarily for my own reference.

I often use the Style pane, and within that pane, I often want to change the styles that are displayed. Sometimes I want to see all the styles; sometimes just the styles that are defined in the current document; sometimes just the styles currently in use.

You can change this display by using a dialog box. In the Styles pane, click the Options link, and then use the dropdown lists to select which styles to display and how they're ordered, like this:

(image)

But that can get to be an annoying number of clicks if you're switching between these display options frequently. So, macros to the rescue. I recorded myself making one of these changes, then created a couple of variations to give me the different displays I want. Here are the macros I currently use, where the sub name is (I hope) self-explanatory:
`Sub SetStylesPaneToAllAlphabetical()    ActiveDocument.FormattingShowFilter = wdShowFilterStylesAll    ActiveDocument.StyleSortMethod = wdStyleSortByNameEnd SubSub SetStylesPaneToInCurrentDocument()    ActiveDocument.FormattingShowFilter = wdShowFilterStylesAvailable    ActiveDocument.StyleSortMethod = wdStyleSortByNameEnd SubSub SetStylesPaneToInUse()    ActiveDocument.FormattingShowFilter = wdShowFilterStylesInUse    ActiveDocument.StyleSortMethod = wdStyleSortByNameEnd Sub`
To complete the picture, I map the macros to these keyboard shortcuts:

ctrl+shift+p,a`SetStylesPaneToAllAlphabetical`
ctrl+shift+p,c`SetStylesPaneToInCurrentDocument`
[more]

AutoFormat in Word

Tue, 08 Mar 2016 00:23:08 GMT

I have used Microsoft Word for years—decades—but hardly a week goes by when I don't learn something new. (Including things that are probably pretty well known to others, oh well.) Anyway, TIL about how to use the batch version of auto-formatting in Word. Since I think a lot of people already know this, I'm adding the information here primarily for later reference for myself.

Word has settings to perform "auto-formatting as you type." These include things like converting quotation marks into so-called smart quotes (i.e., typographical quotation marks), converting double hyphens (--) into em-dashes (—), converting typed fractions (1/2) into typographic fractions (½), etc. You set these options in the AutoCorrect dialog box: File > Options > Proofing, AutoCorrect Options button, AutoFormat As You Type tab.

It turns out that Word can also apply these auto-formatting instructions after the fact. In the same AutoCorrect dialog box, there's a tab named just AutoFormat:

(image)

This has most of the same options as with auto-format-as-you-type. Here's the neat part: you can get Word to apply these formatting options by pressing alt+ctrl+k. There's no UI gesture, but you can use the feature for customizing the ribbon to add the relevant command to the ribbon or Quick Access Toolbar.

A use case where I can see this working pretty well is if you paste text in from a text editor. (I do this all the time.)

More on ambigious "should"

Tue, 12 Jan 2016 09:04:43 GMT

Quote:

If you're going to require it; don't say "should", say "must".
This set off an interesting discussion on the semantics of should in this context. I've written about this before, so I was interested to hear how people interpreted the example.

Here is a sampling of the more serious posts on the thread:

From the requirements document: "The password entered by the user should be rejected if it does not contain at least six characters." If I received that requirement from my boss, I would make darn sure that the password is rejected. I don't think I would randomly reject some and not others.

The software is being polite; it's anticipating users who do not like being told what to do.

If it says "should" then it is not optional, like in "could". You should be "this tall" to ride this ride.

A number of people pulled out dictionary definitions (Wikitionary, heh). And one person cited RFC 2119 ("Key words for use in RFCs to Indicate Requirement Levels"), which states:

MUST This word, or the terms "REQUIRED" or "SHALL", mean that the definition is an absolute requirement of the specification.

[more]

Traffic wiz, traffic viz

Sun, 28 Dec 2014 21:30:43 GMT

I found an interesting intersection recently of two things I think about a lot. One is traffic, a topic of perennial interest to me. The second is data visualizations, something that I'm comparatively new to but very interested in.

Let me back up slightly. Not long ago (maybe in 2013?), the state of Washington introduced variable speed limits in a some areas that are prone to congestion, like on I-5 northbound approaching Seattle:

(image)
[source, license, cropped slightly and reduced]

I was traveling with someone (my daughter, I think) who asked "Does that work?" To which my answer was that it could, if people actually obeyed these variable limits[1]. (Which they don't at all.) What's the theory?

On their website, the state explains variable speed limits this way:
Ideally, approaching traffic will slow down and pass through the problem area at a slower but more consistent speed reducing stop and go traffic. By reducing stop and go traffic we’re also reducing the probability of an accident by giving drivers more time to react to changing road conditions. This helps drivers avoid the need to brake sharply as they approach congestion.
Hmmm. This sort of describes the theory, but only in general terms. I also found the following on a different state site, which explains the theory even less, but does include a curious bonus reason (emphasis mine) for variable speed limits:
[more]

Playing with the Tumblr API: Part 3

Thu, 16 Oct 2014 09:52:10 GMT

Carrying on with adventures using the Tumblr API. (Part 1, Part 2)

As noted, I decided that I wanted to create a local HTML file out of my downloaded/exported Tumblr posts. In my initial cut, I iterated over the list of `TumblrClass` instances that I'd assembled from the downloaded posts, and I then wrote out a bunch of hard-coded HTML. This worked, but was inflexible, to say the least—what if I wanted to reorder items or something?

So I fell back on yet another old habit. I created a "template" of the HTML block that I wanted, using known strings in the template that I could swap out for content. Here's the HTML template layout, where strings like `%%%posttitle%%%` and `%%%posturl%%%` are placeholders for where I want the HTML to go:
`    %%%posttitle%%%    %%%postdate%%%    %%%posttext%%%    %%%postsource%%%            target="_blank">%%%posturl%%%    [%%%postcounter%%%]         %%%posttype%%%    `
The idea is to read the template, read each `TumblrClass` item, swap out the appropriate member for the placeholder, and build up a series of these blocks. Here's the code to read the template and build the blocks of content:
[more]

Wed, 01 Oct 2014 21:17:28 GMT

I wonder how many people do this. Let’s say I’m reading something on Wikipedia, and a paragraph includes a link that’s seductively drawing my attention away from the current article. In a show of resistance to ADHD, I won’t just click that link—instead, I’ll Ctrl+click it, thus opening the linked page in another tab “for later.”

After some amount of reading, I’ll have, oh, a dozen tabs open in the browser:

(image)

Or 20. Or 30. In another exhibit of discipline, I will occasionally drag all of these open tabs from the many and various browser windows I have open into a single browser window. Now, that’s organized.

Perhaps it’s the “for later” part that I’m wondering about. I just checked some of the pages in those tabs in the screenshot. As near as I can tell, the oldest one goes back about three months. Here’s a sampling of the pages I currently have open:
• The Tumblr API reference
• Three (!) articles on time perspective.
• The article “Complements and Dummies” by John Lawler, a linguist.
• An article on high-impact training in 4 minutes.
• An article on how to create effective to-do lists.
• An article on how to adjust the aim of the headlight on a motorcycle.
• The syllabus, wiki, and video page for a Coursera course I’m taking.
• A Wikipedia article about the 1952 steel strike (related to the previous).
You can see that these are all pages that I want to keep handy, ready to read when I get a few spare minutes.

[more]

Playing with the Tumblr API: Part 2

Sun, 21 Sep 2014 12:14:34 GMT

This is part 2. (See part 1.)

Previously on Playing with the Tumblr API:

“I have a Tumblr blog …”
“Tumblr’s search feature is virtually useless …”
“However, Tumblr does support a nice RESTful API …”
“I wanted to build an HTML page out of my posts …”

As I described last time, once you’ve registered an app and gotten a client ID and secret key, it’s very easy to call the Tumblr API to read posts:
`http://api.tumblr.com/v2/blog/mikepope.tumblr.com/posts/text?api_key=secret-key`
This API returns up to 20 posts at a time. Each response includes information about how many total posts there match are that your request criteria. So to get all the posts, you make this request in a loop, adding an offset value that you increment each time, and stopping when you’ve hit the total number of posts. Here’s one way to do that in Python:
`import json request_url = 'http://api.tumblr.com/v2/blog/mikepope.tumblr.com/posts/text?api_key=key'offset = 0posts_still_left = Truewhile posts_still_left:    request_url += "&offset=" + str(offset)    tumblr_response = requests.get(request_url).json()    total_posts = tumblr_response['response']['total_posts']    for post in tumblr_response['response']['posts']:        # Do something with the JSON info here    offset += 20    if offset > total_posts:        posts_still_left = False`
[more]

Playing with the Tumblr API: Part 1

Wed, 17 Sep 2014 22:43:41 GMT

I have a Tumblr blog where I stash interesting (to me) quotes and citations that I've run across in my readings. Tumblr has some nice features, including a queue that lets you schedule a posting for "next Tuesday" or a date and time that you pick.

(image)

## Tumblr Woes

However, Tumblr’s search feature is virtually useless, which I sorely miss when I want to find something I posted in the distant past. As near as I can tell, their search looks only for tags, and even then (again, AFAICT) it doesn't scope the search to just one (my) blog.

In theory, I can display the blog and use the browser's Ctrl+F search to look for words. Tumblr supports infinite scroll, but, arg, in such a way that Ctrl+F searches cannot find posts that I can plainly see right in the browser.

When search proved useless, I thought I might be able to download all my posts and then search them locally. However, and again AFAICT, Tumblr has no native support for exporting your posts. There once was a utility/website that someone had built that allowed you to export your blog, but it's disappeared.[1]

## APIs to the Rescue

However, Tumblr does support a nice RESTful API. Since I've been poking around a bit with Python, it seemed like an interesting project to write a Python script to make up for these Tumblr deficiencies. I initially thought I'd write a search script, but I ended up writing a script to export my particular blog to an HTML file, which actually solves both of my frustrations—search and export/backup.

Like other companies, Tumblr requires you to register [more]

Show/hide revisions in Word 2013

Thu, 09 Jan 2014 23:13:26 GMT

I just installed Word 2013 and was disappointed to note that some of the long-standing keyboard shortcuts no longer work. For example, I've been using `Alt+V,A` for years (decades?) to invoke an ancient menu command to toggle between hiding and showing revision marks. Even when they introduced the ribbon and the menus went away, a lot of those old menu-command shortcuts still worked. And some still do; but this particular one no longer does, darn it.

I spent a little while trying to map keystrokes to the show-revision and hide-revision commands in the Review tab. Either I'm not finding them or (as I believe) there's no longer a single command to toggle show/hide of rev marks in the way I've come to rely on.

So, macro time. Using the macro recorder and some editing, I created the following macro and then mapped `Alt+V,A` to it. Macros are stored in `Normal.dotm`, so as long as that remains available I should be good. (Right?) However, I'll have to update `Normal.dotm` on each machine on which I install Word 2013.

Update 2016-03-06: For the "hide revisions" section, I changed `wdRevisionsViewOriginal` to `wdRevisionsViewFinal`. This macro always shows the "final" version, but toggles whether rev marks are displayed.

Perhaps there's an easier mapping for this functionality. If this macro thing doesn't work out, I'll investigate further.
```Sub ShowOrHideShowRevisions()    If ActiveWindow.View.RevisionsFilter.Markup = wdRevisionsMarkupNone Then        ' Hide revisions        With ActiveWindow.View.RevisionsFilter            .Markup = wdRevisionsMarkupAll            .View = wdRevisionsViewFinal        End With    Else        ' Show revisions        With ActiveWindow.View.RevisionsFilter            .Markup = wdRevisionsMarkupNone [more]

```

Terms of venery, IT style

Mon, 25 Mar 2013 11:36:47 GMT

Everyone knows about a herd of cows and a clutter of cats and a murder of crows, right? These are called collective nouns or terms of venery. (The latter, more interesting, term refers to hunting, should you be wondering.) Many such terms are listed here, here, and on Melanie Spiller's site.

For fun the other day, we came up with terms of venery for the many species that can be found in the world of IT. Herewith our list. Can you come up with more?

A compilation of programmers
A unit of testers
A click of QA engineers
A spec of program managers
A package of builders
A deployment of SysOps -or- A distribution of SysOps
A bundle of network engineers
A row of DBAs
An interface of UX designers
A lab of usability testers
A triage of Helpdesk engineers
A pixel of graphic artists -or- A sketch of graphic artists
A meeting of managers
A retreat of general managers
A scribble of writers -or- A sheaf of writers
A revue of editors (haha) -or- A scrabble of editors
A project of interns
An oversight of auditors
A tweet of tech evangelists
A quarrel of patent lawyers

Contributors: me, David Huntsperger, Peter Delaney, Scott Kralik

Hurray, new & improved technology! What do you tell users?

Wed, 13 Mar 2013 09:02:44 GMT

Imagine that you're a music company in about 1984. For many decades you've been selling vinyl records, and then along comes this newfangled "compact disc" business. It's obvious to your company that this is the future, and your audiophile customers are all excited. But your everyday customers are confused: are you going to stop making records? Are they supposed to replace their enormous record collections with CDs? And what about the whole ecosystem that's grown up around records: record stores, stereo manufacturers, even furniture makers ... what do you tell them?

(image) I've lived through similar scenarios in the software industry multiple times: the company devises a new technology—not just an update to your already successful releases, but a new approach. As with the record company, tho, it's rarely easy to simply pull the plug on your old stuff, since many of your customers are heavily invested in your old technology.

If you're the documentation person under these circumstances, you have a tricky job. If the new technology is sufficiently different, you can create a brand-new documentation set from scratch for the new technology. (The documentation sets for record players and CD players have very little shared information.)

But it's not always that clean a break. Consider a database product where the new technology is an innovative search syntax. Everything else about the database (storage, backup, etc.) is the same; you just have a new way for users to craft their queries. Moreover, the old query syntax still works.

Too often, what ends up happening is that writers add a section to the existing documentation that describes the new technology. This "solves" the problem. Hey, now we have two technologies! We've documented both of them!

But what do your users actually need?

Rocket Science for Beginners

Thu, 31 Jan 2013 10:31:33 GMT

The title of this entry does not, as far as I know, reflect an actual book title. But based on something I saw today, maybe it could. Here's an article I saw today on the ArsTechnica site:

Keep it secret, keep it safe: A beginner's guide to Web safety

I was initially interested, because although I am more-or-less conversant with the basics of safe browsing—using wifi safely at a coffee shop, for example—there are certainly other people in our household who might value some tips "for beginners" about how to use the web safely.

Then I actually read the article. Here are a couple of examples of advice for those beginners:
Clicking the browser's padlock icon while visiting Facebook, for example, gives us the most relevant information about the certificate and its encryption algorithms: the certificate has been signed by VeriSign and the connection uses TLS 1.1 with 128-bit RC4 encryption.

[...]

If you want to roll your own [VPN] server, you can use free software like OpenVPN (or, for Mac users, the VPN server included in the \$20 OS X Server package).
Frankly, I'm not really sure how grateful my wife would be to learn these things.

(image) Obviously, the issue has to do with the term "beginner." It's not actually clear to me who exactly the author had in mind as a beginner, but it's not my wife, or my kids, or a bunch of other people who are perhaps not quite ready to examine the certificate chain for the current session.

[more]

The case of the bouncing emails

Sun, 27 Jan 2013 12:19:57 GMT

Here's a way not to make friends and not to influence people: hand out your personal email address everywhere and then discover that the address is merrily bouncing people. Whoops.

I taught a class over the last couple of Saturdays and told folks they could send their homework to me at `mike@mikepope.com`. On Wednesday I got an email from a student telling me that the email address I had handed out wasn't working. (The student had managed to find me via a different channel, thank goodness.) I tried sending an email to the address I'd distributed, and sure enough, back it came.

The keeper of my domain (mikepope.com) is GoDaddy. As part of registering my domain and getting them to manage it, I'd gotten "free email forwarding" for the domain. When someone sends email to the mikepope.com domain (e.g., mike@mikepope.com), the message is forwarded to my other, "real" email addresses.

Some months ago, I started getting a steady volume of messages to my real email addresses that told me an email had bounced, often with the message "invalid recipient address." The strange thing was that these were bounces for emails that I had never sent. This turns out to be a well-known problem—spammers forge a From address on their spam mail (they don't want you to reply, they just want you to click the link in the email they send). Spammers use many, many different forged From addresses in their attempts to get around spam-detection strategies. Apparently the `mike@mikepope` address had fallen into the hands of just such a spammer.

[more]

Outlook! Stop sending messages on Ctrl+Enter!

Thu, 10 Jan 2013 18:34:24 GMT

If you're like me and you use Outlook and you're a bit of a sloppy typist, you've probably inadvertently sent messages off by fat-fingering `Ctrl+Enter`. By default, this keystroke performs a Send operation, and boy, can that be annoying.

Turns out there's an easy fix. (To Outlook, not to your typing.) I got this from someone on the web, I think it was. (Alas, I don't remember, so my apologies to whoever that was.) In Outlook, click File > Options. In the Options dialog box, click the Mail tab, then scroll down to Send messages and uncheck (Ha! Take that!) the option CTRL + ENTER sends a message. Here's a picture:

(image)

This works for Outlook 2010 for sure, and probably (?) for Outlook 2007. I can't speak for earlier versions.

Guard cat on duty

Wed, 03 Oct 2012 06:39:27 GMT

I'm working in a new job, and I was surprised not long ago to get an email from one of our senior developers that read something like this:[1]

`To: [whole group]From: [senior developer]Subject: I love kittens because they're fluffy`

This would be one of yer more wtf new-job moments. A few minutes later we got this:

`To: [whole group]From: [senior developer]Subject: re: I love kittens because they're fluffyI stepped out of my office for 30 seconds and I was in the office next door!`

(image) There was a reasonable explanation for all this, as it turned out, which involved security. Every company has security policies for computer use, of course, and larger companies might have dedicated IT folks who enforce such policies. One way they might enforce policies is to perform security audits of people's workspaces. For example, has someone written their password on a yellow note and stuck it on their monitor? Fail.

Another policy that the security folks might audit is the practice of locking your workstation when you step away from your desk. Obviously, if you walk away from an unlocked machine, anyone can jump on your computer and start hunting around for sensitive information.

Even a vigilant security audit team, however, can't watch everyone every minute. But I happen to work with a bunch of security-minded developers, so a protocol emerged that if they could catch you with your workstation unlocked, you were fair game to have a fluffy-kitten email sent from your computer. Our senior developer guy, in spite of his protestations, had been caught sneakily when he stepped out for the quickest of conversations.

[more]

Key remappings in Word

Tue, 11 Sep 2012 16:55:45 GMT

This is a blog post just to record the key remappings I do in Microsoft Word 2010. (It is probably not of interest to most people.)

I've found that it speeds up revisions tremendously to map keyboard shortcuts to the commands in Word that you use to find, accept, and reject revisions and comments. As a bonus, I don't like that the traditional Find key in Word 2010 is mapped to some sort of Navigation pane (where traditional Find is available under Advanced Find). So I map Ctrl+F as well. As I say, this is primarily for my own reference.

Display Find/Replace dialog box`EditFind`Ctrl+F
Find next revision or comment`NextChangeOrComment`Ctrl+Shift+F
Accept current change`AcceptChangesSelected`Ctrl+Shift+A
Reject current change`RejectChangesSelected`Ctrl+Shift+R

Decoding programming book titles

Fri, 10 Feb 2012 07:54:04 GMT

Time again for some Friday Fun.  Ok, you know how they say that you can't judge a book by its cover? Well, I have a theory that you can make a pretty good judgment about a programming book by its title. See what you think.

The [Language] Programming Language
The Ruby Programming Language, The SQL Programming Language
The authors are really hoping you'll think that they've written their language's version of The C Programming Language, aka K&R. Not much chance that their books are a slim 250 pages like the original, eh?

[Language] in a Nutshell
Python in a Nutshell, VB & VBA in a Nutshell
Reference docs.

Programming [Language] or Pro [Language]
Programming Visual Basic 2008, Pro ASP.NET MVC Framework
[more]

It's a miracle, but it isn't perfect just yet

Tue, 10 Jan 2012 00:06:49 GMT

One of my tasks over the last few years has been to whittle down our collection of CDs, after of course ripping them. I use Windows Media Player for ripping, which has been quite satisfactory. In fact, more than satisfactory. I have fed innumerable CDs into my machine, and time after time, across a wide range of genres and for CDs going back 25+ years, WMP has blithely displayed the CD title and list of tracks.

This actually is quite amazing, if you think about it. I can start up a CD that I distinctly remember buying 27 years ago, and WMP figures out what it is and then goes out to ... somewhere ... to bring back album art and a track listing. (Try that with your vinyl or cassette tapes, ha.) When I was working my way through the pop/rock and jazz CDs, I don't think it ever failed to find the right CD and track listing. I think the only flaw I ever found was that it would retrieve CD cover art that was for a slightly different edition of the CD.

Now I'm ripping classical CDs, and here I begin to detect that this technology is not exactly, entirely perfect. What I'm realizing (after doing exactly zero research about this) is that WMP is leveraging a wee bit of crowdsourcing in order to come up with track listings.

For example, I put in a Dvorak CD that was an old Sony reissue on the "Essential Classics" label. WMP found the CD, no problem, but this is what it came up with for a track listing:

(image)

Oops. A DGG recording by Helene Grimaud was tagged by someone who I think must have intended to come back later and finish:

(image)

This RCA recording was tagged by someone who could not be bothered to repeat all of that stuff for every movement, good golly:

[more]

Dennis Ritchie, technical writer

Fri, 14 Oct 2011 08:54:01 GMT

Dennis Ritchie, the co-inventor of Unix and of the C programming language, died this week. There are many, many eloquent tributes to Dr. Ritchie, who was both a seminal figure in computer science and, it seems, a nice guy.

Among his accomplishments, as people note, was thtat Ritchie was an excellent writer. Here's the New York Times:
“There was a remarkable precision to his writing,” Mr. Kernighan said, “no extra words, elegant and spare, much like his code.”
Of course, this is most evident in what might be the most famous programming book, namely The C Programming Language, which Ritchie wrote with Brian Kernighan:

(image)

The book is widely regarded [more]

Twitter: the cocktail party of the web

Sun, 18 Sep 2011 11:41:34 GMT

The appeal of Twitter is hard to explain, and the non-Twitterati tend to think of it as an endless stream of banal observations about uninteresting activities. There certainly is that, and if that's what you're seeing from someone's tweets, by all means, don't follow them.

(image) An O'Reilly whitepaper (PDF) from 2008 observed that Twitter might have gotten off on the wrong foot with its prompt "What are you doing?", which invited just the kind of uninteresting flow that Twitter critics complain about. As the article goes on to observe, a better prompt might have been "What are you paying attention to?", which would lead people to respond by posting tweets about events they're attending, work they're doing, or links to stuff they've found interesting on the web. (Twitter has since changed its prompt to "What's happening?", which probably is not a great improvement on the original, at least from this perspective.)

There's no "right" way to tweet. Still, people who are particularly good with Twitter can blend these types of consciousness in ways that are both natural and interesting. This leads to what the whitepaper refers to as "ambient awareness":
Twitter is more and more becoming a key player in the attention economy, distributing comments about what its users are paying attention to, what they have opinions about, and what they have expertise in.

Today I ran across a comment in a thread on the Language Log in which a tweeter (specifically Ben Goldacre, whose tweets were being sliced and diced mercilessly) made this offhand observation that I think captures this blend of the sublime and ridiculous:
[more]