Category Archives: Wobble

Ketchup Calculus

Recently Heinz announced they have reformulated their tomato ketchup with about 15% less salt. Because they hold six tenths of the ketchup market, and because their recipe has not changed in nearly 40 years, this must have been a hard decision to make. They probably predicted some negative reactions. Why did they proceed?

Heinz altered their flagship product under pressure from politicians, but not yet under force of law. Here is an oversimplified economical argument for reformulating ketchup with less salt. Continue reading Ketchup Calculus

Islamophobia is bad but it is a good step

A national ban on an architectural element seems silly but the vote to stop the construction of minarets in Switzerland is a real accomplishment. The people of a mature country have peacefully expressed a strong collective feeling against what they perceive as a grave threat. The tragedy is that they identified the threat as the Islamic religion.

The real threat is more general, more widespread, and more dangerous than Islam. It took something as extreme as Islamic extremism to trigger a cultural awareness of it. Unfortunately, like the ringing of an alarm clock, the first thing to awaken consciousness is for a time the only piece of reality about which we are aware. Islamic extremism is the alarm clock.

The supporters of the minaret ban see the growth of the Muslim population as an aggressive cultural invasion. They don’t see an immigrant minority that deserves state protection. They see settlers from a destructive culture claiming their country. They feel vilified within their homeland by outsiders and they are afraid that their politicians will continue to insist on irrational “religious tolerance” despite the intolerant attitudes spread through Islam.

National Islamophobia is a phase whose time has come. It is extreme, prejudiced, and wrong, but it is the natural reaction against the wrong actions of extremists trying to universalize Islam. Two wrongs do make a right when everyone learns a lesson. The lesson here is that no protection for status, be it religion, race, sex, or what have you, is deserved when it is used for harm.

Religions have been invoked to excuse atrocious behavior since ages before the life of Muhammad. So have other statuses such as race, color, nationality, and sex. The world tends to absolve these harmful trends after a reform and some generations. And the human race eventually learns a lesson.

I see the minaret ban as a sign that the world is just beginning to reject religion as an excuse for bad behavior. Peaceful Muslims will work with non-Muslims to prevail over the radical perversion of Islam. This time will pass into history and be replaced by a time of rational discrimination and careful tolerance. I hope I’m right, the sooner the better.

10.5.7 adds graphics option for 17-inch MacBook Pro

When I upgraded my work machine from an early 2006 MacBook Pro to the new 17-inch, I restored my old system from a Time Machine backup and lost any custom drivers present in the OS X installed at the factory. This meant I could not change video cards. My machine was stuck in “higher performance” mode (Nvidia GeForce 9600 M GT) with no option to use the “better battery life” mode (9400 M).

I was disappointed when I read the OS X 10.5.7 news and found no mention of the missing video card selector. The wording here was not promising:

Improves performance of video playback and cursor movements for recent Macs with NVIDIA graphics.

But after I installed the 10.5.7 update I found the new option right where it belongs, in the Energy Saver preference panel, shown here:


Hey Apple, you should have included this in an OS X update before shipping the hardware. But it’s too late to argue. My biggest gripe about the 17-inch is now moot.

SXSW Interactive doesn’t matter anymore (why you need a Gold badge)

It might matter to you but it’s flat to me. No more fizz, no more buzz. Nothing that didn’t already cross my reader or that won’t be here soon enough. I should be able to watch the best talks at home on video anyway. Nobody will mind if I drink beer at the Iron Cactus until it’s time to stand in line for a world premier screening at the Ritz.

I’m no Tony Robbins myself but I dread sitting on conference center chairs while geeks practice their public speaking on me. Last year I spared myself half the misery by sticking my face in a laptop. This year I am sparing myself the whole misery by keeping my butt out of conference center chairs altogether. Theater seating is ten times more comfortable and there is good service.

SXSW Interactive is a well-built structure. It provides a definite time and place where dense social networking is encouraged in many forms but it guarantees nothing. The panel schedule is a gamble akin to playing roulette. Some panels are unforgettably good. Even so, many veterans will report and I agree that most of the best events do not appear on the schedule and many are not even restricted to badge holders.

Still, I like to have a badge with Interactive privileges. I maintain hope that smarter people than myself will fill me with knowledge and inspiration. So far I am satisfied with the interactions I have shared with people face-to-face. I am having a good time this week and nothing would spoil that faster than an hour on a stiff seat in a darkened room wishing I were anywhere else.

I wanted to give it a chance. I studied the schedule but nothing grabbed me and pulled me in. It occurred to me that I should at least attend my favorite panel but it’s not on the schedule this year. My heart sank.

Surely there are others who have felt this way. I know some who stopped attending because the strain outweighed the value. I know this about myself: experiences that echo the boredom that pervaded my educational career can also summon the discontent that was my reaction to that boredom. The similarity between a panel schedule and a day in the life of myself as a high school student is enough to commence the dark reverberations.

I also know that my moods and tastes are subject to change without notice. It would not surprise me to find myself excited about panels in the future. Nor would it to learn that my attitude had been soured by a temporary condition elsewhere in my life. Surely others have recovered from similar downswings.

Unless and until I am drawn to an Interactive event, I am thankful that my SXSW Gold badge includes Film. If you need me, look for me comparing schedule grids at the Iron Cactus. Or I’ll be working at home face-to-face with visiting coworkers. It makes me extra glad to live in Austin.

Emacs creeps up on me

I have used vim for years—since I started coding PHP. (Sometimes I preferred the Zend Studio editor because nothing does a better job of cross-linking in PHP projects. Unfortunately, almost anything could do a better job of memory management. As WordPress grew, the Zend editor became too slow to be usable. Too bad. I miss it.) Now that I am writing some Erlang, I am learning to use emacs.

The credit for this switch belongs entirely to the lovely erlang-mode. (I tried TextMate’s erlang mode but I couldn’t get past TextMate’s strange navigation keys, etc. I wish there were standard navigation keys in OS X. Too bad. I’ve heard TextMate is great.) The emacs erlang-mode helps me write beautiful code. Now that I’m also learning to use emacs in php-mode I rarely become disoriented and type “:w” to save a file. (I don’t miss vim.)

Not everything about emacs is perfect. It doesn’t understand my Mac’s right-delete key. Left-delete (backspace) won’t delete a tab; it converts it the tab spaces and deletes one of them so that I have to hit backspace many times to delete a single tab. And in php-mode, the indentation rules are far more complex than the WordPress coding standards; I just want tabs in php-mode.

Even though I have these problems, you have to hand it to emacs for being customizable. It took a couple of hours to find all the solutions, but I solved all of the above problems above by adding these lines to my .emacs file:

;; Map OS X Terminal SSH delete key                                                                                                                                  
(global-set-key (read-kbd-macro "ESC [ 3 ~") 'delete-char)

;; Backspace should delete, not convert tabs to spaces                                                                                                               
(setq c-backspace-function 'backward-delete-char)

;; In PHP, never indent; always insert TAB.
(require 'php-mode)
(defun my-php-mode-hook ()
  (local-set-key (kbd "TAB") 'self-insert-command))
(add-hook 'php-mode-hook 'my-php-mode-hook)

This works for me even though I understand less than half of it. There is so much to learn.