Skip to main content


Showing posts from 2015

Python 2.7, Django, Apache, and Gunicorn on CentOS 6.5

I'm working on a little Django project for KPTZ Radio in Port Townsend and since this project has to talk to a serial relay board from a specific server that has other things running on it, I've been going through the process of installing Python 2.7 on CentOS 6.5, along with configuring Django, Apache, and Gunicorn.

Since I'm a lot more used to dealing with Nginx and Gunicorn on Ubuntu, getting this all up and running correctly took a lot more trial and error than I thought it would, but I finally got it figured out so figured I'd share since I found a lot of either incomplete or misleading information about this as I searched for solutions.
Installing Python 2.7 Your first question is probably why I'm not installing Python 3. In the case of this particular project, pyserial was not (when I first started the project) Python 3 compatible, so rather than fight that battle I decided to use Python 2.7.

The problem with Python 2.7 is on CentOS 6.5, Python 2.6.6 is the …

Python 3 + Oracle on Ubuntu Server 14.04

I'll invite my readers to check my previous post on this topic to get a sense of how I feel about Oracle.

Small updates it seems to get cx_Oracle working with Python 3 on Ubuntu 14.04. Assume sudo/root for all the following.

Download the RPM versions of both the basic and SDK clients for from If you're not familiar with the idiotic hell that is Oracle downloads, you have to do this on a browser where you can click a radio button and THEN download, so wget from the server on wish you actually want to install this stuff is unfortunately a no go.The 12.x version of this stuff still doesn't work with cx_Oracle. At least not for me.scp the rpm files to the target serverssh to the target serverapt-get install libaio1 alienFor both the RPMs:
alien -d RPM_FILE_NAMEFor both the newly created Debian packages:
dpkg -i DEBIAN_PACKAGE_NAMEtouch /etc/ "/usr/lib/oracle/11.2/cl…

Speaking at dev.Objective()

I'm very pleased to announce that I've been selected to speak at dev.Objective(), which is coming up in Minneapolis (more specifically Bloomington), MN on May 12-15. (And yes, if the conference name seems vaguely familiar this is the evolution of the former cf.Objective() conference.)

My session is Naked and Afraid: Mobile Offline Access to Emergency Data, in which I'll be discussing how to build cross-platform mobile apps that sync and cache data so you can have access to it even if the Internet and mobile networks are down.

Since I quit doing CFML/ColdFusion several years ago and moved over to Python I stopped speaking at and attending cf.Objective(), but it's a fantastic conference so I'm excited to be making my way back. It's going to be really great to reconnect with a lot of people I haven't seen in quite a while.

If you're a web developer looking for a great conference with a lot of great sessions presented by world-class speakers this is it! Ho…

Resolving Mini WAN Miniport Code 31 Errors on Windows 8.1

After a recent Windows update I could no longer connect to one of my VPNs using the native Windows VPN connectivity (i.e. not a client like Cisco AnyConnect). When I tried to connect from the networking charm (I think that's what they call the bar on the right-hand side of the screen) it would hang for a while but never connect, and after that happened when I clicked on the networking icon on the lower right the charm bar wouldn't even come back.

I figured it might be a driver issue so I opened up Device Manager and sure enough, under the network adapters section there were yellow exclamation marks next to every one of the WAN Miniports that show up after you try to connect to a VPN.

I found varying reports of how to fix the problem but here's what worked for me.

Try to connect to a VPN that will cause things to error out (the WAN Miniports didn't even show up in the network adapter list for me until I did this)Open Device ManagerExpand "Network adapters"Right…

Cisco AnyConnect on Surface Pro 3

If you get the dreaded "failed to initialize connection subsystem" error when trying to use AnyConnect on the Surface Pro 3, or on Windows 8.1 in general for that matter (though it works fine for me on my ThinkPad T540p), there's a lot of differing opinions on how to fix it so I thought I'd share the one that worked for me.
What absolutely did not work for me (but that apparently works for other people based on frequency with which I encountered this solution) is just running AnyConnect through the Troubleshoot Compatibility wizard. That had zero effect for me.
What did work is this: Hit the Windows key and start typing "AnyConnect" to bring up AnyConnect in the search/launcher thingee (as I call it)Right-click on AnyConnect and choose "Open file location"Right-click on AnyConnect in Windows Explorer and choose "Properties"Click on the Compatibility tabCheck the "Run this program in compatibility mode for" box and select "W…

Dynamically Adding Forms To and Removing Forms From Django Formsets

For my latest big project I am running into numerous situations in which I need to dynamically add forms to and remove forms from Django formsets, which turned into an interesting and fun challenge, and led to a lot of learning about how Django formsets work along with some ancillary details (like the behavior of the jQuery UI datepicker when you manipulate the DOM) that I wasn't necessarily expecting to encounter.

To set the stage for the discussion by way of a concrete example, one aspect of the application in question is the ability to request leave (e.g. vacation, sick leave, etc.), and as you might imagine on the leave request page you can add days to and remove days from your leave request.
In the first iteration of this feature (random aside: we do Kanban and try our darndest to focus on "good enough" features, particularly on early iterations, so that we can deliver the most usable functionality in the least amount of time, looping back around to make improvement…

Towards a More Ergonomic Development Setup

I just turned 45. Forty. Frickin'. Five. For the past six months or so (probably right on schedule) I've been experiencing neck, shoulder, wrist, forearm, and elbow pain. It comes and goes but on the bad days it's bad enough to keep me awake at night, so I decided rather than continue to ignore it and keep working directly on a laptop as I have for years now, I better heed my body's warnings (as well as my girlfriend's prompting) so I can keep programming for another 45 years. (Joking. If I'm still blogging about nerd stuff when I'm 90 please put me out of my and everyone else's misery.)
I already made the move to a standing desk, specifically a GeekDesk, a few years ago. At the same time I bought a Herman Miller Embody chair, which I subsequently never used, because standing desk. (I'm reeeeal smart sometimes.) Seriously though both these changes made a huge, huge difference. I no longer have back issues, I have much more energy, and I feel much mo…