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


October 22, 2015

So, the other week I was in the store pur­chas­ing some tooth­paste. Now tooth­paste, at least in Amer­i­ca, is a great exam­ple of that phe­nom­enon of a huge num­ber of indif­fer­en­ti­at­able choices you often get when shop­ping at a typ­i­cal gro­cery store. There are maybe a dozen brands of tooth­paste and each brand has maybe a dozen prod­ucts all adver­tis­ing slightly dif­fer­ent advan­tages in the realm of tooth care. One tube of tooth­paste offers defense against cav­i­ties while another adver­tises that it will pre­vent plaque build up. Now, never mind the fact that the default expec­ta­tion is that all brands of tooth­paste will help pre­vent cav­i­ties, there is really no way for the casual shop­per to really eval­u­ate the claims of these dif­fer­ent products.(With the excep­tion of anti-sen­si­tiv­ity tooth­paste where I imag­ine a per­son with sen­si­tive teeth could tell if the tooth­paste helped.) If one uses one brand of tooth­paste for a year and never gets a cav­i­ty, there is gen­er­ally no way to know if it was that tooth­paste which pre­vent­ed, or if any brand would have done.… Read More

Unix, Awk, Perl, and Scsh

January 19, 2015

I’m going to be expand­ing on something I’ve talked about before. This idea of Unix’s sup­posed sim­plic­ity and how Unix has devi­ated over the years rather fas­ci­nates me.

Some years ago I remem­ber read­ing the The Art of Unix Programming by the vocif­er­ous Eric Ray­mond. I remem­ber this book mak­ing a strong impact on how a I thought about sys­tem design and the writ­ing of new pro­grams. TAoUP is not, by itself, a rev­o­lu­tion­ary book. Rather, it is a col­lec­tion of received wis­dom regard­ing the design of the Unix oper­at­ing sys­tem and of pro­grams intended to be run in the Unix envi­ron­ment. I think that the most impor­tant idea put for­ward in the book is the notion of Unix, rather than sim­ply being a plat­form on which to run large com­pli­cated pro­grams, is rather a col­lec­tion of smaller pro­grams, uni­fied by a few metaphors.… Read More

Om and Reagent

January 14, 2015

I’ve been play­ing, of late, with Clo­jure­Script fron­t-ends, specif­i­cally with Om and with Reagent. Between the two, I like Reagent much bet­ter. The short rea­son why is that it feels much more ‘Clo­jur­ish’ and the pro­gram­ming model feels much more acces­si­ble, espe­cially to some­one already famil­iar with Clo­jure/­Clo­jure­Script. Om, by con­trast, feels like a thin­ner wrap­per over React And even though it does a num­ber of neat things, it’s ulti­mately more unwieldy. (I haven’t tried the other Clo­jure­Script React wrap­per, Quiescent. It looks promis­ing, leav­ing the ques­tion of state man­age­ment to devel­oper entire­ly, unlike either Reagent or Om. I’ll have to take a real look at it sometime.)

Both of these frame­works are basi­cally wrap­pers for Reactjs which is one of the more unique Javascript front end frame­works out there. The quick low-­down on React is that it is a tool for gen­er­at­ing a UI (ba­si­cal­ly, your HTML DOM), from appli­ca­tion data. Instead of attempt­ing to mutate a sta­tic DOM in-­place, React effec­tively regen­er­ates the DOM from scratch with every update to the appli­ca­tion data. React has a num­ber of tricks to make this per­for­mant, significantly: cre­at­ing a stripped down vir­tual DOM which the appli­ca­tion code oper­ates on instead of the browser’s actual DOM. Oper­at­ing on the VDOM is quicker than oper­at­ing on the browser’s native DOM and it can be diffed with older ver­sions to allow React to selec­tively update the browser’s DOM. The end result is that using React involves defin­ing a lot of objects called ‘com­po­nents’ which gen­er­ate HTML from plain Javascript data. This means you can sep­a­rate your appli­ca­tion log­ic, which gen­er­ates and oper­ates on the appli­ca­tion state from your UI layer which is merely passed the appli­ca­tion state (or a part of it.) This makes it rather func­tional in con­cep­tion, mak­ing it a good match for Clo­jure­Script, which is strictly func­tion­al… 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.