Sseveral comments regarding the pinholes post, have forced me,
against the deepest elements of my nature, to engage in thought. Since that might never happen again,
I thought it meet to record the event.

I'm going to say "I" a lot, because this is mostly my opinions.

Bidirectional programming

As pointed out by Christian Schuhegger in a comment on the original post,
lenses were originally introduced to computer science in the context
of bidirectional programming, rather than as a tool for dealing with deeply nested immutable structures.
He points to a good list of papers on the subject
on the …

Lenses are a construct for getting, "setting" or "modifying" values within data structures, especially deeply nested
data structures. The quotation marks have the usual meaning when they show up in funktionsprache:1 not mutating
anything per se, but instead producing an object, or reference thereto, that is identical except for the requested change.

TL;DR

It's not too long, but, to summarize the summary, if you read
Rich Hickey's 2014 blog post on
transducers
first, his 2012 post on
reducers
will be easier to understand.

Brief Definitions

Herewith, all in one place, are Clojuresque definitions of:

reducible

reducing function

transducer

reducer

folder

decomplected

Longer elaborations of these definitions follow in the subsequent section.

reducing function

Anything that can be used as the first argument of the reduce function, e.g.
+ or conj. Generally, it's a binary function that returns something of
the type of its first argument, which is supposed to be a …

In part 1 and part2 of this almost
unbearably exciting
series, I outlined the concept of distributing purely functional programs and went through some implementation
details of Girder.

So far, however, I've only asserted that it works, so today I want to start
explaining how I used Amazon Web Services to test pretty cheaply on gobs of
machines.

The art of AWS wrangling was somewhat new to me, and I went through a few iterations
before deciding on the right mix of tools. Needless to say, the right mix ended up being
fairly Clojure heavy, which helps to smooth out …

I have a confession to make. I don't find comedy funny. There are exceptions - Gilbert
Gottfried and Louis CK can occasionally reduce me to putty - but, by and large, I appreciate
comedy from a technical rather than aesthetic standpoint, combined with an admiration for
and empathy with the drive that compels people to perfect their craft.

I have similar feelings about magicians. Having spent a significant portion of my youth
reading about and reverse-engineering illusions, before concluding that certain qualities
necessary for success in the field are innate rather than learned, and I would always
lack them. For example, I …

Update 2015-01-12

The algorithm as it exists in HEAD is somewhat different from the below,
in ways that I'll describe (eventually) in an another post. In some ways, it's
closer to Fork-Join, but with important differences to support reentrancy,
share results of duplicate requests and adjust for the costs of distribution.

Recap of recap

In a previous post, I introduced a
framework called Girder (the code is on
github), which aims to facilitate
Plain Old Functional Programming on distributed systems. By POFP,
I mean code that, as much as possible, consists of normal looking
calls to normal looking functions, the …

Ever realized you needed to modify some dependency (e.g. I needed to add weak cache support to core.cache), go a head with forking on github, lein install your new version, modify your project.clj to pick it up, and then... somehow... you still seem to get the old version?
That's usually because some other dependency is explicitly requesting a version of that library. If you do lein classpath, you'll see your library show up, in two different versions, with the one you don't want first.

Update 2015-01-12

The algorithm as it exists in HEAD is somewhat different from the below,
in ways that I'll describe (eventually) in an another post. In some ways, it's
closer to Fork-Join, but with important differences to support reentrancy,
share results of duplicate requests and adjust for the costs of distribution.

OSS and Commercial Grids

Grid computing has
always suffered the reputation of a buzzword that one suspects might
not actually mean anything, but it has become especially ill-defined
with the rise of open-source distributed computation frameworks like
Spark, Storm
and Grampa Hadoop. These extensively documented
systems don't need much …

Overkill

After reading my compelling post on a clojure Slack-bot,
an astute reader1 pointed out that using the fullblown apparatus of compojure, jetty, jvm, etc. for something this silly
is really only justified when the entire purpose of the exercise is procrastination. Well, dear astute reader, that was the
entire purpose, but you're right. Ok, here it is in perl,

Procrastination

I really should be working on this obscure distributed RDF/FRP thing, but for various
reasons my head isn't working properly write now. So I did this other stupid thing
instead.

Zippy

Once upon a time, M-x yow in emacs would deliver a nice random quote
from Zippy the Pinhead. Nowadays, you just get

Yow! Legally-imposed CULTURE-reduction is CABBAGE-BRAINED!

which has something to do with copyright law. More specifically, the file yow.lines
in emacs' data-directory now contains only the opinion expressed above, rather than
the original seven-hundred or so precious epigrams, delimited by \000.
I have heard dark …