Running Flask on macOS with mod_wsgi/wsgi-express

Flask is a (micro) web development Framework for Python. It is fairly simple to get started. All you need to do is to pip install Flask into your virtualenv, give the FLASK_APP environment variable your file and run flask run (described in detail in installation and quick start). This will launch the development server and you can instantly start hacking around. When you want to use your Apache webserver, however, you need to install and configure a WSGI module. When I first wanted to do this I tried to install mod_wsgi via brew (brew install mod_wsgi from the homebrew/apache tap), but quickly ran into some (apparently common) issues with the XCode toolchain. Then I discovered that there is a much easier way of installing mod_wsgi as a Python package. ...

August 5, 2017 · David Hamann

SQL: Get the count of related records

Micro tutorial: Sometimes you need to show results from table A but also include the count of related records from table B. For example: how many items are in each purchase order, how many comments in each post, how many galaxies in each universe (wait, what?), … The following query shows one way of selecting the title and id from a table Posts, the count of the related records in a table Comments and then sorts descending by that count. fk_post is the foreign key of the post in the Comments table. ...

July 11, 2017 · David Hamann

Pandas: Select rows that match a string

Micro tutorial: Select rows of a Pandas DataFrame that match a (partial) string. import pandas as pd #create sample data data = {'model': ['Lisa', 'Lisa 2', 'Macintosh 128K', 'Macintosh 512K'], 'launched': [1983,1984,1984,1984], 'discontinued': [1986, 1985, 1984, 1986]} df = pd.DataFrame(data, columns = ['model', 'launched', 'discontinued']) df model launched discontinued 0 Lisa 1983 1986 1 Lisa 2 1984 1985 2 Macintosh 128K 1984 1984 3 Macintosh 512K 1984 1986 We want to select all rows where the column ‘model’ starts with the string ‘Mac’. df[df['model'].str.match('Mac')] model launched discontinued 2 Macintosh 128K 1984 1984 3 Macintosh 512K 1984 1986 We can also search less strict for all rows where the column ‘model’ contains the string ‘ac’ (note the difference: contains vs. match). ...

June 26, 2017 · David Hamann

LaTeX mathematics cheat sheet

LaTeX is the de facto standard typesetting system for scientific writing. A lot of the nice looking equations you see in books and all around the web are written using LaTeX commands. Knowing a few of the mathematics commands is not only helpful if you want to write a book or an article (or do some extreme stuff), but can come in handy in a lot of places, as many systems support LaTeX. You can use LaTeX in MathJax to display expressions on the web (like here), you can make yourself good looking mathematics flashcards in Anki, you can even nerd out and send formulas built with LaTeX commands to your friends via an iMessage app. Also, Apple’s latest Pages release now supports LaTeX equations. ...

June 12, 2017 · David Hamann

Comparing two Excel columns with Pandas and Numpy

Having been asked multiple times if I can quickly compare two numeric columns from an excel file, I set up a small Jupyter notebook (and an R script) to show the intersection, the union and set differences of two columns. You can find the notebook on GitHub or read the code below. I hope it is useful. from pandas import read_excel import numpy as np df = read_excel('excel_data.xlsx', names=['A','B'], header=None) df A B 1 10 2 20 3 30 4 4 5 40 6 1 7 2 #intersection: items in both list A and list B np.intersect1d(df['A'], df['B']) # => array([1, 2, 4]) #union of two lists np.union1d(df['A'], df['B']) # => array([ 1, 2, 3, 4, 5, 6, 7, 10, 20, 30, 40]) #only in list A np.setdiff1d(df['A'], df['B']) # => array([3, 5, 6, 7]) #only in list B np.setdiff1d(df['B'], df['A']) # => array([10, 20, 30, 40]) If you don’t have Numpy handy, take a look at Python sets. ...

May 10, 2017 · David Hamann