Stories from Sony (Part 4)

April 23, 2004 at 2:54 am (PT) in Personal

In the aftermath of the theft problem, Sony forced all of its contractors to take an ethics test. We had a choice between taking an hour-long online test or spending two hours in an ethics training class. I chose the test.

It turned out that the “online test” wasn’t online at all; it was a program that ran off of a CD. One of my coworkers explained it to me:

“How will the company know that I took the test?” I asked.

“Your boss will sign you off on it.”

“How will he know that I took the test?”

“You’ll tell him so. If you want, you can save an hour by just saying that you took it.”

Well, being the ethical person that I am, I wasted an hour of company time taking the test anyway. The whole concept of an ethics test seems pretty stupid to me. Wouldn’t unethical people just cheat? Sony’s test was particularly dumb; the questions it asked were all black-and-white, it was always obvious what answers the company wanted, and the questions were mostly about legal issues, not ethical ones.

Stories from Sony (Part 3)

April 22, 2004 at 12:30 am (PT) in Personal

There was an incident at Sony last summer where someone was fired for stealing equipment from work and selling it on eBay. Apparently he sold:

  • complete systems built with parts from testing machines
  • device accessories (PDA cradles, notebook docking stations) that had been lying around in quantity
  • pirated DVDs that he copied with company equipment

I don’t know the exact details to how he was caught, but the rumor was that he sold a pre-production unit of an old model, that the buyer took it to a service center for repair, and that the service center identified it and discovered the shenanigans.

Sony’s security department monitored him (and probably everyone else) for a while and uncovered his other auctions. After security collected enough evidence, management finally clued the rest of us in on what was going down and on his imminent termination. That night, an eBay user named “sonysecurity” was the high bidder on one of his auctions.

The next day, he was curiously absent from work. (They did find him eventually.)

Several other people involved with him also were fired shortly afterward.

Stories from Sony (Part 2)

April 21, 2004 at 1:22 am (PT) in Personal

Some CLIÉ handhelds have a feature that lets them behave as universal remote controls. One day, one of my coworkers and I went to Fry’s Electronics to test them with various brands and models of televisions, VCRs, and DVD players. (For obvious reasons, the only A/V devices we had at work were made by Sony.)

Whenever we found some device we couldn’t control, we’d write down the manufacturer and the model number. After a short while, a plain-clothes Fry’s security guard approached us.

“Do you work for us?” she asked.

“What?”

“Do you work here at Fry’s?”

“No, we’re from Sony. We’re testing these devices.”

“Do you have approval from the store manager?”

“No.” (Note: if someone asks if you have prior approval, always say yes.)

“You can’t write down prices without approval from the store manager.”

“We’re not writing down prices. We’re writing down model numbers. See?” We showed her our notes.

She consulted with someone else with her walkie-talkie. “You can’t do that either.”

“So if we were consumers, and we wanted to compare prices, what are we supposed to do?”

“Memorize them if you want, but you can’t write them down.”

“Uh-huh.”

Fascists.

(Someone later explained to me that manufacturers and retailers have agreements that prohibit retailers from selling below a certain price, and everyone knows that Fry’s is no stranger to shady business practices. (Telling the guard that we were from Sony didn’t help.) This also explains Fry’s newspaper ads for items from “name-brand manufacturers”.)

Stories from Sony (Part 1)

April 20, 2004 at 12:19 am (PT) in Personal

Now that I have a new job, I no longer need to worry about bad-mouthing my Sony references. (Ha, just kidding.) Regardless, it’s an out-with-the-old, in-with-the-new kind of time, so over the next few days I’ll try to recount some stupid Sony stories:

One of my coworkers wanted to buy a “game enhancer” for his PlayStation so he could play imported games. (Such devices also have less legitimate uses.) Another coworker told him about a store nearby that sold them, so we stopped by there after lunch one day.

“Hi, I’m looking for a ‘game enhancer,'” my coworker asked.

“Sorry, we don’t have any,” the clerk nervously replied.

“You don’t? Well, are you expecting to get any more soon?”

“Uhh… no… They didn’t seem very… reliable, so we stopped carrying them.”

“Oh-kay….”

As we left, my coworker asked me, “Did that guy seem to be acting a little weird to you?”

Then we realized that his Sony ID badge was hanging prominently around his neck.

My right-brain will hate me forever.

April 19, 2004 at 5:16 pm (PT) in Personal

Well, I officially have accepted the UI Engineer position at VMware. I still feel lousy about declining the Application Engineer job from the Palm OS startup Tapwave.

All of the logical arguments favored VMware—better compensation at a more stable, well-known, and proven company that would give me more marketable skills. On the other hand, I’ve wanted and waited to work at Tapwave for months; I was a very good fit for their job, it was familiar territory for me, I had much more confidence that I could do it, and it seemed like a fun company.

Last week, I focused on the logical arguments to make my decision, ultimately trading short-term happiness for long-term benefits. Now that I’ve decided and am about to start work next week, the anxiety of entering totally new territory at VMware is kicking the right-side of my brain into high gear. I’m second-guessing myself. I feel like I’m throwing away the months of waiting and what knowledge I gleaned from the past three years at Sony.

I’m also going to miss Tapwave’s dog.

Sigh. Jennifer Feng thinks I’m a hopeless romantic, longing for things that might have been.

I suppose I’ll just see how everything turns out when I actually start work.

When it rains, it pours.

April 14, 2004 at 3:45 pm (PT) in Personal

After six months of relaxation, unemployment, and waiting for a job offer, I now have two in the pipeline.

I should be excited. Instead, the ordeal of choosing is putting me through agony.

They’re both good jobs. Had I received either offer a few weeks ago, I would have accepted it in an instant. With two simultaneous offers, though, I’m completely bewildered. I didn’t interview at both companies at the same time either; I interviewed at one in January, but it’s a startup and didn’t have the funding to hire me at the time. Even stranger, I sent both companies my résumé last year, and they both promptly ignored it. Things have a funny way of coalescing.

I feel bad because I don’t want to reject either one. I feel even worse because these days, there are plenty of people who would sell their mother to have one job offer, let alone two.

Stupid conscience.

Programming responsibility

April 12, 2004 at 8:08 pm (PT) in Programming, Rants/Raves

I’ve recently spent some time looking at the source code to several open-source projects.

I am appalled.

Here’s a sampling of what I’ve encountered:

  • Buffer overflows. I cannot understand how C programmers continue to use gets, strcpy, and strcat when fgets, strncpy, and strncat are available. This isn’t that hard. (The C standard library shares a lot of blame; it never should have provided the unchecked versions, and it at least should have given gets/fgets and strcpy/strncpy consistent behaviors. strncpy and strncat aren’t as easy to use as they ought to be, either.)
  • Unchecked errors. Writing error-checking code is hard and a lot of work, so apparently some people decide to forgo it altogether. Woe upon the user.
  • Illegal language usage. Apparently a lot of people think it’s perfectly legal in C or C++ to name identifiers with a leading underscore. Often it’s not. Although in practice a namespace clash is unlikely, identifiers with leading underscores can intrude into the compiler’s namespace.

    I’ve also argued (unsuccessfully) with some people who recklessly invoke undefined behavior.

  • Unmaintainable code. I suppose that I naively hoped that How to Write Unmaintainable Code was a work of fiction, but yes, Virginia, there are magic numbers. It’s odd that so much open-source code has poor documentation, sparse comments, and cryptic function and variable names. What’s the point of publishing your code if it’s unreadable?
  • Inconsistent styles. More readability and maintenance problems stem from projects that lack strong core leadership.

What’s the big deal? The obvious problems are software vulnerabilities and broken software. I think that there might be a deeper problem, however.

Code begets code. Many people learn how to program by looking through other people’s code, and publishing bad code makes it too easy to propagate bad habits and to produce lousy de facto standards. Worse, people might copy-and-paste bad code outright. Yes, it can work the other way too; good code can be a paradigm for others to follow. Unfortunately, the sheer quantity of bad code available makes good code a needle in a haystack. Saturating the planet with immature software projects is not a step forward.

As potential pedagogues, open-source developers ought to be held to a higher standard. Unfortunately, reality offers a contrary opinion. A recent study indicates that email is more likely to be ignored when there are more recipients; are similar factors at play in the programming world? Does the nature of open-source code—where there’s a lack of accountability and where anyone can look at and change the source code—encourage its developers to shirk their responsibilities in the hopes that someone else will clean up their mess? Or are programmers in general just too lazy, too unskilled, too ignorant, or too apathetic? (I’m admittedly not a very experienced programmer; I lack design experience in particular. If nothing else, though, I’m meticulous (so Jeff Wong says) and consistent, and I make a conscious effort to be responsible with what I write!)

(Before anyone gets the wrong idea, I am not an opponent of open-source software. I’m picking on open-source code mostly because closed-source code isn’t available to be criticized.)

Star Wars predictions

April 1, 2004 at 11:59 am (PT) in General

So everyone knows that Star Wars: Episode III is going to suck and blow harder than Charybdis. Episode I, Episode II, and Lucas’ butchering of the original trilogy certainly don’t provide much evidence to the contrary. (Han shot first, damnit.)

Not only will there doubtlessly be poor dialogue and worse acting by the main players, but we already know the plot. We know where Episode II leaves off and where Episode IV begins; we only need to connect to the dots. Yawn.

“Help me, Obi-Wan Kenobi, you’re my only hope.” or “I find your lack of faith disturbing.”

But maybe there’s a way to salvage this mess. What if we don’t know what we think we know?

For example, everyone is expecting Anakin to become Vader. What if he’s not? Perhaps Vader is a clone of Anakin. This could explain a few things:

  • The stupid midochlorian plot element of Episode I. It could have been written in as a (lame) way to get a blood sample from Anakin sent off to Coruscant.
  • How Vader was unaware that he had children. Perhaps they weren’t his but instead were the original Anakin’s.
  • Obi-Wan’s lies and half-truths from different points of view. Maybe Vader really did kill Luke’s father.
  • Why Emperor Palpatine, while speaking to Vader in The Empire Strikes Back, refers to Luke as “the son of Skywalker”.

Or it could be the other way around, and a clone of Anakin sires Luke and Leia.

Of course, it’s far more likely that Episode III is going to be another boring piece of trash with nothing substantial to add. I can dream, though…

(“Nerrrrrrrrrrrd.”)

Overloaded buttons

March 25, 2004 at 4:21 pm (PT) in Rants/Raves, Usability

A lot of audio players like to combine Play and Pause buttons. If a song is playing, pressing the Play button again pauses the track; if a song is paused, pressing the Play button resumes playing. It makes sense and reduces the number of buttons, right?

Winamp does not take this approach, and I commend its developers for it.

On the surface, combining these two buttons seems like a great idea. However, let’s suppose you want to replay the current track. Maybe you’re not paying attention and suddenly realize that the song you’re listening to is a favorite that you haven’t heard in a while, or maybe you’re just in the mood to listen to a particular song over and over.

In Winamp’s separate button design, if a song is playing, pressing the Play button again re-plays the current track. In the combined button design, pressing the Previous Track button typically returns to the track’s beginning. Seems like a sound design so far.

Now let’s suppose you want to skip to the previous track. In the separate button design, the Previous Track button always selects the previous track. In the combined button design, however, the Previous Track button only sometimes selects the previous track, since it’s also used to restart the current track. Typically the button skips to the previous track only if it’s already at the beginning to another track—the “beginning” defined as some arbitrary number of seconds.

Thus, overloading the Play button with pausing functions means we need to overload the Previous Track button too. Furthermore, overloading the Previous Track button requires introducing either time-dependent behavior or button modality. That’s a significant increase in interface complexity to save a single button. (The Previous Track and Next Track buttons typically have another behavior too; they seek within tracks when the buttons are held down.)

Increasing interface complexity increases error rates. My car stereo uses the combined button approach, and it makes it difficult for me to navigate backwards through CD tracks when I want to find a particular track. I need to listen for a few seconds to determine which track is which, and depending on how long I wait to listen, I sometimes need to press the Previous Track button once and sometimes twice. This is even more problematic when I’m driving and not looking at the track number.

Makers of software-based audio players have nothing to lose by providing separate buttons; virtual buttons have no monetary cost. Makers of car stereos should provide separate buttons because it’s a little safer.

(Although I prefer separate buttons, if space is at a premium, a respectable compromise might be to combine the Pause and Stop buttons instead. If pressed briefly, pause; if held down, stop. If the Stop button has been done away with too, then perhaps holding down the Play button can replay the current track.)

Internet Explorer’s history is useless.

March 23, 2004 at 12:13 am (PT) in Rants/Raves, Usability

The history pane in Internet Explorer 5 and 6 tries to be intelligent and user-friendly, but in practice it seems almost completely useless.

Consider this scenario: You surf the web and follow a lot of random links. The next day, you try to find a specific page again.

I do not believe this is an uncommon task. How can you accomplish this in IE? IE’s history has a “View » By Date” option, where it separates history items by day or by week. Unfortunately, within each day, items are sorted alphabetically by site. This is counter-productive; if users remembered the address of the site, why would they need to look for it in the history pane?

(IE also has a “View » By Order Visited Today” option, where it lists each page you’ve visited during the past day in chronological order. Unfortunately, when Microsoft says “today”, they really mean today, not the past 24 hours. IE is not friendly to late-night web surfers; once the clock on your PC rolls past midnight, say goodbye to history items from 11:59 PM; you now have to remember the site address if you want to find them again. Oh, and if it just turned Monday, your history items from Sunday are now lost amidst all other items from “Last Week”.)

The only alternatives are to try to retrace the original steps or to try to find it with a search engine, both tedious chores.

Why should a seemingly simple task be so incredibly hard?

Netscape/Mozilla have done it right for ages. They allow you to view all history items in a single, flat list. Superficially, it might not appear to be as organized as IE’s hierarchical history pane, but it’s infinitely more useful, and it’s simpler too.

Unfortunately, years of using IE have weaned me away from using browsers’ valuable history features. Ugh.