Add a Flask Worker in AWS Elastic Beanstalk

I was not successful setting up a Django server in an AWS Worker Environment, so I set up a Flask server instead. This guide assumes that you have a web server running in another environment, and that you’ve configured an SQS queue to enqueue jobs for your worker. We obviate the need for Celery by using a cron.yaml file on the Flask worker that can be used to define periodic tasks.

Continue reading

The Barber Shop Problem in Go

A similar solution was posted here. I wanted to look at this problem because it is a classic example of handling interprocess communication.

In this problem one models a stream of customers coming into a Barber Shop. If the waiting room, or lobby, is full, then they leave, otherwise they take a seat and wait for a haircut. The barber(s) take customers, cut their hair, and then look for the next customer.

In this code one channel is filled randomly with Customers; some of these will wait in the lobby, others will look for another barber. Within the BarberShop function, there is a barbers slice, and a channel named syncBarberChan. When the function runs, barbers are initialized and added to the slice. When a customer is selected and paired with a barber, the barber is taken out of the slice. At this point the haircut occurs for some period of time. When the haircut is over, the barber is added to the syncBarberChan. Next the syncBarberChan is drained for any idle barbers. If a customer is waiting, that newest barber is paired with a customer, otherwise the barber is added back to the slice of barbers.

In this way, the slice holds idle barbers, and the channel is used to signal that a barber is done with a given task.

Continue reading

Debugging MSSQL Connections from Ubuntu

You might need to install a fair bit of stuff,

sudo apt-get install unixodbc unixodbc-dev tdsodbc freetds-dev freetds-bin -y

There’s a neat trick you can do to automatically configure FreeTDS on you Ubuntu machine (discussion here:

sudo dpkg-reconfigure tdsodbc

This will write data to /etc/odbcinst.ini for you. This file configures which drivers FreeTDS will use. You could write this by hand, but this operation reduces the risk for error.

I was trying to access a remote server using pyodbc and I was providing a connection string like,

import pyodbc
conn = pyodbc.connection('DSN=<dsn>;UID=john.doe;PWD=<password>')

For some reason, I wasn’t able to connect at all. It turns out that I needed to put a space after UID… it’s weird, but it worked. Maybe this is because there was a dot in my UID? I’m not sure. You can also set the UID and PWD in /etc/obcd.ini, but that’s probably not ideal.

If you’re stuck, you can list the connections on a given host with this,

tsql -H <host> -L

You’ll probably need to install tsql, which I think is located in the freetds-bin package listed above.

Using InfluxDB with Django and Docker

Today I worked out an example of using InfluxDB from Django in Docker. Using Docker containers to run databases greatly reduces the amount of database configuration you need to worry about when you’re trying to work out a proof of concept.

InfluxDB is a great tool for storing timestamped data. Storing a timestamp and a set of measurements, one timestamp per row, in a Postgres database is possible, but inefficient. InfluxDB offers you a way to store a set of values, and a set of indexed meta-data tags per row.

For example, if you’re collecting hourly production data from multiple wells, you can store the rates as data values, and wells as indexed tags. Then looking up the production from a set of wells over some time period becomes very efficient due to indexing. Looking up wells by production rates, however, would be very inefficient, unless you stored rate data as a tag, and well names as values. Learn more here from the InfluxDB documentation.

Continue reading