In the most basic of terms, idempotence pertains to the property of certain functions to be applied more than once and always returning the same result. While originally a mathematical term, it has since been added into the vocabulary of the computer science world. It has been used from discussing the basic paradigm of functional programming, to databases, to web development. It has such a wide range of uses, its surprising to me that I only in the past few years started really knowing what it means. Let’s step back and really think about the tenets of idempotence and what it means to the programmers of the world.
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.
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.
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.
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.
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.
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.
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.
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.
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.