I code, therefore I am... nerdy

Ludicrous Speed: Sockets

With the popularity boom of internet and intranet based software solutions, and the push for more Service Oriented Architecture (SOA) systems, network software usage is at an all time high. Of course, many of the systems created are built upon highly abstracted frameworks, so they don’t have to worry much about sockets. However, there is a high demand for working on those frameworks and internal networking software that requires a deep knowledge of network systems and pushing the speed limits on the same hardware.

In a previous life, I worked on high speed trading software where our traders worried about millisecond delays. We pushed and received so much data that a standard TCP/UDP system could not come close to keeping up, even on multicore machines with gigabit connections. What this describes is a post-mortem of my learning process.

Becoming Great

As software developers or engineers, we are constantly on the prowl to improve our development and design skills. There are thousands of books, countless blogs, and over 1400 languages (based on the results seen at 99 Bottles of Beer). There are only 24 hours in a day and most of it is spent working, sleeping, commuting; just living our lives. Who really has the time to keep up with how quickly technology is moving? It’s just not humanly possible. We have to stop trying to become experts and start becoming good enough. This is when we will truly become great.

2012 - End of the (Tech Bubble) World?


Startups are everywhere. They are the hot ticket item. Get millions of people to join your website, and you are a rich man. I’m not deeply tied in with the startup community, but I personally know a few people doing startups, and I can see flaws in their business model. Still, the market has shown recently that they will still “violently fund” these startups without any plans for profits. All this sounds too familiar.

My Must Have Gems

"Ruby Gems"

When you create a new rails project, there are a few gems that you require to even get started. While rails does have a lot built into itself to help start you off in creating great applications, I find myself in need of a more complete starting point. I’ve compiled a short list of my most commonly used gems in new rails projects.

A New Face: Octopress and Jekyll


If you’ve been reading this site in the past, you may have noticed a face lift. This isn’t just a face lift, but a complete rewrite of the blog software that I use. I used to be hosting this site on wordpress, but I found I was battling the system too often and trying to find work arounds for the quirks. Now this site is just a bunch of static HTML files that were nicely generated using Octopress and Jekyll. This should significantly improve the speed of the site and allow me to write more often (with more code examples). I’m also finally able to host on “the cloud” using Amazon’s S3 service which finally allows me to do automated deployments. As an added bonus, it also increases my geek status.

Why I Chose Rails Over MVC

As a C++ and .NET developer for most of my career, some people found it odd that I would switch up and jump on the Ruby on Rails bandwagon this late in the game. I had fallen in love with ASP.NET MVC because the true simplicity of its web development, and while I found some of the quirks of Ruby and Rails initially annoying, I’m now a true believer in Rails and what it can do.

Cross Platform .NET

Working on software that runs on multiple machines can be time consuming, error prone, and complicated. Not only do each of the three major operating systems have different style guidelines, but they even have different standard programming languages. Mac OS X has Objective C and Cocoa, Windows has .NET and WPF, and Linux has C/C++ and GTK+ or KDE. No wonder cross platform applications look so out of place. However, as unlikely as it may seem, .NET may be the best solution to the native looking cross platform problem.

Version Numbers… Aren’t They Supposed to Mean Something?

Software that’s been out for many years: v0.71. Google Chrome that’s been out for a short time: v12.0. What has happened to version numbers that meant something? They have become a way of trying to show market dominance, or a way from hiding from your users. Worse is the software that is so afraid of version 1.0 that they will increment so slowly that we don’t know if it’s worth upgrading. Looking at a version number for a piece of software no longer tells me anything.

Why Are You Still Crashing?

"Windows Error" I know this is going to be a bit of a controversial topic, but this has come to bite me recently. An application that I recently purchased that allowed me to access GitHub from my iPhone now crashes every time I start it up due to GitHub updating their API. I don’t mean it shows an error message, but crashes back to the home screen. Obviously this is a major annoyance to anyone trying to use the app as seen by the recent negative reviews it has been receiving. Of course, the update to fix the bug was sent to Apple within the same day, but we all know how fast Apple can be with their review process.

Grokking Sockets: Data Link Layer

I know I’ve scared away a lot of my audience when I started talking hardware last time. Well, do not fret because we are starting up the stack with a software (firmware) layer. The data link layer is how we, the software guys, fix the problems incurred on the hardware. It’s the layer that does the communication from one computer to another; what actual bits are being sent. It also detects bit errors if for whatever reasons the data is corrupted. It’s an important layer, although easily forgotten because it’s usually handled by your network card. Even though it’s hidden, you need to understand it because it is the final step in transmission before hardware.