@Personal / 2018

I designed and developed Munin, a NLP (natural language processing) powered personal database of individual memory. Using a familiar chat-based interface, it empowers people to store their memories by seamlessly defining simple language patterns. These memories can then be retrieved using previously defined patterns.

The database is named after one of the Norse god Odin’s two ravens - Hugin and Munin, who are Thought and Memory respectively. Many smart agent systems choose to characterize themselves as people (often as assistants or secretaries). These systems are often disappointing, failing to understand the simplest human request. I deliberately choose a raven as my logo. Even in mythological form, the raven is still limited in its capabilities and far from human. This idea encourages the user to be curious and accept limitations.

I designed and built this system as a web app in Javascript using browser LocalStorage (via Pouchdb) to maintain a database of memories. I learnt how to build a general-purpose tool, noting that a solid underlying conceptual model with a minimum of scaffolding could be useful if its limited features were expressive enough.


Language as a General Purpose Tool

I’m fascinated by the idea of exposing data structures and algorithms to users, allowing them to fashion their own interfaces suited for their particular needs. As I explored this idea further, I found inspiration in Joel on Software’s writing on Excel as a general purpose tool.

General-purpose tools allow users to fashion their own interfaces to solve problems. I believe this is a far more ethical approach to delivering computing than one-size-fits-all interfaces which deliver some efficiency, but also produce monocultures of thought and action. In building several prototypes for Munin, I realized that the the user could create an interface to enter and retrieve data using NLP applied on the user’s input.

Challenges & Lessons

There is a tension between designing to solve a specific problem and of solving for a more abstracted and general version of the problem. While a general solution can prove too abstract, it can also be applied to a wider class of problems. With Munin, generalizing the problem opened up a whole new realm of possibilities, revealing a twist on the command-line interface.

Screenshots showing a variety of memories that can be stored in Munin. There are no prescribed formats for these memories.


Designing a Language-based Interface

I designed and developed Munin, a personal database in which memories take the form of statements. Munin’s interface is language. To store a new memory, just enter a phrase or sentence. Munin runs a simple NLP parts-of-speech tagger on the entry and stores the results in a database along with some metadata. To retrieve memories, a question (phrase or statement ending in a “?”) is used. The parts-of-speech of the question is used to retrieve entered memories. The attached metadata allows for more context-aware querying, allowing for the use of “today, yesterday, last week, etc” to filter memories.

Challenges & Lessons

Designing Munin meant that I had to let go of my desire to define all of the system’s behavior. I had to allow the user to make mistakes. I discovered that using the system, understanding its limitations and its capabilities was a necessary part of learning to use it.

Screenshots showing how stored memories can be retrieved using a full question or just a few phrases.


Learning and Evolving a General-Purpose Tool

I used Munin over a few weeks, to track my spending, how often I watered my plants, how I was feeling, the number of steps I walked, and various other habits and routines. Because of its simple text command interface, I could use it for a variety of purposes without needing a new app or having to learn a whole new interface. Furthermore, by being able to define the actual sentence (format) I want to use, I could define an interface to store and retrieve memories.

Challenges & Lessons

By choosing a powerful conceptual model, I incorporated flexibility into the tool so it could be used in many ways. Unfortunately, creating the system as a website with localstorage limited how easily I could use it, especially considering the uneven support on mobile browsers.

Screenshot showing how a concept can be "taught" to the system, and then used to retrieve memories.

Next Steps

A system with such wide applicability relies on ease of access in many contexts. An existing textual interface such as WhatsApp or SMS are an ideal platform to build on. I am currently building a SMS-based interface for Munin (using Twilio).