Let’s keep this short and sweet, assumptions:

Install & Configure NeoVim

Open an Ubunutu terminal

# add the repo
$ sudo add-apt-repository ppa:neovim-ppa/unstable

# update & install
$ sudo apt-get update
$ sudo apt-get install neovim


Setup init.vim

run $ nvim, then:

# create a directory to hold the init.vim file
:call mkdir(stdpath('config'), 'p')
# then create an init.vim file
:exe 'edit '.stdpath('config').'/init.vim'

This is sourced from the :h nvim command

Install vim-plug

download and install vim-plug:

$ sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \


Add some plugins

# edit the init.vim file
$ nvim ~/.config/nvim/init.vim

Sample plugin file

call plug#begin(stdpath('config') . '/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()

write the file and run $ nvim again.


And you should be all set!

Recently, I’ve been focused on developing a Chrome extension, Skater. This extension started off as a hackathon project among friends, resulting in a scrappy, messy codebase written in vanilla js. While a lot of fun to develop at the time, revisiting and making changes without a testing framework in place has been a headache. I’ve made the decision to revisit the extension and implement a testing suite with jest. You can follow along with those updates on the jest-implement branch. …

This post is part of a series of bite-sized tutorials that I have been publishing on my blog.

Problem Statement

In data warehousing, we often encounter repetitive processes that can benefit from templating. This is a simple example of creating a COPY INTO statement using some JSON.

{# jinja_template.j2 #}COPY INTO {{ table.target_name }}
{% for col in table.columns %}
{{ col.name }} as {{ col.alias }} {% if not loop.last %},{% endif %}
{% endfor %}
FROM {{ table.s3_stage }}
// config.json{
"table": {
"target_name": "transactions.app_payments"…

This article serves as a guide for my students to deploy their Flask apps to Heroku. I will assume that you are using Terminal on Mac/Linux or Git Bash on Windows. There is an accompanying GitHub repo for this article.

Getting Started

  1. Install the Heroku CLI
  2. In terminal, run heroku login -i and login


We will start off with a new project directory (folder) called my_app. In this folder, create a new file, app.py which will house our Flask app. The code for the Flask app should look something like this:

from flask import Flask, render_template
import gunicorn
app = Flask(__name__)@app.route('/')

Have you ever had to click through a clunky, difficult to navigate, website? Maybe it was a school web portal, or a local government website. If you have to click through a frustrating web page often, I have good news for you. We can automate that with Python.

The library that we will be using to spin up and control a headless web browser is called Splinter. There is some prep work before we get started.

First make sure that you have Homebrew installed. Then run the following in your terminal:

# run this in terminal
brew cask install chromedriver

Evan Calzolaio

Python everything!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store