Thursday, December 24, 2009

Sandisk Pulls a Sony Rootkit. News at 11.

My brother just bought a Sandisk flash drive, planning to put some sort of cute auto-run holiday greeting on it and give it as a white-elephant gift (the greeting would be a surprise to the recipient, but it would remove itself after first run so as not to be annoying). He stuck the drive into his computer and it installed some crazy junk onto his hard drive. Hoisted by his own petard, I guess. But here's the nature of what it installed:

  • There's a small partition that Windows recognizes as a virtual CD-ROM drive for some reason. On this partition is the autorun script that installs the junk onto your hard drive. Because it's detected as a virtual CD-ROM you can't delete or modify it easily from Windows.
  • If you manage to delete this partition from the drive and zero-out the whole thing, then put it in a Windows machine that already has the software installed on it, the software re-installs the partition onto the flash drive.
  • The software that's installed on your hard drive isn't installed as a service and isn't registered with Add/Remove Programs. So it can't be disabled un-installed through any of the standard channels. There is an un-install feature within the software itself. I'm not really sure I'd trust it.

The takeaways:

  • Sandisk: This is evil. And Sandisk (or whoever wrote the software) knows it. When you're writing software that you intend to be genuinely useful to users you don't install without permission, you don't make it hard to delete, you don't make it come back when the user clearly wants it gone. You do this because you want the software running and the user probably doesn't.
  • Microsoft: Why still autorun CDs without confirmation? Why allow flash drive partitions to show up as CDs? Why make it so ridiculously hard to disable autorun (apparently the obvious controls don't always work on Vista/7 and you have to use Group Policy Editor or Regedit).
  • People: If you must run Windows, disable auto-run. If Mac has an auto-run feature, disable that. If one of the Unix desktops wants to do auto-run, disable that. It's a mind-numbingly stupid idea from a security perspective.
</soapbox>

Sunday, December 20, 2009

Denver Airport Concourse Comparo!

Yesterday while waiting for a connecting flight in Denver Airport with Jess I realized that I've spent an unreasonably large portion of my life waiting for connecting flights in Denver Airport. When Jess suggested that we find food my first thought was, "There's no good vegetarian food in this concourse. Let's go to the United concourse." And thus the Denver Airport Concourse Comparo was born.

Concourse A

  • Airlines: Frontier (17 gates plus several more in the small-plane area operated by Lynx), Continental (3), JetBlue (2), AeroMexico/Air Canada/Lufthansa (sharing 2 gates), British Airways, Mexicana, Midwest, AirTran, Alaska, Frontier JetExpress, Great Lakes (several in the small-plane area)
  • Food (constraints: cheap-ish, fast, vegetarian): The only place to get quick vegetarian food in the A Concourse is Panda Express, and there your choice is basically lo mein and... more lo mein. Oh, yeah, there's some place called Lefty's with some vegetarian stuff, but they're on my blacklist from a previous trip for only serving breakfast food at 8 AM. THIS IS AN AIRPORT, PEOPLE! TIME HAS NO MEANING HERE! That's what pushed me to the Panda Express... I'm sure breakfast exists in China, and maybe even breakfast food, but in America Panda Express will sell you mushy lo mein all day. Um, where was I? Concourse A has Hope's Cookies, which are OK. No trendy coffee joints, but apparently there's a Quiznos with espresso and a full bar.
  • Centerpiece Art (There is lots of public art in Denver Airport, and much of it is in the terminal, which is outside the scope of this comparo; I'm limiting myself to the centerpieces around the tram stations and vertically above): On one side twisted train tracks through a desert; on the other a semi-flattened globe anchored by structures evoking satellite dishes or grandstands. There's some kind of museum exhibit on the mezzanine level, but it's not memorable.

Comments: Frontier is a pretty good airline but its concourse is the worst in the airport.

Concourse B

  • Airline: United (16 bazillion gates), United Express (7 bazillion gates in each small-plane area).
  • Food: There's a pretty good quick Mexican place on the second level. Lots of variety. There's a TCBY. Annoying hipsters and chipper businessdroids rejoice: B Concourse has a Coffee Beanery, a Seattle's Best, two Starbuckses, and a Caribou Coffee. There's something called Pour la France. I didn't know la France was a liquid.
  • Centerpiece Art: There is a sculpture of an astronaut down in the tram station. The motorized walkway continues through the center area, leaving room only for some random neon squiggles and some arches, like something out of that crazy walkway in O'Hare from the United concourse to baggage claim.

Comments: B is the biggest and busiest concourse. This last time there was an enormous Crocs stand on the upper level. It's the most mall-like of the concourses (but not even approaching DFW). The art is not so hot, the crowds are crowdy, this concourse ranks in the middle.

Concourse C

Concourse C is the concourse you're not supposed to know about. It's really a top-C-cret military base. Say it out loud: top-C-cret. And they thought they could get away with it. If you want to figure this stuff out you have to think like they think. See the patterns.

  • Airlines: I guess the army or whoever it was (CIA? WTO? Illuminati?) put up fake airlines and stuff there: 12 gates for "Southwest" and another 5 for "Northwest" and "Delta". Like I believe that -- worst fake airline names ever, amirite? It's rounded out by "US Airways" and "American", which are almost as obvious. We didn't see no planes take off, that's for sure. Oh, and they put the whole concourse in a TIME VORTEX.
  • Food: There's a TCBY in there. Not as big as the one in B. And some place that claims to have tamales, we haven't tried them.
  • TIME VORTEX: When you enter the TIME VORTEX you see spinning pinwheels. When you leave the TIME VORTEX you see flashing lights and a swinging sickle. A++++++ very good TIME VORTEX. Would TIME VORTEX again.
  • Centerpiece Art: It's this awesome decayed garden. Only the truly enlightened can see it, which is how it got so decayed: most people can't even see C Concourse at all, let alone the garden, so nobody can maintain it. Hell, I have it on good word the President's secret puppet master himself can only see the garden through a shard of a mirror once belonging to his puppetmaster. I am on to something for sure!

Comments: Jess and I just took the tram here to see what it was and it opened our eyes. They paged Jess over the intercom, so she picked up an information phone and dialed the number for "paging". Except that's for when you want to page someone else, so she hung up and dialed information. They said the page was actually for a "Jessica Mylan", not her. We got the message loud and clear: we know you're here and we're watching. So we went to a gate for a "Southwest" flight to San Francisco and sat and waited. We started talking one of the people at the gate. An agent or a dummy? We introduced ourselves as Jessica Mylan and Billy Philbert. He said, "Didn't they just page you, over the intercom?" The agent at the gate called for boarding. Nobody lined up. We got the hell out of Concourse C.

Friday, December 18, 2009

Fiiiiinally.

OK, here's the recording of the concert, nicely broken into tracks and with dead spots mostly cut out: LINKY.

Some things came out better than others, but for a first time doing this sort of thing, and for a concert where I am doing most of the instrumental parts on instruments I barely know how to play, we did OK. I just need to find a band where I can play harmonica or clarinet (or bass, even, if I don't have to actually keep rhythm or do anything important).

I don't know why...

...but Stravinsky's Symphony of Psalms, from the first time I heard it, always felt right. Like something I'd heard before, but not (which I think was sort of the point). It's one of my favorite pieces of music of all time (ZOMG I think I should update my Facebook to reflect this fact). I cleaned out one of John's old receivers a bit ago and now I can listen to it again. I can't listen to Stravinsky on headphones.

Anyway, now that I have some speakers I will get back to cutting up the library concert and try to post it before leaving for Chicago. I really lost momentum after Thanksgiving. More later.

Wednesday, December 16, 2009

Spam comments

In case any of the spambots posting comments to my blog are sentient and understand English, I'd like to point some things out.

  1. Nobody reads my blog (at least not at the blogspot address that the comments are posted to)
  2. I get notified of comments to my blog by email and I delete every spammy one.

You're wasting my time and yours by posting spam to my blog. It would probably be better if you stopped.

Personally I find it hard to hate spammers. Well, a lot of them, at least. I'm currently in the middle of a frustrating and difficult job search. But I know that it's possible for me to find a job in my chosen field with a stable employer. A lot of people get involved in the spam business because that's not possible for them. Some are clever programmers that, because of where they live and their language skills, don't really have an opportunity to work for "legitimate" software companies. Many others may not even be that -- they're just people playing demanded roles in a global market with enormous wealth disparities. The entry costs for spamming are so low compared to the entry costs for other global business models that it's really no surprise people turn to spam. If we in the USA are annoyed by it we should get involved in micro-loans or something.

Really, the worst offenders are educated people from rich countries. This blog post will get mirrored on Facebook, so I'll use Facebook as an example. Get people to sign up all their friends through Facebook. Now they're a captive audience. If you quit Facebook because of its ludicrous policies on privacy and advertising you're quitting all your friends (who can't be bothered to remember your email address anymore). So nobody ever leaves, even when Facebook makes unpopular decisions -- and they can do this because they have near-total control over your data and the software you access it with. This is the best contribution Mark Zuckerberg could make to the world with his Harvard education. To me that's a lot more scummy than what 419 scammers do, and about on par with most Craigslist scams.

Tuesday, December 15, 2009

¡Tan embarazado!

After making my last post I was thinking about why it bothers me so much that JavaScript uses braces for blocks but doesn't use those blocks for variable scope. I think the reason is that the braces are a false cognate. Braces mean the same thing in many popular languages, and JavaScript uses them in identical contexts to mean something different. We have false cognates, of course, in natural languages. My favorite is from Spanish, where embarazada means pregnant, not embarrassed. But in a programming language, designed deliberately by people, we should try to avoid this stuff, right?

Actually one of the most confusing false cognates I've seen as a programmer is the static keyword of C and C++. There are three major ways to allocate memory for a variable: static, dynamic, and automatic (these terms apply to all languages, not just C). In C global variables are allocated statically and local variables automatically (you can also allocate automatic variables using alloca() on many platforms -- this allows automatic allocation of structures and arrays whose size is not known at compile-time). Memory can be allocated dynamically using malloc() and free() (new and delete in C++). That's all fine. Here's where it gets tricky: you can apply the static keyword to both local and global declarations.

For local declarations this makes sense; they're allocated automatically by default, but if you modify the declaration with static they are allocated statically instead. The scope is still limited to the block in which they're declared, but the lifetime is the full lifetime of the program. For global declarations it does something totally different: it prevents the symbol name from being exported (it limits the visibility of the name of the variable or function to other code in the same object file, although you can export the resources manually using pointers, a common strategy to achieve polymorphism in abstraction layers).

Then C++ comes along and overloads static yet again. By default class member variables have dynamic linkage and functions have static linkage. This basically means that every instance of the class gets its own copy of the variables but shares the same functions. The static keyword lets you declare variables with static linkage; they are statically allocated and thus must have a global definition, as member functions typically do. Similarly, the virtual keyword lets you declare functions with dynamic linkage (this isn't as cool as it is in languages with first-class functions, but it's useful enough).

The real problem, out of these three uses, is C's use of static to limit symbol visibility for globals. Because it's by far the most common use of static, C programmers refer to static variables and static functions when talking about the visibility of their symbols, not their allocation or linkage, using a term that really has nothing to do with visibility at all...

... which is just so pregnant!

Someone with sense behind the wheel!

As much as I rip on Javascript, it's good to know that there are people working on it that want to solve some of its big problems. See this talk by this dude.

TL;DW version:

  • He understands that scope is JavaScript is wrong (given that all the languages that use braces for blocks have block scope), and wants to fix it similarly to how Perl did, extending the language.
  • He cares about the fact that binary floating point numbers can't exactly represent powers of 1/10. But recognizes that JavaScript probably isn't the best place to fix it.

That's basically all I care about, at least.

Wednesday, November 25, 2009

It being two days before a race...

... I ran my standard two-days-before-a-race workout today: 3x400m with 3-minute interval (surrounded by the typical warm-up and cool-down stuff). The idea is to run very fast; Mr. Newton always instructed us to run each one 2 seconds faster than the one before. So my "very fast" times? 74, 71, 70.

I've been working in more speed workouts lately, and I'm certainly not slacking off on those days, but I am just slow right now. Between the altitude and the cold-weather clothing I don't think that's an awful workout, but I should be able to run faster than that! I'm really not sure what's up.

Wednesday, November 18, 2009

Neato source grepper!

I don't think this is anything too novel, but I just came up with this function for my ~/.bashrc to make grepping through source trees easier. Typically I egrep -nr $REGEX $PATH, but then the results are polluted with vim backup files and sometimes object files. With this little function in place I can simply agrep $REGEX $PATH and get none of that junk:

agrep()
{
local argstr=
local first=1
local i=
for i in "$@"
do
if [ $first = 0 ]; then
argstr="$argstr"'\0000'
else
first=0
fi
argstr="$argstr$i"
done

echo -ne "$argstr" | xargs -0 egrep -nr | egrep -v '~:[0-9]+:|^Binary file'
}

I suppose the caveat is that if you program in a language where constructs matching ~:[0-9]+: are legal this could filter out some source. Entering stream-of-consciousness... Of course, even in C/C++ they're legal within strings. Hm. Filtering the output like that to filter files is brain-dead, using find to filter files up front would be better... but then you'd hit the command-line length limit... I bet someone has written a tool for this... probably using Perl... Leaving stream-of-consciousness

Indeed, there is ack. And, of course, it's in Perl. It is way better than my little bash hack.

EDIT: It turns out that I totally missed missed two options to GNU grep that would have saved me the trouble of writing anything but an alias: -I (short for --binary-files=without-match) and --exclude='*~' to get rid of those vim files. At least I got to learn how xargs works.

Thursday, November 12, 2009

BUMPER STICKER

I need a bumper sticker for an experiment. Specifically, I need a bumper sticker that says, "Barack Obama is not a socialist. I am." Then I'll put it on my car, park it on a street that's public but not in plain view of everything, and see how long it goes before being vandalized.

You typically think of graffiti/vandalism as an urban thing... I've actually seen some in Wyoming, just, like I said, not in places people walk every day. Out of town a few miles on the dirt roads where I go running, people leave their mark.

Also, they shoot holes in road signs. It's funny -- if I saw holes shot out of a speed limit sign in Chicago I'd get the hell out of wherever I was (is that true? I don't remember ever seeing that in Chicago but I can't be sure...), but it doesn't register the same way here (it also might not register, say, out by the Indiana border, around Lake Calumet, near the Ford plant, in Hegewisch? Because that whole area is basically central Illinois with Chicago addresses. Speaking of which, and I've mentioned this before, Monee is on the address grid). I guess Wyomingites with guns point them mostly at animals. Animals that aren't human. It's a small distinction that makes every bit of difference when you are, in fact, a human.

Which is an odd coincidence, to be sure...

Monday, November 2, 2009

California budget

DISCLAIMER: I lived in California for a year. I have lived in Wyoming for less than that. Therefore I'm a total expert on this stuff. Oh yeah.

It's fairly well-known that California has high state income taxes and is currently in an enormous budget crisis. Meanwhile Wyoming has no state income tax and is not doing nearly as badly. Economic conservatives blame California's high government spending. Moralists blame Californians' "sense of entitlement", as if it's somehow different from other places in that regard. But there are some other reasons California has a harder budget situation than most states. Here goes.

1. California's Federal balance of payments. California pays more money to the Federal government than they get back in Federal spending. The report states that a large part of this is due to California's relative wealth and youth compared to the rest of the nation. But the chart on California's share of US population, tax burden, and Federal spending still shows that California gets less federal money than its population would suggest. The report also suggests that the census might undercount California's population share. I can't find a very detailed report like that for Wyoming, but this report shows that in 1998 Wyoming received much more non-defense spending per person than California. Because California's cost of living is higher, the cost of equivalent projects in California is higher (because labor, materials, and land are more expensive). California's mean income, adjusted for this, is probably still higher than the national average, and thus it should carry a higher mean tax burden, and probably should have a negative balance of payments. But overall Federal spending per person should not be so far below the national average.

My understanding is that Federal spending on roads, for example, often winds up skewed towards rural roads that are the only connection between towns. In Montana they put up signs near road construction projects showing the percentage of the project funded by Federal, State, and local taxes. My experience with these signs has all been very recent (and thus been affected by the Federal stimulus package and its spending on infrastructure), and they all show projects dominated by Federal spending.

2. California faces significant challenges that many other states don't. California is home to some of the richest people in America, but also has a large poor population. Public schools in California have the challenge of educating students that come in speaking very little English at a much higher rate than most states.

3. California's state government does things that other states' don't, and some of those things benefit the whole country. I can think of a few very easily. California's public university system is the best in the nation. That's to be expected, as it has the biggest population and economy of any state. But it goes beyond that. According to the US News and World Report College Rankings (there's no perfect way to rank universities, but this is at least an attempt) 17 of the top 50 Universities in the US are public, and 6 of those are in California (Cal-Berkeley, UCLA, UCSD, UC-Davis, UC-Santa Barbara, and UC-Irvine). Berkeley is the highest-ranked state school, at #21 overall, and UCLA is tied for second with Virginia, at #24. Berkeley and UCLA each have lower out-of-state tuition than any school ranked higher, and are a bargain for residents. Only one other state, Virginia, has more than one state University in the top 50 (UVA and William and Mary).

Another is the California Air Resources Board (CARB). CARB came about in 1967, before the Federal government's Clean Air Act and continues to set tougher pollution standards than the Feds. It's the only such state agency that's allowed to exist, and since all new cars sold in the US today meet its standards, it's helped to keep the air clean throughout the nation.

4. California is politically primed for budget problems. First, California's state legislature is really polarized. I'm talking about the chart at the bottom of the post. California has the most liberal Democrats, the most conservative Republicans, and nobody in the middle. Meanwhile they need 2/3 of the legislature to pass a budget or tax increase. Oh, yeah, and property tax revenues are artificially low thanks to Prop 13 and the shady activities of property owners trying to evade reassessment when remodeling or selling their homes.

Prop 13 was, obviously, directly the result of a ballot question. The supermajority rule is in the California Constitution, but attempts to lower the requirement (i.e., to 55% in 2004) through ballot questions have failed, making it indirectly the result of a ballot question. California is one of the most democratic states in the country, with many important questions on spending falling directly to voters, and to some degree Californians have expressed their "sense of entitlement" through these choices (not that I think people in other states would do any differently), only to see them cause problems in the future. A smaller example that I witnessed first-hand is continuing voter support for VTA light rail in Santa Clara County without rider support (the lack of ridership makes it a huge money hole).

Saturday, October 31, 2009

mingw32, wine, library paths

Here is yet another thing I'm posting here just because Google searches turn up this blog sometimes and it might help someone save some time. Audience is people building Windows binaries on Linux with the mingw32 cross compiler and testing them in Wine. I do this sometimes for work on the Audacity project, which with a few minor modifications builds nicely with mingw32 -- it doesn't work exactly like a VS compile, but it lets me test wxMSW behavior, which is sometimes useful.

So you're running Linux, you've set up a mingw32 cross compiler (on Ubuntu just get all the mingw32 packages), and built some libraries with it. And you've built programs that use those libraries. But all the libraries are installed in places like /usr/i586-mingw32msvc/lib and /usr/local/i586-mingw32/lib. As far as I can tell, as of Wine 1.0, to get Wine programs to see libraries in those locations is to add them to PATH in a registry key. Typically Wine is configured so that your Unix root shows up at drive Z. So run regedit and go to HKLM/System/CurrentControlSet/Control/Session Manager/Environment and add to PATH, for example, ;Z:\usr\i586-mingw32msvc\lib;Z:\usr\local\i586-mingw32\lib (your paths may vary).

You'll also need to install the mingw32 runtime DLL to your Wine, which is usually something like gunzip -c /usr/share/doc/mingw32-runtime/mingwm10.dll.gz > ~/.wine/drive_c/windows/system32/mingw10.dll.

If you don't like having Z: point at root (for some people it's good for Wine to be highly integrated -- others would rather have it as far from their normal system as possible) you can point drives specifically at your library paths using winecfg, or other similar tricks. Symlinks from within ~/.wine/drive_c might be another appealing option.

Monday, October 5, 2009

Perl and JavaScript

I made a comment in my last post that I thought deserved more comment: "here, as usual, doing it right means doing it like Perl". I do like Perl a lot, but I came to it quite late in the game. In the beginning it wasn't much better suited to writing large programs than bash.

For a long time, C required that all variable declarations go at the top of a block. PHP, well, PHP is still a ridiculous mess, but it's getting better. To quote Pat V., "It's painful to watch PHP make all the same mistakes Perl made 10 years ago." C++ compilers still have some compatibility issues, but even a young guy like me remembers a time when it was even worse, where many compilers barfed on simple template code and the STL was slow and unreliable in many installations. And I can only imagine those poor early Lisp programmers that had to use S-expressions for everything... OK, scratch that last one.

All these languages had the freedom to get better. The programmer that wanted better features could get a new compiler or interpreter; the one that wanted his old code to work could stick with the old version. The language developers could break compatibility and improve the language because programmers had this power. The programmer didn't have control of processor or library bugs on user machines, but those things are usually taken pretty seriously. Adoption of better web standards can take a lot longer, and as long as old browsers are still around they have to be recognized and coded to. About all you can do is add. It wouldn't be hard to give JavaScript variables block-level scope and extent, but it would be really hard to get that adopted.

Sunday, October 4, 2009

Enlighten me on JavaScript

I am learning JavaScript because it will likely be a useful language for me in the future (it is a very popular language, and since I don't really want to move back to Silicon Valley it's hard to find jobs using languages I like). And there are things I just don't quite understand about the way it was designed, both about the language and about the DOM. I am open to the fact that there are things I just don't know about; I'm just a beginner. If anyone has good answers to any of these (meaning ways to make programming simple things as easy as they should be), let me know.

1. Why did they make the string concatenation operator the same as the numerical addition operator? In C++ using many string classes they're the same. But in C++ variables have types, so you know exactly what you're getting by looking at the types. In Perl variables don't (usually) have types, but the set of operators for numerical and string operations are completely different, so you know exactly what you're getting by looking at the operators. In JavaScript if you aren't sure what your variables' types are you have to do coerce them (unary + and concatenating an empty string are the easiest ways I know of). It's ugly and inconvenient, so people aren't as careful as they should be, and it bites them.

And, yeah, I have some idea why they may have done it. They wanted to keep all the C-style operators intact, and they use up so many symbols that you have to overload them. I don't think it's all that good of an excuse. It's nice that C-style syntax is familiar to lots of people, but honestly, who cares about bitwise operations in JavaScript? Few enough people that they could have just been made functions. As a C programmer learning JavaScript, trust me, it would not have been an obstacle to my learning the language.

2. How do you "pass-by-value" into anonymous functions? Yeah, closures are wonderful, in some unusual cases. But what if I want to just use the value? This is arguably more common than actually wanting a closure; for example, when creating anonymous event handlers that use the iterating variable of a for loop. To do this relatively simple thing you can create an external function taking the values as arguments and returning a function enclosing the copied arguments. Or you can use (function(a){return function(){doSomethingWith(a)};})(i). Which is, as Geordi La Forge says of Data's poetry, "clever". What it isn't is readable or easy to understand. Especially when so many of the people writing JavaScript aren't CS majors.

EDIT: One more note about this. This would seem to be a general problem in languages with closures, but it's not really so bad in some others. I don't know most of the languages that seem to generate most of the closure chatter (Lisp, Python, and the .NET languages) well enough to quickly test this, but I do know Perl, which does indeed have closures. Perl's lexical variables have block-level scope and extent, so you can enclose the iterating variable's current value by declaring one within the loop and using that in your anonymous function. JavaScript only has function-level scope/extent, so you can't do that -- you have to replicate the functionality with an immediately-executed anonymous function. Kool-Aid drinkers say it's a testament of JS's flexibility; I say it's a pain in the ass. As for the other languages, the Internet knows! Reportedly modern VBScript has block-scope variables with function extent, which strikes me as bizarre; C# does it right (here, as usual, doing it right means doing it like Perl). Python doesn't have block-level scope, and Lisp lets you have any kind of scope/extent you want; a let variable would give you what you wanted as long as the let was inside the loop. C and C++, of course, do it right, but they don't have closures. So it's a mixed bag.

3. Using the nice, proper DOM event functions, how do you replace one anonymous event handler with another? Why, addEventListener and removeEventListener, of course! But removeEventListener requires a reference to the handler you want to remove. So all those nice anonymous ones I just created? Useless. I have to keep track of them. It's nice that this makes it really easy to have multiple handlers for every event. But, again, that is an unusual thing to need. They've taken care of the unusual need and not the normal one. Yeah, there's the older onclick style, but I'm pretty sure it's deprecated now.

4. Why is there no call to clear all the children of a DOM node? Instead you have to write your own loop for it. It's not hard to write but it's a waste of time and an opportunity to make mistakes.

Saturday, September 26, 2009

More Dispatches from Cody

1. There is currently a big fire in Yellowstone (about 50 miles away). The air is smoky and even the nearby mountains are obscured. Apparently smelling smoke is one of the things that makes people most nervous; Jess says she is in "fight-or-flight" mode. Fortunately I got back from running before the smoke got really bad.

2. There are several useful things in Powell.

3. Jess: I hate our bathroom door with a passion.
Al: I hate it dispassionately, coolly, reasonably.
Jess: Thesaurusly.
Al: With the fire of a thousand burning thesauruses.

Thursday, September 24, 2009

Public option? What about the removal of employer-based health insurance?

There has been a lot of debate recently about health insurance in the US, especially about the "public option", a government plan to compete with existing private ones. Personally, I'd rather see health insurance shifted from employer-based to individual-based than see a public option. I think employer-based health insurance has some important problems today that will only continue to get more important over time.

First, the assumptions I'm taking going in. Currently our health insurance system as a whole is performing poorly. Many people are uncovered, people that are covered are denied coverage without finding out until after the fact, and a hell of a lot of the total money put into health care goes to people that don't have a hell of a lot to do with getting people better. We don't get great value for our health care dollar compared to other countries, although there are factors beyond health insurance involved there. Malpractice lawsuits and insurance covering them are one, and another is the greater share of medical research and drug development costs that Americans pay. I'm not going to talk about those things here, although I think they're important.

Next, my outlook. I don't think private companies are fundamentally incapable of providing good health insurance. However, I think that under the current system there aren't a lot of incentives for them to. Bumper stickers say, "Freedom isn't free," and that's true of markets, too. Markets often need to be maintained and cultivated to remain free and competitive, and when they are, when competition is directed at solving problems with the right incentives, the market can yield more effective results than politicians.

My first big problem with employer-based health coverage is that it dulls competitive pressure. The current tax and benefit-structure situation (for most people) so favors employer-based coverage that your employer's plan has to be amazingly bad for you to be better off jumping to an individual insurer. You can only exert pressure through your employer. But threats to not take a job, or to leave your existing one, are either dangerous or hollow. Meanwhile there's lots of inertia in a company's choice of health insurers. There's only a very small incentive for insurers to provide good service; they only have to avoid publicity disasters, some of which they can mitigate by changing their name, logo, or slogan. Meanwhile they compete on how many claims they can get away with rejecting. Some of this can be changed without dumping employer health care: regulation can prevent rejecting claims for reasons like pre-existing conditions, for example. But the lack of incentive, stemming from lack of consumer choice, is inherent to an employer-based scheme.

While the first problem exists because the existing market is uncompetitive and poorly-maintained, the second problem is that employer-based health insurance distorts markets that are completely unrelated to health. Large companies get better deals, per employee, on their health insurance than do small companies. The stated reason is that large companies present a larger risk pool. That doesn't really make any sense. If the profile of workers and type of work is the same at each employer, each worker represents the same risk individually to the company, and the insurer's client base is the risk pool. If an employer represents, say, half of the insurer's client base, I can buy the idea that taking on all those clients reduces the insurer's exposure. But I believe that it's mostly just a volume discount.

Volume discounts exist in just about all industries. Wal-Mart gets better deals from its suppliers than anyone else because suppliers want that huge guaranteed chunk of business. This is, in my mind, basically fair. A large retail operation with an efficient supply chain and lots of volume has won itself an advantage over its competitors in its field of endeavor. Now consider large employers. Presumably they've become large because they're good at something and have established ways to profit reliably. So they have an advantage in terms of their ability to offer employees good salaries and benefits. They've earned that. But an employee of IBM doesn't get a better deal on bananas than an employee of Joe's Computer Shop. If both employers provided their employees with bananas IBM would probably get a better deal.

That's what happens in health care. It's not only harder for small employers to hire people because of their disadvantages in the industry, they also have to pay disproportionately higher health-care costs. This severely limits the pool of people that can found or work for start-ups. Large companies and small companies tend to specialize in different types of innovation. Large companies solve the hard problems that only they have the resources to solve. Start-ups figure out how to avoid solving hard problems by giving people what they want in a novel way. Their style of thinking often has to be creative and customer-based. If people with greater health care needs can't work for start-ups that makes it harder for talented people that aren't young single males to contribute to this kind of innovation.

The third problem is that the nature of employment is changing. In the past people expected their employer to be a stable presence in their life. These days people change jobs much more frequently. Changing health insurance is a nuisance for them, and could even be disruptive to ongoing treatments (including those of their dependents). People increasingly, in the field of computing, make a living on contract work. Should they be at a disadvantage purchasing individual health insurance? People increasingly work remotely, from different cities or states. Does it make sense for a person living in Kansas to get health insurance from a Kansas insurer with a Kansas network, or from his Florida-based employer? I haven't seen any evidence of these trends reversing, and there's no reason for people on the leading edge of them to carry a greater share of our nation's health-care burden.

De-coupling employment from health insurance would not solve many important problems in our health care system. It would not, inherently, bring us closer to universal coverage for children and those that desire it (the question of whether insurance should be compulsory is complex in itself, dependent upon other types of regulation, and independent of the type of insurance). It would not, inherently, stop insurers from denying claims frivolously (I think that more effective competition would help in this regard, though). It would not do anything about the non-insurance concerns that I mentioned earlier (malpractice costs and freeloading on research). It would, however, make market forces and competition work towards better insurance rather than worse.

Thursday, September 17, 2009

My middle name!

The TSA has decided it's now important that the name on your boarding pass when you fly matches exactly the name on the ID that you use, including middle names. Oh, cute, faceless government agencies can blog, too. Too bad there's no point (and it doesn't take two government investigations to figure that out).

In theory, boarding passes could be scanned and checked by security to make sure the name is the same as the person the ticket was booked for. Then a would-be faker would have to go through all the trouble of getting a fake ID. Or would have to know someone that looked similar...

I realize that many (most?) criminals kinda suck at what they do, and any minor security effort will thwart them. Still, this looks like a severe case of keeping honest people honest, and inconvenienced to boot. Maybe the government is just doing its part to help the airlines stamp down the second-hand ticket market that must be costing them dozens of dollars per year. Trying to do its part, that is. Badly.

And then there's all the "Papers Please!" complaints. "They still won't tell us which law authorizes ID checks", "The no-fly list is ineffective and a hassle", etc. They're all still right. See comments at the linked TSA blog, I should sleep or something.

Sunday, September 13, 2009

A picture from Cody

People in Cody are really into watering their lawns. And their sidewalks. If they didn't water them (the lawns) they'd die. Maybe the arid west needs different plants than the humid southeast.

Anyway, back in early June it snowed one day. This is a picture of the huge lawn surrounding the library the morning after the snow. The sprinklers went off like clockwork.

Thursday, August 27, 2009

Unemployment Sucks, Like You, Like Me.

I have removed the text of this blog post because it's public, and people might see it and get the wrong idea. You can probably find it archived somewhere if you really want to. Here's the deal.

I wrote a rather profane post in frustration at my job search. What really frustrates me about looking for jobs is all the ass-kissing and lying. I know when I apply for a job half the other applicants have inflated their résumés. I stood in line at a job fair in college while a young woman in front of me claimed she spent 120 hours in an average week on coursework (which leaves under 7 hours per day for sleeping, eating, and all that other stuff you need to do to function as a human being). Then she said she loved fast-paced work environments. Maybe if she got her work done at a faster pace she wouldn't have to spend so much time on it.

The posturing of the job search is totally ridiculous. Some job advice columnists want you to go at every employer like their company is your dream. There is a handful of companies that I would really love to work for because I think they do great and important work. There are others I wouldn't even apply at. At most jobs the relationship on some level is, "I'll do your dirty work and you pay me your dirty money." I'll do the best job I can, because, you know, why else bother showing up? I also know if I'm totally honest about that, I'll never be employed anywhere. I worked for a market research company studying direct mail marketing (mostly credit cards) when I lived in Chicago. I think most of their clients are absolute scumbags. I did a good job. They paid me. That's how it is sometimes; I don't think any of the programmers there had illusions otherwise, and I don't even think the research and marketing teams did. But anyone giving you advice on your job search will tell you that you'd better pucker up. "Direct mail is so fascinating, tell me more!"

I think that's really it. Job searching was and is frustrating. I hate feeling dishonest talking to people. And that's why I wrote that little rant that's now been erased.

Monday, August 24, 2009

Murderous Felines Magazine!

J: Luther just looks so cute with his big begging eyes.
A: But sometimes those eyes can be creepy... he'll tilt his head with a stiff, doll-like motion. Hello, I am Kitty Ruxpin, and I am going to kill you in your sleep..
J: Hey, I liked Teddy Ruxpin!

... the next morning ...

J (holding Rudy): Rudy is giving me his crazy eyes.
A: Rudy's crazy eyes say, "I'm going to kill you now." Luther's crazy eyes say, "I'm going to kill you... later."
J: Rudy is a cat of the present.
A: And Luther has patience. He knows life is long. His life, anyway.

Sunday, August 16, 2009

Why everyone likes classical music

Today Dan Linsenmann sent me this link, to a talk by Benjamin Zander. A cool performance, for sure, and I have some thoughts about it and its subject matter.

First, I don't know much Schenker, but I've heard enough about it to recognize that Zander's explanation of the Chopin prelude was at least along similar lines. One of the people that's explained Schenkerian analysis to me loves it and the other hates it. In this case, identifying the important notes and the simple descending pattern they follow allowed the audience to understand the structure of the piece. That was cool -- I think usually people can't follow the structure of classical pieces that they hear, and the phrases, even if they're beautiful, lose their direction and meaning in their minds. Understanding something about the overall structure changes that.

But the bigger thoughts I have are about the decline of classical music. He says that only 3% of people are really classical music fans; why is that and what does it mean? Is it something that can be changed by getting people to appreciate it, or does it have to do with the music itself?

Today we take for granted a split between the classical and pop music worlds. I assume that by classical music Zander means what is often today called "art music", which might come pretty close to the conception that people have of it. Highly-trained people making culture in a very formal setting. Even when the audience is sitting on folding chairs in a flat in Pilsen, basically the same ritual is performed. And pop music looks just the opposite. Enterprising people work out simple, catchy tunes and broadcast them using loudspeakers over the shouts of the crowd.

I have long thought that there was room for both of these kinds of music, but that what we have today is an even wider split than art vs. pop: academic vs. commercial. Much "important" art music today is incomprehensible to even very well educated people. As recently as 1913 audiences cared enough to fight and riot at the premiere of Le Sacre du Printemps; can anyone picture a classical audience rioting today? I saw a talk on and performance of John Cage's works when I was in college. Many of the people seated around me were School of Music students required to attend for one class or another, and most were skeptical or hostile to Cage's music. They whispered among themselves and one walked out. The speakers and performers went on and on about the triumph of Cage's music over the philistines that loudly bashed it in the 50s. Did they even suspect that most of the audience was only there for a grade? Or that maybe now, in the 21st century, the only reason people don't write scathing reviews of Cage anymore is that they don't care? On the other hand many pop stars are vapid corporate creations expressing nothing but record companies' profit motives. There's hardly any point in even talking about the music.

So we have the ivory tower and the corporate tower. But what's in between is not just a two-lane highway through a desert! It's not really so bad! There's really a pretty big metropolis built up around that corporate tower where musicians are really making music and people are listening. Abbey Road, Zen Arcade, Neon Bible, Quadrophenia, The College Dropout, Kid A, More Songs About Buildings and Food, just to name a few truly popular albums with substance, none perfect, all with something to say. It's made with multi-track recorders and guitars and stuff, and you don't necessarily sit still when you listen (although, as Benny Goodman observed, sometimes you do, even in the middle of a dance number). Commercial music fills many of the same roles that art music used to, and why shouldn't it? Our dominant mode of production is capitalism, and so we produce and consume culture in the same way. We the people have the money to fund our musicians (and/or the technology to rip off their work) and this is going to result in a different-looking musical culture than the Old-World tradition of composers supported by feudal lords. The Soviet system, while it lasted, had a distinct musical culture, although I don't know much about it. And then, of course, sitting beside these things in all societies, there is folk music, which to me is music that has more to do with family and community than modes of production.

Zander, in his talk, played two pieces, one by Mozart and one by Chopin. So nothing written in the last 100 years. But then again I didn't list any albums recorded in the last two years in my last paragraph -- I wasn't trying to be exhaustive and he certainly wasn't. I don't think it's a coincidence, though. It's clearly important to understand our history and appreciate great works of the past. It's just as important to take that same critical ear to present-day culture. Even if only 3% of people are classical music fans, many more than that listen closely to the pop music that's usually more relevant today. If everyone can understand a bit of Schenker and love a Chopin prelude, everyone can also also appreciate that Bowie, the Talking Heads, and Radiohead all used random processes in their songwriting, just like Cage, and made it listenable even.

Dispatches from Cody, WY

Al: Sorry, I seem to be in your way here.
Jess: Yeah, that corner seems to be the designated spot for doing stuff. We don't have a space problem so much as a space usage problem.
Al: It's just like the United States. All this land and everyone crowds on the east coast for some reason.
Jess: For no reason I can think of. It's muggy and full of bugs and snobs.
Al: I don't know, there might be some nice towns there. Some people like Hartford, CT* for example.
Jess: And some people like being spanked while they pee!


* Once I took an Internet Quizzie Thinger about which city I would be if I were a city, and the result was Hartford, CT.