Ingress: Dangers and First Impressions

I push through the front doors of the US Post Office, my eyes still glued to my Ingress exotic matter (XM) scanner. I’m so going to hack this portal! “Target Acquired,” my cell phone chirped and loud enough for a few other patrons to notice. Oh crap, I may have just made a poor life decision, I thought as I glanced around the federal building.

Ingress is a new augmented reality game created by Google’s Niantic Labs. Imagine a cross between Pac Man, Foursquare, Geocaching, and Capture the Flag all rolled into one app on your phone. You run around town looking at a Google Map-like view gathering energy so that you can capture and defend geographically-distributed portals against an enemy faction.

Luckily, I walked away from my first big Ingress encounter unscathed, unfrisked, and undetained. But, I’m now picturing very different scenarios in the near future with people suspiciously circling buildings, eyes glued to their phones that occasionally make scary, threatening, futuristic sounds. Just ask the Mooninites or that student wearing art composed of exposed electronics, but it doesn’t seem to take much to freak people out these days.

Mooninite device that people freaked out about: . Image from Wikipedia.

The game has placed portals on a number of sites that the broader citizen base may not appreciate seeing trampled including federal buildings, libraries, and even some public middle school grounds. Fire departments also appear to be a very popular location for portals. One fire department with a portal I investigated could not be hacked without driving or walking up into their parking lot, potentially blocking their garage. I took a moment to talk with the on-duty firefighter at the station to get his take on the game and to see if anyone had notified them that their station would now be a part of some geeky capture the flag game. Nope. He hadn’t heard of it and while he sounded intrigued by the concept he did not like the idea of increased traffic pulling into their parking lot. As a local homeowner, I have to agree.

The game is still in beta and perhaps one goal is to identify some of these concerns before unleashing the nerd hordes. Suspected terrorist and arsonist concerns aside, this has been a pretty entertaining game. I’ve hoped for an augmented reality game like this for awhile and I think the folks at Niantic Labs have done a great job. It’s even provided enough motivation for me to get a little extra exercise in as I take walking breaks to hack and recharge portals. I don’t know how the game dynamics will change or scale once more people join the action, but it definitely has my attention for the time being.

Just think twice if Google tells you to visit the local fire department at night and lets revisit portal placement. Make good life choices.

Ingress Activity
Snapshot of Ingress activity in Durham (Nov 2012)

Hello World Update

It’s been awhile since my last real update and a lot’s been going on. First, the good people of Popular Mechanics reached out to me earlier this year about the squirrel/sentry gun project and did a little write-up about it in their September 2012 issue. Having grown up on Popular Mechanics it was very cool and flattering. (I’m still tempted to send away for plans to build a flying ship out of ordinary household vacuum cleaners.) I think my favorite part was getting a cartoon rendering of myself. And to all the people who write to me about their ongoing wildlife battles: stay strong!

Popular Mechanics

Since my last real update, I also left my amazing team to start a new adventure. I am now the Director of Technology at Pruvop. As a digital products laboratory we work on a wide-range of projects, from building functional prototypes for early-stage startups to helping larger organizations streamline their internal processes by integrating intelligent automation software. I’m back in the mud again, designing and building all sorts of cool projects in Downtown Durham. It has been great being surrounded by a cross-functional team (marketing, business, developers) who all appreciate the strengths of agile and lean methodologies.

I hope to be able to share some new developments in the coming months!

Gitosis for Mercurial

As far as DVCSs go I’ve been a git user. That’s mostly because it was the first one I tried and it worked. I’ve been comfy and have enjoyed the world of git and GitHub, but a number of troublemakers have been trying to convince me to give Mercurial a shot. After some nudging I obliged.

After a day or two of toy and experimental projects I started missing one of my primary git utilities–Gitosis. Gitosis is a package that lets you and all your collaborators interact with your git repositories using a single user account over SSH. Gitosis manages user authentication and permissioning using a system of shared keys without ever exposing actual shell functionality.

It took me a little while to find mercurial-server by LShift, which seems to be Mercurial’s equivalent to Gitosis. So, here is how I got Gitosis-style shared key repository management to work with Mercurial.

Installing Mercurial-Server on Ubuntu 9.10 (Karmic)

Luckily, Paul Crowley of LShift, the author of mercurial-server, has volunteered to manage a Debian package for Mercurial-Server, which makes our lives easier. Thanks!

Install the Mercurial-Server Package

Add the following line to your /etc/apt/sources.list file replacing the url with a mirror that’s appropriate for your location:

deb lucid main universe


$ sudo apt-get update
$ sudo apt-get install mercurial mercurial-server

OR, if you want to install the package manually outside of synaptics or apt you can download the .deb from and then:

$ sudo dpkg -i mercurial-server_1.0.1-1_all.deb

Mercurial-Server should now be installed. Additionally, a new user hg has been created and will be used to manage all your interactions with your mercurial repositories.

Setting Up Mercurial-Server Administrator (root)

You now need to grant yourself administrator rights. All permissioning is done with keys, so you’ll need to copy your public key to mercurial-server’s admin keyring:

$ sudo cp /etc/mercurial-server/keys/root/YOURUSERNAME

$ sudo -u hg /usr/share/mercurial-server/refresh-auth

The second command refreshes mercurial-server’s authentication system–authorizing your account as an administrator. You’re good to go!

Managing Mercurial-Server

The hgadmin Repository

Just like gitosis’ gitosis-admin repository, mercurial-server’s functionality can be managed via hgadmin. Go ahead and clone the repo:

$ hg clone ssh://hg@MyMercurialServer/hgadmin

Adding New Users

With your hgadmin repository cloned you can now grant access to new users via their public keys

$ cd hgadmin
$ mkdir -p keys/users/
$ cp ~/ keys/users/kurt
$ hg add
adding keys/users/kurt
$ hg commit -m "Added Kurt's public key"
$ hg push

You can also allow and organize multiple keys per user. In that scenario you create a directory of keys for each user:

$ cd hgadmin
$ mkdir -p keys/users/kurt
$ cp ~/ keys/users/kurt/home
$ cp ~/ keys/users/kurt/work
$ hg add
adding keys/users/kurt/home
adding keys/users/kurt/work
$ hg commit -m "Added keys for Kurt's home and work computers"
$ hg push

Creating New Repositories

As administrator, if you want to create a new repository you simple clone a mercurial project to a path on your mercurial-server. For example:

$ cd my_hg_proj
$ hg clone . ssh://hg@MyMercurialServer/my_hg_project

Now you and your collaborators can clone, push, and pull from the server’s repository just as we did with hgadmin. For example:

$ hg clone ssh://hg@MyMercurialServer/my_hg_project

Managing Repository Permissions

Now that you’ve created your repositories and added users you will want to manage permissions. Repository permissions can be managed through an hgadmin file called access.conf. I recommend reading the mercurial-server documentation for more information on managing security.

So far I’ve found mercurial-server to be a great way to collaborate with others on private repositories outside of Bitbucket. My hat off to Paul Crowley and LShift.