To work iron, a hammer is needed, and to have a hammer, it must be made. For this purpose there is need of an other hammer and other tools, and again to get these there is need of other tools, and so on to infinity. In this way one might try to prove, in vain, that men have no power to work iron. But the fact is that at first, with the tools they were born with, men succeeded, however laboriously and imperfectly, in making some very simple things; and when these were made they made other more complex things with less labour and greater perfection; and thus advancing gradually from the simplest works to the making of tools, and from tools to other works and other tools, they have reached a point where they can make very many complex things with little labour. In just the same way the intellect by its inborn power' makes intellectual tools for itself by which it acquires other powers for other intellectual works: and from these works still other tools - or capacity for further investigation - and thus makes steady progress until it reaches the summit of wisdom.
Spinoza - Treatise on the Emendation of the Intellect

On The Gradual Nature Of Improvement

genetic algorithms
Technical Tips

Implementing Genetic Algorithms In Scheme

I’ve been learning a lot of Scheme programming recently, and while learning is great, it’s nothing if you can’t cut your teeth on a project of your own every once in a while. I needed a project. It had to be something not dictated by SICP, something fairly challenging, and also something of decent size. When I first tried reading SICP in college, I’d tried implementing genetic algorithms in it and failed horribly. To see if I’d made any progress I…

Technical Tips

Python Tip: Convert XML Tree To A Dictionary

I was doing a simple XML integration with SOAP service today and it really struck me that a lot of the data manipulation would be easier if the data was a dictionary. In addition, the XML returned was guaranteed to be fairly small and have only a handful of schemas – so a full-blown SAX parser wasn’t really necessary as there was no risk of overflowing memory with the raw XML data. So I decided to write a simple recursive…

Technical Tips

Trying To Recreate An SICP Example In Python

This morning I was playing around and decided to try and recreate an example from Structure and Interpretation of Computer Programs (SICP). Along the way I discovered some unexpected gotchas with how Python scopes closures. The example I was trying to reproduce was the following one: (define (make-account balance) (define (withdraw amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) “Insufficient funds”)) (define (deposit amount) (set! balance (+ balance amount)) balance) (define (dispatch m) (cond ((eq? m ‘withdraw) withdraw)…

Misc Opinion

Why You Shouldn’t Be A Dabbler

One of my favorite books of all time is “The War of Art” by Stephen Pressfield. I’ve read or listened to this book, cover to cover, more times than I care to recount. Yet every time I come back to it something gets freshly reinvigorated within me. You see, what’s incredible about this book is how, in one brilliant maneuver, Steven simplifies the creative persons struggle by naming their primary enemy. He calls it resistance. Resistance is the union of all…

Technical Tips

Better Emacs Rainbow Delimiters Color Scheme

I’ve recently gotten into doing a lot of lisp programming in emacs, and rainbow-delimiters-mode is a huge help in terms of visually finding your way around. What I wasn’t  thrilled with, however, was the default color scheme which is rather bland. So I decided to spice it up. So here’s some better defaults for rainbow delimiters mode: (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;;…


The SICP Picture Language In Racket

Get to the picture language section of SICP and actually want to draw stuff? Find out how below. Some Background About a month ago I decided to start taking my programming more seriously. I realized that I had done very little recently to develop my craft, and so I set out to find some resources to whip my mind back into shape. Since it had been a while I decided it might be nice to start from the basics – even…

Technical Tips

Simple Git Alias To Push The Current Branch

Hey you! Tired of having type all this nonsense just to push up the current git branch?: $ git push origin my-super-long-branch-name 1 $ git push origin my–super–long–branch–name Well fear not, just add this simple git alias to push the current branch: pu = !git branch | grep ‘^\\*’ | cut -c3- | xargs git push origin 1 pu = !git branch | grep ‘^\\*’ | cut –c3– | xargs git push origin And then just type: $ git pu 1…

The original MTurk

MTurk Python Guide: Part 2 – Uploading HITs With Python

  Technologies: Amazon Mechanical Turk, Javascript, Python Alright, we’re back! I know, I know you missed me. Sorry I left you hanging back there with just a HIT and nothing to fill it in with. This one took a bit, but I swear I’m not slacking…I mean, I’m not always on point, but honestly I think a lot of people will benefit from this post so I wanted to make sure I got it right (read: don’t sound clueless). To…


MTurk Python Guide: Part 1 – Creating Your First HIT

Technologies: Amazon Mechanical Turk, Javascript, Python In the previous section I briefly ran you through why you might want to use Mechanical Turk. In this section we’re gonna start putting the rubber into contact with the road by designing our assignment. Here’s what we’ll cover: Creating a new assignment. Determining how much to pay. Using Javascript to improve the effectiveness of your HITs. Careful assignment design is crucial to getting the best results from Mechanical Turk. You should strive to design your assignments knowing that…