I recently helped install an IP camera deployment in a home and ran into some weird issues so I figured I’d post here in case anyone else had a similar problem. This will also be useful for anyone who has too many devices on their network for a typical home router to handle.

;tldr - You need to setup a computer to act as a router for a secondary network that will forward traffic between networks and from the secondary network to the outside world. Jump to Configuration Section

Read More

When starting a project, one is often faced with the choice between multiple open source libraries vs. the option of rolling a custom solution. This can be particularly challenging, especially when consulting as you should deliver the most value to his or her client. Just like other design decisions, making a solid choice will get the client more bang for the buck and allow for more adaptability in the future. The choice comes down to one of the following:
  1. Implementing the library or service (potentially re-inventing the wheel),
  2. Relying on an open source library (that may or may not be stable and can lack documentation), or
  3. Contributing to an open source library, adding the features you’re missing (which requires getting up to speed with the library’s code base)
It is important to review the following items for each project:
  1. Does it meet your needs?
  2. Open bugs, and the maintainers’ responses.
    • Are maintainers open to contributions?
    • Are pull requests merged in a reasonable amount of time?
    • Are their any show stopper bugs that have been reported?
  3. What is the state of the unit tests for the application?
  4. How much documentation is available for the project and is it using language standard tools for the documentation?
Below I go into ... read more.


When it comes to the internet of things, there is much excitement surrounding the potential for automation and data collection that will make all of our lives easier. With the advent of bluetooth low energy (BLE), we are starting to see more and more applications for internet of things devices because now the devices can be produced at extremely low cost while also not having a large impact on cell phone battery life.

Of particular interest to me is iBeacon, a protocol developed by Apple that allows an application programmer to determine the distance from a BLE device. The protocol requires a device send a unique id and the device’s transmit power. On the other end, libraries have automated the process of determining the distance from the device and allow a developer to tell if the user is within four ranges of the device, the the closest being 10-20cm.

With this in mind, you can quickly think of some interesting applications that can improve user experience. For example, the Starbucks application could automatically send a notification when walking into a Starbucks so that the user could pay with his or her gift card easily without having to dig through pages of apps.

The act of sending a notification is a simple application of the proximity awareness that BLE and iBeacon can give us. As applications become more complex, we need to think of ways to ensure security of the action taken by considering attack vectors.

Read More

In the past, I’ve used fabric to help in automating the deployment of Django Apps. Additionally, I used it to install dependencies, upload Nginx config files, and restart my applications.

Even after doing this, I felt it easier to spin up servers, get them configured, and then save an image of them, just using fabric to upload application specific config files and code. The entire fabric process has just felt fragile; fabric is a great tool, but it is important to use the right tool for the job.

This post is about how I’ve started using Puppet for configuration management, outlines the benefit of this kind of system, and has a walk through on how to get started without a so called “Puppet Master”.

Read More

Now that I’ve started grad school, I read quite a number of academic papers. A typical week consists of at least 5 required reads, but as I work on projects, investigate research topics, and attend seminars, that number can get substantially higher.

Additionally, life has quite a lot of down time, and maximizing that time is key in grad school. There are just too many projects and meetings to attend, and making the most out of those 5 to 10 mintue waits can really make a difference. That’s where GoodReader comes in.

GoodReader is the best way I’ve found to read 2-column papers on the iPhone, and from what I’ve read, it’s a great experience on the iPad too. The app has a number of features that makes reading on a phone much better.

Read More