Nathan Hwang


While busy being an insomniac (well, not really the real deal), in that land between dreams and wakefulness, I thought it would be interesting to known what I was thinking 5 years ago. Even conscious, I think it would be interesting to know what I was thinking 5 years ago. That dude! How could he have been so dumb?! HE WAS ME 5 YEARS AGO ARGHBARGLEHOHOHO.


So dumping thoughts is something I want to do (know thyself and all that), but how to do it?

I could keep a diary, but my handwriting is terrible, and if I can’t read what I wrote, then there’s little point in writing it. Plus, the security on a diary is horrific: there’s one copy (good), that has to have weak authentication to write to it effectively. The main security problem is that reading and writing require the same permissions, which is bad for a long term diary where you want to store frequent dumps of your deepest thoughts.

If I wrote an application, then I could make it easy to write to (little to no authentication) and very difficult to read from (all the authentication in the world). This would solve the security problem: also, digital text does not decay, and generally turns out comprehensible if you can type the right keys. Lastly, if it’s on the web, I can access it essentially anywhere, since my phone goes everywhere with me.

Hence, I made a webapp that makes it easy to write, and has no reading component: interesting reading functionality might come up sooner or later, but I won’t need it for a at least a few months, so I’ll put it off until then.


So you want to use Pensievr? It’s live here: to access it, you’ll need an account with Evernote, and everything else should be self-explanatory. If it isn’t, then I have failed as a designer. Which leads me to…

Making of/Design

Some notes on the making of Pensievr.

First, the plan was to make the application and store the information myself: I was doing this as much for self-tracking as having an excuse to build an app. However, it turned out that figuring out how to really secure an application with Google App Engine might be a bit difficult: sure, it comes with SSL and you can get your hands on a good sessions library, but how could I ensure that *I* wouldn’t look at people’s data, since I as an admin had unfettered access to the datastores? Crypto, as always, is the answer, but by then the scope of the project was growing past something I could do in a day or two during winter break, so I discarded that and looked for services that could securely hold the data for me.

I looked long and hard, but everyone was trying to make the data public, not private: public data would be get traffic and ad dollars, private wouldn’t. Eventually, a friend revealed to me that Evernote indeed had a web interface: I hadn’t realized this, and had mostly voted against Evernote as my store of data because I couldn’t post to it semi-easily before I could make time to make my app. Evernote was perfect: their mission is similar, they focus on private data (opt-in public) and they have a functional API. Hence, I decided to store my data through the Evernote API, and not wrangle with crypto-powers I could barely understand.

Now, to get access to the API I had to wrangle with OAuth. This is the first time I’ve had to deal with OAuth, and it took me a few days to get it right. The Evernote documentation as of January 2012 does leave something to be desired: specifically, it doesn’t conform to something like the documentation of the Python API, which is meant for and built for the web. In contrast, it seems very likely that the Evernote documentation was converted from some word processor like Word, which is… sub-optimal.

Well, that’s that: I also want to talk about some of the design decisions I made in making Pensiver. First, the timestamp that shows up after you post something. I figured that it would be annoying to guess whether or not you’ve posted something in the last hour vs. three hours, about whether you’ve recorded what you ate for dinner or that genius thought you haven’t written down yet, problems exacerbated by the fact reading is difficult (opening another tab! Signing in! Oh no!). To an extent, a timestamp seems to alleviate this.

And finally, those drawings. I wanted some sort of logo, and went with living plant life: your experiences grow, as your thoughts do. Also, I wanted some incentive to come back and keep posting things, if anyone else wanted to give it a shot. Hence, the plant grows the more days you post, changing at a logarithmic rate: the plant changes quickly the first few days, and then changes less and less frequently, until about 256 days out, when it changes for the last time. I considered drawing more plants, but I didn’t want to keep drawing (the shading on the last one took a while), and I can always draw more later.

The plants themselves are mostly line drawings, made with inkscape with a mouse, as I didn’t have a drawing tablet of sorts. The last drawing was shaded with the gimp, and the first (default) image was made with the crosshatching technique detailed here. You want the svgs of the images? They’re right here.


Since I have a history of choosing awful names for my projects, I sat down and thought long and hard about what to name this. First, I wrote down related words, like diary, introspection, self-awareness, and delta (delta, because I wanted to track changes in mental states), and started generating names.

For instance, I came up with Pondent: a combination of ponder and pedant. However, it’s kind of heavy for a super light webapp and doesn’t really match the purpose of the app. Another that I spent some time with was Lintrospection, because I wanted a fancy L, and it fit in front of introspection. However, it was mostly one word, and the L was kind of nonsensical, despite adding visual flair.

In the original list, I had written pensive: after some thought, I realized I had thought of pensieve first, the memory-examining tool from the Harry Potter universe (how HPMOR would handle such a thing, I do not know). However, I didn’t want to step on toes, so I discarded it at first. With the startup tradition of dropping vowels from names, I decided to go with Pensievr: it obviously had roots in pensieve, an object known for examining memories, it wasn’t lifted directly from Harry Potter, and the ending -r was reminiscent of the ending of server, adding a technological flair. Hence, Pensievr.


Do you know what’s awesome? Github is awesome. I developed Pensievr using git, and now the repo is live on Github. If you want to download the code and have git installed, either execute:

git clone git://

or go to the github page and download the code as a zip file (as of January 2011, the button is labeled ZIP).

Yay! You made it to the end of the page! Have a cookie.

2 Responses to “Pensievr”

  1. […] 12:52 am You know what, I just wrote a ton of stuff covering some projects, like dod3catgraph and pensievr, and also documenting my time at Redwood Systems. I’m counting that as four days of writing, […]

  2. […] in other words, it’s a treasure trove of personal data. And you ought to know that I’m somewhat obsessed about personal metrics, and I’m not going to just straight-up delete perfectly good data if I can’t get my […]

Leave a Reply