RSSAmplifier

Blog

SandyWalsh.com

An ounce of perception. A pound of obscure.

sandywalsh.comRSS feed ↗25 posts

Latest posts

Supporting Rolling Updates ...

On a recent project I needed to use a small database table for detecting conflicts in a large dataset. I knew the schema for this was going to change frequently until the problem was fully understood. The problem I faced was, in our deployment environment, we have thousands of servers that need to get updated on every new branch that lands. In the old days I would simply: stop the client services…

The Monitoring Stack (the state of the art)

Last week I had the pleasure of attending the first annual Monitorama conference. This was a conference aimed "towards advancing the state of open source monitoring and trending software." For many of us starting in this area, our concept of monitors consists of top , some apache , mysql and application log files and perhaps an external ping service that tells us when our web site is unavailable.…

Debugging OpenStack with StackTach and Stacky

At the OpenStack Grizzly Design Summit I introduced StackTach v2. I first introduced StackTach earlier this year but never really had the time to update it. Since then I've been working on business metric collection efforts and StackTach was the perfect tool for it, so it got dusted off. The latest changes to StackTach are up on GitHub . Also, I'm introducing Stacky, which is a command line tool…

OpenStack Nova Internals – pt2 – Services

This is a long one, so go grab a coffee. Recently, I was working on a little OpenStack instrumentation problem. Let me tell you about it. "You can't manage what you can't measure." is how the old saying goes. Certainly no greater truth than trying to increase software performance. This is what I was tasked with ... measuring OpenStack performance. As I mentioned in Part 1 , OpenStack uses Rabbit…

OpenStack Nova Internals – pt1 – Overview

For the last 18 months or so I've been working on the OpenStack Nova project as a core developer . Initially, the project was small enough that you could find your way around the code base pretty easily. Other than being PEP8 compliant there wasn't a whole lot of idioms you needed to follow to get your submissions accepted. But, as with any project, the deeper you get the more subtle the problems…

Out-of-Band Communications ...

Over the years, from junior to senior, I've always difficulty with one particular group of people in office environments ... smokers. Not because of the time they take for their breaks, or the "dirty" habit, or the health risks they're putting themselves at. Hell, I can waste time and put myself at far greater risk in a heart beat. As a non-smoker I just noted that people disappeared for a half an…

The Pain of Unit Tests and Dynamically Typed Languages

Don't get me wrong. I love me some Python and I love me some unit tests. The problem is, I find strict unit tests in dynamically typed languages aren't nearly as useful as they are in statically typed languages. I can hopefully better illustrate this with an example. Let's say we have some code like below. Note: Don't worry about what's actually happening (I completely made it up), but just be…

Effective Units Tests and Integration Tests

A unit is the smallest testable part of an application. More often than not, I see unit tests that forget this core tenet. Picture a method or function as a sandbox. When you are writing a unit test, never let a call get outside of your sandbox. You unit test should be testing the conditional logic and correctness of the code in your sandbox. Let another test worry about all that…

Technical Rabbit Holes …

Last time we had a good discussion about iteration s and how there's a potential for dead-air and confusion near the end of a time-box. Tricky problem with lots of nuances. But there's another place where we can get fooled by the perceived safety of time boxes and iterations. Complex code. Most interesting software is complex. You're not really treading the high-wire when you're cookie cutting…

Iterations and Time-boxing are (Mostly) Useless

Sorry, this is a rather long post, but I've been thinking a lot about Scrum and iterations lately and haven't had time to blast this out in smaller chunks. If you know me, you know I'm not a big fan of Scrum. I don't like the hand-waving concept of Velocity and I don't like the fact that it places a priority on process over code. XP, I feel, is a much more important for software development. Agile…

15 Problems with Old School Technical Support

Last time I checked it was 2011. So why is it I have to deal with these 1990-era call centers when I need customer support? ISP's, cell phone providers, telcos, large retail organizations … it's the same thing every time. I'll just refer to them as BigCo. You know the flow. Something goes wrong with a product or service and you have to contact the company. If you can, you go to their website and…

Software Craftsmanship - Knife Skills, Tools and Art

I have a love/hate relationship with the expression Software Craftsmanship . Jason Gorman has an interesting article entitled " Why Software Craftsmanship Is Not Just About 'Beautiful Code '" and I agree with his points. Don't confuse Craftsmenship with 'Knife Skills'. Cooks with great knife skills in a kitchen are able to try ideas faster because they are not bogged down by the tools. Vim, shell,…

Done ...

There is no such thing as "Done Done". Stop saying it. You can be: 1. Code Complete (proper comments and debugging code removed) 2. Tests written and all tests pass 3. Pull merge from trunk and integration testing done 4. Pushed / Committed 5. Integrated with Trunk 6. Deployed 1 and 2 may be performed in any order appropriate. 3, 4 and 5 may go many iterations and may mean revisiting 1 and 2. 6…

Buying Firewood (aka Becoming a Shirt)

It gets cold in Nova Scotia. My house uses electric heat which is expensive, so I burn wood on cold days. I burn about four face cords of wood over the winter (a Face Cord is 16" x 4' x 8' of wood) Wood needs to be cut, seasoned (dried), delivered, split and stacked before the season starts. Wood comes in hardwood (like Maple) or softwood (like Spruce). Hardwood is better for burning. With tax, a…

State Creep

State kills. It makes concurrency difficult and transactions brittle. State creeps into your program slowly and, over time, makes things difficult to read, understand, manage and maintain. What is state? State is data. But data by itself is not complicated, nor is it something we can do without. When I talk about state, I mean data that affects business logic. Depending on the state of a variable,…

Removing "Configuration Flag" Code ...

I had the pleasure of working on some code with @edleafe recently. It was a change in some existing functionality. This change could be turned from "old way" to "new way" with a configuration flag, which is pretty normal practice and encouraged. The issue with "Configuration Code" is that after a while you have two blocks of code that you have to maintain. One for the old way, one for the new way.…

The Joy of Getting Cardinality Assumptions Wrong ...

(Sorry for the infrequent posts as of late ... just getting back into it. Lots of new fuel to write about. This is just a little note to prime the pump again.) As a developer, I find that some of the biggest code changes arise when my assumptions of "how many" of something I can expect are wrong. I thought there would only be 1 when there are going to be N items. I thought there would be N when…

Bug Triage & Backlogs ... Unseen Broken Windows

Bug reviews are a necessary evil. Your application is out in the wild and, inevitably, bugs will be found. If you're busy working on other things, these bugs usually get stuffed in the bug tracking system for later review. At some point you will sit down with all the product stakeholders and decide what sort of priority to put on these bugs. Everyone needs to agree which bugs are going to get…

The Problem with Java and C# ...

I'm going to stick with saying "Java" in this article, but the same argument applies to C# as well. Replace accordingly. There seems to be a lot of bad sentiment aimed at Java these days. Either complaining about the verbosity of the language, the bloat of the surrounding tools or the mentality of the developers that use it. Other articles seems to talk about how rapidly that community is…

Should You Always Explain Why?

When mentoring apprentice software craftsman there are times when rationale gets lost. You are trying to teach them caution . Caution means slowing down and being attentive to your surroundings so you don't do something dangerous. But if they never get hurt can they really understand why they should be cautious? It's different with children. You don't want them to use the stove or run with…

How long can you work on a programming team before things get stale?

Assuming it involves lots of new learning initially, my gut tells me it's about 1-2 years. Once a developer understands the problem well enough they can start to get antsy. I have a theory that 3yrs is the maximum amount of time a programmer can work in a given problem space before things get routine. It doesn't have much to do with your team or the company ... it's the challenge. The rest is an…

Packaging a Django Application as a Stand-alone Application

Here is a little diversion from my normal Software Craftsmanship ramblings. Recently, I needed to package a Django web app as a stand-alone Windows Application with an installer (see below for the rationale) In order to make this work I needed to get around a few hurdles: Since I'm using Django, I didn't want to customer to have to install Python , so I needed to turn the Python code into an .exe.…

The new Facebook features and how they affect your privacy ...

This isn't a note for you geeks, it's for my friends that aren't geeks and use Facebook. ---- I know many of you don't follow this stuff, so here's the Readers Digest summary of the new Facebook changes made recently, what you can do with it and how private your actions are. As of today, if you visit sites like CNN or IMDB you can now "Like" or "Recommend" articles, products, movies, etc. directly…

Am I a Bad Man for Naming my Classes after Patterns?

A couple of weeks ago a rather innocuous tweet from Nat Pryce ( @natpryce ) flashed on my screen which read: “Pattern names should be obscene so that programmers will not be allowed to name classes after patterns.” It was quickly picked up by the tweet-o-sphere as programmers from all over echoed the chant. But wait … I name my classes after patterns?! Was I committing some sort of programming…

A Tip for Closed Source Software Houses: Hold off on giving Commit Access

In the preface of Kent Beck's fantastic " Extreme Programming Explained " book he spells out the core principles of XP: If code reviews are good, we'll review code all the time (pair programming). If testing is good, everybody will test all the time (unit testing), even the customers (functional testing). If design is good, we'll make it part of everybody's daily business (refactoring). If…