My name is Andrew Stine. I'm a soft­ware devel­oper and free­lance philoso­pher cur­rently based out of North­ern Vir­ginia and this is my web­site. It's partly a blog, and partly a show­case for dif­fer­ent projects on which I may be work­ing.

You can get in touch with me through

My pub­lic key: Public Key

You can peruse more of my projects on Github.

I also have a Twitter Feed that you can fol­low and I'm on LinkedIn.

Nota bene: If you wish to con­tact me direct­ly, I strongly pre­fer email to phone calls, espe­cially dur­ing work­ing hours. Thanks.


Latest Blog Posts

What constitutes cheating?

July 22, 2014

I just fin­ished read­ing Michael Lewis’s book Flash Boys. Its the first Michael Lewis book I’ve read and I’m not yet cer­tain what I think of him as an author or a jour­nal­ist. I’ll prob­a­bly read a few more before I’m cer­tain.

What I am cer­tain of is that Flash Boys is a very inter­est­ing book. It’s about high fre­quency trad­ing and its effects on the stock mar­ket. It mainly details the less eth­i­cal tac­tics of high fre­quency traders as well as the cre­ation of IEX, a stock exchange designed to counter those tac­tics. It raises some very inter­est­ing ques­tions about the effects of tech­nol­ogy not just on the stock mar­ket but in gen­er­al, and for me, also raises ques­tions about what con­sti­tutes fair-­play in a free mar­ket… Read More

More fun with Clojure lazy sequences

July 13, 2014

Recently I was writ­ing some code to ingest new entries for my church search web­site. The appli­ca­tion is writ­ten in Clo­jure, but the down­load­ing is done with an exter­nal script that down­loads new entries and saves them as files in a direc­to­ry, but at a slow rate. I wanted to be able to spec­ify a range of entries to down­load, and have the script run and then have my appli­ca­tion ingest the files that the script gen­er­ates. I wanted this to work con­cur­rent­ly, with mul­ti­ple down­load­ers and mul­ti­ple ingesters run­ning at the same time. And I wanted all of this to be trig­gered from Clo­jure.

This is basi­cally a con­cur­rency prob­lem so it’s a good thing I was try­ing to do it in using Clo­jure. The most obvi­ous solu­tion would be to launch mul­ti­ple down­load­ers, and then have a thread which watches the direc­to­ry, feed­ing filepaths to ingester threads using chan­nels and core.a­sync. Unfor­tu­nate­ly, I’m stuck using an older ver­sion of Clo­jure for this project for the moment and core.a­sync is not avail­able. Thank­ful­ly, lazy sequences can be used as a sub­sti­tute for chan­nels in a pinch… Read More

Parsing an AJAXy website.

June 24, 2014

Pars­ing a web­site used to be rather straight­for­ward affair: You down­load the web­pages and then you poke through the HTML with reg­u­lar expres­sions until you find what you’re look­ing for. You could set up a pretty good data extrac­tor going in Perl rather quick­ly. Later e replaced the reg­u­lar expres­sions with proper HTML parsers, but on the whole the process remained rather sim­ple.

These days how­ev­er, it’s rarely so sim­ple. AJAX, which is essen­tially the prac­tice of hav­ing the web­page com­mu­ni­cate with the server through javascript, has become so com­mon we don’t even call it AJAX any­more. Now we just call it ‘The way things are done.’(Calling a web­site ‘dy­nam­ic’ is another alternative.) This is nice in a way because it allows web appli­ca­tions to be much more respon­sive and inter­ac­tive. A mod­ern web­site feels more like a client pro­gram than a down­loaded doc­u­ment. On the other hand, this makes it much harder to parse web­pages… Read More

Some of my work:
Nighttime Alert

An evening alarm clock for undis­­­­­ci­­­plined insom­ni­acs


A triv­ial Face­­­book bot which wishes a users friends happy birth­­­day on their birth­­days.

Unix Options

A Com­­­mon Lisp com­­­mand line parser.

source download
Mass On Time

An tool for find­­­ing nearby Catholic masses and sacra­­ments.


Some exten­­­sions to eh cl-­­­fad path­­­name library.

Swank Client

A sim­­­ple com­­­mand line client for swank. This client is writ­ten in Clo­jure and tar­gets Clo­jure Swank specif­i­­cal­­ly.