OS X filesystem madness

So most of last week I spent working on a few bugs in the Catalog Builder, a web-based application I wrote with a few other people at Staples.

The particular bug I was working on was seemingly impossible to fix, and it was driving me to the point of madness. I had it fixed on my local machine, but when I would copy that change to the test server, it wouldn’t work.

Thursday I was determined to fix it once and for all. I stayed at work until around 10 or 11pm, but finally went home in failure, near tears of frustration for not being able to fix it.

The next morning, my manager Asha sat next to me while I once again copied my change from my local machine to the test server. It still didn’t work. Then she had me do it one more time, and miraculously, it WORKED!

I chalked it up to exhaustion, figured I must have made a mistake on Thursday night, copied the wrong file up to the server or something.

But today, I thought about it – I had been very careful on Thursday night. There had to be some other reason that my good code seemed bad on the server. My first conjecture was that there was some issue with the directory names.

I did some poking around, and figured it out.

There is something really odd about the way Mac OS X treats symbolic links.

A symbolic link is a “fake” directory or file, that is actually a pointer to a real file. This is useful if you need a certain file or directory to appear to be in several places, while in fact it’s only in one place. This is better than making multiple copies of the file or directory, because if you have to make changes to it, you only have to change it in one place, since symbolic links just point to the original path the file or directory is in.

Which is the important point.

in Unix, a symbolic link is a marker that points to a path. If you “cd” (change directory) to the symbolic link, it goes to the path indicated.

On Mac, an alias is a marker that points to a folder. If you click on the alias, it goes to the folder indicated.

The difference arises if you move the target directory.

The symbolic link points to the path, so it would say the target dir is missing.
the alias points to the folder, so it would still open the folder, even if it were moved.

And the real trouble is that OS X treats a symbolic link BOTH ways. When you create a symbolic link in the command line, it does TWO things. It creates a unix symbolic link, but also creates an alias in the GUI.

In the GUI, the alias will point to the original FOLDER no matter where you move it. In command line or via webserver, it is a symbolic link, and points to the original PATH.

So when I moved the original folder to the trash, then replaced it with a new folder with the same name as the old one, I would go through the GUI to update the files, then through the webserver to view it… but going through the GUI I was updating the files in the trash (new path, old folder), while viewing the files was showing the ones in the original path (old path, new folder)…

It was this inconsistency that drove me to the point of madness on Thursday.

Professional Vampires

I gave blood today. I prepped for it this morning by eating two bowls of cereal and a belgian waffle covered in whipped cream and strawberries for breakfast, then drinking a liter of water.

I wrote a little blank vitals sheet on a business card ahead of time, so I wouldn’t get them scrawled messily on a scrap of paper like they usually do when I ask for my vitals.

My vitals:

My hemoglobin always seems to be on the low side.

It went MUCH smoother than last time. The woman doing it was very good, I barely felt the needle, she was quick and efficient. When it was done, she used a non-stick arm wrap instead of bandaids, so my arm hair didn’t get all ripped off painfully when I removed it.

WALL-E — Come for the cute robot, stay for the biting satire


Saw WALL-E yesterday, which I had been looking forward to. It not only met, but exceeded my expectations.

Yes, it has the cute, Number-5-ish robot WALL-E. But it also has one of the best satires of American culture I’ve seen in a while. It’s similar in many ways to Idiocracy. Idiocracy was a flawed but enjoyable satire by Mike Judge (Office Space, Bevis & Butthead, King of the Hill) that takes current American culture to its logical conclusion.

I won’t spoil either movie by saying more, but if you haven’t seen WALL-E yet, go check it out. You might want to try a late-night showing to avoid all the talkative youngsters — unfortunately, Sarah ended up next to a little kid whose mom spent the whole movie encouraging him to ask questions and talk. Fine, developmentally, +10 points for parenting. But -50 points for movie theater etiquette.

And if you haven’t seen Idiocracy, it’s definitely worth a rental. Not a masterpiece, but entertaining and good satire.

A dream of cereal and slimes

Dream last night, more or less in two parts.

First Part:

I am going to the supermarket with Adam, Sarah, and some other people. I go to buy a box of cereal, which involves scanning it against my credit card to pay for it, which then prints out a barcode that you bring to the register to check out.

For some reason there is an issue, and the barcode it prints out is a null value, which will crash the register. It also means I can’t buy it, since the payment didn’t go through. As a prank, I stick the null value barcode over the normal barcode and put the cereal box back on the shelf. If someone tries to take it through checkout, it will crash the register.

We leave the supermarket, and go out to the car. I am worried that my prank will backfire and get traced back to me, and I will get in trouble. “It’s always the case,” I say, “I can never get away with anything.”

As we are getting into the car, a woman comes running out of the supermarket. It is the manager.

She stops us, and says to me, “You tried to buy a box of cereal, didn’t you?”

“You see?” I intone to my friends, then turn to her, looking down. “Yeah. But I can explain…”

“No,” she says, “I want to apologize for the inconvenience. To make up for your bad shopping experience, here is $25.”

She holds out some money, and looks at me expectantly.

“Oh,” I say, at a loss for words. “Um, thanks,” I say as I take the money.

She looks relieved, then turns and trots back to the supermarket.

I get into the car and we drive off.

Second Part:

We are out of the car now, and riding bicycles along a road. It seems like an old highway, it has a somewhat post-apocalyptic feel to it.

Two boys from our group pedal out in front, I think they are an older and younger brother. I pedal up to them, and we ride alongside each other for a while. Then, the younger boy becomes belligerent, and keeps swerving his bicycle into me, trying to knock me over. “I’m gonna hurt you!” he declares.

Finally I get tired of his attacks and the rest of us hang back and let him get a little ahead, so he’s not near our group.

After a little while someone points out that he’s gone. I comment to his brother, “wow, he must be really far ahead of us, I can’t even see him!” The road is level and visibility is good, so he must be a long way off.

“I’m going to find him!” says the older brother, and pedals as hard as he can, zooming ahead of the rest of us.

We pedal on, and it takes us quite a while to meet up with the brothers.

There is a crevice, a crack in the road that’s fairly wide and about 20 feet deep. The two brothers are down at the bottom, which is a flat area – the steep walls and flat bottom give it the feel of a colosseum. The brothers have reverted to their true forms, which are slimes, as seen in classic video game RPGs. The younger brother is trying to climb out, so he can get at us to hurt us or kill us, but the older brother keeps pulling him back down, keeping him in the arena.

“Keep going,” says the older brother, “I’ll go with you in human form.” He projects his human form out of the crevice next to us, and we continue on the highway with him. We are on foot now, and we have a long way to walk. As we walk away with the older brother’s human form, the older brother’s slime form is still in the trench, keeping the younger slime from escaping.

I’m not sure exactly how he is in two places at once, it has something to do with focussing his consciousness in a certain way.

We walk for a long time, and come to a rise overlooking an orchard. It is a strange landscape, the colors seem extra-saturated, and the trees are shorter than normal, though just as wide around as normal trees. There are rolling hills, which seem exaggerated, so that each hill has a perfectly curved shape. The overall impression is that of an artist’s interpretation of an orchard.

I turn to the older boy. “So this is what your homeworld looks like?” He nods. “It’s beautiful,” I comment, and we continue on with the group along the road, walking into the distance.

Failed Successful Marketing

SO I got this email offer from newspaperarchive.com, who I used in the past, and almost went for the offer. But then I ran into issues. This is the email I ended up sending to their customer service:

Hi there,

I received an offer to reactivate my account for 50% off.
I wasn’t sure about it, but then thought, ah, what the heck, I can probably find some more stuff for my genealogy research.

I clicked the link, which brought me to this page:
[URL HERE[

When I clicked the “Save 50% Now” button to continue, a popup informed me:
“Sorry, but you are currently not eligible for this promotion.”

What?

Why?

Why send me an email with an offer if I can’t use that offer?

I mean email marketing is about getting people to:
a) read the email
b) click through the email
c) take action on the page they are brought to

Here I was, that most desirable of marketing targets, one willing to do all three things, and what do you do?
You tell me “no.”

No only does this fail to make a sale, but it makes the potential customer (me) dislike you for pulling a bait-and-switch.

So tell me, what was the point of this whole exercise?

-Tev Kaber, annoyed

Books

I just finished “Childhood’s End” by Arthur C. Clarke.

Very good, thought-provoking… but with a very depressing ending. It’s supposed to be a happy ending, in a way, but at the same time it left me with a profound feeling of loss.

Now I’m reading “The Boy Who Knew What the Birds Said” which is a book of fairy tales in the classical vein, with that dreamlike sense of wonder. It starts out:

There is one thing that all the Birds are afraid of, and that is the
thing that will happen when the Bird That Follows the Cuckoo flies
into the Cuckoo’s mouth.

And what will happen then, asks my kind foster-child.

When the Bird that Follows the Cuckoo flies into the Cuckoo’s mouth
the World will come to an end.

All the Birds know that, but not all the People know it.

Since it was written in 1918, it’s Public Domain.
You can read it here for free, if you want.

Don’t Forget!

TODAY is the release of FireFox 3, and they are trying to set a record for number of downloads!

So get it now!

Download Day

Update:
As of 10am, it’s not available yet… maybe they are starting at noon to better garner global downloads? I’ll probably check back then.

Update:
Ok, now it’s 1pm, and it appears to be available… though I can’t tell because I can’t get to the site. Let’s hope when they planned to break a record, they understood this meant everyone would be hitting the site at once…

Update:
Cnet news has a little article saying there is a delay while Mozilla tries to get the FireFox website back up, but that the 24 hours clock doesn’t start ticking until the site is actually UP.

Update:
Ok, now at 3pm it seems to be mostly up… if you hit refresh if it fails, eventually the page will come up. I just downloaded it.

The Future of Supermaket Shopping? Not yet.

The Stop & Shop near my house is running a pilot program which introduces a new way to shop: check out AS you shop.

The system works like this:
1) scan your Stop & Shop card at a kiosk to get a portable scanner
2) take the scanner and some bags with you while you shop
3) scan items as you put them in your cart
4) return the scanner when you pay

It’s an interesting idea, and the portable scanners are pretty slick (I’d guesstimate they cost $500 or more apiece, possibly approaching $1000). The portable scanner has a barcode scanner, a color screen (I’m guessing windows-mobile PDA), and wireless connection to the store computer. There is a wire holder on the shopping cart to put the scanner in when you are wheeling the cart around.

But the system is obviously a first stab at things, because it has a number of issues. Here are the issues, and the possible solutions for each:

Bag usage

Next to the kiosk where you get the scanner, there are plastic bags (also reusable bags for sale). If you choose to use plastic bags, you have to guesstimate how many you will need for your whole shopping trip. When you take a few bags, they are stuck together and hard to separate.

The solution to this would be to have a bag holder mounted on the cart, perhaps on the front or side. They probably couldn’t use the back because they have to leave the toddler seat intact.

The best answer, of course, is to use reusable bags. I should really use those, but for whatever reason I don’t, maybe because hauling around 5 large cloth bags (typically I get 2-5 bags of groceries at a trip) seems like a pain, and I always get the feeling that I’ll be accused of stealing them, since they sell them in the store. Silly, I know, but I always feel paranoid about that.

What they should do is incentivize people (ooo, can you tell I work at a corporation?) to use the test system by giving them a free cloth bag the first time they use the system. That would get them to use at least one cloth bag, give them a reason to try the pilot, and would make them consider using cloth bags for all their shopping.

Noise

This is a minor one, but a major annoyance, which would grow if more people used the system. As you walk around, offers are shown on the screen of the scanner. Ok, fine, whatever. But every so often, the scanner plays a cash register “CHA-CHING!” sound to get you to look at it and whatever it’s offering. It also caused anyone in the area to stop and stare in my direction, trying to figure out what just made that loud noise. A couple other people were using the scanners, and you could tell where we all were by listening for the loud “CHA-CHING!” sounds.

Solution: Turn off the annoying sound.

Produce

To allow the scanner to scan produce, they added scale kiosks to the produce section. You choose your produce, weigh it, and it prints out a label to stick on your produce. The label has a barcode you can scan in with the scanner.

This is not horrible, but kind of wasteful, and a little annoying (it took me three tries to get it to print a label, and it didn’t seem like I did anything different the third time). I’ve heard that it’s possible to scan a barcode displayed on LCD, you could probably easily scan one on an e-ink display. That way you wouldn’t have to print a label. Just show the barcode on a screen of the scale kiosk, and have the user scan that.

I’ll have to try my barcode scanner at home out on some screens, see how well that works. Yes, I have a couple barcode scanners at home. Did you expect otherwise? 😉

Checkout

Ok, this is a major flaw. So you finish going through the store, scanning and bagging as you go. You have everything rung up in the scanner, and everything bagged in your cart, so you can just pay and go, right?

Not so fast.

You still have to go through a standard checkout lane, scan a “done shopping” barcode, and scan your Stop & Shop card. Then the scan history from the barcode scanner is transferred to the checkout lane, which re-rings everything up and then allows you to pay.

This is a MAJOR drag, because it’s a hack. To not have to rework the register’s programming, the data is transferred as if it were being scanned at the register. Which sounds ok until you realize what that means. Registers have a recognition time built-in, a couple seconds per item. This seems even longer when it’s sending a scan one at a time to the register. The user experience? You scan “done shopping”, scan your card, then wait while everything you have rung up in the scanner is re-rung up, verry slowly. You stand there for several minutes, the same time it would take to ring up at the register normally, watching a list slowly scroll by. Only once it’s all rung up can you pay.

The net result is that you’ve saved no time. The innovation has been rendered moot by making you go through checkout. It actually might have been *faster* to do it through current self-checkout, since you wouldn’t have spent time frigging with the scanner and bags as you shopped.

The solution? Well, obviously this is a pilot, and the checkout has been set up as a hack. If it were done for reals, there should be a separate checkout for people using the scanner, an even faster self-checkout.

But if they did want to use the same lanes, they need to edit the register software to accept the scanner’s data as a batch, so as soon as you scan “done shopping” and scan your card, you are instantly presented with the total, and can pay and go.

Conclusion

It’s an interesting system, and could be the next step of self-checkout. I liked having a running total on the scanner, and you could also use it for a price check anytime you wanted. It made more more aware of how much I was spending, more precise than the rough total I keep in my head.

There’s also a lot of potential there – since it’s based on your Stop & Shop card ID, in the future they could allow you to go on the Stop & Shop website, build a shopping list, and have your list show up on the scanner as you shop. They could match items on your list with items on sale, and give you relevant offers. They could even put RFID chips in the scanners to track where they are in the store, and have it give you offers relevant to the aisle you are currently in.

The Future

There’s a TV ad, I forget which company it was from, but it stuck with me:

It opens with a teen dressed in black entering a supermarket. He goes from aisle to aisle, stuffing items into his pockets, he even takes a steak and hides it in his jacket.

He walks to the exit, and as he passes through what looks like a metal detector, it beeps, and a security guard looks his way, shouts “hey” and starts after him.

The teen walks briskly out of the store, and on the sidewalk, the guard catches up with him. “Sir,” he says, slightly out of breath. The teen turns around. The guard reaches out, says “You forgot your receipt!” and hands him a slip of paper.

Then the logo of the company pops up (I forget who) and it says something about changing the way you think about shopping.

The idea being that all the items in the store were equipped with RFID chips, as was the teen’s credit card, so as he walked through the “metal detector” all the RFID chips were inventoried and his card was charged, all ubiquitously.

It’s an interesting idea. Some people prefer not to have a digital purchase trail, for privacy reasons, but if the “metal detector” in that ad accepted cash, the same model would work.

So keep at it, Stop & Shop. Nice try, but it’s not there yet.

Delicious!

A new version of Delicious Library is out!

If you haven’t heard of it before, it’s a program from the Mac for organizing your books, dvds, and such.

The new version adds more categories, including gadgets, toys, and tools.

Another thing they added is an option to export to a webpage. It’s not the best export, it’s a little buggy and has some design issues, but it’s decent enough.

You can check out my library here!