Entries for February, 2008

Beneath all the stupid news about YHOO and MSFT, there's much cooler news from bradfitz about the social graph. Now this f'ing rules. I'm gonna have to add some microformats to Tabulas soon.

Posted by roy on February 1, 2008 at 01:22 PM in Web Development | Add a comment

Last night, we tried to upgrade Wik.is. And things broke. Things that shouldn't have broken, broke. Pete narrowed it down to C#'s mysql.data.dll...

Max found the changelog with this innocuous comment:

fixed code where we were returning bit(1) as boolean but mysql treats tinyint(1) as boolean (bug #27959)

Uh, what? So we check out the bug report:

When using MySqlDataAdapter to fill a DataTable from a query, boolean field are not returned as System.Boolean. Them are returned as integer.

I've searched the bugs database, and I found only a workaround: use Convert.ToBoolean to returned field.

The problem is that I use column type to synchronize two different databases and one of them is not MySql. In this way I cannot establish if MySql field is truly boolean or is integer instead.

With MySqlConnection.GetSchema("DataTypes") I've found that System.Boolean there is not on mapped datatypes. Probably is that the cause of problem.

(snip repro)

Add a column mapping on the connector for tinyint(1) => System.Boolean

So basically, some lazy dev didn't want to write code adapting his personal need for booleans in mySQL and overloaded tinyint(1) into a boolean column.

Never mind the people who used tinyint(1) to store any values other than 0 and 1... oh no! Screw them! Nobody would dare store any values between -128 to 127, or 0 to 255 in a tinyint(1)! Simone Giordano thinks we should make it a bool!


Posted by roy on February 1, 2008 at 02:01 PM in Web Development | 3 Comments

This is truly inspirational: Motivated by a Tax, Irish Spurn Plastic Bags.

Within weeks, plastic bag use dropped 94 percent. Within a year, nearly everyone had bought reusable cloth bags, keeping them in offices and in the backs of cars. Plastic bags were not outlawed, but carrying them became socially unacceptable — on a par with wearing a fur coat or not cleaning up after one’s dog.

It should be like this more! I use hemp shopping bags from reusablebags.com when I go to Ralph's, but this isn't enough - most of my plastic bag usage comes from picking up lunch in the office. I should leave a few bags in the office for those short hauls :)

One good thing that's come up from the politicization of global warming (which I find unnerving) is the slow transition to more environmentally-friendly alternatives with prodding from the government, like San Diego does. Ireland is already on its way:

Ireland has moved on with the tax concept, proposing similar taxes on customers for A.T.M. receipts and chewing gum. (The sidewalks of Dublin are dotted with old wads.) The gum tax has been avoided for the time being because the chewing gum giant Wrigley agreed to create a public cleanup fund as an alternative. This year, the government plans to ban conventional light bulbs, making only low-energy, long-life fluorescent bulbs available.


Posted by roy on February 2, 2008 at 11:35 PM in Ramblings | 1 Comments

Best analysis of the MSFT-YHOO merger:

The Borg-Yahoo merger won't work. Here's why. It's like taking the two guys who finished second and third in a 100-yard dash and tying their legs together and asking for a rematch, believing that now they'll run faster.

Read the whole thing - sums up my feelings perfectly.

. . .

I really hope McCain and Hillary don't win tomorrow. That would really suck if I had to choose between those two (good thing Fred Thompson and Rudy aren't contenders anymore... now if that pesky Huckabee would drop out...). Since I'm a registered Republican (Aaron is gonna skewer me for that comment), I already logged my vote for a certain crazy-uncle for tomorrow's primaries.

Sadly, there's a snowball's chance in hell that Ron Paul will register anything more than a blip; it feels nice to know I don't matter.

Posted by roy on February 4, 2008 at 03:34 PM in Ramblings | 5 Comments

Hey, looks like I can afford that Audi R8 I've been lusting over lately:

(Screenshot of my portfolio from Google finance)

Floating point numbers are so much fun.

P.S. Trailing stops make me happy.

Posted by roy on February 4, 2008 at 10:14 PM in Finances | Add a comment

One of the things I love about my loft is the fact that it's right above the party center of San Diego. While I'm working at night, the sirens of emergency vehicles and the raucous laughter of drunken partygoers keeps me company. It definitely has a a "big city" feel, and that's a great feeling. Even when I was living in Korea, I never felt I was in a big city.

Right now, the Mardi Gras celebration is happening two blocks away - I get all the partying and music for free while I diligently hack away... :)

Posted by roy on February 5, 2008 at 11:37 PM in San Diego | 3 Comments

A note: Because this entry has a mixture of sarcasm and genuine-feelings-that-could-be-interpreted-as-sarcasm, I've denoted sarcastic comments in bold and italics.

And because this is a technical post:

Rachel McAdams - what happened to her?

. . .

Was reading some SimpleDB docs, and ran into this paragraph:

It is important to remember that Amazon SimpleDB is a schema-less datastore and everything is stored as a UTF-8 string value. This provides application designers with the flexibility of not predefining different data types for their attributes, but rather changing them dynamically, as the application requires. (ed. note: snipped example) Amazon SimpleDB provides the flexibility of storing all data in one format, allowing developers to make data type decisions in the application layer without the data store enforcing constraints. As a result, all predicate comparisons are lexicographical in nature. Therefore, when designing an application, you should carefully think through storing data in its appropriate string representation.

Technical arguments about SimpleDB's merits aside, the notion that the data store isn't magical is incredibly refreshing to hear. If you're going to layer stuff in abstractions, you better make sure the abstractions are dumb, and stupid magic (for example: magically converting tinyint(1) into booleans) isn't happening. Nothing frustrates me more than one part of the stack magically transforming shit that shouldn't be transformed.

(Although in defense of Reggie Burnett for allowing such heinous logic to be checked into the mysql connector, mySQL's own documentation states: )


These types are synonyms for TINYINT(1). A value of zero is considered false. Non-zero values are considered true.

So they intentionally overloaded tinyint(1) with BOOL or BOOLEAN. Nice. Oh, and the nice little note:

We intend to implement full boolean type handling, in accordance with standard SQL, in a future MySQL release.

Nice ... so in the absence of real support, they change how one feature behaves. Magic! This could never cause problems! It certainly is too hard to expect developers to convert ints to bools in their own applications! Everybody knows that since tinyint(3) displays up to 3 digits, tinyint(2) displays 2 digits ... that tinyint(1) would display a boolean! Yes! Perfect sense!

So I guess my amazement at Simone and Reggie in the past post was a bit misplaced.

. . .

I'm especially frustrated today because one of our Deki Wiki developers messed with the PHP bootstrapping code, which basically caused the application to end up in an endless loop in the case that the API wasn't accessible. In pseudocode, here was the "magic":

if (!try_to_access_api()) { redirect('index.php'); }

The problem being, every time the API failed, it would reload the page, which would ... then fail to load the API. Bulletproof logic! Nothing could possibly go wrong!

The problem with abstractions on the front-end is that you always be writing special cases for user interfaces. If you're an abstraction astronaut, all the special cases are going to increase the probability of leaky abstractions, which causes the whole thing to come crashing down to the ground.

Posted by roy on February 7, 2008 at 04:23 PM in Web Development | Add a comment

Things I learned today: female betta fish are cannibals. One of my female bettas was dead when I checked the tank this morning. I figured I could fish it out (har har) once I got back from work - when I came back, I couldn't find the dead body anywhere! Then I noticed two female bettas nibbling on what remained of the body ... just a tail.

It was a bit sickening.

Posted by roy on February 8, 2008 at 02:30 AM in Loft | 5 Comments

I'm not sure why this is so funny to me, but the Hitler "Downfall" parodies crack me up everytime I watch them.

Downfall was a spectacular movie (highly recommend you rent it if you haven't seen it) about Hitler's final days in WWII in his bunker.

Anyways, somebody took one of the most dramatic scenes of the movie and changed the subtitles (the movie is in German). The first parody, I believe, was the Microsoft XBox:

The most recent one (and the funniest one, I think) is when Hitler finds out what happened to his beloved Cowboys:

There's one about the downfall of HD-DVD:

And if you're not tired of watching them already, one about the Wii:

Posted by roy on February 10, 2008 at 11:05 PM in Ramblings | 2 Comments

Shaquille O'Neal continues to show tons of maturity:

"I'm a historian of the game, so I understand that on this team I'm probably a big role player, and I have no problem with that," O'Neal said. "I did my thing in my prime, and it's Amare's prime right now. I think it's my job to get him to the next level. Toward the end of my career, I have no problem coming here and just fitting in and just helping these guys get to the next level."

Shaq is pretty awesome.

. . .

But that's nothing compared to Xu Xhijun:

The Chinese company participating in the planned buy-out of a US telecoms equipment maker has angrily rounded on US politicians who claim the deal could endanger US national security.

Xu Zhijun, chief marketing officer at Huawei Technologies, told the Financial Times that the concerns expressed by some US lawmakers were "bullshit".

Man, that's pretty awesome, too. The balls!

Posted by roy on February 11, 2008 at 09:36 PM in Sports | 3 Comments

I think one of my favorite intros to a rock song has to be Stone Temple Pilot's "Interstate Love Song." The first 30 seconds of that song are total bliss.

(This embedded video is not the actual official video - the official video has a video intro which ruins the song for me).

What are some other songs with great intros? (excluding Europe's "The Final Countdown"!)

Posted by roy on February 12, 2008 at 06:10 PM in Music | 2 Comments

Now that the election is becoming omg-i'm-super-cereal (none of this primary nonsense), I am going to the credibility bank and cashing in my Tabulas popularity account! So please, blindly vote for my endorsement!

Without further delay, I fully endorse:

Photo courtesy of Aaron, taken from an iPhone, with me holding my iPod nano, standing next to the Apple Cinema and an Apple Powerbook, living in my iWorld, trying to find an iGirlfriend

Steve Jobs for President! (t-shirt for sale *hmyah*)

. . .

I picked up a copy of The Secret Life of Steve Jobs, a Parody, the novelization of the popular Fake Steve Jobs blog ... I'm not sure why this thing got 4.5 stars. I'm finding it an enjoyable read, but the ratings seem deceptively high. The "I'm Steve Jobs, I'm so awesome" jokes get sort of old halfway through the book.

Posted by roy on February 13, 2008 at 05:50 PM in Ramblings, Foolishness | 3 Comments

An idea for a song title that will never be made: "Just a UTF-8 boy living in a latin1 world." Ideally Fall Out Boy would sing this song... although I18n would make a pretty bad-ass band name.

Posted by roy on February 16, 2008 at 03:02 PM in Ramblings, Foolishness, Music | Add a comment

Lately, I realized that it doesn't matter what language you write in - everything can (and will) eventually scale. RoR used to get a lot of grief because it didn't scale well (of course, some people still associate Twitter == RoR, which doesn't help it's cause), but it looks like other people are getting RoR to scale up to 300 requests per second with no problem (of course, they also mention that "we memcached extensively early on - every page reload results in 0 SQL calls.").

. . .

I have discovered the best new blog of 2008: Stuff White People Like. It is an in-depth look into white culture, and how to act like a white person.

Read it. Learn it.

(Seriously though, who writes these blogs? They are friggin' hilarious!)

Posted by roy on February 17, 2008 at 04:19 PM in Web Development, Foolishness | Add a comment

The guys who did the Friday Night Lights theme song (the song's called "Your Hand In Mine" are Explosions in the Sky. Check it:

I've been totally listening to this MP3 all day...

Posted by roy on February 17, 2008 at 10:31 PM in Music | 1 Comments

How can we visualize the chorus of voices who share their hopes & dreams digitally?

The idea started while I was checking out the album covers for Explosions in the Sky. I really dug this one in particular:

I realized that using public data from Tabulas journals, I could try to do something similar.

The end result, after a few hours of hacking, as a screenshot:

You can see the demo to see it live; refresh and every time you'll get a different set of phrases. Each set of phrases links to the original entry.

If you like the way a particular one looks, there's a # at the end of each block, which provides a permalink for that page. The screenshot above has a permalink here.

How I did it:

It was simpler than I thought it'd be - given that Tabulas extracts keywords from entries so it can generate a "related entries" list, I simply found all phrases which had more than 50 entries which were associated with that phrase. Each page in the demo above contains the same phrase.

Then I extracted those entries, did a simple regular expression to parse out the sentence (or sentence fragments) which I then output.

So simple, but I think the effect is cool. If I were to expand on it in the future, I'd do 3 things:

  1. Automatically poll the server every 30 seconds for a new list, then phase it in with some animation effects
  2. Pass it through the gd graphics library in PHP so I could actually output an image ... then I could use different fonts to match the album image more precisely
  3. Have this song play in the background :)

It was fun doing something pointless... haven't really had a chance to do something like this in a while.

Posted by roy on February 17, 2008 at 11:47 PM in Web Development, Tabulas | 4 Comments

A Fuddrucker's opened downstairs today. There goes at least 5 years off my life.

At least In-n-Out is a 10 minute drive away; I'm a lazy enough bum to only make that trek once a week (lately it's been once every fortnight).

If I am to die of clogged arteries (or eyeball cancer) over the upcoming year, Han wants me to publicly state that I bequeath unto him my aquariums and my DVD collection.

Posted by roy on February 18, 2008 at 07:52 PM in Loft, Ramblings | 1 Comments

"I saved your seat in the back!"

That was Louis, an employee of the venerable Fuddrucker's enterprise downstairs. It's only been open two days, and I'm already a recognized regular. Not only that, but he knows my name now. And I know his. I shall enjoy this bond. (I take particular pride in become a regular at a restaurant - it's one of the few times I actually enjoy being recognized)

I don't think I've ever encountered such great service at any restaurant before.

As soon as Max and I walk in, the two cashiers immediately chime: "Welcome to Fuddrucker's!" We hadn't even gotten to the line yet. Every employee who walked past smiled and wanted to make sure our experience was pleasurable.

I wonder what you have to compensate those employees to get such good behavior. These guys just really seemed passionate about serving me great food. (I'm not joking).

Anyways, I rang the Bell of Great Service tonight as I left. I enjoy it, cause it forces all the employees to yell out, "THANK YOU, PLEASE COME AGAIN!"

Right on.

(And if you visit Fuddrucker's on Broadway in San Diego, stand in front of the door, and count 3 windows up. That's my loft. Woooooo stalk me!)

Posted by roy on February 19, 2008 at 09:47 PM in Ramblings | 1 Comments

<MaxM> ugh all this dynamic sql in pageDA is starting to make it look like php code

Posted by roy on February 20, 2008 at 02:36 PM in Web Development, MindTouch | Add a comment

Do not reheat Cinnabons in the microwave. It tastes like crap.

Posted by roy on February 21, 2008 at 08:49 PM in Ramblings | 5 Comments

Remember when a bunch of analysts were told (incorrectly) that Apple purchased part of AMD, and then the analysts went on to say why this was an awesome move? Nothing makes me laugh more than watching professionals BS through answers.

Of course, it's even funnier when a cab driver is mistaken for an IT expert and is asked for his legal opinions (just check out his face when he realizes they confused him for somebody else):

Anyways, somebody (calling himself Joe Herrick) has been calling into companies' earning calls and asking facetious questions ... and oddly enough, CEOs are playing along:

At least seven times just the past three weeks, a mystery caller has cleverly insinuated himself into the normally well-manicured ritual of the quarterly calls. As top executives of publicly traded companies respond to securities analysts' questions about their balance sheets, he impersonates a well-known analyst to get called upon. Then, usually declaring himself to be "Joe Herrick of Gutterman Research," he launches into his own version of analyst-speak.

"Congratulations on the solid numbers -- you always seem to come through in challenging times," he said to Leo Kiely, president and chief executive officer of Molson Coors Brewing Co., on Feb. 12, convincingly parroting the obsequious banter common to the calls. "Can you provide some more color as to what you are doing for your supply chain initiatives to reduce manufacturing costs per hectoliter, as you originally promised $150 million in synergy or savings to decrease working capital?"

Of course, it annoys the "real" analysts:

"Hey guys. First, this guy, Joe Gutterman [sic], every conference call this quarter, he logs on as somebody's name and asks these crazy efficiency questions," he said. "So going forward keep in mind you should just disconnect him when he dials in. This is like the sixth call in a row he's done that. It's really annoying." Mr. Schmitz speculates that Mr. Herrick is "some minion" at a consulting firm trying to do clandestine research on companies' use of Six Sigma techniques.

Check out the transcripts and the audio clip from the WSJ link for more ... I thoroughly enjoyed it.

Posted by roy on February 23, 2008 at 08:53 PM in Ramblings, Finances | Add a comment

Every time I post a music video, a different person comments approvingly. Today, nobody will post approvingly (or I will lose all respect for you, commenter).

I've been listening to a lot of dance music lately. The best online radio station I've been listening to is iPartyRadio.com. They've even got a desktop application so I can stream dance music ALL THE TIME.

Some awesome band names I've discovered since listening to dance music: Narcotic Thrust and Booty Luv.

Just a few personal notes about the radio station: I really really wish they'd stop playing Rihanna's "Don't Stop the Music." Even by dance music standards, it's a pretty atrocious song.

Is Cascada like the super-group for dance music? iPartyRadio has played the following Cascada (or Cascada remixes) today:

  • Miracle
  • Bad Boy
  • What Do You Want From Me
  • What Hurts the Most
  • Break Up

Don't get me wrong, I love Cascada (ugh). But there's a bit of a "Cascada overload" on iPartyRadio right now.

(One thing that sucks about Cascada is that the songs are so obviously being sung by a female protagonist ["Be my bad boy / be my man / be my week-end lover / but don't be my friend / you can be my bad boy / but understand / that I don't need you in my life again"] that I feel gay singing along [in the most literal sense of the word]).

. . .

Holy crap, this kid is gonna get laid so much when he grows up:

The baby's Korean, too! Guess they pick up those karaoke skills pretty early ...

Posted by roy on February 24, 2008 at 06:00 PM in Music | 1 Comments

A 5 second analysis of the question: "If IP Is Property, Where Is the Property Tax?" leads me to believe that's the best idea ever. It sounds like something those self-serving Congressmen could get passed into law - the government takes a big cut for doing nothing, and you make companies bleed for enforcing "intellectual property."

(Also related: my hatred for patents)

Posted by roy on February 26, 2008 at 09:02 PM in Ramblings | 2 Comments

Edit: I realize this is a longer post than I intended - I couldn't sleep (I now regret not taking my sleeping pills), so I decided to write.

So the short version of this post is this: enterprise software sucks because the buyers aren't the users, and because UI design get unduly influenced by engineers.

You may now skip the rest of the post.

. . .

Much credit to this post, which is pretty much where I'm lifting a lot of ideas from.

Check out this advertisement from Lotus notes, which (Khoi correctly) embodies why enterprise software sucks:

The text:

"Imagine if you could take the qualities of your favorite animals and combine them into one. That's the principle behind the new Lotus Notes 8 from IBM."

Yes, please combine the smelly farts of dogs with the hairball coughing from cats with the shrill chirping of parakeets. That'll really be awesome. Oh, and the gills from fish. I'd really like to keep my dogcatfish in a ginormous dogcatfish tank. (Or maybe I'd just create a manbearpig instead).

Anyways, these types of adverts demonstrate the problem with enterprise software: the buyers of enterprise software are not the users of enterprise software. The people who pay for enterprise software (and thus fund enterprise software) look for 3 things:

  1. High overlap of acronyms for the buyers' existing IT infrastructure with the enterprise softwares' feature lie - stuff like LDAP, Windows * (Forms, Server, Enterprise, take-your-pick-of-MSFT-product), WebDAV tend to play well here
  2. High overlap of acronyms/buzzwords read in latest industry journal - for those really bleeding edge buyers, they'll bust out acronyms like OpenID, AJAX, mashups, and APIs
  3. High degree of control over perceived "disgruntled" employee problems - never mind that Wikipedia seems to function fine with anonymous people editing page - people in the buyers' organization seem to be filled with employees just waiting to risk their paycheck on destroying a wiki (where content is never really destroyed).

Let me expound on that last moment, which leads me up to the second reason why enterprise software sucks.

When a buyer wants more control over their enterprise software, they'll request a feature like: "I'd like to take this one page and allow people from this LDAP group to just comment it, but let people from this group edit it, and then everybody else who is an employee should be able to view it, but our contractors shouldn't be able to see it at all."

Now let me just say there isn't a problem with this feature request. Modern day organizations are complex, and I understand that. But the problem is how it gets solved:

Eager engineer goes, "I understand the underlying data model that I designed underneath the API interface. I'll just write a GUI wrapper to expose it all!" UI engineer goes: "Shit, that's a lot of data! We need to find out the use cases and catch those common cases!" Project manager goes: "WE NEED TO SHIP THIS WEEK. JUST WRAP A GUI AROUND THE FUNCTIONALITY!" So the poor UI engineer has to just "get it done" and dies a little inside, as the confusing enterprise product goes out the door.

This type of screen usually indicates this type of problem:

Now maybe MSFT did throw a lot of money at optimizing the UI. I don't know. I can only speculate, but Lord knows that every time I want to change an option, I want to nest in 3 pop-ups deep.

If you want an example of investment in good UI design paying off, look at Gimp and Photoshop. Both are strikingly similar in functionality, yet nobody can figure out Gimp.

Unfortunately, it's been my experience that when developing features for Deki Wiki, it takes far longer for the UI implementation to be perfected than the actual engineering implementation. The engineering implementation, as daunting as it may be, is discretely measurable: given these inputs, give these outputs. How you want to achieve it (and whether you write clean, maintainable code) doesn't really matter, because as long as the output is correct, you've been successful. Unfortunately, just exposing a UI interface is rarely ever the correct solution.

As we target Deki Wiki more for enterprise sales, there's a natural tendency to de-emphasize the user interface. Instead of focusing on improving existing users' experience with the product, we're more interested in adding features and add-ons that we can sell.

I remember the early days of Deki Wiki were all about user experience. Those were the best days. It's sad that those conversations never come up anymore - nowadays the conversations revolve around me exposing some technical requirement or updating an existing feature to be more "powerful" (synonym for "complex"). The user interface for Deki Wiki is simply taken for granted now, and it stagnates as a result. And although I'm probably the only one who thinks this, I think the user experience is one of the huge reasons why Deki Wiki took off - the interface is clean and the system uses WYSIWYG so no wikitext knowledge is required.

(And now I'm going off on a personal tangent) It becomes such a struggle to implement user-oriented features. When was the last time we implemented a feature for the user? The new version of Deki Wiki has many user experience improvements, but they pale in comparison to the hours we've put in elsewhere. It's just a fact of the matter that for enterprise software, designers, engineers, and project managers rarely have their self-interests line up with the users ... and thus ... users suffer.

So anyways, if you wanted to know why enterprise software sucks, you know why.

And if you want to know, yes, I'm totally guilty of contributing to the suckiness of enterprise software. Oftentimes Corey will come to me with a completely legitimate customer request, and I'll disregard it either because i'm a self-serving (1) engineer who knows better than anybody how functionality should be implemented (2) a designer who claims to know better than anybody how things should be designed and anybody who says otherwise is an idiot or (3) a project manager who's just trying to ship on time. C'est la vie.

Posted by roy on February 27, 2008 at 04:29 AM in Web Development | 2 Comments

I trash 37signals sometimes, but they do some really great posts once in a while: Design Decisions: Calendar picker for Backpack Reminders. It's great to see them iterate through a design process and try to pick the optimal solution based on what user needs.

Posted by roy on February 27, 2008 at 06:03 PM in Ramblings | Add a comment

Hah! From the new MindTouch technology page:

I work on the red sliver. Yay!

(Which just drives home the point in my "why enterprise software sucks post": UI simply does not get much emphasis when selling to enterprise.)

. . .

From a real Deki Wiki customer:

<bigb> can i get a line on the deki testimonial page?
<bigb> "while installing dekiwiki i could help but be overcome by the need to use words such as 'fuck' and 'cunt fuckers' and 'ballsack'. but now, wow!"
Posted by roy on February 28, 2008 at 06:45 PM in Web Development, MindTouch | 2 Comments
« 2008/01 · 2008/03 »