Google Keep

I’m still slightly reeling from the announcement of Google Keep yesterday. If you’ve not been tracking the tech press, here’s their summary:

Every day we all see, hear or think of things we need to remember. Usually we grab a pad of sticky-notes, scribble a reminder and put it on the desk, the fridge or the relevant page of a magazine. Unfortunately, if you’re like me you probably often discover that the desk, fridge or magazine wasn’t such a clever place to leave the note after all…it’s rarely where you need it when you need it.

To solve this problem we’ve created Google Keep. With Keep you can quickly jot ideas down when you think of them and even include checklists and photos to keep track of what’s important to you. Your notes are safely stored in Google Drive and synced to all your devices so you can always have them at hand.

Well, if you read my “hello world” post three days ago, that would sound familiar. This is obviously an idea whose time has come. I started thinking about it last autumn — given that they now have a product, and even the geniuses of Google take a while to write something like this (especially given that unlike me, they have to handle significant scale from day 1), they must have been thinking about it for much longer.

On the other hand, as I posted on Hacker News:

When I was young and naive, reading that one of the big boys was getting into the space where I’d just started a project would have scared me off and I’d have abandoned it. In recent, more clued-up years I’d have thought “ah, market validation!” and ramped up my development effort. Now, in the light of the Reader abandonment, it’s more like a feeling of joy that Google will educate the world about how great an idea this is, and then abandon it just about when I have something that other people might actually want to use.

The idea of a personal space where you can augment your memory by storing thoughts as they happen has existed for centuries. People in the 17th century had commmonplace books. Writers have kept notebooks to jot down plot ideas for equally long. Scientists have long kept logbooks to make sure that they remember every detail of an experiment. I remember my schoolteachers telling me that the lab notes were as important as the experiment itself; they said something like “if you don’t write it down, it didn’t happen”. Googling which (to find attribution) leads me to this lovely article on one person’s search for the ideal note-taking solution. My own search has been similar.

There are a near-infinite number of ways to skin this particular cat. Google Keep seems to be optimised for quick notes taken on the go. This is a great idea, and fits in well with the mobile-first ethos of the tech industry at present. On the other hand, while a mobile-first design was the plan for Memostream (just because it tends to give a better mobile experience). most of the use cases I was considering were more desk-bound. Hence the “Memex for the 21st Century” tagline at the top of this blog.

Perhaps there’s space for more than one product in this market. At least, the itch that I wanted to scratch with Memostream is not quite satisfied with Google Keep — or I think it’s not, rest assured I’ll be using it for the next few weeks to make sure that that’s the case.

Do you think Google keep is the right solution to the kind of problems I’ve been talking about on this blog? Is there a better approach? Let me know in a comment, or — even better — sign up for the beta. As of this writing, I’m still able to keep an individual conversation going with everyone who signs up, so if you do so I’ll definitely drop you a line :-)

Blog setup notes

I think it’s worth blogging for posterity how I set up this blog, complete with Google Analytics. This might be useful for me in the future (there’s definitely an irony that I probably wouldn’t be blogging this if I had Memostream up and working!) and it might help someone else sometime.

I didn’t want to manage the blog infrastructure. I’ve used a bunch of blogging engines, and even written one, but nothing’s ever seemed quite as usable to me as WordPress. But managing a WordPress install would mean managing a server with PHP, which is something I’m ever-less keen on doing. WordPress.com seemed like the ideal solution; set up a blog, pay them $13, set up the DNS for blog.memostream.com to point to memostream.wordpress.com, and you’re done.

And it worked really well. I’m very impressed indeed by the payment mechanism; it’s really smooth and there are a bunch of things we should learn from it at PythonAnywhere.

But there’s one downside. For some reason that I’m sure makes sense to them, but doesn’t to me, WordPress.com won’t let you use Google Analytics. They have their own analytics system, but (a) I wanted the blog’s analytics visible in the same system and in the same breakdown as the main site and (b) I just like the design and data mining capabilities of GA.

A bit of googling around suggested a solution: use CloudFlare. CloudFlare are a company I’ve wanted to try out for a while. They basically take over your DNS and then reverse-proxy your entire site, adding lots of great stuff like CNDing your content and protecting you against DDoS attacks. I first heard about them when the hacktivist group LulzSec turned out to be using them to keep their site up and secure back in 2011. All of that sounded worth checking out in the long term, but one feature in particular sounded cool now. You can add “apps” to your site, and each app works by injecting JavaScript into your HTML when it’s served to clients. One of the apps is for Google Analytics — so if you use it, you can add the GA code to your WordPress.com site without having to get the permission of WordPress.com themselves.

Getting it done was really easy; I just followed these step-by-step instructions by Jonathon Balogh, though it was a bit easier for me because my blog is at blog.memostream.com — all of the problems he mentions in the section entitled “Aside: Please sir, may I have a hostname” are because he wanted to use the “naked” domain jonathonbalogh.com for his blog, which means that he couldn’t use a CNAME redirect in the DNS settings on CloudFlare. This is a limitation of DNS, you can’t use a CNAME for foo.com, only for bar.foo.com.

Anyway, the blog that you’re reading is now hosted on WordPress.com and served via CloudFlare, and the Google Analytics stuff that’s in it was injected by CloudFlare while the data was in transit. Result!

But… there was one final hiccup in the process.

I use joker.com for my domains. They’re a fantastic no-mess no-upsell simple domain name registrar and I’ve been a big fan for many years. One of the many useful things they offer is mail forwarding — if you use their DNS servers, then they’ll handle email to whatever@yourdomain.com and forward it wherever you want (with the normal click-a-link-to-confirm stuff).

Moving DNS to CloudFlare, of course, broke this. Suddenly I could no longer receive email at memostream.com. Now, it’s possible that I could have fixed this by doing appropriate stuff at Joker.com. But I decided to use something else that I’d been planning to try out for a while. I’m probably the last tech guy in the world to have messed around with Google Apps for your Domain, but I’d just never got around to it. It costs money, but not much — $5/month or so. I signed up here, and again the setup was pretty smooth. I’ll give it a go, and if it works out then I’ll stick with it. If it doesn’t… well, I can always try to get it working with Joker again. Or just run my own mail server :-/

Hello, world!

[UPDATE on 20 March] Quite a few people seem to be coming here from Hacker News now that Google Keep has been announced — welcome! — if Memostream sounds interesting to you, then you can now sign up to be notified when the beta is released.

This is a blog about the creation of Memostream.

Memostream is a simple tool I’m building for myself to keep track of thoughts. Imagine a private web page, with a text-entry field at the top. You type something — a memo — into the field, and hit the OK button. The memo appears in a list below, with a timestamp. Type another memo, and hit OK. The new memo is added. At any time, you can search all of the memos you’ve entered. You can access your own memostream from anywhere, and it updates live on one screen if you change it on another. It has offline support, so if you add a memo from your phone when out of coverage, it syncs back to the server when it can and you can see it on your other screens.

What’s the point of that? Well, if you’re anything like me, you forget stuff all the time. In my personal life I rely on my self-propelled exocortex to remember stuff (she’s called Sara and doesn’t like being called an exocortex very much). But for professional things — say, the details of how I solved a particular problem — I rely on a loose collection of text files. For example, here’s an excerpt from when I was setting up my VPS:

Going to the IP address gets the page on my old server that you get if it doesn't recognise the domain. Yay!

Hacked my local hosts file; made www.gilesthomas.com the new machine's IP. It works! Yayer!

Checking out http://www.gilesthomas.com/haproxy?stats and logging in with XXXXX/YYYYYYYY shows a nice chart of what's been happening; pretty neat!

Let's see if we can get rid of that warning message.

Looks like it's because we have "option httplog" in the defaults section, and don't say where we want to log to.

http://www.darkcoding.net/software/proxy-socket-io-and-nginx-on-the-same-port-over-ssl/ gives an example of how to log using rsyslogd, but perhaps I can jsut remove the line?

vi /etc/haproxy/haproxy.cfg

---
global
maxconn 4096
user haproxy
group haproxy
daemon

defaults
log global
mode http
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

listen webcluster *:80
mode http
stats enable
stats auth XXXX:YYYYYYYY
balance roundrobin
option httpchk HEAD / HTTP/1.0
option forwardfor
cookie LSW_WEB insert
option httpclose
server web01 80.68.92.164:80 cookie LSW_WEB01 check
---

root@giles-001:~# /etc/init.d/haproxy restart
* Restarting haproxy haproxy
root@giles-001:~#

Looks better!

Time to commit all this stuff.

---
root@giles-001:~# mkdir giles-001-root-config
root@giles-001:~# cd giles-001-root-config
root@giles-001:~/giles-001-root-config# git init
-bash: git: command not found
---

FFS

---
root@giles-001:~/giles-001-root-config# apt-get install git
...
root@giles-001:~/giles-001-root-config# git init
Initialized empty Git repository in /root/giles-001-root-config/.git/

…and so on.

These files are invaluable. I go back to them and search them all the time when I’m trying to remember exactly how you set up such-and-such a service. Some of them turn into blog posts, when I realise I’ve gone through some process that it’s worth documenting for the world. But most of them don’t, partly because I don’t have the time to polish them up, and partly because I’m not sure other people will find them useful.

But it’s a pain managing them. And frequently I find myself thinking of something that really should be added for next time I start thinking about whatever it was, and I’m on the tube or somewhere and it’s a pain to use Dropbox to get the text file, so I don’t add a note and I forget it. And later kick myself because it was a valuable idea. Sometimes I avoid that by sending myself an email (thanks to Gmail’s offline support) and copying it into the text file later, which seems like a dreadfully roundabout way of doing things.

So that’s the plan. I’ll put together a single stream where I can track all of this stuff. Make it mobile-first, or at least mobile-friendly, with solid offline support. And it won’t only have to be for tech notes — I can keep other stuff that I would otherwise forget in there too. What’s that book Robert recommended last Friday? How did I make that delicious steak and chilli stir fry?

Perhaps use hashtags for some kind of loose organisational structure. If I really want to go to town I can add some kind of app-type thing where a non-hash specific character can send stuff for downstream processing (send to Twitter etc). Maybe add a feature where I can add photos (keywords would be essential then, of course, for searching).

Maybe it would be useful for other people. Scientific logbooks have this kind of structure. Writers keep their Moleskines.

Maybe not. Let’s see.