Dynamic range is a term that describes the range of light intensity, from dark to bright, your camera can capture. Your camera most likely has a dynamic range that is smaller than that of the human eye. This is a limitation that can lead to some frustration on the part of the photographer. However, as with many arts, boundaries can actually help increase your creativity, and enhance your ability to express yourself through your photography. [Read more →]
Tags: photography
Consumer digital cameras have been around for over a decade; now, just about everyone has one. Most people have compact cameras (aka point-and-shoot) that are mostly automatic, while many are now catching onto this dSLR thing. We’re at a point where the majority of people’s personal photos are in a digital form. As a result, your ability to perform basic photo manipulations on your computer has become important.
I’ve spent the past couple years learning these tools, and still I’m no expert. The learning curve is long, but fortunately it’s not too steep. Every new technique you learn immediately improves the quality of your photos. For my part, it took me way too long to find out the most basic, yet most important, operations. It struck me that there is a need for some guidance, so I’m starting this series of articles. [Read more →]
Tags: photography
Apparently, there’s a company called ITA Software that posts interesting software puzzles and invites job applicants to attempt them. I stumbled across this archive page and found the one called “Sling Blade Runner.” The challenge is to construct the longest chain of movie titles in the before & after style of Wheel of Fortune. It sounded like it would produce some funny results, so I dug in.
[Read more →]
Tags: puzzles · python


One of my favorite books about software development, The Pragmatic Programmer, is full of down-to-earth advice for developing quality software. The authors describe several principles and tools that can improve your productivity by orders of magnitude. You’ll see me frequently refer to a core concept of the book called the DRY principle: don’t repeat yourself. Automating as much as possible is one way of following the DRY principle. Today, I want to talk about my experiences with automating software development processes, and why you really need to start doing it, too.
[Read more →]
Tags: automation · tips and tricks
No, I’m not going to wax existential; not today, at least. (Tempting, though.) I wanted to take a moment and set forth some goals for the site. As with everything here, this is for your benefit and mine alike. You should know what to expect as a reader, and I can prod myself to focus the site better.
As a software engineer, and general dabbler in technological arts, I often find myself in poorly charted areas. The web overflows with information, the breadth of which covers all conceivable topics. (See Rule 34.) But once you scratch the surface, the in-depth information you want is often elusive.
Wandering in uncharted territory can be an adventure, but with software, it’s frequently just painful. Worse, it’s not even the kind of pain that makes you stronger. Instead it’s the sort that causes the normally desk-bound mouse to become a projectile. I suppose the modest goal of the knave is to reduce the pain, to share the knowledge I’ve gained in the hope that others find it useful.
There are a few topics in which I have a certain depth of knowledge, which means I’ll tend to stick to them. You’ll see this as the site progresses, but I’m not going to limit myself to a particular subset, nor enumerate them here. As a computer-programming photographer/philosopher, and general student of life, I hope to connect some topics in ways you’ve never seen before. Not every entry will be interesting to the software hacker crowd out there, and that’s okay. I hope you’ll stay for the ones that benefit you; if even a few people find an article helpful, then I’m happy.
As for a more formal list of my goals:
- Inform the technically-minded with in-depth articles
- Prevent you from being eaten by a grue
- Expand my domain of knowledge through these explorations
- Hone my writing skills, which have been getting dusty
- Seek out new life, and new civilizations
As always, I welcome your feedback. Your comments and suggestions help shape this site.
Tags: meta
In the spirit of this LifeHacker entry (and this follow-up), I present my cordless desktop (sort of):

As you can probably tell, I have too much hardware in my workspace (but, but I need it!). For some time, I’ve wanted to do a better job organizing it. I’m not a fan of seeing wires everywhere, let alone getting my feet tangled in them when I’m working. Since I work from home, having an uncluttered work environment is crucial. Taking inspiration from the LifeHacker coolest workspace contest, and sites like Unclutterer, I got to work.
[Read more →]
Tags: clutter · tips and tricks
I’m not going to discuss every Project Euler problem I attempt, but I thought the seventh problem was interesting. The goal of the problem is to identify the 10,001st prime. Several times in the past, I’ve written a simple primality test, the naive way. This time I figured it would be a good opportunity to learn about the Sieve of Eratosthenes, a more efficient algorithm for generating prime numbers.
[Read more →]
Tags: project euler · python
I decided to broaden my horizons a little by learning Python. I’ve been using it internally on some projects, but primarily as a glorified shell scripting language. In order to become more comfortable with Python, I decided I need to write small programs on a regular basis.
Project Euler is a great set of math / programming puzzles, open to anyone to try. You could solve these problems in pretty much any programming language (or, if you’re clever, without a computer at all.) In my case, I’ll use them as a fun way to spend some more time in Python. Feel free to play along, and create an account at their site to track your progress!
Problem 1 asks us to find the sum of all multiples of 3 or 5 below 1000 (fairly trivial). Read on for my solution.
[Read more →]
Tags: project euler · python

Like many topics in the arena of software development, exceptions continue to be a subject of religious debate. Leaving aside the issue of whether they should be used at all (although that sounds like a topic for a future article), I would like to focus for the moment on their proper usage in C++.
Exceptions in modern languages
Exceptions were created as an alternative to previous error-handling mechanisms. They offer simpler error handling, allowing the programmer to defer dealing with problems until as late as possible, and generally without any loss of precision. Error cases can be dealt with at the end of your function, or even ignored completely, and the compiler will generate the necessary code to propagate the error up the stack until it reaches a function that can handle it.
[Read more →]
Tags: c++