Perhaps not a surprise...

But still disappointing.  According the Post, Democrats are preparing to cave in to the hostage-taking on the Right, and give in on just about everything.

I guess that means that there's no point in voting for Democrats, because they seem not to have even half a spine among them.  Not even when public opinion polls are solidly on their side.  Not even when they decisively win elections.  I guess that means elections don't have consequences, after all.

And I guess, since they're dropping all demands on the aristocracy tax, the rich today will stay rich forever.  Maybe it's just me, but that seems more than a little bit unAmerican.  Sad.


Should have checked the weather once more...

I looked at the weather for this morning yesterday sometime (early afternoon, maybe), and was planning to go shooting at dawn this morning.  Then I got out of bed, took my shower, and went to look for the paper (not delivered yet).  Looked like complete cloud cover.

Checked the weather; overcast.  Bleh.  Should have checked before taking a shower, I guess.


Evaluating cameras

DxOMark does a good job (not perfect; I wish they did a better job of getting things reviewed sooner) providing some basic benchmarking on cameras and lenses.  Some people seem to think that the top-line number their reviews produce, especially on cameras, are the final word on how good a camera is.

It isn't, but it does provide some nice data on some parts of the camera.  For a digital camera, there's no doubt that the sensor is the heart and soul of the device.  If the sensor is no good, the camera certainly won't be, either.

It might be the sine qua non of the device, but it isn't the totality.

Also, just looking at the top-line number can be misleading as well.

I learned this about when I got my D4.  It was cool when it came up as number one, and a bit surprising when it fell out almost immediately (with the introduction of the D800).  But the high-ISO numbers were a bit misleading on the D800, I think.  While I occasionally wish that I had the extra color depth or dynamic range, I'm mostly happy because of the better ISO performance of the D4.

But wait, you say, they were rated almost identically there.  Well, there's a bit of a story there, and it mostly comes down to dynamic range.  The D800 is better at 100 ISO, and maybe at 200 (can't remember), but gets significantly worse after that.  Given that I take a lot of indoor shots of my kids, I frequently end up shooting higher than that, so I largely come out ahead.

Plus, I like the way the D4 handles, better; it's very nicely balanced and the controls are excellent.

But, of course, there's still the money issue.

Anyway, I'm getting badly sidetracked.  The points are that a) there's a lot more to a camera than DxOMark score and b) there's a lot more to their benchmarks than the top-line number.

So, now that I've pointed out my own experience with finding that out, I wanted to point people to a long article that takes a much closer look at their reviews.  It's on an excellent site called Luminous Landscape and gives a lot of good information.

So before you buy a camera based on a DxOMark review, you should read the article to help you interpret the numbers.  You'll be glad you did.

Thoughts on the recent tragedy

I haven't posted anything about the Newtown massacre, as I don't think I've got anything to say that hasn't been said many times.

One thing was kind of weird, though.  When I first read about it, at work that day, it didn't really register what had happened.  It was just... another school shooting, I guess.  But then they talked about it on the radio on the way home, and it really got me upset.  I started thinking about my own kids (not quite that old), I guess, and I got a lot more emotional than I usually do.

The whole thing just seems so senseless, and my heart goes out to the parents and friends of those children.  And the staff killed, as well.

The NRA's suggested response, putting armed guards in every school, seems stupid, at best.  Meeting violence with violence has only succeeded in stopping violence when one side has nothing left.  Given the supply of crazy (or sociopathically desperate for attention) people around, there will never be nothing left.

But we should be cutting down on the supply of guns.  The number of people killed is tragically high.  In fact, I didn't realize how high until the last week or so, but it's over 10k people a year.  There needs to be regulation, maybe similarly to how cars are regulated.

It's just... this can't go on.

I grew up in a house with guns (not a lot, but they were there).  I learned to shoot at a young age.  I've never owned a gun, but in high school I had a couple of guns on long-term (I think it ended up being a couple of years) loan.  For all intents and purposes, they were my guns for that time period; nobody told me when or how to use them, and I took care of maintenance and care.  I even bought the ammo.

More recently, I've fired fully automatic submachine guns.  It was fun, but it was in a very controlled environment, and that was definitely a good thing.

And I've even considered buying a pistol for target shooting and home defense.

But this easy access to weapons made solely for killing people (there's a big difference between a hunting rifle and an AR-15) is just crazy.  It's too easy, and too many people are dying.  Something has to be done.  I think there are a number of steps that can easily be taken.  One, modernize what records ATF keeps (ie: not on cards).  Two, 100% background checks (yes, it isn't perfect, but it'll help).  Three, get rid of easy access to large-capacity magazines (5-10 rounds is plenty, even for self-defense situations).  Four, these "stand your ground" laws are nuts; they're just designed to make it easier to escalate a situation to where someone gets killed.  Five, limit the number of guns people can buy in a small timeframe.  One a month is plenty for any sane situation

I'm sure there are even better ideas, but that's some easy, low-hanging fruit that will cut down on deaths.

A breakthrough?

Feeling a little better about my m4d sk177z (hah!) on jetpack joyride.  Since having to start over again on missions and such, I think I've been improving steadily (my average distance has been increasing), but not dramatically.  My longest game had only gone up by 1-200 meters (over 4000 games), and that was a little depressing.

I finally managed to nudge it rather more this morning (waiting around for a package); I just improved it by a bit more than a kilometer, which felt really good.  It would have felt a bit better if I could have managed a couple hundred more, and broken 10km, but it still felt quite good.  Interestingly, I did nothing else record-setting within the game; I did pretty well with each vehicle I got, but never close to a record with that vehicle.

Maybe I'll go back to reading Butcher's latest (very happy-making Christmas present), and savor the feeling a bit longer.

Oh, and a couple of notes on records I've never gotten around to writing down.  I recently confirmed that the Most Coins Collected in the profile not only includes those gotten via Final Spin, but even includes counterfeiter doubling.  Most Tokens Collected, by contrast, doesn't even include those from Final Spin.  Not sure if the contrast is a bug, or was a conscious design decision.  Definitely seems odd, regardless.


The invisibile man

Caught the off-beat Australian movie, Griff the Invisible, recently.  And it was pretty far off-beat.

A young office worker puts on a costume to stop criminals in Victorian costumes who are scaring people in his neighborhood.  Outside of those activities, he's definitely a nebbish who gets bullied by one of his co-workers.

And then, his brother (who returned from Adelaide to look after him) starts dating a scientist who's a bit misunderstood.  At the very least, her parents can't understand her at all.  And neither can Griff's brother, we soon find out.

But that leaves Griff very confused, not least because he doesn't want to put her in danger.

And, of course, there's one other issue that I failed to get for quite a while.  There were lots of hints, but those only left me confused; I somehow failed to put it together.

But I enjoyed the movie quite a bit.  Funny and quirky tends to go up my alley, and this definitely did.

Oh, and there weren't a lot of special effects, but they did a nice job with the few that they used.  And the soundtrack was pretty nice; I wouldn't mind getting it, but it's only available as a very expensive import, unfortunately.


A crimson shine

I got Ruby Sparks on Black Friday, when the price dropped significantly.  I wasn't sure about it, but I was definitely curious.

Calvin is a writer who wrote a fantastically popular novel in his late teens, but has since struggled to write anything.  He isn't helped in thi by having a social life entirely defined by book promos and meeting up with his brother.  He had a girlfriend once, but they broke up in rather ugly fashion.

He's gotten a dog to help him meet people, but nobody seems to think much of it.  So his therapist suggests an exercise for him, to write a page about a woman who would like his dog.

As something to do, he gives it a try, and finds writing their relationship inspiring.  As part of it, of course, he invests a history for her.

After a few days of writing, imagine his surprise when he goes to leave his house, remarks to himself that he needs to walk the dog, and hears a woman say back to him that she'll take care of it.

When he sees her (immediately afterwards), he's convinced he's insane, especially when she confirms that her name is Ruby, the same as he's been writing.

What is he to do, when he gets confirmation that she is real?  Does the answer change when he figures out he can control her with his writing?

From this point, it went about as expected; interestingly, but with a mix of amusement and pain.  Happily, the writers were familiar with the Sting song, and came up with a nice ending.

It was quite a performance for Ms Kazan as Ruby, who had to show quite a range, some of which was over an impressively short time.  Mr Dano, as Calvin, was also very good as the generally disinterested nebbish, though his role was not as demanding.  Antonio Banderas was also very good in a small role as Calvin's step-father.

I mostly enjoyed it, although there were some scenes that were very painful to watch (by design).  I'm sure I'll watch it again, although I have no idea when.

Jetpack vehicles

In all my articles on Jetpack Joyride, I've kind of been ignoring the elephant in the room. To whit, vehicles.

Some things are pretty obvious about vehicles: they make the game a lot easier, because you can't be killed while in a vehicle. They also improve your odds of getting more money (two free sets of coins when you get the vehicle, a third when you lose it. Plus, you can pretty easily get the big coin magnets) and spin tokens (nothing so specific here, but they seem to occur about twice as often when in a vehicle).

But what's let obvious is how they help/hinder various missions.

Certainly, as noted above, they all help with getting coins and tokens. But what else are they good for?

Well, none of them are any good for brushing the ceiling, walking, sliding on your face, or high fives. Also, none are good for avoiding coins (darned near impossible, when you have the magnet). None do anything for any of the missions involving buying anything, nor for using the Nerd Repellent.

Gravity Suit: this one is especially well suited for getting whole groups of coins (well, with the magnet), as the coin patterns it gets tend to have lots of little groups. This one is quite difficult for near misses of zappers and missiles, but can do both. For knocking over scientists, it is not very good; because of that, though, it is pretty decent for avoiding hurting scientists. For flashing lights, it's ok, and decent at going over zappers.

Bad As Hog: Near misses with missiles and brushes of flashing lights are impossible (well, with the exception that you can hit the very first light if you get Free Ride, and that ride is the Hog). It's very good for knocking over scientists (comparable to the stomper); for the same reasons, it's darned near impossible to avoid hurting scientists over any distance. Near misses of zappers are difficult. Really, the only thing this is very good at is covering distances (though that also means it isn't bad for collecting spin tokens). And it's so-so at going above zappers.

Crazy Freaking Teleporter: Godlike for covering distance and for flying over zappers. Terrible for near misses, though neither type is impossible. So-so for hitting flashing lights and for knocking over scientists. Pretty good for getting groups of coins, especially with the magnet. Also awesome for mission of avoiding touching floor or ceiling, as you can't do either in it.  It's also one of the best for avoiding hurting scientists, and the only one with which I have successfully avoided grabbing coins when I had the magnet.

Mr Cuddles: Very good for covering distance and hitting flashing lights. Not very good for knocking over scientists; hence, pretty good for avoiding hurting them. Decent, but not great, for near misses of both types. Pretty good for going over zappers.

Lil Stomper: (Unrelated: the name always makes me think of "Li'l Pepe", from Romancing the Stone.) Pretty good for near misses of both types, also for hitting flashing lights. Not bad for flying over zappers.  And, of course, the only one with which you can complete a mission by knocking over scientists.

Profit Bird: Best of the bunch for just about everything (except covering long distances; control gets wonky after a kilometer or so). Also not great for knocking over scientists, I suppose. But very easy for near misses of both types and hitting flashing lights (so easy, in fact, you can easily find yourself doing it accidentally). Suppose, too, not quite as good as the teleporter at going over zappers, but still better than any of the others.

So, that's the skinny (to the best of my knowledge) of how the various vehicles help and hurt accomplishing missions.  Good luck.

Security for 200, Alex.

Another brief technical detour today.

I use ssh in all sorts of ways. I make tunnels all the time (and have even hooked them together a time or two), use passkeys, and use ssh-agent to keep from having to repeatedly type in my passphrase. I've set up quite long ssh config files, and modified sshd config's occasionally as well. I even have a shell function on my work machine that sets up two tunnels, each using a custom ssh config, to various places.

So I'm not exactly an ssh newbie.

I knew that you could usefully pipe input into an ssh command, but couldn't remember how to make it useful, so I went googling 'ssh tricks' yesterday. And I found quite a few interesting things. The first was the pipe.

Here's what you need to do:
cat file |ssh -e none user@host "cat > file"

file, of course, is the file you want to copy over (personally, I would use scp for a straight copy as above), '-e none' removes escapes from what you're copying (only useful if it's a binary file), and 'cat > file' dumps it into a destination. Doesn't seem very useful, vs using scp, right? Well, what I was doing was appending my id_dsa.pub to the end of an authorized_keys file, so I wouldn't need to log in again. I'd been doing that via scp, which was a several step process. But then I modified it to this:
cat ~/.ssh/id_dsa.pub |ssh user@host 'cat >> .ssh/authorized_keys'
which reduced it to one step. Win.

And let's talk about some other features I found: You can put wildcards in the ssh config file (look for 'Per-host SSH client config'. This page also has a decent introduction to creating tunnels (it calls it port forwarding, which is not a good phrase, I think) and using passphrases). You can specify a ControlMaster/ControlPath, to have multiple connections to the same host to only use one real connection. That allows a bit more networking efficiency.

That same page also mentions using a keep-alive (which I've occasionally used with putty, but never with command-line ssh), and how to ignore host key matching (not generally a good idea, but he mentions a case where it is useful).

You can also do aliases for hostnames, which is nice. In fact, in the last week or so, I've used this to alias out some tunnel-enabled connections in one step (ie: instead of having to do 'ssh -p 2222 username@localhost', I just do 'ssh myname').

It keeps amazing me just how useful and versatile SSH is.


Don't stop!

I was pretty excited, a couple of months ago, when California approved some rules for allowing autonomous cars to be certified to drive on the roads (previous tests by Google, and others, were run with people behind the wheel, even when the car was driving). Not for the approval itself, which, being well outside of California, has little to no effect on me. But to talk about that, NPR interviewed a Google engineer about the system, and he indicated that autonomous vehicles would be on the market within five years. That was so exciting, because that's about five years closer than I thought, and because I'd love to have one (my commute isn't bad, but being able to read a book during it would be fabulous). Tacking on to that, I just saw an article about an intersection control system being designed by some Virginia Tech engineers that would allow control of vehicles to be handed of from the car itself to the intersection, that would keep all vehicles flowing at top speed. One bit of skepticism is what happens when one vehicle that isn't under intersection control attempts to go through; I suspect that is, at best, a messy problem. Still, it's cool to see people are working on that sort of thing. I can't wait.


XML tuning

Going off on whole different path than normal, I'm going to discuss something technical. My work involves a lot of text processing, which means a lot of XML parsing. Since we have a lot of Groovy code, we started off using its XMLSlurper for parsing. And from a theoretical perspective, it's a great parser. It does everything we need, and was fairly simple to extend to track offsets into a document (ie: the values in node <node> go from offset 25-75), but has turned out to be fairly slow on large documents.

We have some files we use that regularly reach 8MB, and we might have to pull a few thousand values out of those files. After parsing, access was quite speedy, but initial parsing was taking seven to eight minutes. This was well over 99% of our execution time, so I finally went to search for alternatives a couple of days ago (I got on a bit of a performance kick after we got dressed down a bit on lack thereof causing problems).

So, after doing some searching, I found VTD-XML, by ximpleware. It claims to be fast and small, but with little or no support for namespaces. That suits our needs, at least for those documents, quite well. And it works by tracking offsets, which means no additional book-keeping for me. Sweet.

It took a bit of work to get it right; the documentation isn't great, and focuses on getting Strings out of the document, not offsets.

It's fairly minimal in how many classes you need (four, really, including the main Exception class), which is good.  But the javadoc has entries (sometimes unexplained) for just about everything, including all the internal stuff. So this guide is pretty useful, but glossed over some stuff I needed.

What I found out was that what I needed was VTDNav.getContentFragment() for nodes (and some bit-shifting/masking on its result). For some reason, though, this provides no useful values for attributes. For those, I needed VTDNav.getTokenOffset(int) and some String.indexOf(int, int) calls. But when I finally figured that out, the code turned out to be very small and fast, indeed. Just over one hundred lines of code on my part (most of which was fitting things into my existing interfaces), and speed on those same documents dropped down to about two seconds. Not too shabby, especially since the refactoring of my code to use it was just changing a couple of class references to interface references.

I can't wait to see people's faces when this code makes it into production.

(One minor word of warning to people thinking of using this code: it dumps some error messages via System.out.println(). Not sure what they were thinking, there. Thankfully, that's not a big problem for us, but it will be for some people. Also, make sure namespaces aren't going to trip you up.)

Fuzzy balls in flight

Just got directed at an old (1996) article about tennis just below the top level. It gets there by talking about people playing in a qualifying tournament in Canada, and what they have to go through, and how good they are. And then compares them against the truly top-level pros who are, of course, the only ones most people (even most tennis fans, as near as I can tell) have heard of.

I was never big on tennis; I only played one summer in college against a friend of mine.  How competitive?  We didn't even know how to serve properly, but it was a lot of fun. And I've never been big on watching tennis; I catch the majors occasionally, but don't go out of my way to do so.  I should point my father-in-law at this article; he did play at the men's league level for many years, so he'd know a lot more about that.

In any event, it's an excellent article that talks about the differences between #1 in the world and #100. You'd think that most people in any profession would be pretty happy to be known as just being in the top 100. And yet, you look at an article like this:

By the way, if you’re interested, the ATP tour updates and publishes its world ranking weekly, and the rankings constitute a nomological orgy that makes for truly first-rate bathroom reading. As of this writing, Mahesh Bhudapathi is 284th, Luis Lobo 411th.

And then moves on to how much they make in those qualifying tournaments:
The qualie circuit is to professional tennis sort of what AAA baseball is to the major leagues: Somebody playing the qualies in Montreal is an undeniably world-class tennis player, but he’s not quite at the level where the serious TV and money are. In the main draw of the du Maurier Omnium Ltée, a first-round loser will earn $5,400, and a second-round loser $10,300. In the Montreal qualies, a player will receive $560 for losing in the second round and an even $0.00 for losing in the first. This might not be so bad if a lot of the entrants for the qualies hadn’t flown thousands of miles to get here. Plus, there’s the matter of supporting themselves in Montreal. The tournament pays the hotel and meal expenses of players in the main draw but not of those in the qualies. The seven survivors of the qualies, however, will get their hotel expenses retroactively picked up by the tournament. So there’s rather a lot at stake -- some of the players in the qualies are literally playing for their supper or for the money to make airfare home or to the site of the next qualie.

It gives quite an appreciation for what these people need to go through if they want to be in the very top echelon. Remembering, of course, that the vast majority of these people will never make it (the focus of the article, Michael Joyce, actually topped out at #64.  A couple of months before this was written, in fact). It's a humbling thought, and gives me a great deal more appreciation for the players no one has heard of, and not just in tennis.

In fact, I think I'll look into whether the annual DC tournament, the Legg Mason Classic, has a qualifier I can go to, even if only for photographic purposes.