enjoying salad since 1978.

Friday, August 31, 2007

Hacking the 46.

I love this story where Matt Hasselbeck, based on what he's seen and heard on his home TiVo, "hacks" the Panther's defense.

Sunday, August 19, 2007

The future is messaging

Sam Ruby and Tim Bray have each picked messaging systems as a trend to watch in the future. In particular, they are naming Jabber/XMPP as something to watch. While I think XMPP is a great way to connect people to systems or other people, I think there are better ways to connect systems to systems.

Enter AMQP, a protocol designed by the financial industry to replace their existing proprietary message queues with something built on open standards. The working group is made up of seasoned messaging profesionals who are used to having billions of dollars worth of transactions moving through their systems without mysterious delays or drops.

There are two things that stand out in my mind about AMQP.

  1. Payload Fidelity: Any stream of bytes you place in the payload will come out the other end the same way. At the end of this post, I show an example of this. If you can do this with Jabber, please say so. I certainly haven't seen a way to do it.
  2. Queues instead of Buddy Lists: Instead of having human-centric buddy lists like with Jabber, you have accounts who have access to a namespace called a 'virtual host'. Inside of the 'virtual host' are named 'queue's and 'exchange's. Shove messages in one end and read them from the other.

RabbitMQ is an AMQP implementation built in Erlang and using Mnesia. Building clustered, high performance messaging systems in Erlang really plays to that language's strengths, I feel. Erlang seems great at shoveling bits from one network interface, doing some pattern matching on them, changing some bits, and blasting them out another interface.

In my experience, you can have a clustered rabbitmq setup running at home in under 20 minutes. It's all in the admin guide.

Plus that question about transporting binary data over your messaging layer? Here's a hack I wrote serializing Scala objects into RabbitMQ and operating on them on the other side. It will work with your default RabbitMQ installation:

Multiplication class definition

Anecdotally, I've heard that RabbitMQ can saturate a 100Mbps ethernet connection with a single 3Ghz Pentium 4. I have a couple of quad core opteron's (2x2 core) with 16G of RAM and multiple gigabit ethernet interfaces in my basement; Seeing how much processing power is needed to saturate a gigabit ethernet interface is definitely on my ToDo list!

Labels: , , ,

Friday, August 17, 2007

A real-life cold case.

Back in July, I received a jury duty summons. I didn't end up serving but it took 3 long days for the lawyers to finish selecting it. It was for a 20 year old rape and murder case considered San Francisco's first real Cold Case. It looks like that jury just entered deliberation.

Wednesday, August 15, 2007

I'm just BlueFlashin' my Apple ][, yo.

BlueFlash is a "Bluetooth/Disk Controller/Disk Image Archive Card for Apple ][" that allows you to download files for the apple ][ onto your PC and transfer them to your Apple ][ via bluetooth.

Tuesday, August 14, 2007

Weighted Slope One in Scala

Here's a basic procedural version of Weighted Slope One in Scala. It's pretty much a direct port of the Python version. It's about 15 lines longer due to curly braces and Map syntax in Scala not having a few niceties that Python dictionaries have.

Next I'm going to convert it to take advantage of Scala's powerful functional abilities. I'm going to take a stab to see if it lends itself to being a map and reduce. If that fails, I will fall back to good 'ol fold. The goal will be for those for-comprehensions to vanish and reveal an algorithm that's more parallelizable and then to run it on multiple cpus.


Friday, August 10, 2007


Linus says: "'noatime,data=writeback' will quite likely be *quite* noticeable (with different effects for different loads), but almost nobody actually runs that way."

Well, if you need it, you really need it. Otherwise, why would you ever care? I also don't believe in this 10% number people are spouting. How much it effects you will be determined by how many files you access. I think that should be fairly obvious. I've worked on systems that would crash after just a few minutes without noatime. Yikes!

Google meets with the Five Families for Linux patent protection.

All OIN members - including big names such as IBM, NEC, Novell, Philips, Red Hat, and Sony, as well as Google - agree not to use their Linux-related patents against each other, and all have free access to a collection of additional open-source-related patents purchased by the consortium as a whole.

Seems like a good idea. Somebody will eventually have to take out Barzini, though.

Thursday, August 09, 2007

"50 Really Good Indie Games" Unfortunately, all of them look windows only. But there's a lot of fun, innovative games in here. At least, they look fun and innovative from the screenshots.

Sunday, August 05, 2007

Time is an invention of man.

It's exceedingly unclear to pretty much everyone what I do with my time. This was pointed out by my cousin who just called and signed off with a sincere "Ok, have fun with.... well, whatever it is that you do."

Let's take today as an example of what I do with my time.

  1. Stinky the cat woke me up at 6am meowing about being hungry. As I am apprently elderly, I fell asleep at 10pm last night so it wasn't a big deal.
  2. I poured over an old wiki and imported the notes to sidenote, an "outboard brain" application for OS X.
  3. Wrote new notes after being inspired by these existing notes.
  4. Farted around with YUI! for a frontend to my lift app.
  5. Started writing a Weighted Slope One algorithm in Scala. I was interrupted by lunch so I put that in OmniFocus' NextAction queue.
  6. Went to our nephew Kyo's Red egg and ginger party followed by a trip to Target.
  7. Played Burnout Revenge for the Xbox 360. I am currently 25% through the game, I should be done by the end of next week.
  8. Found several sets of instructions for installing Trac on dreamhost. I made a note in OmniFocus.
  9. Stacy programmed the universal remote we picked up at Target (more on that later)
  10. Investigated using an in-memory lucene index instead of something like Splunk. Serialized that into sidenote.
  11. My cousin called and signed off with the above quote.
  12. I wrote this stupid blog post.
  13. Will pick up work on the weighted slope one algorithm.
  14. Stacy and I will decide what's for dinner.
  15. Feed Stinky and Pudding and then retire for the evening.
  16. I'll pick one of the 3 books I'm currently reading and work through it.
  17. Fall asleep in a stupor complaining about something or other.

Most days are a little different. Replace 'red egg and ginger party' with 'exercising' or 'loafing'. Also, I spend too much time using Google Reader, Twitter, and del.icio.us. At least I broke my programming.reddit habit.


HD Sports Guide has the low down on NFL games in HD this year. I only saw Monday Night Football in HD last year and so I'm excited to start seeing local games. DirecTV tries to squeeze nearly $400 out of you to see other teams in HD.

For those of you 49er's fans not local, here's the 4 games you can expect to see:

8/13/2007  Denver Broncos vs. San Francisco 49ers (Pre)  
8:00 PM ESPNHD (720p)

9/10/2007  Arizona Cardinals vs. San Francisco 49ers  
10:15 PM ESPNHD (720p)

11/12/2007  San Francisco 49ers vs. Seattle Seahawks  
8:30 PM ESPNHD (720p)

12/15/2007  Cincinatti Bengals vs. San Francisco 49ers  
8:15 PM      NFL Network (1080i)
If I remember last year, NFL Network HD runs on channel 96. It might be different this year.