comments edit

So it’s maybe thirteen years too late, but I finally have my first pair of Air Jordans. Yeah, they don’t have anywhere near the cachet they did back in the day, but hey, better late than never. Here’s a photo to commemorate the occasion.

Air Jordans\ Michael thanks you… all the way to the bank.

I remember when I was a high-school ball player (made JV. At 5’ 9”, I was a bit short for Varsity), I positively drooled at the idea of owning a pair of Air Jordans when they came out. They defined hotness for the realm of basketball shoes, though they seemed to do little to actually improve my teammates’ skills. I remember one point guard in particular who claimed the coveted title of being the “First” to own a pair (Remember how important it was to be the “First”? New toilet model coming out. I had it first!). He would show up to practice in head to toe Jordan gear complete with the tongue sticking out and proceed to build a very sturdy tenenment with the bricks he tossed up.

For a military brat, these emblems of Basketball glory were outside the realm of affordability. But now as a hot-shot independent consultant, they are still outside the realm of affordability. The difference now is that I have less sense, so I bought a pair anyways. They certainly are a lot cheaper than they were back in the day.

To justify this purchase, I give you a picture of my last pair. As you can see, I do wait till the last minute and beyond, before buying a new pair of shoes. Now excuse me while I purchase a new pair of Copa Mundials to replace my thoroughly trashed soccer cleats.

Ratty Shoe\ Look what the cat dragged in.

personal comments edit

This is what I was working on before the siren call of independent consulting lured me away.

The new product, which Philp projects to go live next month, will be known as SkillJam Mobile. For the initial product launch, SkillJam Mobile will be separate from the site, giving users separate log-ons. Philp said the company hopes to combine the two sites in the future.

SkillJam Mobile will offer what Philp calls multipack gaming, an innovative concept in the mobile space. Most carriers have games on their systems but are able to deliver them only one at a time.

At the time that I left, much of the infrastructure work had been completed, though I made myself available to do some contract work to help finish up some of the loose ends, which they took advantage of. It’ll be interesting to see how well this does.

comments edit

blogging my way to
pdc This is my feeble attempt win an all expense trip to the PDC this year. All I have to do is explain why I want to attend. Unfortunately, I’ll be judged on creativity, value to the community, writing quality and style. It was my hope that my dashing good looks and slipping someone a freshly minted bill would suffice.

Well the reason I want to attend is simple, it’s to play XBox 360… AND to get a heads up on the upcoming technology Microsoft is churning out. I’m particularly interested in future versions of VS.NET and ASP.NET. I hope to get some ideas to apply to Subtext.

As for sharing with the community, there’s this blog thing I have. I’ve recently inherited a video camera so I will very likely place videos and photographs on here, along with witty and insightful commentary (assuming I can hire that witty and insightful off-shore ghost writer). Like a relentless avalanche, I’ll go door to door and tell people in person if that’ll help.

Lastly, I’d like to drop the economic argument: I live in Los Angeles, so Microsoft can stay lean and mean and save a buck on the air fare voucher, though I’d gladly accept the hotel accomodations. Bill and Steve will pat you on your back for your resourcefulness.

personal, tech comments edit

TRS 80 Color Computer Via Rory’s post here, I’ve discovered the Obsolete Technology Website.

The fact that this site evokes nostalgia only reinforces two facts about me, that I am a total geek and I’m getting old. I love the write-up of my very first computer (which I still own and have laying around here somewhere).

The gray/silver color scheme was fetching for the original TRS-80 Model I computer, but it just doesn’t work on the Color Computer - it has to be one of the ugliest computers ever.

Ahhh yeah!

Commodore 128Later, when several of my friends were riding the Commodore 64 wave, I jumped one step ahead with my second computer, the Commodore 128 (one-piece model). In sense, this wasn’t a step ahead at all as the Commodore 128 was just a glorified Commodore 64 with a nicer looking case. Just about nobody jumped at the chance to write software that took advantage of the C128 Mode or the CP/M mode. I pretty much spent most of the time using it in C64 mode.

Amiga 500 My third, and last computer before switching over to the Wintel universe, was every geek boy’s wet dream at the time, the Amiga 500. Unfortunately the site doesn’t have a write-up of the Amiga 500 specifically, but you can read up on the Amiga 2000 which came out the same year.

Ahhh memories…

UPDATE 2013-06-24: Turns out I still have that TRS-80!


comments edit

Looking at my SPAM filter, I notice that nearly a quarter of my emails appear to be from PayPal. Of course, these are all spoofed to appear that way.

If you get an email from PayPal, DO NOT CLICK ON ANY LINKS IN THE EMAIL!

Instead, fire up your browser of choice, and type in in the address bar. Nearly all of these emails are fakes. Here’s an example of a particularly tricky one that raised alarms and almost caused a knee jerk reaction till I realized it was a fake. It played upon a simple fear.

You have added

as a new email address for your PayPal account.


If you did not authorize this change or if you need assistance with your account, please contact PayPal customer service at:

Thank you for using PayPal!\ The PayPal Team

Please do not reply to this e-mail. Mail sent to this address cannot be answered. For assistance, log in to your PayPal account and choose the “Help” link in the header of any page.

—————————————————————-\     PROTECT YOUR PASSWORD\

    NEVER give your password to anyone and ONLY log in at

Protect yourself against fraudulent websites by opening a new web browser (e.g. Internet Explorer or Netscape) and typing in the PayPal URL every time you log in to your account.


PayPal Email ID PP007

This is a standard notice when adding a new email address to your PayPal account. What caught my attention is that the email address has the name brian. My brother is named Brian, so instinctually I wondered if he made a mistake with his own paypal account, adding me as an address.

But soon, I realized that this has to be a scam, simply because EVERY email I seemingly get from PayPal appears to be a scam.

Notice the URL so helpfully included to ostensibly help you contact PayPal customer service. In my email, this was a link. When I hovered my mouse over it, it’s displays a completely different URL at some server with the IP A quick DNS Lookup shows this is not a PayPal server.

In fact, EVERY “link” in this URL points to that IP address, even the word which you would expect to be a mailto: link. Very sneaky.

comments edit

I just finished reading part 2 of the Bill Venners interview with Erich Gamma and Erich so eloquently distills some of what I was trying to say in a recent post.

It’s interesting to note how thinking about building systems has changed in the ten years since Design Patterns was published. Bill Venners quotes the GOF book as saying

The key to maximizing reuse lies in anticipating new requirements and changes to existing requirements, and in designing your systems so they can evolve accordingly. To design a system so that it?s robust to such changes, you must consider how the system might need to change over its lifetime. A design that doesn?t take change into account risks major design in the future.

This is certainly something I was taught when I first started off as a developer, but I think now, it?s becoming more and more clear that speculation carries a lot of risk and can be more harmful than helpful. I learned that the hard way, as clients are a fickle lot, and you can guess what they?ll ask for next as easily as you can guess the next super lotto numbers.

Erich?s approach to building an extensibility model with Eclipse reflects how I try to approach projects I work on. In essence, experience a little pain (be it duplication, etc…) before refactoring with a pattern.

I eagerly anticipate part 3 of the interview. Be sure to also read Part 1 of the interview.

comments edit

block I’ve heard of writer’s block, but never dealt with coder’s block until today. Seriously, I’ve always been able to just unleash that kernel of code simmering inside in a big pop of keyboard slamming.

As an aside, my wife and her friend happened to walk in on a coding session one day and they remarked that they could easily do what I do. Why, I’m simply stabbing at the keys at random! They proceeded to mimic me jamming the keyboard as an insane pianist attempting to perform a Liszt piece at twice the speed might do. Hmm, hopefully my clients don’t find out and replace me with a monkey.

But today, alas, I’m tipping my head to the side, and nothing is pouring out. Zip. Guess it’s time to take a break and maybe buy some books.

comments edit

I’ve been following with interest Shelley’s progress with WordForm, a blogging engine. I hadn’t realized that WordForm was a fork in WordPress until she recently mentioned it.

In this particular post she describes some of the work she’s doing to handle metadata for images. She’s extracting EXIF data from images and storing as RDF statements in the database. She’s also pulling EXIF data from Flickr via its RESTful API. This is some sweet stuff that I hope finds its way into Subtext sometime in the future, though we have more pressing immediate concerns.

I’ll just wait to see how it pans out for WordForm and we’ll STEAL STEAL STEAL (of course giving full credit and props back to Shelley). ;)

company culture comments edit

In my limited experience so far, and from anecdotal evidence of nearly everyone I’ve ever met who had a boss at one time or another, managers as a whole still do not trust their employees. It’s a real shame if you think about it, because the whole point of hiring employees is to scale up and create an infrastructure capable of handling more work (and ostensibly more profit) than you can now.

Instead, employees often are simple extensions of a boss, mere drones blindly following a script as if the boss is remotely controlling each one in a real life game of The Sims. In order to herd these drones, bosses implement processes for the drones to follow. The end result is that overall productivity and customer satisfaction is only incrementally increased by a small amount with each new employee, while costs increase, creating a top heavy organization.

Allow me to illustrate this point with something that occured this past weekend which serves as the source of this rant. I went to one of these newfangled “Destination”movie theaters to join some friends in watching Star Wars Reveng of the Sith. This was the type of theater that compelled patrons to pay a premium for the convenience of assigned seating.

Upon arriving, a friend suggested we prepay $1.50 immediately for parking to get a discount. After doing so, we both realized we had made a mistake. With validation, parking is only $1.00 for four hours. We informed the young lady who marked our ticket as having been paid that we made a mistake, but she had no idea how to correct the situation. She merely assured us that if we get our tickets validated, we’ll be able to leave without having to pay again.

Well I’m not one to be upset about 50 cents so we left it at that, watched the movie, and then left. On my way out, I handed my ticket to the parking ticket. The ticket clearly displayed that I had already paid $1.50 for parking. When the attendant put the ticket into the system, it showed that I had validated the ticket as well. Good, so there’s no problem I thought.

The attendant’s then proceeded to inform me that his screen states that I owe $4.50 for parking. I chuckled to myself thinking, “Cool, we’ve uncovered a bug in the system that hadn’t been anticipated by the QA team. How neat.” Unfortunately, the attendant couldn’t make that decision. It seemed awful clear to me. The rules state that with validation, parking is only one dollar. His screen clearly shows that I had been at the theater less than four hours, that I had indeed validated my ticket, and that I had already paid more than one dollar.

Unfortunately, this attendant’s training hadn’t prepared him to make a freaking decision. Instead, I sat there waiting for him to find out the name of his supervisor form the othe attendants (how did he not know this?) and then get permission from the supervisor.

You see, unless employees are trusted with decision making, they won’t make a decision. Instead, they’ll blindly follow a process and then become paralyzed when they uncover a glitch in the system. And there’s always a glitch in the system.

Instead, all that is needed is to provide employees with a vision and set of principles and then empower them to make decisions. Give them the freedom to make mistakes and learn from them. In this particular case, the simple principle of trying to maintain customer satisfaction should have sufficed. It does not lead to customer satisfaction to have him wait several minutes to leave with a line of cars behind after already having paid for parking. The cost of a mistake is very low here, if indeed I had’t paid for parking. But the cost in the case that I had paid and am unhappy for being delayed (it was near midnight) is a dissatisfied customer. And trust me, you’re not doing so well that you can afford to alienate customers.

In this scenario, it was a small incident, nothing business threatening. But scale it up a notch, and you begin to realize why so many companies falter with head strong leadership and unempowered employees.

comments edit

I know it’s been around a good while now and has been the darling of the blogging community far that time, but I only recently started to play with Flickr. My initial resistance was due to my complete dissatisfaction with other online photo management tools such as oFoto, Yahoo Photos, SnapFish etc…

However, after spending only a few moments with Flickr, I can see that Flickr has put a lot of thought into photo management in an effort to get it right. It’s so good that I am reconsidering whether I even need a desktop photo management software. I probably won’t give up Photoshop Album just yet since I don’t want EVERY photo online. Besides, you never know when a company will go out of business, taking my photos with it. However my top feature request for the next version is Flickr integration.

I’ve been emailing some friends trying to get them to join. My photos are located at Feel free to add your own tags if you have relevant information.

There are two things I love about Flickr so far, its social tagging format (I can allow anyone to add tags to my photos, rather than trying to organize everything myself and I can add tags to my friends’ photos) and its API. I haven’t played with the API directly, but the fact that there are some really cool tools for uploading photos quickly and easily is evidence that they’ve really thought through how to let others extend Flickr.

So give it a shot, and try not to waste too much playing with it when you should be working.

code comments edit

Many developers, especially those fresh out of college (though older developers are just as prone), fall into the trap of believing in an absolute concept of “the perfect design”. I hate to break such youthful idealism, but there’s just no such thing.

Design is always a series of trade-offs in an arduous struggle to implement the best solution given a set of competing constraints. And there are always constraints.

Not too long ago, I had an interesting discussion with a young developer who was unhappy with the design of a project he was working on. This project had a very aggressive schedule, and he complained about the poor design of the system.

“So why do you think it is poorly designed, the system appears to have met the requirements, especially given the short time constraint”, I asked him. He explained how he would have preferred a system that abstracted the data access via some form of Object Relational Mapping, rather than simply pulling data from the table and slapping that data on a page via data binding. He also would have liked to clean up the object model. It was’t in his mind, “good design”.

I pointed out that it also wouldn’t have been good design to spend time choosing and getting up to speed with an ORM tool, only to deliver the software late (which was not an option). Sure, the code would have been well factored, but we had a hard deadline, and missing it would have been a huge burden on the company.

I suggested to him that constraints are necessary for a software project. I told him,

If a project doesn’t have a time constraint, it will never get finished.

That lit a lightbulb for this developer.

That explains why I never finish my personal projects.

Absolutely! With no time constraint, this developer would spend more time after more time attempting to hit that elusive goal of the “perfect design”. But that goal will never be reached because perfect design is asymptotic. You can get infinitely close, but you can never reach it.

In the end, I told the developer that he’ll have the opportunity to refactor the code into a better design in the second phase of the project, as the time constraint is no longer so aggressive. I also suggested he skim Small Things Considered: Why There Is No Perfect Design by Henry Petroski. The book makes its main point in the first chapter, that design is about compromise and managing trade-offs to meet constraints. The rest of the book is a tour of various design decisions in history that illustrate this central theme.

comments edit

One trap that developers need to be wary of is the mentality of the Hammer Truism. This states that

When the only tool you have is a hammer, everything looks like a nail.

This is especially true of Design Patterns. I particularly liked what Erich Gamma said in this interview

Do not start immediately throwing patterns into a design, but use them as you go and understand more of the problem. Because of this I really like to use patterns after the fact, refactoring to patterns.

All too often, I’ve encountered code that uses a pattern because the developer felt he should use a pattern there, not because he needed the pattern.

Not every developer understands that patterns add complexity to a solution. Certainly abstraction and redirection are important benefits of many design patterns, but they come at a cost. To use design patterns effectively is to know when the benefits will payback that cost with interest.

The important concept to understand is that Design Patterns are descriptive not prescriptive. They aren’t intended to instruct how one should design a system, but merely describe successful designs that have worked in the past for common problems. Should the problem you’re tackling fit a particular recurring pattern, then applying a design pattern is certainly a good choice. But when the problem doesn’t quite fit one of the patterns, trying to cram the round pattern into the square design just doesn’t fit.

I’ve recently seen an example of this in regards to using an interface. I generally follow the rule of threes regarding polymorphism. For example, if I have a class with an enum indicating its “type” (for example, a User class with an enum property indicating whether the User is an employee or a manager), when that enum contains three values, I’ll consider refactoring the class to have a base class and inherited classes (for example, the User class might have an Employee subclass and Manager Subclass). Maybe I’ll use an IUser interface instead.

However, I caution against using an interface (or inheritance) just because it’s the “right” thing to do. There’s no point to implementing polymorphism if it is never used.

For example, I recently saw several classes in some code I was reading that implemented an interface we’ll call ISomeInterface. But nowhere did I find any code that referenced ISomeInterface. Instead, there were only references to concrete classes. I expected to see something like this somewhere in the code.

foreach(ISomeInterface something in SomeInterfaceCollection)




But no such code could be found. This was a prime example of a gratuitous use of an interface. This interface served no purpose and needed to be removed.

The important lesson here is to always start off by writing the simplest code possible and only add interfaces and design patterns when they are absolutely needed.

[Listening to: Voices (DJ Remy Remix) - Bedrock - Gatecrasher Global Sound System: Latitude (Disc 2) (5:13)]

comments edit

When something tragic befalls a friend, or even an acquaintance, I used to wonder if expressing my condolences and sorrow really meant much to the afflicted person. It certainly is different from person to person. For Akumi and me, I think the answer to that is yes, it is helpful. We certainly felt some degree of comfort knowing friends and even strangers who read my blog were sending us well wishes and thinking of us.

So thank you for your comments. We appreciate them.

comments edit

I know the timing is pretty crummy, but here it is. It is required, yes required, that I give you a true geek birthday salute (i.e. a blog birthday greeting).

Happy birthday love!

p.s. Yes, that cake is an ice-cream cake (my wife is allergic to eggs and anything made with eggs).

comments edit

Hideo Yokoyama

Hideo Yokoyama 1943 - 2005 {style=”clear:both; margin-top:0px;”}

Akumi received a very tragic phone call yesterday afternoon from the San Diego county medical examiner’s office. Police had found her father, Hideo Yokoyama, pulled over to the side of the road with his windows down. While driving, he suffered a heart attack and died from cardiac arrest.

Only last weekend we had a great time with him down in San Diego. The fact that we saw him so recently has been good for Akumi. Though stunned and saddened, we both remember how happy he was, throwing back a beer together over fantastic food.

Akumi’s father loved to work, and spent nearly forty years doing so as an engineer at Sony. He is, in many ways partly responsible for all the Triniton televisions in the world. In the later parts of his career, he was challenged by a colleague who said to him…

We’ve sent all these Trinitrons out into the world. We now have a responsibility to do something about them when they return.

This was a turning point for Hideo, who then focused his energies on electronics recycling. He spoke at many conferences and worked hard within Sony to take a lead in recycling efforts. In many ways, Japan is way ahead of the US in this effort.

His efforts landed him a two year post as CEO of a joint venture between Sony, Panasonic, and several other electronics giants to research and promote recycling technologies. The member companies appointed an employee to this position for two years at a time on a revolving basis. He was a believer in sustainable modes of production.

After retiring from Sony, he took a position as President of a Japanese company with operations in Tijuana. Residing in Chula Vista, Akumi and I had the great privilege of seeing him once a month.

My fondest memory of him is that of my second or third trip to Japan with Akumi. We were staying with him at his apartment and we had just returned with some Yakitori. He had bought a bottle of Nigori (unfiltered) Sake (my favorite) for this occasion. He grabbed the bottle, looked at me with a mischevious grin, and said, “Phil. We are not leaving this table until this bottle is empty.” Suffice to say, I had to enlist the help of Akumi to get through it, but get through it we did.

On Tuesday, Akumi’s mom, brother and his wife will fly in from Japan. We will drive down to San Diego and take care of arrangements.

comments edit

Four friends who hadn’t seen each other in 30 years, reunited at a party. After several drinks, one of the men had to use the rest room. Those who remained talked about their kids.

The 1st guy said “My son is my pride and joy. He started working at a successful company at the bottom of the barrel. He studied economics and Business Administration and soon began to climb the corporate ladder and now he’s the president of the company. He became so rich that he gave his best friend a top of the line Mercedes for his birthday.”

The 2nd guy said “Damn, that’s terrific! My son is also my pride and joy. He started working for a big airline, then went to flight school to become a pilot. Eventually he became partner in the company, where he owns the majority of its assets. He’s so rich that he gave his best friend a brand new jet for his birthday.”

The 3rd man said “Well, that’s terrific! My son studied in the best universities and became an engineer. Then he started his own construction company and is now a multimillionaire. He also gave something very nice and expensive to his best friend for his birthday: a 30,000 square foot mansion.”

The three friends congratulated each other just as the fourth returned from the restroom and asked “What are all the congratulations for?”

One of the three said “We were talking about the pride we feel for the successes of our sons. What about your son? The 4th man replied “My son is gay and makes a living dancing as a stripper in a nightclub.” The three friends said “What a shame….what a disappointment.” The 4th man replied “No, I’m not ashamed. He’s my son, I love him and he’s lucky, too. His birthday just passed and he received a beautiful 30,000 square foot mansion, a brand new jet and a top of the line Mercedes from his three boyfriends!”

[Listening to: Exodus - Bob Marley And The Wailers - Legend (7:35)]

comments edit

I swear I never do these stupid quizzes or memes or whatever you call it, but this is only three questions. If it’s good enough for Sam Ruby, it’s good enough for me.

  1. Why did you begin blogging and what motivates you to blog today?

    I started before it was called blogging as a way for my family and friends to keep tabs on me. I was basically rubbing it in that I was in sunny Los Angeles while my family and friends suffered the bitter cold of an Alaskan winter. What motivates me today is fame, fortune and vanity! Though the first two still elude me, what really motivates me are these great relationships and conversations I’ve had online. Blogging spurred me to get involved in open source software and provides a steady stream of alternate viewpoints.

  2. What tips can you offer to others who want to start blogging or improve their existing blog?

    I think Sam says it well enough. I’ll only add, don’t take yourself too seriously and have fun with it. Write for yourself first, and others second. Thus if blogging ends up being just a fad (I don’t think it is), what would you care as you’ve improved your writing skills, had an outlet of expression, and made many interesting contacts along the way. Not to mention the fame and fortune that most certainly is yours.

  3. What are three blogs that you read daily and why?

    Did you say three, or three hundred? If I tried to only list three, I’d start to sound like an incoherent academy award winner stepping over the alloted time thanking countless friends and feigning worry about those little people I might offend. I started off with a small list and it just seemed to grow organically. Person A, whom I respect, mentions person B alot, so I link to person B. I often subscribe to people who link to my site (because they obviously have good taste) or comment on my site, and then drop them if they start to bore me. I really need to cut down on my list. But since you asked, three that come to mind are…

[Listening to: So Danço Samba - Stan Getz & João Gilberto - Getz/Gilberto (3:45)]