An Epic Review of PyCharm 3 from a Vim User’s Perspective

This review is for the Professional Edition of PyCharm 3. It includes screenshots and sound-free video demos of PyCharm features. I will try to cut straight to the point while offering some tips from my experience.

My perspective is that of a professional software developer who has used Vim, Emacs, Sublime Text, PyDev and others. For the past year and a half I've used PyCharm for all my Python, JavaScript and CoffeeScript.

Code Completion

Code completion was great in PyCharm 2.7 and it has only gotten better. There are now two types of completion in the editor: structural, which understands Python and JavaScript objects, and word expansion, which is more like Vim's omnicomplete.

Continue Reading

Porting a Geographic Nearest-Neighbor Python Web Service to Go

I wrote a blog post recently at work that described my experience porting a geographic nearest-neighbor web service from Python to Go. You can read it on the Safari Flow blog. The post covers setting up a dev environment for Go, finding replacement third-party libraries, writing tests, performance profiling and deployment. If you'd rather read […]

Continue reading...

Four Things I Learned about Software Engineering from Programming MUDs as a Teenager

In job interviews I try to casually drop that I learned how to program as a teenager writing C code for MUDs1. My intent is to open a fun discussion into why this was awesome. Programming for MUDs taught me the fundamentals of the craft, so I could probably ramble about it for an hour. […]

Continue reading...

On Starting a Daily Meditation Practice

The single thing that improved my daily life the most in 2013 was starting a daily meditation practice. Specifically, Buddhist meditation based on techniques from the Ānāpānasati Sutta and Satipaṭṭhāna Sutta. In this post I will share why I started, how I did it and some pleasant results. Suffering As I suspect many new parents […]

Continue reading...

Reading List for an Apprentice Web Developer

Here are a few books that I found useful when I was starting out as a web developer. I originally wrote this list for a friend who is wrapping up his Computer Science degree, so the emphasis is on practical rather than academic knowledge. Craft These books touch on a lot of non-technical areas of […]

Continue reading...

Wrap Comments and Text to Column Width in IntelliJ Editors

One of the small annoyances I found after switching to PyCharm recently was that while the editor will reformat code to the chosen column width, it won’t wrap plaintext or comments. Annoying, for Vim and Emacs users! I corrected this by writing my first IntelliJ plugin: Wrap to Column, which is a port of a […]

Continue reading...

Build an In-Memory Proximity Search Web Service with Python, SciPy and Heroku

In this post I’m going to look at a concrete example of building an in-memory proximity (aka, nearest neighbor) search web service using Python, SciPy and Heroku. Later we can speculate on use cases for this approach as opposed to a geo-aware database. Define Our Terms So, let’s define our terms: In-memory: The web service […]

Continue reading...

Revisiting Umberto Eco’s Future of the Book

In 2003 Umberto Eco gave a talk at the opening of the Bibliotheca Alexandrina titled, “Vegetal and mineral memory: The future of books” that is interesting to read again now, nine years later. His goal in the talk was to break apart the fear people had about “the future of books.” He addressed this fear […]

Continue reading...

Using IPython Notebook with Django

IPython has a relatively new featured called the “Notebook,” which improves on the traditional terminal shell in many ways. Notebook launches a web-based shell to an IPython session that has some very, very handy features, like the ability to save, edit and delete “notebooks” of code that are each comprised of organized cells of Python, […]

Continue reading...

Set an ImageField path in Django manually

Apparently this is a confusing topic. Let’s say you have a Django model with an ImageField and some existing media files, and you’d like to connect the files to the ImageField. This is relatively painless and doesn’t require you to use the save() method on the ImageField. If you only want to set an ImageField […]

Continue reading...