# 2 + 2 = 5 implies Loch Ness

One of the things I like about studying logic and computation is using some of the rigorous mathematical ideas as a grounding for some everyday ‘intuitive’ ideas. One example of this is “ex falso quodlibet” – the principle that “from a contradiction, anything follows”.

Let’s say someone believed something that’s false, call it C (for ‘contradiction’), and they are using C in an argument. In other words, they claim that C is true, when it is actually false. Intuitively, this doesn’t seem ‘good’, but why? What’s wrong with a ‘true contradiction’?

Ex falso quodlibet helps answer this question.

Ex falso quodlibet is a principle of classical logic stating that anything can be proven by using a contradiction as a premise. In our example, ex falso quodlibet says that we can use the ‘true contradiction’ C to prove any statement to be true, regardless of whether the statement is actually true or not.

But wait, this means that we can prove that all “false” things are “true”, and then … everything is true! Ex falso quodlibet shows us that letting a contradiction slip into a logical framework eliminates any way of distinguishing between truth and falsehood. In a way, allowing that single contradiction in as a truth causes the entire framework to ‘explode’ (ex falso quodlibet is also called the principle of explosion).

But besides being useful in proofs and in bending minds, what real-world significance does this have? It may help defend the claims that one probably shouldn’t believe false things, and that it’s probably a good idea to correct inconsistencies in things that one believes. Because otherwise, those contradictions could be used as evidence to ‘prove’ other false ideas. Easier said than done, but ex falso quodlibet illustrates some downsides to keeping C around.

xkcd 704

It also aids in understanding the structure of some snarky comments. Let’s say you’re arguing with a friend about whether Lance Armstrong used performance enhancing drugs. You’re arguing that he did, and you say something like

“Well, if Lance was clean then I’m the queen of England”

In other words, you’re saying,

“Well, if [falsehood is true], then [insert-statement-here is also true]”

A subtle ex falso quodlibet reference.

Or, let’s say your friend was making an argument that the Loch Ness monster exists, using “2+2=5” as a premise. His or her argument is structured as

“2+2=5 implies that the Loch Ness monster exists”

which, by ex falso quodlibet, translates into

So you could respond by saying,

“Well yeah, but due to ex falso quodlibet, 2+2=5 also implies that the Loch Ness monster does not exist”

An extreme example, but as mathematician Terence Tao pointed out, it may show up from time to time.

As a takeaway one-liner for remembering the principle, “absurdity begets absurdity”.

# A Flaw in Nearly Every Email

Once upon a time, I had to write an email parsing library. Part of the assignment involved researching the MIME protocol, and deciding what it took to parse certain parts of a simple email (the MIME rules are complex, so the parser was only supposed to work for simple cases). While looking through the MIME Wikipedia page, I saw something that caught my eye. In almost every email, there is a header with a line that reads:

MIME-Version: 1.0

It turns out that we’ve never moved from version 1.0, and never will.

Why?

The creator of the MIME protocol, Nathaniel Borenstein, attributes it to a flaw in the protocol’s specification. In an interview about the MIME protocol, Borenstein commented,

We did not adequately specify how to handle a future MIME version, so if you write something that knows 1.0, what should you do if you encounter 2.0 or 1.1? I sort of thought it was obvious but it turned out everyone implemented that in different ways. And the result is that it would be just about impossible for the Internet to ever define a 2.0 or a 1.1.

This view is backed up by the protocol’s specification, which explicitly says,

It is not possible to fully specify how a mail reader that conforms with MIME as defined in this document should treat a message that might arrive in the future with some value of MIME-Version other than ‘1.0’.

In GMail, you can open an email and select “Show Original”, and see the MIME-Version, thinking back to the decision made twenty years ago that solidified the version, forever.

Just a bit of interesting trivia that I stumbled upon.

# Story of a Side Project I : Organizing Running News

This is the first of a series of posts about the evolution of one of my projects, feedlier. feedlier is a simple, flexible news aggregator, which was created out of a need for a clean, organized, and customizable way of reading news headlines. feedlier started out as a site focused on running news, called “RunFeed”, and then was generalized to support any news genre. This post is about the initial motivations for creating the site.

## Running News

As a runner, I often find myself browsing the internet for running related news. I like to stay up to date on results, hear about interesting developments in the running world, and generally immerse myself into the world of running. About a year ago, I encountered a few problems and annoyances that motivated me to create a way of organizing running-related news.

## Distractions, Bright Colors, and Interesting Geometry

LetsRun.com is one of the most popular sites for staying up to date in the running world; the site’s content is updated daily, draws from a variety of sources, is maintained by people that are extremely passionate about the sport, and has an active community aspect.

One of the highlights of LetsRun is the sheer amount of curated running news that lands on its homepage. For instance, today their front page contains news from IAAF, yahoo sports, a “Week in Review” summary, a running video, a quote of the day, “News from Indiana”, NCAA news, Recommended Reads, “Mo Farah News”, Marathon Results, a message board summary…and that’s just a third of the page! This sounds great – I’ll just head to LetsRun, and surely I’ll be caught up for the next week! Right?

Well, maybe not. LetsRun’s extreme wealth of content is, in my opinion, also its biggest weakness. As I’m trying to read a headline under the “News From Down Under” section, I have a photo gallery flashing to my left, and a running video playing to my right. Just reading one headline requires a laser-like focus with all the distractions in the periphery.

And wait, what is “News From Down Under” and why is it even at the top of the page, while “Entertaining / Interesting Reads” is hidden towards the bottom, for every user? I’m also interested in catching up on NCAA XC News, but why do I have to search through a sea of differently-sized boxes, bright blue hyperlinks, yellow backgrounds, and walls of text to find it?

Of course, people consume news differently, and I am sure that many people find the LetsRun format satisfying. This isn’t supposed to be a rant against LetsRun – I firmly believe that the site has a positive impact on the running community, and I have a lot of respect for the amount of work that they do to promote running, to keep the site up to date, and to generally act as an online running ‘hub’.

But I found that when I was on the front page, I was doing optical gymnastics and searching for content more often than I was actually reading headlines. As a result, I would end up in the forums instead of getting caught up on news. Moreover, the site didn’t include niche sources, such as HepsTrack, so seeing the running headlines for the day required navigating through multiple web sites.

## RunFeed

So, in an effort to centralize running-related news in an easily digestible form, I came up with the idea for “RunFeed”. In order to solve the frustrations that I had with LetsRun and the fragmentation of running news across multiple sites, I knew that the solution had to fulfill two principles:

1. Simplicity. Catching up on running news, in my opinion, should be easy. It shouldn’t require navigating through multiple pages, searching through a disorganized site, or maintaining a superhuman focus. It should be obvious where the news is coming from, on a single page, and intuitive to use.
2. Elegance. The news should be organized and neat. A user shouldn’t be distracted by inconsistent formatting, color schemes, or multiple content types.

I envisioned a site that simply displayed headlines from running sites across the web, in a neatly organized fashion. The various sites would each have a feed of news headlines, which would be consistently organized. I saw a post on Hacker News about a site called Skim Feed, a site that greatly influenced my idea of what a neat and organized running news site would look like. With these ideas in mind, I set out to do the implementation.

## Coffee and Coding

The simple, single-page design that I had in mind was a perfect opportunity to use Sinatra, a minimalistic Ruby web framework. Indeed, Sinatra’s minimalism seemed to be a good fit for the minimalism I had in mind for RunFeed. I used the Feedzirra gem for parsing RSS feeds from the various running sites in order to get the news headlines and links. Since LetsRun didn’t have an RSS feed, I also wrote a scraper using Nokogiri. After a few cups of coffee and a weekend of hacking at Lovers and Madmen, the site was up! Here’s a screenshot of the original RunFeed, the site that would eventually turn into feedlier.com:

So that’s the story of how the initial idea of feedlier got started. A few reflections:

1. Solve a specific case first, then generalize later.

By making a site for the specific case of running news, I set down a framework that I could generalize and expand upon. Make sure you can solve one thing well before trying to solve everything. Trying to do to much at once could, ironically, lead to not getting anything out the door at all.

2. Merging interests keeps it interesting.

One thing that fueled me to make this in my free time was the fact that it combined web development and running. The combination of two things I’m passionate about made it exciting and interesting.

3. Invent a very slightly modified wheel.

There were existing sites for viewing running news, and existing feed readers. It would’ve been easy to settle for an existing solution, but ultimately, they didn’t fulfill the exact uses I had in mind. Creating “another” feed reading site turned out to be a good learning experience, and resulted in something that exactly solves a specific need.

4. Make an itch scratcher.

As Linus Torvalds said, “Every good work of software starts by scratching a developer’s personal itch”. The hope, of course, is that the site can generalize to also benefit others by ‘scratching’ many people’s ‘itches’.

With RunFeed up and running, the next step was thinking about how the site could become more flexible, customizable, and generalized. I hope to continue with more posts about how feedlier evolved, as well as some of its technical details!

# A First Post

I’m starting up a blog! About a year ago, I blogged a few times over at posterous, which has sadly gone away (along with all of the posts).

A few observations have led me to start a blog. First, random thoughts or ideas seem to get lost in memory unless I write them down. I’ve also seen that putting ideas into words opens the opportunity for refinement and critique; things may make sense ‘in my head’, but writing an idea can reveal gaps, or invite a response. Revealing knowledge gaps is especially important when learning something new; being able to concisely articulate a new idea can be a major step in learning. Also, someone else may find it useful to read!

Well, that was wonderfully abstract: I suppose the rest of the posts will be making the above more concrete.

My first goal is to make at least two blog posts per month.