Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Joins as Matrices

Warning: if you're unfamiliar with SQL Joins, go have a look at the Venn Diagram explanation here.

We'll start with the last example, Cartesian Joins. Recall the definition of a Cartesian Product:

[math]X\times Y = \{\,(x,y)\mid x\in X \ \text{and} \ y\in Y\,\}.[/math]

See Full Post and Comments

Multicore programming with Clojure

This is really just a blurb, not a serious introduction or set of examples. A few months ago I wrote about how I prefer Python's map() to using its List Comprehensions feature even if list comprehensions look and feel more Pythonic. The main reason is because by using map, it makes it simple to extend functional code to multiple cores or machines without changing the original, just by writing a clever version of the map function.

Clojure has such a clever version built-in, called pmap. Basically, it works just like map but applies the mapper function to the input dataset in parallel. (Hence it really shines when the mapper function time dominates.) I just wanted to gush over how awesome it is. Clojure also includes a time macro that makes benchmarking easy. Check out the docs here for an example.

That's it.

See Full Post and Comments

The Graph Nature of Reality

I'm not talking about the real reality that quantum electrodynamics, quantum chromodynamics, and general relativity describe. I'm not making statements about the fundamental level that's the only real level, but about what reality kind of looks like at a bigger scale if you squint my way for a moment.

Nature has tuned us to think heavily in Cause and Effect. A chain, one thing proceeding to the next. Sometimes human choice dictates the direction of that chain, but human choice contains its own cause and effect cycle with choice and consequence. Only a few smart thinkers in history have seen beyond this, and only for a moment. Consider this quote from George Santayana, circa 1905-1906 in The Life of Reason. (Emphasis mine.)

Progress, far from consisting in change, depends on retentiveness. When change is absolute there remains no being to improve and no direction is set for possible improvement: and when experience is not retained, as among savages, infancy is perpetual. Those who cannot remember the past are condemned to repeat it.

See Full Post and Comments

Where did God get his morality?

I don't remember when I first thought this, or perhaps when I first heard it, but as I've considered it more recently I just considered it a clever remark but not particularly substantive. It's of the same order of quip as the other similar quip: "God is, himself, an atheist because He doesn't believe He has a creator. (At least he hasn't said anything about it.)"

It seems like a rather obvious argument to me, but I don't think it's really that obvious to most people, especially people who wonder how atheists could have morality or morals at all. I think a background of programming makes me think of it as obvious: for a good programmer, indirection and recursion start to become natural. "Who created God?" "If this reality is a simulation, is the environment we're simulated in also a simulation?"

The first thing we must realize is that even Divine Morality changes. The Bible has demonstrated that God can change His mind, and a pure historical account of the Catholic Church shows their positions on certain issues differ significantly from their founding views. I don't think this is very controversial, and I don't mean to imply morality can change into anything; it still must fall within certain bounds.

See Full Post and Comments


I distinguish smartness from intelligence in the following way: intelligence, specifically human intelligence, is simply what the human species is and does. Every human has intelligence, and roughly the same as another, from the dumbest idiot to the brainiest genius, barring large amounts of brain damage. This is because we're all the same species, our brains are all more or less the same "hardware", our genes are more or less the same, etc.

The difference between intelligence of a chimp and a human is staggering, even though we share about 95% or so of our DNA with a chimp. Put simply, the smartest chimp can't match the dumbest fully functioning human. There are thoughts a chimp brain is literally incapable of holding due to its design, that a human brain can hold.

Yet there's clearly variation among humans. I call this smartness. Intelligence is a spectrum, with a minimum (a rock) and a maximum (AIXI with some modifications), with humans and chimps occupying points on the line very near each other. I hope we as a species will be able to build the next step up from human intelligence and create something not only smarter than us in every measurable way, but simply more intelligent.

See Full Post and Comments

Aumann's Agreement Theorem

Aumann's agreement theorem, roughly speaking, says that two agents acting rationally (in a certain precise sense) and with common knowledge of each other's beliefs cannot agree to disagree. More specifically, if two people are genuine Bayesians, share common priors, and have common knowledge of each other's current probability assignments, then they must have equal probability assignments.
- Less Wrong Wiki

Whenever someone says "well we'll just have to agree to disagree", the parties involved in the disagreement have failed at presenting their cases. It means that all parties, or maybe just one, are ignorant of some piece of information the other is implicitly using.

This happens a lot, unfortunately. The more your argument depends on, the harder it becomes to actually argue. From a distance such arguments look like a series of each person moving the goal posts of the argument, when in reality they're just trying to get across more prior information the other(s) don't have access to.

See Full Post and Comments

40 + 40 x 0 + 1= ?

Short answer: 41

Long answer part 1: is this to be solved by parsing or by algebra? If it's to be solved by parsing, we need a set of parsing rules, in other words a convention. Grade school teaches things like BEDMAS/PEMDAS, but that's a fairly complex rule operating on groups. Instead let's go with one particular way of computer program parsing that is easy for a beginner programmer to write. The general algorithm goes like this:

Read the first number until the operator is found. Create a tree leaf containing the operator, with a left branch containing the first number read, and a right branch being empty. Read the next symbol: if it's a parenthesis, start over but with the right branch becoming a new "leaf" to hold the next operator. If it's another number, put it into the right branch. Now simplify by applying the leaf operator to both its branches, and storing the result inside the leaf and clipping the branches. Read the next symbol, if it's an operator create a leaf with a left branch containing the resulting value previously computed and a right branch containing nothing... repeat.

See Full Post and Comments