Archive for July, 2006
StreamerNet Icon Redesign Friday, July 7th, 2006 by Mike
About a month ago, my good buddy Michael Ashby came to me with an icon redesign project for the startup company called StreamerNet.
StreamerNet provides individuals and businesses with a variety of very powerful portable streaming services and an application for the PC called StreamerNet Mobile Video Producer. Both their application and services make heavy use of advanced Windows Media features.
StreamerNet wanted to have their original “galaxy” of icons redesigned, with a smoother, more sophisticated and more consistent icon style across the suite. There were also a few changes needed and one new icon to create.
Here are the original icons:

One of my main goals was to clean up the icons and simplify them as much as possible. The icons above have quite a bit of detail in them, though so small that much of it was getting lost, and not clearly suggesting the purpose behind each icon.
I began with the Video Email icon first, establishing a style with sketches, then producing a final icon for approval by the client. StreamerNet liked the first icon’s style and look, so I continued on the other icons.
Because of a tight timeframe, I did sketches for my own concepting, heading directly to final art in Fireworks once I was satisfied with the concepts. There were of course a few tweaks to make on the final art, though not very many.
Here are the final icons:

As you can see, the new icons are a little bit larger, and more consistent in style than the originals, while being a little simpler and clearer. I think the added depth of the new icons also helps them pop off of the screen a bit better than the originals.
The icons are now in use on the Solutions page, as well on the headers for each sub-page linked to the icons, and will most likely be used in the StreamerNet Mobile Video Producer application.
I’m very pleased with the final icons. I think they help tell the story of StreamerNet in an attractive, consistent way, while maintaining and clarifying the original concept.
Spam Filters, Alien Technology and Ruby on Rails Wednesday, July 5th, 2006 by Arto

When Paul Graham’s A Plan for Spam made its dramatic entrance into the anti-spam battle four years ago, it heralded the beginning of the end for spam — as we knew spam back then, anyway. Applying a simple statistical approach, based on word frequency analysis with a naive Bayesian classifier, Graham described how to create a spam filter accurate enough (99+%) that false positives effectively ceased to be an issue.
The central idea of the Graham Algorithm was quickly adopted en masse by spam filters, and as a result, the spam arms race has in the past few years tipped in favor of the good guys. “Successful� spam has devolved into exactly what Graham predicted it would: “some completely neutral text followed by a URL.� For me personally, the combination of good server- and client-side filters has made spam yesterday’s problem. (Well, that, and using Gmail as a front-end for lower-priority e-mail; spam all you want, it’s Google’s problem and they’re up to the task.)
Recently at MakaluMedia, we’ve succeeded in applying similar text classification principles to another unrelated problem area, with the intent of forcing the computer to do the tedious job it was invented for, allowing us super-apes, in turn, to spend more time under a palm tree on the nearby beach, sipping tinto de verano and working out answers to deep existential questions, or whatever else it is that one does on the beach (note to self: need more practice).
The exact details of this covert project will have to await its escape into the wild, should it ever evolve the capability for that. For the time being, some of the technically more interesting tidbits will have to do as fodder for my ramblings.
First, as with most of our internal development, and an ever-increasing percentage of our client projects, this system was developed using the high-productivity Ruby on Rails framework, and reached the magical 0.1.0 mark (i.e., pre-alpha, but usable enough to solve many of the developers’ own needs) in less than a man-week of intensive coding (not to forget the skimming of a good number of research papers related to the subject).
However, to ensure a permanent gap on the competition (after all, it sometimes seems like half the world has already jumped onto Rails), we also pulled out the big guns: the top-secret alien technology known as Lisp.
(Don’t be fooled by the devious code name, intended to confound us earthlings with spurious ideas relating to speech defects — this is seriously powerful stuff: exposure is guaranteed to subtly but permanently alter your brain structure in ways not yet fully understood. In fact, the aliens have theorized that the Universe may actually be one giant Quantum Lisp machine, explaining how it is possible that lots of irritating, seemingly superfluous parentheses can act as magic incantations conveying an apparently inexhaustible power as per the principle of Clarke’s Third Law. But that’s neither here nor there for our present purposes.)
In our case, we simply integrated into the Rails system an interpreter for a subset of Scheme, a Lisp derivative; thus no doubt confirming Greenspun’s Tenth Rule once again. (Well, to be fair, the Lisp interpreter in question is only some few hundred lines of fairly elegant Ruby code.)
The system’s top-level classification and scoring algorithms are implemented in this Lisp subset, allowing us to easily fine-tune and try out new tweaks at runtime, and perhaps in the future letting us semi-automatically pit various competing implementations against each other in a manner not dissimilar to a genetic algorithm.
Due to the combined RAD-factors of Rails and Lisp, we quickly proceeded through a number of intermediate prototypes along the way, starting from a short-lived Ferret-based implementation, evolving to a hand-rolled tokenizer and SQL-backed corpora storage, and eventually ending up with the current version that delegates the content classification to a Dr. Strangelove-inspired piece of excellent software called the CRM114 Controllable Regex Mutilator.
(Speaking of CRM114, I was surprised to not find any existing Ruby bindings for it, and thus took the time to transcribe a previous Python wrapper into a Ruby version, to be released shortly.)
Anyway, the system appears to work more or less according to spec, but definitely still needs some more tweaking before embarking on world domination. For one thing, all this number crunching is, well, rather heavy (let’s just say it’s a good thing we have A/C in the server room where the development box is located). Although CRM114 itself is pretty light on its feet, we’re dealing with an exponentially growing data set, and the next challenge will be to put some checks on resource consumption.
So, for the time being, we’re not going to let the development box interact with our space systems department, to prevent any non-regulated growth or inadvertent contact with the aliens. More updates to follow as they happen.
Note to self: too many tinto veranos can make you forget there’s a fine line between tongue-in-cheek surrealism and plain-bad geek humor.
Update 2006/11/06: I’ve released the Ruby interface to CRM114 on RubyForge.
Life/Business Lessons Learned Saturday, July 1st, 2006 by Matt
It occurred to me today that I’ve been working as a professional for nearly fifteen years. Whoa. It seems like yesterday when I got that first job after university, wondering how it could actually have happened that after five years of studying, I seemed to know nothing applicable to what I was about to do, and looking forward to the day I would be able to write “three years of experience” in my CV.
Anyway, I guess that qualifies me to write a post about general life/business lessons I’ve learned over that time.
Treat people like you want to be treated. The timeless golden rule. Follow this, above all, and you’ll be fine.
Trust is everything. There is nothing more valuable than the currency of trust. It is amazing how nice life can be and what can be achieved, when people truly know that regardless of the circumstances, they can trust you to be fair, honest and truthful.
Remember that trust with someone is like a bank account. At the beginning, it’s empty. Trust isn’t something you can demand or expect; it’s something that’s earned. You go through life making little deposits, and, over time, the benefits increase as the account balance grows. But the most important thing to remember is that a single violation of trust can empty the account (and sometimes irrevocably.)
So be honest. Always. Never lie, not even little ones.
Chase your passion, not money. I’m now convinced that those who focus on doing what they love will find happiness, and, quite often, financial reward, whereas those that chase money often fail, and (more importantly) usually don’t find happiness.
Relationships. As I think back over the opportunities that have come to me personally, and to my company, it is amazing to realize how many were due directly or indirectly to personal relationships.
Be humble. Pride and arrogance act to the detriment of so many things. Never let success or power go to your head, and never allow yourself to feel you’re better than somebody else. We’re all human.
Never act in haste. Be very careful about acting in haste, especially when you’re upset. I can’t tell you the number of times I almost sent off a heated email, only to be so thankful the next day that I didn’t. (And, on the other hand, I can’t tell you the number of times I’ve snapped at somebody, only to really regret it later.)
Perspectives. Always try to understand the other person’s perspective. Each individual sees the world through their own unique colored glasses, biased by their culture, upbringing, personal circumstances and a multitude of other factors. Keep this in mind before insisting that you’re “right”.
Don’t worry too much about planning. Looking back, I could have never planned, nor guessed, the path in the life down which I was led. And I’m certainly glad I didn’t try.
So there you have it, 15 years of experience in a single blog post. I’ve got more to say about these topics, and will soon, but it’s time to get back to work.