RSSAmplifier

Blog

changedmy.name

changedmy.nameRSS feed ↗64 posts

Latest posts

Approaching Problems

I’ve been thinking about post-mortem processes recently, as we’ve been expanding the group of people involved in our post-mortems and we need to make sure they’re all prepared on how to make post-mortems effective and blameless. One of the aspects is making sure we clearly separate identified problems from potential solutions ; most people tend to jump directly into ways to prevent the incident…

GAS

A few weeks ago, as my long-delayed senior project was coming to a close, I started thinking about what I should focus on next. The real answer, as Jenee helpfully pointed out, is writing wedding thank you notes, but I’ve also selfishly decided to start again on Growing Up , the introductory book on web operations that I got an introduction and a chapter through several years ago, before putting…

Roland TD-15K Review

I’ve been thinking about this for a while, so this is a long review in three parts. First, we’ll start off with a brief background on me. This will be followed by a review of all the components of the TD-15K and a conclusion comparing the drumset to the other options you’ll likely be considering. Background I grew up the son of a piano teacher, and thus grew up a pianist. When I was in fifth…

Software Engineering in Systems Administration

I am a Web Operations Engineer . While this encompasses a broad spectrum of duties, it boils down to ensuring ifixit.com spends as little time in failure states as possible. Or, to be more colloquial: Ensure shit works. While there are obviously technical problems abounding in such a technical context, my interest lies more in the human factors of failure - an interest that leads to a rather…

Sheet Music: Documentation for Musicians

Musicians of all sorts are constantly practicing to improve their ability to manifest the music in their heads into the instruments they play. Where there is a large split is in how that music gets into their heads in the first place. Some people are very good at playing by ear - they hear a song, know where those notes lay on their instrument, and can reproduce it fairly easily. This gives them a…

The Myth of the Informed Consumer

One of the primary problems of unregulated capitalism (that is, of the libertarian variety [1] ) is the assumption of a perfectly-informed consumer. We do not need regulatory laws, we say, because the market will regulate itself. If a merchant sells shoddy products, he will soon find himself out of business from a lack of customers. While the assumption an unhappy customer will advertise their…

Discovering Secrets

I use LastPass as my password manager of choice. One of the features available to LastPass users is password sharing , and one of the features of password sharing is the ability to choose whether the sharee will be able to view the password. Despite the strong language in the sharing dialog (“password will remain a secret” vs. “password will be obtainable”), the LastPass help article (which I’m…

On Long-View Giving

GiveWell is the lesser-known cousin of Charity Navigator - an organization created for rating charities. GiveWell distinguishes itself with in-depth research. But this comes at a price - they can evaluate fewer charities than Charity Navigator. And in fact, they recommend only three , and focus their research efforts on those . GiveWell is founded on utilitarian principles similar to those…

Don't Waste Programming

One of my coworkers recently created a distributed queueing system. There are about one billion of these already . I see this sort of thing all the time, and it frustrates me to no end, because there’s no point to it. Yes, yes, I’m familiar with the arguments: Oh, I didn’t know about any of those. (Then spend thirty seconds researching first.) I just wanted something that was simple. (Right.…

We're Almost There with Well Repair

I recently ran across Integrated Community Development International (ICDI), one of many charities working to bring clean water to rural Africa. One thing sets ICDI apart - a focus on well maintenance. ICDI claims 60% of wells in the Central African Republic are non-functional. As others have noted , it’s far more attractive for donors to give to building a new well, or school, or something else…

The Importance of Programming in the Modern Age

I found myself musing once again over my motivation for programming - I’ll save you the reading and tell you that it’s not the problem solving, but the potential for creative expression that gets me. Programmers are the wizards of the modern age, creating anything they can imagine out of absolutely nothing. And this lead me to a realization: The ability to program is the great democratization. It…

Taking Another Look at the NSA Surveillance

As others have pointed out , it seems a bit silly for Americans to be outraged at the data the NSA has been collecting on them while we willingly give every detail of our lives to corporations. Commentors have responded that the distinction is important, because the government can censor us, while Facebook can merely prevent us from expressing ourselves on Facebook. And how important is that,…

Why Python Encourages Maintainable Systems

I love Python . I don’t think it’s the right answer for everything, but I do act as its advocate for many new projects. Since most of my programming has been spent working with legacy systems, I am primarily concerned with maintainability, and Python is built on two ideas that directly benefit that cause: explicitness and a culture of documentation. Explicitness If you run import this in a Python…

On Being a Volunteer Sysadmin

It’s kinda hard to do. The actual process isn’t difficult (you just do work, like you would normally), but finding out how to contribute is much more of a PITA than it should be. Most notably, it’s more difficult than it is for programmers. The open-source software movement has grown over the last 30 years to be continually easier to join, at least from a technical perspective. For simple changes,…

On the Freedom of Data

This post is part of Mothball March, where I dust off old posts I never quite finished. This is a more-final version of something I originally wrote in December 2012. In the 1980s, a young computer programmer named Richard Stallman started the Free Software Foundation with the goal of promoting “free software”, software that granted its users a number of rights, including the right to view the…

Considering Ethics in Employment

I’ve been reading some Peter Singer recently, particularly his writings on poverty. The very-short conclusion to his argument is that those of us living in developed nations are morally obligated to give to charities to supported those who need help most, in as high a quantity as we can give without being hurting our lifestyle (or our dependents’) in any significant way. As an example, you could…

Easy-Peasy User Testing

Steam ’s recent Linux celebration sale brought a number of new games into my life. They are, on the whole, fun little games, well-deserving of the $2.50 or so I paid for them. There are a surprising number, however, that do something very important very incorrectly: Tell me what to do. It’s such a simple thing, but it can ruin my opinion of your game in 30 seconds. Some games I launch, start the…

Ubiquitous Programming Problems

I am very much a supporter of the open-source movement. An essay on the moral obligation to open-source your software has been rattling around in my head for the past few weeks, and while I was mulling this over in the shower this morning, I realized something: most of my programmer colleagues don’t open-source their work because they don’t have any work to open-source. This might sound strange -…

Using Gnuplot for Great Justice!

This post was originally published on It Broke And iFixit . We here at iFixit are big fans of Graphite , but sometimes I want to plot data that hasn’t made its way into Graphite yet. For instance, today I wanted to see how our CSRF failures have changed over time. Since we log every failure, we can pull out instances pretty easily with grep : [$]> grep CSRF php_debug.log | head -n 5 Oct 1 01:16:39…

Life Goals and Personal Finances

Today I went to a talk at Silicon Valley Code Camp that was about managing your time effectively by using life goals. I’m summarizing horribly, but the basic idea was that you’d give yourself a goal in each of 7 areas (I think it was based on The Seven Habits of Highly Effective People ) - a goal you’d like to achieve in 10 years. Then, you try to figure out what your plans should be for the next…

Simple Apache Access Log Analysis

This post was originally published on It Broke And iFixit . Although there exist excellent tools for doing full log analysis, sometimes you just want to quickly pull out a little information. I recently found myself wanting to parse a section of our Apache access logs and find IPs consistently hitting the same URLs over and over. This lead to a line of awk , sort , uniq and grep chained together…

Are Low Test Scores Our Enemy?

I watched “Waiting for Superman” today. I had been impatiently waiting for an opportunity to do so since I found out about it several weeks ago; I think education is extremely important in life and feel the public schooling system here in the United States has in many ways discouraged students from becoming further educated. A documentary that critiques this system, then, filled me with…

I For One Welcome Our New Robot Overlords

Programmers and system administrators love control. We like to micro-manage eensy-bitsy details so they’re just how we want them, even if the defaults would be perfectly within a normal person’s parameters. As a Linux sysadmin, I find myself particularly this way when it comes to my servers. I hand-configure all the individual pieces of software and lovingly place them together. This gives me an…

On the Importance of Documentation

It’s your first day at Boppin’ Burgers. After changing into your uniform and shaking hands with your fellow employees, you’re sent off by Bill, your manager, to go do some work. “Don’t worry,”, he says. “Here’s an order we just finished. Just make ‘em like this.”. You look at the burger: slightly toasted bun, pattie slightly off-center, cheese dripping over the edge. You’re practically hopping…

Open-Source as an Integral Part of Development

Every time I start working on a new piece of code, my workflow is something like this: Come up with a name. If none within 30 seconds, choose an unused one from the Wikipedia list of Cats characters. Create directory in ~/Documents and cd into it. tmux new -s project-name git init Create a new tmux window. vim I create a git repository before I even open my text editor or a REPL. As soon as I…

What Can the iPad Teach Us About Software Engineering?

Software engineering is interesting. You see, first computer science sprouted out of math as a way to solve a bunch of problems that were previously computationally infeasible. As we stretched the limits of computation more and more, though, we started to run into problems with these large systems we had created. So, reluctantly, the mathematicians turned to those smug know-it-alls, the engineers.…

Beautifully Indirect Interview Questions

As I’m graduating soon, I’ve been interviewing with a number of companies. One of them had a wonderful way of getting to know my opinion on testing without asking me directly. After all, if asked “Do you think testing is important?”, pretty much everyone will say yes. In practice, though, we see that most code ends up with a distinct lack of tests. In my case, I can see the benefits of testing,…

The Programmer's UI

I keep finding The Design of Everyday Things more and more useful, both in understanding why things are the way they are and in helping me improve my own designs. If you don’t have a copy of it, go get one. I’ll wait. Ok, now that you’re back, I’d like to share how it helped me process the reasons for the existence of one of our users’ most dreaded enemies: The Programmer’s UI You’ve seen it. The…

The Importance of Usability in Regards to Fire Fighting

For Christmas, my parents thoughtfully presented me with a copy of Web Operations , a book in which a number of well-known people in, well, the web operations field write about… web operations. Anyways, one of the chapters contains an essay by Richard Cook entitled “ How Complex Systems Fail ”, with commentary from John Allspaw . The thing that struck me the most out of those points was the…

IDEs are Uncohesive

I dislike IDEs. I enjoy being able to swap out pieces of my development toolchain, bit by bit, without having to wait for someone to write a new plugin. I am a grumpy Unix programmer. This Fall quarter, I took a class about software design. Yes, yes, the course title is “Individual Software Development”, but that’s not at all what it was about. We discussed CRC cards , Design Patterns ,…

The Relationship Between Static Typing and Dependency Resolution

They seem similar, to me. In a statically-typed language, you specify that whoever’s using your code better give you an AbstractBullshitFactoryFactory or else there’ll be hell to pay. Similarly, a packager for a package manager with dependency resolution will tell the package manager that dammit, you need cups installed or else things just won’t work. Contrast this to a dynamically-typed language…

Why Programmers are Egotistical

I’m reading through The Design of Everyday Things right now. There’s a small section in the second chapter about learned helplessness and taught helplessness, where the basic idea presented is that when people fail repeatedly on a seemingly easy task, they come to believe that it’s impossible (for them) and just stop trying. This violently reminded me of a number of incidents I’ve seen while a…

Git's Staging Index is for the Real World

I love git. One thing I love most about it is the staging index : With most other version control systems, there’s 2 places to store data: your working copy (the folders/files that you’re currently using) and the datastore (where the version control decides how to pack and store your changes). In Git there’s a third option: the staging area (or index). It’s basically a loading dock where you get…

Rate-Unlimited Internet

In recent months, our house has had blessedly little contact with Charter, our ISP. We did get contacted in February, however, because I was attempting to regain data that I had lost in a tragic sysadminning accident - and apparently they aren’t happy about us downloading a terabyte and a half in a month. You see, Charter (like most other American ISPs) has traffic caps. Now, I have no problem…

Architects and Computer Science and Sealing Wax

Any student in a Computer Science-y program has undoubtably heard their goal described as “a degree in computers”. Now, this doesn’t bother me as much as many others, but it is still a gross oversimplication. That is not my topic today, though. The more sophisticated outsider will believe that our degree is in programming. And who can blame them? We certainly spend enough time doing it, yet we are…

On the Inconsistency of the OS X Focus Model

I recently switched jobs. My new work computer is a MacBook, so I am once again working primarily on OS X, something I haven’t done in a few years. Now, don’t get me wrong - I haven’t gone and installed Arch Linux on it yet, so I obviously find it decent enough to spend hours of my life with. However, there are a few things that are just incredibly irritating about the OS - and the focus model is…

Why Python's Modules Are Badass

I like learning new languages. While I may not agree with all of the designers’ decisions, every non- esoteric language provides things to learn from. One of my favorite things about Python is its approach to modules and namespaces. Creating a module is easy In the simplist cases, nothing special is needed. Want to use a class Foo defined in awesome.py ? Just from awesome import Foo and you can…

Why I Don't Use Text Messaging

That’s right - I am a 21-year old Software Engineering major who doesn’t use text messaging. Not only that, but it’s disabled entirely on my phone, so I don’t receive texts either. Why, you ask? Having anticipated your potential question and bated you into asking it, I have kindly provided answers below. Your whole feces lights up when she’s in the room I have a flip-phone. You know, those things…

Where I Talk About Myself

It’s well-known that putting people to work in the right area can make all the difference between your star employee and the one who burns the building down. I seem to be more particular than most, so in addition to working on my discipline to do what I’d rather not, I thought I’d give any future managers a quick overview of my inclinations. I specialize in generality. That is to say, I love…

Dammit, my eyes!

You’ll want to be going here .

Ruby for a long-term project? Eh...

The other night, my housemate and I were discussing language choices for a project, and he mentioned Ruby. I surprised him by stating, I wouldn’t let you start a team project in Ruby. People who have talked with me might find this a bit strange. I love Ruby, use it in quite a few of my projects, and will tell anyone who listens about how Ruby takes the best parts of several different languages and…

A Software Maintenance Course

I love my department . I really do. I hear complaints from students elsewhere about having mostly theory-only classes, feeling like they’re receiving a Java certification, not touching on functional languages, not doing any team projects, not learning about version control, and I can proudly say that we do not have those issues. Now, it’s not perfect, certainly. But, I have much hope that it will…

Fixing Rake in Ruby 1.9.2

When a task in Rake fails, Rake is supposed to simply tell me it failed and then tell me to use the --trace option if I want to know more. However, tonight it was acting as though I always called it with --trace : ┌─[pearson@Bragi] - [~/temp] - [Sun Oct 24, 11:41] └─[$]> cat Rakefile task :foo do fail end ┌─[pearson@Bragi] - [~/temp] - [Sun Oct 24, 11:43] └─[$]> /usr/bin/rake foo (in…

Erratic Programmers

I am an erratic programmer. I flit around from project to project, never staying long, even if I end up contributing for a long time overall. This is why I love GitHub, git, and Ruby. When I have an idea for a project, I can’t be arsed to set up Subversion; git init is all I need to start keeping revisions. After I’ve done a bit of hacking, I need to be able to throw it up somewhere more safe than…

The Quality of the PHP Source

I ran across this gem in the PHP source today: /* MD% crypt implementation using the windows CryptoApi */ It worries me that a commit where a 5 is replaced with % made it through, even if it is only in a comment.

The Importance of Limiting Functions to One Thing

One of the reasons I love dynamically-typed languages is that they tend to allow a programmer to use old unmaintained code in ways the original author didn’t anticipate. This is especially important if you’re trying to interface with a library that the user will likely already have installed previously, so you’d rather not vendorize it (include it in your source directly). Using a…

Differing Usage of Python and Ruby

I love using Ruby for quick one-off scripts that don’t even deserve to be placed in a file. For instance, I did something rather stupid the other night (deleted all the .specification files of my installed RubyGems), and, while my gems all still worked fine, gem has no idea they existed, which is a Bad Thing. Anyways, I wanted to reinstall all of my gems: ┌─[pearson@Bragi] - [~] - [Tue Aug 03,…

HTML Templating in Ruby

(or “Why I moved a project to Python”) I have a relatively simple project that requires me to scrape off a few paragraphs from a website, then print ‘em out in a nice HTML page. Well, right now it’s not so nice: which is why I decided to make an actual full-fledged HTML page, with <body> tags and everything! Since I didn’t really want to output HTML directly from Ruby, I went looking for a nice,…

Moving to vim

I really want to move from Komodo to vim. Sure, I love Komodo , but sometimes it can just be freakin’ annoying. So, here’s a list of things I want vim to be able to do for me to switch: Display line numbers Split screen horizontally or vertically, and move files between the two Show a tree-based overview of a directory (preferably with the ability to open files from there). Showing and hiding this…

How I Define Program Size

A small program fits entirely in your head. A medium program will not, but you can hold the overall structure and one piece in memory. When you need to work on something other than your current section, you know enough about the program on the whole that you know where to look, and can pick up that piece fairly easily. A large program is like several medium programs mushed together - you know…