Kolmogorov-Uspensky Machine

It happened again. I was sitting down reading a paper and I came across the phrase Kolmogorov-Uspensky machine and I had no idea what it was. My initial reaction was just to move on. It probably wasn’t important, I told myself, just a detail that I could skim over. I took a sip of my tea and continued on. The next paragraph it appeared again. It was just sticking up like a thread waiting to be pulled. Still, I resisted. After all, I wasn’t even near my computer. I would have to get up an walk into the other room. After considering it for a moment, inertia won out and I continued my reading. There it was once more. This time right in the same paragraph, silently mocking me. I knew I had to do something so I strode to my computer and pulled the thread. ...

March 16, 2016 · 6 min · Carin Meier

Fairy Tale Word Vectors

This post continues our exploration from the last blog post Why Hyperdimensional Socks Never Match. We are still working our way through Kanerva’s paper. This time, with the basics of hypervectors under our belts, we’re ready to explore how words can be expressed as context vectors. Once in a high dimensional form, you can compare two words to see how similar they are and even perform reasoning. To kick off our word vector adventure, we need some words. Preferring whimsy over the Google news, our text will be taken from ten freely available fairy tale books on http://www.gutenberg.org/. ...

February 10, 2016 · 9 min · Carin Meier

Why Hyperdimensional Socks Never Match

The nature of computing in hyperdimensions is a strange and wonderful place. I have only started to scratch the surface by reading a paper by Kanerva. Not only is it interesting from a computer science standpoint, it’s also interesting from a cognitive science point of view. In fact, it could hold the key to better model AI and general reasoning. This blog is a casual stroll through some of the main points of Kanerva’s paper along with examples in Clojure to make it tangible. First things first, what is a hyperdimension? ...

February 6, 2016 · 7 min · Carin Meier

Speech Act Classification for Text with Clojure

We humans are quite wonderful. We do amazing things every day without even realizing it. One of them, you are doing right now. You are reading text. Your brain is taking these jumbles of letters and spaces in this sentence, which in linguist terms is called an utterance, and making sense out of it. The individual meanings of sentences might be quite complex. Take for example the utterance, “I like cheese”. To understand it properly, you need to know the meanings of the individual words. In particular, you would need to know that cheese is a tasty food stuff that is made from milk. This would be a detailed and full understanding. But there is a higher level of understanding that we can look at called Speech Acts. ...

October 20, 2015 · 9 min · Carin Meier

Conversations with Datomic - Part 3

This is a continuation of the first and second conversations in which topics such as creating databases, learning facts, querying, and time traveling were discussed. Today’s topics include architecture, caching, and scaling. Human: Hello again Datomic. Ready to talk again? Datomic: Sure. I think you wanted to ask me some questions about how I would fit in with your other systems. Human: Yes. Like I was saying earlier, I think your abilities to learn facts, reason about them, and keep track of the history of all those facts is really great. I am interested in having you work with me every day, but first I want to understand your components so that I can make sure you are a good fit for us. ...

August 25, 2015 · 6 min · Carin Meier

Conversations with Datomic Part 2

The following is a continuation of the first conversation which touched on schema creation and querying. This conversation includes learning new facts, time, and the sometimes unfortunate reality of lawyers. Human: Hi Datomic. I am back from my tea and cookies break. I really enjoyed talking with you, could we continue our conversation? Datomic: Certainly. Let me see, where did we leave off? Human: Let me check my notes. Oh yes, we had created a database and filled it with facts about some dogs and owners. You showed me how to ask you things about the facts, like which dogs liked cheese. ...

August 19, 2015 · 7 min · Carin Meier

Conversations with Datomic

Human: Hi Datomic. I have been hearing good things about you. I would like to talk to you and get to know you. Is that alright? Datomic: Sure! I would be happy to talk with you. What language would you like to converse in? Human: I like Clojure. Datomic: That is one of my favorites too. You know how to setup a Leiningen project right? Human: Oh yes. What dependency should I use? ...

August 15, 2015 · 10 min · Carin Meier

How Not to Panic While Writing a Clojure Book

I made it to that magical moment when the Clojure book I had been working on so long was published and I could actually hold it in my hand. It was an immense project and I am very happy that it is finally done. Since then, I met some people that are interested in writing books as well. They asked if I had any insights or tips having gone through the process as a first time author. I have collected them in this post in hopes that they will be helpful to those going through the process themselves. ...

May 22, 2015 · 7 min · Carin Meier

Partition with Game of Thrones Pugs

Clojure’s partition and partition-all functions are very useful. However, I have been bitten a few times using partition when I really wanted partition-all. So to help myself and all of you to remember it, I have made some diagrams with pugs from the Game of Thrones In code, partition takes a collection and returns a lazy sequence of lists, each containing n items. To demonstrate this with pugs, we will partition 5 pugs into groups of twos. ...

January 26, 2015 · 2 min · Carin Meier

Clojure FizzBuzz without Conditionals

Sure you may have done FizzBuzz before. Maybe you have even done it in Clojure. But have you done it without the use of any conditionals? As your brain starts to work on the how this we be done, you might be wondering why you should do this in the first place? There are two very good reasons for this. The first is that it is a kata. Katas build your code practice ...

November 13, 2014 · 2 min · Carin Meier