Google Checkout Sees Poor Customer Satisfaction, says Slashdot.
Duh.
I recently tried using their system to buy something from a company I've been buying stuff from for years. I got $10 off, but it cost me about three hours of work. Google's system makes it so the vendor never sees my "real" email address; instead, they see a magic one used by Google to forward mail to me. The idea is, if the vendor spams me, then Google can stop them. Brilliant!
Here's the thing: It doesn't work that way in practice. You see, because Google Checkout can supposedly stop the mail, they make no effort at all to track what mail I might or might not want. In particular, right after I got my order confirmation (definitely want that!), I started getting promotional mail, aka spam.
Well, here's the problem. Remember how the address is secret? There's nothing in the mail I receive (from Google) that the vendor could use to identify my complaint. They [b]can't[/b] say "stop mailing this guy". They have no ability to do anything but send mail to "everyone Google thinks should get our mailings" or not send it. Since some people probably want the mailings, that's a rough choice to face.
Google ignored my initial support requests and complaints. Also, the "stop getting this mail" link didn't work. I tried again, and again, and eventually it worked. (By this time, we're talking maybe five or six mailings over a couple of weeks, multiple queries to Google and to the vendor, and so on. Searches of FAQs... You get the idea.) There's just one problem.
The ONLY option available is "block every last piece of mail from this vendor". That's it. So if I'd gotten this done right away... No shipping confirmations. If I had a problem with the product, no way to communicate with the vendor through the "secure" channel Google's supposedly providing.
And, if I buy from them again? The spam hydrant goes on again. There's no way to express the concept "I want order confirmations, but not promotional mailings." The ability to shut off all mail has blinded them to the possibility that you might want to shut off only some, and the net result is a useless system which replaces the slim hope you had before of getting order confirmation, but not spam, with an ironclad promise that you [b]will[/b] get spam until you take steps that [b]will[/b] block all legitimate contact from your vendor.
Neat idea, guys, but it needs work. Like, say, you need to not send promotional mailings to people who don't ask to be put on the vendor's promotional list, and you need to distinguish between transaction-related mailings and promotional ones.
Of course, they don't much care. So far as Google's concerned, the moment I succesfully got the contact stopped, everything's done. Granularity of control is not something that Google Checkout is yet interested in.
This isn't to say they're worse than PayPal. Google's incompetence left me getting promotional mailings I didn't want. PayPal is part of eBay, who have spammed me with actual malice [b]and[/b] (later) with incompetence. Google doesn't really have the flexibility to express preferences. On the other hand, eBay's attitude towards them is worse; spam industry people refer to the act of changing people's account settings to "I want promotional mail" without notification or permission as "ebaying preferences" because they were pioneers in the field.
Devil, meet deep blue sea.
From http://punkassblog.com/2007/01/18/this-is-just-to-say/:
I have damaged the cat who was trampling my keyboardand who
probably held
sentimental value
for youForgive me
but I get jumpy
when I can’t see
the screfdgdtsen
The original remains my favorite love poem of all time.
I've been hanging out on a PS3 board (because I'm doing paying work on the PS3 right now), and I've noticed something. Many of the PS3 fans are absolutely confident that the Wii will "get boring" once people are "used to the controls". They're seeing it entirely in terms of novelty value; that the controls are attractive only because they are unfamiliar.
It is not so.
The Wiimote is not fun until you get used to it; it is fun because you are instantly used to it. Expecting people to "lose interest" and prefer games with traditional controls is like expecting that every computer artist and CAD designer in the world is going to suddenly realize that, in fact, they've pretty much gotten all of the novelty value out of tablets and they'd rather use a mouse.
Let's use a concrete example. Since the earliest computers I can remember, there's been bowling games. When I was a kid, we had a giant computer with a dishwasher-sized disk drive unit; a Wang Systems 2200. It came with a small selection of sample games written in their own variant of basic, including football, bowling, and golf. The bowling game worked like this. It drew 10 little vertical lines on the screen (these were probably just pipe characters -- | -- but I don't know, not having seen them in twenty-five years; the machine definitely had no graphics, though, so they were text). A little line with a caret at the end moved back and forth at the bottom of the screen. When it was pretty close to lined up with a good spot, you hit F15, and the caret moved up the screen and you got points.
A number of systems have had bowling games since then. On the Atari 2600, you got ten little squares, and a very slightly non-square thing which rolled towards them. For quite a while, controls were not much more complicated than aligning the ball with the pins. On the gamecube, Super Monkey Ball had a bowling minigame, which had a line from your starting position bounce rapidly back and forth across the lane; you pressed a button and the ball shot out at whatever angle it happened to be aimed at; most of the time, this was not what you wanted.
In every one of these games, the control system was a fairly indirect abstraction. The more recent ones might have some kind of system for imparting spin, but it was always an abstraction; you would, for instance, press a button, or move a joystick.
In the fairly simplistic bowling game in Wii Sports (the pack-in game for the Wii in North America), bowling works like this. You hold your arm in front of you, in essentially the posture most people use when bowling. You hold down a button on the control; the button is held with your finger in a way consistent with a natural grip of the device, so it just feels like "holding on". You swing your arm back, and then forward, and when you want to let go of the ball, you do. Spin? If you turn your wrist while bowling, you can impart spin to the ball. You use a joystick to set your initial position and intended angle, but once those are set, the actual control over speed and spin is essentially the same as actually going bowling.
My four-year-old nephew, Michael, is a big fan of Wii bowling. His accuracy rate isn't very good; sometimes he rolls the ball backwards. But he can bowl, and he enjoys it. He enjoys it so much that he made us take him out bowling, in fact. (He's not big enough; we eventually settled on having Matt pick him up and swing him, so Michael could drop the ball, and this allowed him to get it moving down the lane fast enough that it didn't confuse the bowling machine.) But that's the thing; apart from the four-year-old not having the physical size and strength to bowl, it's pretty much the same. He does a little better on Wii bowling, because the minimum strength bowl is a little harder, and actually knocks pins over.
(And yes, I just compared Wang bowling to Wii bowling.)
This, I think, is why Nintendo codenamed the system "revolution"; because it really is a revolution in game interfaces. The variety of options is incredible. When you add in the secondary "nunchuk" controller, you have fully independent motion and tilt sensors for both hands, not to mention the Wiimote's option of being used as a pointing device. Even in the early (and often fairly rough) games available for the Wii, the controls tend to be effortless.
For another example, let's look at the "Marvel Ultimate Alliance" game, available for Xbox 360, PS3, and Wii. Like most modern games, MUA is based on a 3D engine; you see the game from an overhead perspective, at an angle. Many 3D games give the user a certain amount of control over the camera, and MUA is no exception. Most games implement camera controls as a sort of alternative mapping of the buttons on the controller; say, you hold down a given button, and while you're holding down that button, the joystick that otherwise moves your character will instead move the camera. There's other options, but what they have in common is that moving the camera pretty much always prevents you from controlling the game normally; it ties up a finger, or a thumb, or a button, and makes it so that certain game actions cannot be performed while using the camera.
On the Wii port, the camera is turned by tilting the nunchuk controller left or right. Tilt harder, it turns faster. This doesn't interfere in any way with any other control the game has; you can continue interacting with the game normally while doing it. Not only that, but it's essentially free of mnemonic load; you don't have to remember it or think about it. You don't have to remember which finger it's on. By the time you've spent five or six minutes playing, the camera is just always facing the way you're trying to look.
Sony's "sixaxis" controller has accelerometers too, but it is in essence a traditional controller. It has no pointing device; you can't aim it in the direction of the screen and expect a game to know where you're pointing. However, that's not the only way in which it's an also-ran to the Wii controllers. The obvious one is simply that the Wiimote and nunchuk are independant; you can tilt them in different directions, you can move them independantly, and so on. So, of course, that gives you more simultaneous controls. There's a more subtle difference, though. Like every controller since the Nintendo Entertainment System's original rectangular box with a D-pad, the sixaxis is designed to be a two-handed controller. (There have been rare exceptions to this rule; many joysticks are one-handed.) What this means is that the motion sensing of the sixaxis has to be used as though you were wearing handcuffs. You can only move it to those positions and orientations in which your hands can retain their essential relationship of being about five inches apart, facing each other. You can't move your hands separately, and you can't even move them in many of the ways you can move a single hand alone.
So, Nintendo has the best controller the console world has ever seen. Yeah, there are a couple of games out there that might not play well on it, and Nintendo sells alternative controllers for use in those rare circumstances. Still, in a "number of playable games" comparison, the Wiimote wins by orders of magnitude.
That's not the whole story. They have also done something innovative at another level; they have made development cheaper and easier than the competition. At a time when developers are struggling to recoup the costs of games which cost $5 million or more to make, Nintendo is offering mature development tools and a fairly straightforward system. The Wii is often criticized as being little more than an upgraded version of their previous system, the Gamecube. There's some justice in this; the CPU and graphics hardware of the Wii appear to be very close indeed to mere 50% overclockings of essentially the same hardware the Gamecube had, although the Wii has substantially more memory. (They may have additional features, not just more speed; I don't think anyone knows.) On the other hand, the Wii has wireless networking built in; neither the 360 nor the cheaper model of PS3 has this, so your next option over is to buy a separate gizmo and set it up, or to buy a $600 console instead of a $250 console.
But Nintendo's decision to forego High Definition (HD) gaming is another big draw for developers. Even famous developers who are working on getting every last drop of power they can from the PlayStation 3 have been skeptical of the benefits of HD; Kojima Hideo, the developer of the Metal Gear Solid series, dismisses HD, claiming he is not at all interested in it -- and that he plans to develop something for the Wii as soon as he can get his current project shipped. HD means higher resolution; that means that developers need to develop more detailed models and more detailed textures for those models. These are large portions of the cost of game development, and the costs of higher resolution models and graphics are higher. A system that simply doesn't output high-definition signals could be substantially cheaper for developers to target. Throw in Nintendo's lower price, and the extra years of polish their developer tools have (given the close relationship to the Gamecube tools), and you have a very attractive deal; developers get to work with something genuinely interesting (and nearly all game developers are interested in interfaces; you can't do much with a game if you don't care about how it is controlled), and they get to do it cheaply.
Tack on that the Wii's impressively successful word of mouth campaign has it outselling the PS3 by at least a 2:1 margin, and you have all the components for a very, very, successful system. Developers like to target systems with a large user base; users like to get systems with a lot of games. The Wii may offer them both an opportunity to get what they want, at a much lower cost for both users and developers than the competition.
Playstation and Xbox fanatics dismiss the Wii as a toy. The "Revolution" codename seems especially apt when you consider the effect that Nintendo is having on the multi-billion dollar games industry simply by realizing that, yes: A console is, in fact, a toy. Here's to a toy that is cheap, well-built, and fun to play with!
I'm too lazy to publish this properly or clean it up.
There are a number of programs and utilities and things out there, even operating system mount utilities, to access or mount Amiga disk images.
That's great, but they are really utilities to access Amiga partition images. If you have an actual physical hard drive (not a floppy) containing multiple partitions, it's not immediately trivial to get the partitions extracted so that other utilities (such as adflib/unadf) can read them.
Enter "rdsk.c". This trivial program, written in 100% generic ISO C, should be able to read a dumped image of a raw Amiga hard drive, and extract from it all the named partitions on it, in ADF format (which is, in fact, just the raw bytes of those partitions). The header it's reading is called the "Rigid Disk Block" or something similar, or "RDB". NetBSD/amiga interprets them natively, which is neat, but the entire point is that I don't have any Amigas handy right now.
I have not tested this on big-endian systems, but ntohl is pretty commonplace on Unix-like systems, and should translate correctly on either sort; if you don't have it, just assume it forcibly interprets a big-endian 4-byte long in big-endian format.
Sorry for the lack of real formatting. I just want to make sure the next guy who needs to do this doesn't have to spend the thirty minutes it took me. For future reference, the IDE standard sucks badly. It took me longer to find a machine that was physically capable of booting with an early-90s IDE disk attached to it than it did to do any other part of this. SCSI disks that old, if they spin up at all, Just Work.
Special thanks to Dave, whose hard drives I needed to read.
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
/* http://lclevy.club.fr/adflib/adf_info.html */
/* Copyright 2006 Peter Seebach. No warranty of any sort, but good
* luck!
*/
int
part(FILE *f) {
off_t here = ftell(f);
char text[32];
int ret;
if (fread(text, 1, 4, f) != 4) {
fprintf(stderr, "rdsk: can't read partition header (%s)\n", strerror(errno));
exit(1);
}
text[4] = '\0';
if (!strcmp(text, "PART")) {
ret = 1;
unsigned long bsize, heads, secs, tracks, low, high;
unsigned char len;
fseek(f, here + 0x24, SEEK_SET);
fread(&len, sizeof(char), 1, f);
fread(text, sizeof(char), 31, f);
text[31] = '\0';
printf("partition: %.*s\n", len, text);
if (len >= 0 && len < 32)
text[len] = '\0';
else
text[31] = '\0';
fseek(f, here + 0x84, SEEK_SET);
if (fread(&bsize, sizeof(long), 1, f) != 1) {
fprintf(stderr, "rdsk: can't read block size (%s)\n", strerror(errno));
}
bsize = 4 * ntohl(bsize);
fseek(f, here + 0x8c, SEEK_SET);
if (fread(&heads, sizeof(long), 1, f) != 1) {
fprintf(stderr, "rdsk: can't read heads (%s)\n", strerror(errno));
}
heads = ntohl(heads);
fseek(f, here + 0x90, SEEK_SET);
if (fread(&secs, sizeof(long), 1, f) != 1) {
fprintf(stderr, "rdsk: can't read blocks/track (%s)\n", strerror(errno));
}
secs = ntohl(secs);
fseek(f, here + 0x94, SEEK_SET);
if (fread(&tracks, sizeof(long), 1, f) != 1) {
fprintf(stderr, "rdsk: can't read tracks/cyl (%s)\n", strerror(errno));
}
tracks = ntohl(tracks);
fseek(f, here + 0xa4, SEEK_SET);
if (fread(&low, sizeof(long), 1, f) != 1) {
fprintf(stderr, "rdsk: can't read low cyl (%s)\n", strerror(errno));
}
low = ntohl(low);
fseek(f, here + 0xa8, SEEK_SET);
if (fread(&high, sizeof(long), 1, f) != 1) {
fprintf(stderr, "rdsk: can't read high cyl (%s)\n", strerror(errno));
}
high = ntohl(high);
printf("%ld-byte blocks/cyl: %ld\nlow: %ld\nhigh: %ld\n",
bsize, heads * secs * tracks, low, high);
{
int i;
char name[64];
FILE *out;
unsigned char *block = malloc(bsize * secs * heads * tracks);
sprintf(name, "%s.adf", text);
out = fopen(name, "wb");
printf("saving partition %s, %d cylinders of %ld bytes\n", name,
(int) high - low, bsize * heads * secs * tracks);
for (i = low; i <= high; ++i) {
printf(".");
fseek(f, i * bsize * secs * heads * tracks, SEEK_SET);
fread(block, bsize, secs * heads * tracks, f);
fwrite(block, bsize, secs * heads * tracks, out);
}
printf("\n");
fclose(out);
free(block);
}
} else {
printf("unknown partition type: %s\n", text);
ret = 0;
}
fseek(f, here, SEEK_SET);
return ret;
}
int
main(int argc, char **argv) {
FILE *disk;
long b;
long bsize;
long next;
char text[5];
text[4] = 0;
if (argv[1]) {
disk = fopen(argv[1], "r");
if (!disk) {
fprintf(stderr, "rdsk: can't open file (%s)\n", strerror(errno));
exit(1);
}
} else {
fprintf(stderr, "usage: rdsk file\n");
exit(1);
}
fseek(disk, 0x0, SEEK_SET);
if (fread(text, 1, 4, disk) != 4) {
fprintf(stderr, "rdsk: can't read disk header (%s)\n", strerror(errno));
exit(1);
}
printf("disk header: %s\n", text);
fseek(disk, 0x10, SEEK_SET);
if (fread(&bsize, sizeof(long), 1, disk) != 1) {
fprintf(stderr, "rdsk: can't read blocksize (%s)\n", strerror(errno));
exit(1);
}
bsize = ntohl(bsize);
printf("block size is %ld\n", bsize);
fseek(disk, 0x1c, SEEK_SET);
if (fread(&b, sizeof(long), 1, disk) != 1) {
fprintf(stderr, "rdsk: can't read partition blockno (%s)\n", strerror(errno));
exit(1);
}
b = ntohl(b);
printf("partition should be at block %ld\n", b);
fseek(disk, b * bsize, SEEK_SET);
while (part(disk)) {
fseek(disk, 0x10, SEEK_CUR);
if (fread(&next, sizeof(long), 1, disk) != 1) {
fprintf(stderr, "rdsk: can't read next blockno (%s)\n", strerror(errno));
exit(1);
}
next = ntohl(next);
printf("next partition: %ld\n", next);
if (next != -1)
fseek(disk, next * bsize, SEEK_SET);
else
break;
}
return 0;
}
So, a while back, I wrote about the lying telemarketers at the Dove Foundation. According to some of the comments, people who have talked to them have found out that, in fact, the alleged operator is just a set of recordings being played back in vague relation to what you say.
The Dove Foundation is one of those entities whose underlying "mission" is stated so dishonestly that it makes peoples' skin crawl. They claim to be "protecting children" from "bad media". Of course, their definition of bad is based on a sort of whited-sepulchre version of Christianity, where the triumphalist theological masturbation of Left Behind, complete with self-righteous delight at the suffering of non-Christians, is upheld as a moral virtue. By contrast, anything that has any hint of "occultism" (by which they mean "magic that isn't performed by Protestants") in it is condemned. Violence is totally acceptable, as long as it's based entirely on religion, but any other violence is vehemently rejected.
I oversimplify a little, but frankly, I only wish the above were just empty hyperbole.
Anyway, I've had a lot of interesting comments on that piece, but the two newest really highlight just how ethically empty these people are.
Our first exhibit, posted just two days short of ten full months after the original post:
Idiots!!!! The Dove Foundation is just trying to protect your children!!! Or have you already murdered(aborted) them. You liberal dyke hags sicken me!! Go to hell!!!
Now, let's give a quick check. Does this post come even close to anything compatible with Christianity? Hmmmmmm.
The Gospel According to St. Matthew, Chapter 5, Verse 22
But I say unto you, That whosoever is angry with his brother without a cause shall be in danger of the judgment: and whosoever shall say to his brother, Raca, shall be in danger of the council: but whosoever shall say, Thou fool, shall be in danger of hell fire.
I think "Idiots!!!!" comes close enough to qualify. But hey, it's just Jesus, a well-known sympathiser with liberals and troublemakers. No problem.
Consider the tone and language of this comment. It's amazing, isn't it? Can you feel the love? I sure can't.
But what's most interesting here isn't the venemous tone. I mean, we're all used to people who are very proud of how Christian they are being unrepentant assholes to everyone else. We're used to people who would rather wish us to hell than pray for our souls. That's sorta normal these days.
What's interesting is the unqualified, unsupported, assertion that the Dove foundation scammers are "protecting children". From what, exactly? I don't have any kids of my own, yet, but I certainly have kids around me. (Fewer than I used to. Given our correspondent's tone, I assume the offense was intentional.) You may rest assured that we take every step possible to protect those kids. When Michael walks around playing superheroes, and saying he's "breaking the bad people", I tell him he shouldn't break anything he can't fix. It's a heavy concept for a four-year-old, but unlike the Dove people, I'm willing to talk to him about the real issues, not pretend that hiding body parts from him will make him holy.
But hey. There's more. A mere six hours and twenty minutes after the first one, we get another:
Oh, my gosh. That's horrible! An organization that wants to protect children from the crap on TV. Even worst, they understand the importance of families? Who do they think they are? What gives them the right to care? Those bastards. lolIf I were them I would keep calling on speed dial, just because any adult that thinks their entertainment is more important than the health and welfare of child, deserves a lot worst than a call.
Get a life!
Idiots.
Now, there's something you should all know. Comments on my blog are "moderated". I post any comment that I don't think is spam, even if it's hostile or obviously false, but I do filter them. What that means is, the second comment was posted when the first comment was not yet visible.
So. Isn't it interesting how similar the terminology is? Both of them call us "idiots". In a language with as rich a supply of rhetorical invective as English, that's sort of unusual already. But the talk about protecting children... Interesting, no?
To claim that the Dove Foundation "understands the importance of families" is so insipid as to be laughable. As to protecting kids from crap on TV, well, that's an interesting way to spin it.
In the end, I think these two people show exactly why organizations like Dove are dangerous. They promote a kind of willful rejection of considered thought and dependence on external validation. Our correspondents show that they have no interest in raising their own kids; someone else has to do it for them. They can't be bothered to make their own choices about television, so they want someone else to make ours, too.
The speed dial comment, I think, summarizes it. These people cannot conceive of an alternative to their own desires. They can't imagine people who are trying to raise children to be adults, not just to be bigger, hairier, babies. And so they advocate harassment in the pursuit of a good cause, just as they advocate murder in pursuit of a good cause; the promotion of their particular exceptionally narrowly-defined view of Christianity.
Right and wrong, it turns out, are nothing more than team jerseys to these people. They're just words for "us" and "them". Cruelty isn't the problem; differences in taste are.
Anyway, thanks as always for the comments. They were enlightening, and certainly helped explain certain things.