Welcome to MSDN Blogs Sign in | Join | Help

Foreign languages can be used to impede communication

One of the reasons people give for studying a foreign language is to increase the number of people one can communicate with. But what people don't mention is that foreign languages can also be used to impede communications, and that can be just as useful. (Be careful, though, because it can backfire.)

During my visit to Sweden some years ago, I was walking back to my hotel room from the Göteborg train station. I had spent the afternoon visiting the nearby city of Alingsås, whose claim to fame is that they are the birthplace of the man who introduced potatoes to Sweden, although he is probably more greatly celebrated for introducing a related process to Sweden: the technique of fermenting potatoes to make alcohol. Anyway, the reason I was there was not to learn the history of potatoes in Sweden, but rather to pay a visit to one of my Swedish readers.

Oh, wait, I was telling a story. I was walking back to my hotel from the train station, and as I crossed one of the plazas, a man approached me, speaking unaccented American English. He said, "Hey, you look Chinese. We have an organization for Chinese people, and the meetings are conducted in Swedish so you can understand!"

Okay, let's see if we can add up everything wrong with this situation.

  1. We're in Sweden, and I "look Chinese", so he decides to speak to me in English?
  2. He's speaking English in order to convince me to attend a meeting conducted in Swedish.
  3. If I'm Chinese, wouldn't "the language I can understand" be, um, say, some variation of Chinese?

I didn't feel like pointing this out to the gentleman. I just wanted to get back to my hotel, but he kept following me, repeating his spiel. I stopped and mentally enumerated the languages I knew how to speak.

  • English: Obviously he knows English. He's speaking it.
  • Swedish: We're in Sweden. There's a chance he knows Swedish.
  • German: Göteborg gets a lot of German tourists. The tourism signs and tour buses are trilingual: Swedish, English, and German. So there's a chance he knows German.
  • Chinese: Seeing as he's assuming that I'm a native Chinese speaker, yet he's speaking to me in English, it's a pretty safe bet that he doesn't speak Chinese. Especially if I pick a minority dialect.

I turned to him and said in my parents' native dialect, "I'm sorry, I don't know what you're saying."

He was apparently not expecting this, because he paused for a moment before saying "Oh, Thai people are welcome, too." I guess he took what I said and tried to map the phonemes to English and somehow came to the conclusion that I said, "I'm not Chinese; I'm Thai."

I merely reiterated my claim not to understand what he was saying and continued onward. He decided not to follow me any further.

I use this technique whenever I don't want to talk to somebody. And the trick works both ways: In Taiwan, when people try to talk to me and I'd rather not deal with them, I speak Swedish.

Posted by oldnewthing | 12 Comments
Filed under:

You can use a Coke slogan as your password, but not a Pepsi one

When Larry Osterman mentioned News Flash: Spaces are legal characters in both filenames and passwords, I was reminded of my own little experiment with passwords and spaces.

Over a decade ago, I tried using spaces in my password, and they were accepted, but I ran into a different problem: Brand name bias.

The password system accepted "Coke adds life" as my password, but it rejected "Pepsi the choice of a new generation". Why did the password system accept a Coke slogan but not a Pepsi one? Hint.

Posted by oldnewthing | 12 Comments
Filed under:

The New York Times says I'm doing it all wrong, but maybe that's for the better

Some time ago, The New York Times ran a story titled In Web World of 24/7 Stress, Writers Blog Till They Drop, which mentions that "those on the lower rungs of the business can earn as little as $10 a post."

Dude, if that's what people on the lower rungs earn, then I'm below ground level! (Nevermind that just the previous month, an article in The New York Times wrote about the business of blogging: Don't expect to get rich.)

Then again, I probably shouldn't complain, seeing as what most people took away from the article was that blogging kills.

Slate's Timothy Noah noted in his article Death by Blogging that the New York Times article employs a magic phrase which, once it appears, is a signal to the reader that the subject matter of the story is completely made up:

Give Richtel credit for admitting high up in the story that what follows is purest fancy. Newspaper reporters call these caveat-rich passages "to-be-sure grafs."

The "to-be-sure" paragraph appears as paragraph number six:

To be sure, there is no official diagnosis of death by blogging, and the premature demise of two people obviously does not qualify as an epidemic. There is also no certainty that the stress of the work contributed to their deaths. But...

It opens with the magic phrase that says "What you are reading in the remainder of this article is complete fantasy," then adds a few more statements saying that "None of what this article says is true." And then, as if to say, "Let's not let facts get in the way of a good story," it immediately resumes the fabrication with a "But..."

Posted by oldnewthing | 13 Comments
Filed under:

2009 mid-year link clearance

Time for the semi-annual link clearance.

And, as always, the obligatory plug for my column in TechNet Magazine:

Posted by oldnewthing | 15 Comments
Filed under:

Microspeak: The plan for the plan

I ran across an old document that contained a phrase I hadn't heard before:

The Plan for the Plan for the XYZ Team

Summary

XYZ is at ZBB and we are now at a recall class only bug bar until RTM. The team has also started working on a plan for a plan to address the requests made from the XYZ Leadership Team several months ago. Details of the planning ...

...

3. Bob would like a more concrete plan for a plan. Milestone breakdowns, entry/exit dates, etc...

...

Plan for a Plan

We established some deliverables to begin creating the plan for a plan:

Development/Design Code Review
Due date: Next week
Prerequisites: Dev work items

Alice will drive this to get sanity checks from other developers about overall design.

...

There's a lot of Microspeak in that snippet. We've got ZBB, recall class, deliverables, to drive, and the phrase for today: plan for a plan/the plan.

The phrase "plan for a plan" makes me think that you're trying to decide how you're going to decide what you're going to to. This is different from "early stages of planning", because when you're in the early stages of planning, you're actually planning something, even though you're still in the exploratory stage. On the other hand, planning for planning sounds like you don't even know how to plan, and you have to go learn how to do it again.

It reminds me of that Dilbert cartoon where Dilbert taunts the pointy-haired boss by suggesting that it would be rash to have a premeeting without planning it.

Posted by oldnewthing | 10 Comments
Filed under: ,

Learning to lie: Early forays

Some time ago, I was visiting a family with small children, and I found the two-year-old middle child with a marker in her hand suspiciously close to some fresh marks on the living room couch. The following conversation ensued:

"Who drew on the couch?"

My older sister.

"Your older sister isn't home."

The baby.

"The baby can't reach this."

The dog.

"You don't have a dog."

Posted by oldnewthing | 25 Comments
Filed under:

If you want to consume all the virtual address space, well, then go ahead and consume it, you don't need my help

Commenter Matthew Chaboud asks if there's an easy way to consume all the virtual address space below 4GB, short of, well, actually allocating it. "It seems like there should be a cleaner way to do this."

If you want to consume all the virtual address space, then call VirtualAlloc until you turn blue. Programs shouldn't care what address they get back from a memory allocation function; they should handle values below 2GB and above 2GB with equal facility.

It's not like there's a ConsumeAllAvailableVirtualAddressSpaceAndExhaustTheHeap function. (Is there a AllocateAllRemainingDiskSpaceAndFillExistingFilesWithZeroes function?) What would be the point of such a function? Once you call it, you have run out of memory!

If Mr. Chaboud is talking about keeping programs away from bottom 4GB of virtual address space on a 64-bit machine, then a much easier way to do this is to set the AllocationPreference configuration setting to specify that memory should be allocated from high addresses first. (But I don't think that's the scenario that prompted the original question, because on 64-bit Windows, the default heap is above the 4GB boundary, so there would be no need to exhaust the heap in order to consume the memory at virtual addresses below 4GB.)

Correction: Pavel Lebedinsky points out that the default heap is below 4GB on 64-bit machines. It used to be above the 4GB boundary on earlier versions of 64-bit Windows, but I guess they changed it.

Posted by oldnewthing | 9 Comments
Filed under:

The thread that gets the DLL_PROCESS_DETACH notification is not necessarily the one that got the DLL_PROCESS_ATTACH notification

The thread that gets the DLL_PROCESS_DETACH notification is not necessarily the one that got the DLL_PROCESS_ATTACH notification. This is obvious if you think about it, because the thread that got the DLL_PROCESS_ATTACH notification might not even exist any longer when the DLL is unloaded. How can something that doesn't exist send a notification?

Even so, many people fail to realize this. You can't do anything with thread affinity in your DLL_PROCESS_ATTACH or DLL_PROCESS_DETACH handler since you have no guarantee about which thread will be called upon to handle these process notifications. Of course, you're not supposed to be doing anything particularly interesting in your DLL_PROCESS_ATTACH handler anyway, but things with thread affinity are doubly bad.

The classic example of this, which I'm told the Developer Support team run into with alarming frequency, is a DLL that creates a window in its DLL_PROCESS_ATTACH handler and destroys it in its DLL_PROCESS_DETACH handler. Now, creating a window in DllMain is already a horrifically bad idea since arbitrary code can run during the creation of a window (for example, there may be a global hook), but the lack of a thread guarantee makes it downright insane. The DLL calls DestroyWindow in its DLL_PROCESS_DETACH handler, but since that notification comes in on a thread different from the one that received the DLL_PROCESS_ATTACH notification, the attempt to destroy the window fails since you must call DestroyWindow from the same thread that created it.

Result: The DLL's attempt to destroy its window fails, a message comes in, and the process crashes since the window procedure no longer exists.

Posted by oldnewthing | 11 Comments
Filed under:

News flash: Children are influenced by advertising

Anything in a McDonald's wrapper tastes better, according to children ages 3 to 5. Even something like carrots taste better if you put them in a McDonald's wrapper or cup.

Posted by oldnewthing | 27 Comments
Filed under: ,

First, try reading the error message, episode 2: Even programmers see error messages without reading them

I will occasionally note that users don't read error messages; they just click Cancel. And the phenomenon isn't just restricted to naïve users. Even programmers ignore error messages. All they see is "Blah blah blah an error occurred."

For example, there's this message that appeared on a peer-to-peer discussion group:

I tried to submit an update to our database and I got this error. What does it mean? Is the error on the client or the server?

Opening transaction 34508.
Locking record 14 for update.
Updating record 14 in table BLUECHEESE.
Operation failed.
write: The file or directory is corrupted and unreadable.

When I try to view the record to see whether my update made it, I get this error:

The database may be corrupt; it requires administrator attention.
To protect the database, it has been taken offline.

I'm no expert here, but it looks like a write operation failed because the file or directory is corrupted and unreadable. Since you're updating a record on the server, it's probably a corruption problem on the server. (After all, there's no change taking place on the client. The client is just asking the server to do the work.)

And the second error message seems to suggest that the database may be corrupt and requires administrator attention. As a precautionary measure, the database took itself offline so the corruption can't spread. I'm pretty sure that's a server-side thing, since the database is on the server.

Posted by oldnewthing | 22 Comments
Filed under:

Spam trackback attack week 3 statistics

The people who run this site think they have a handle on the trackback spam attack that raged for three and a half weeks. All the bad IP addresses have been blocked, and hopefully we didn't lose any babies with the bathwater.

Here are the statistics for the final wave:

Site From To Count Rate (pings/hr)
www.englishsoftware.info 6/10/2009 02:56 AM 6/10/2009 02:56 AM 1
accounting.financenewstoday.com 6/10/2009 08:34 AM 6/10/2009 08:34 AM 1
blog.a-foton.ru 6/10/2009 09:20 AM 6/10/2009 09:20 AM 1
castironbakeware.info 6/11/2009 07:20 PM 6/11/2009 07:57 PM 27 42
backyardshed.info 6/11/2009 07:59 PM 6/11/2009 08:11 PM 3 10
weakbladder.info 6/12/2009 03:51 PM 6/12/2009 05:48 PM 38 19
greenteafatburner.info 6/12/2009 06:00 PM 6/12/2009 08:02 PM 89 43
besteyecreamsite.info 6/12/2009 08:04 PM 6/12/2009 09:02 PM 33 33
jointpainreliefs.info 6/12/2009 09:07 PM 6/12/2009 10:12 PM 28 25
insomniacuresite.info 6/12/2009 10:19 PM 6/13/2009 12:00 AM 92 54
insomniacuresite.info 6/13/2009 12:49 AM 6/13/2009 12:56 AM 5 34
menopausereliefsite.info 6/13/2009 12:58 AM 6/13/2009 01:33 AM 15 24
cellulitecreamsite.info 6/13/2009 01:43 AM 6/13/2009 03:38 AM 159 82
toenailfungusite.info 6/13/2009 03:39 AM 6/13/2009 05:09 AM 109 72
hairgrowthproducts.info 6/13/2009 05:11 AM 6/13/2009 06:00 AM 61 73
quickdietsite.info 6/13/2009 06:02 AM 6/13/2009 07:24 AM 114 83
outdoordecoration.info 6/13/2009 02:26 PM 6/13/2009 03:23 PM 41 42
onlyoutdoorrugs.info 6/13/2009 04:20 PM 6/13/2009 04:46 PM 21 46
ebeanbagchair.info 6/13/2009 05:33 PM 6/13/2009 05:48 PM 10 36
homelightingconcept.info 6/13/2009 06:42 PM 6/13/2009 07:02 PM 32 93
firepitidea.info 6/13/2009 08:08 PM 6/13/2009 08:27 PM 35 107
wheelbarrowstyle.info 6/13/2009 09:19 PM 6/13/2009 09:25 PM 13 120
barstoolsite.info 6/13/2009 10:25 PM 6/13/2009 10:48 PM 25 63
gardendecordesign.info 6/13/2009 11:46 PM 6/14/2009 12:02 AM 23 83
fancyporchswing.info 6/14/2009 01:17 AM 6/14/2009 01:27 AM 16 90
thestoragebench.info 6/14/2009 02:52 AM 6/14/2009 03:21 AM 31 62
www.baby-parenting.co.uk 6/14/2009 03:22 AM 6/14/2009 03:22 AM 1
thestoragebench.info 6/14/2009 03:23 AM 6/14/2009 03:29 AM 8 70
gardenstatuesgalore.info 6/14/2009 04:30 AM 6/14/2009 04:54 AM 21 50
adirondackchairshub.info 6/14/2009 06:06 AM 6/14/2009 06:40 AM 40 69
cutebirdbaths.info 6/14/2009 07:46 AM 6/14/2009 08:10 AM 22 53
patiocushionsource.info 6/14/2009 09:16 AM 6/14/2009 09:23 AM 15 120
patiosetsite.info 6/14/2009 10:04 AM 6/14/2009 10:04 AM 2
edebtsettlementprogram.info 6/15/2009 09:51 AM 6/15/2009 10:27 AM 27 43
mydebtconsolidator.info 6/15/2009 12:29 PM 6/15/2009 01:46 PM 81 62
debtsolutionsnow.info 6/15/2009 04:52 PM 6/15/2009 06:21 PM 69 46
einternetmarketingtools.info 6/15/2009 09:04 PM 6/15/2009 09:53 PM 33 39
www.baby-parenting.com 6/15/2009 09:53 PM 6/15/2009 09:53 PM 1
einternetmarketingtools.info 6/15/2009 10:01 PM 6/15/2009 10:43 PM 26 36
unemploymentofficeresource.info 6/16/2009 12:25 AM 6/16/2009 01:20 AM 51 55
workfromhomecareer.info 6/16/2009 04:10 AM 6/16/2009 06:26 AM 89 39
blog.a-foton.ru 6/16/2009 09:29 AM 6/16/2009 09:29 AM 1
fixmycrediteasily.info 6/16/2009 06:23 PM 6/16/2009 07:43 PM 56 41
lowcostcarinsurances.info 6/16/2009 09:15 PM 6/16/2009 10:12 PM 100 104
topalternativedating.info 6/16/2009 11:58 PM 6/17/2009 01:10 AM 115 95
buildesignwebpage.com 6/17/2009 06:07 PM 6/17/2009 06:08 PM 4 180
patiosetsite.info 6/17/2009 07:03 PM 6/17/2009 07:24 PM 10 26
patioumbrellasource.info 6/17/2009 08:31 PM 6/17/2009 09:08 PM 34 54
buildesignwebpage.com 6/17/2009 09:12 PM 6/17/2009 09:12 PM 3
thebasketballhoop.info 6/17/2009 11:30 PM 6/18/2009 12:01 AM 43 81
pooltoysite.info 6/18/2009 01:31 AM 6/18/2009 02:20 AM 111 135
imagesarchive.org 6/18/2009 04:23 AM 6/18/2009 04:23 AM 1
buildesignwebpage.com 6/18/2009 02:06 PM 6/18/2009 02:06 PM 1
outdoordecoration.info 6/18/2009 08:53 PM 6/18/2009 09:43 PM 47 55
onlyoutdoorrugs.info 6/18/2009 09:51 PM 6/18/2009 10:13 PM 18 46
ebeanbagchair.info 6/18/2009 10:13 PM 6/18/2009 10:27 PM 7 26
homelightingconcept.info 6/18/2009 10:30 PM 6/18/2009 10:55 PM 47 110
firepitidea.info 6/18/2009 10:55 PM 6/18/2009 11:17 PM 55 147
wheelbarrowstyle.info 6/18/2009 11:18 PM 6/18/2009 11:27 PM 29 187
barstoolsite.info 6/18/2009 11:28 PM 6/19/2009 12:00 AM 86 159
gardendecordesign.info 6/19/2009 12:00 AM 6/19/2009 12:26 AM 57 129
fancyporchswing.info 6/19/2009 12:27 AM 6/19/2009 12:43 AM 32 116
thestoragebench.info 6/19/2009 12:43 AM 6/19/2009 01:29 AM 84 108
gardenstatuesgalore.info 6/19/2009 01:30 AM 6/19/2009 01:56 AM 38 85
adirondackchairshub.info 6/19/2009 01:56 AM 6/19/2009 02:34 AM 69 107
cutebirdbaths.info 6/19/2009 02:36 AM 6/19/2009 03:03 AM 38 82
patiocushionsource.info 6/19/2009 03:04 AM 6/19/2009 03:12 AM 16 113
patiosetsite.info 6/19/2009 03:13 AM 6/19/2009 03:27 AM 5 17
patioumbrellasource.info 6/19/2009 03:36 AM 6/19/2009 04:08 AM 14 24
thebasketballhoop.info 6/19/2009 04:15 AM 6/19/2009 04:46 AM 43 81
edebtsettlementprogram.info 6/19/2009 06:28 AM 6/19/2009 07:10 AM 35 49
mydebtconsolidator.info 6/19/2009 07:14 AM 6/19/2009 09:10 AM 216 111
debtsolutionsnow.info 6/19/2009 09:14 AM 6/19/2009 11:24 AM 151 69
wireless-mouse.info 6/20/2009 06:14 PM 6/20/2009 06:14 PM 1
blog.a-foton.ru 6/22/2009 08:16 AM 6/22/2009 08:16 AM 1
Posted by oldnewthing | 10 Comments
Filed under:

Yet another experiment in motivating people to find and fix bugs

Everybody has probably heard about some project where management decided to motivate testers and programmers by rewarding testers for finding bugs and programmers for fixing them. In the absence of high ethical standards, this can devolve into the situation known to Dilbert fans as I'm gonna write me a new minivan.

I experimented with this idea once, over a decade ago. Well, not exactly this idea, but a variation of it: For each bug in my code which I fixed, I paid the tester who found it.

The risk here would be that I would intentionally resolve bugs as INVALID (or WONTFIX or anything other than FIXED) in order to avoid paying the penalty for fixing them, but I like to think that I made my decisions on their technical merits rather than based on my pocketbook. Since the tester saw the bug resolution, there was a degree of oversight: If I used bogus bug resolutions to avoid the bug fixing penalty, the tester would just reopen the bugs. The amount of the reward varied based on the quality of the bug, so that encouraged testers to focus on finding good bugs instead of weenie ones.

I think I paid out a few dozen bug rewards. (It was a small project.)

Posted by oldnewthing | 11 Comments
Filed under:

Oh great, and my phone even has a CPU meter

These fancy-dancy IP phones never cease to make me wonder what our world has come to. I remember when a telephone was a bucket of carbon granules and a momentary switch, and the rotary dial was just a mechanism for going on and off hook at a precise frequency. (Indeed, sometimes for fun, I'll pulse-dial a phone by tapping on the hook.)

The other day, somebody sent out an email message:

I'm amusing myself watching the "CPU Load" graph on the phone. Then again, I'm easily amused.

Naturally, the CPU meter is useless, because you can only switch to it when you're not using the phone. Once you pick up the handset, the CPU meter dismisses itself so you can see information about the call you're on.

Oh wait, you can go through the menus to switch back to the CPU meter after it auto-dismisses itself. Woo-hoo, now I can tell people, "Sorry, can you talk slower? My phone's CPU is maxing out."

This what-barely-qualifies-as-amusement didn't last long. A year later, the units were replaced with a different model phone that didn't have a CPU meter. Progress.

Posted by oldnewthing | 33 Comments
Filed under:

High school students guess what happens to money deposited into checking accounts

In August 2007, the results of the first nationwide high school economics graduation tests were released. (Download the report [pdf].) It appears that the results were better than expected, but let's not celebrate too quickly: The results were that 42% of students rated "Proficient" and 3% "Advanced". And only 52% of the students could answer this multiple-choice question correctly:

What happens to most of the money deposited in checking accounts at a commercial bank?
  1. It is used to pay the bank's expenses.
  2. It is loaned to other bank customers.
  3. It is kept in the bank's vault until depositors withdraw the funds.
  4. It is paid to owners of the bank as return on their investment.

I guess 48% of the students have never seen It's a Wonderful Life.

Posted by oldnewthing | 37 Comments
Filed under:
More Posts Next page »
 
Page view tracker