Skip to content

Instantly share code, notes, and snippets.

View themiurgo's full-sized avatar
🎯
Focusing

Antonio Lima themiurgo

🎯
Focusing
View GitHub Profile
@themiurgo
themiurgo / ratelim.py
Created June 27, 2012 19:40
Rate limit decorator
import time
import datetime
class rate_limited(object):
def __init__(self, max_calls, time_interval):
assert max_calls > 0
assert time_interval > 0
self.__last_reset = None
self.__max_calls = max_calls
self.__time_interval = time_interval # seconds
@themiurgo
themiurgo / elapsed_since_last_update.sh
Created June 29, 2012 15:54
Seconds elapsed since last update of a file
# FILL FILENAME
# Return the seconds from last modification of a file, among a list of files
file=$(ls FILENAME -hant --time-style +%s | head -n1 | awk '{print $6}' ) ; now=$(date +%s); echo $((now-file))
@themiurgo
themiurgo / geocoder.py
Created July 18, 2012 13:27
A Google Geocoder with a MongoDB memoizer. For the ratelim module, look at https://gist.github.com/3006305
import collections
import time
import requests
import pymongo
import ratelim
import textwrap
G_GEO_SUCCESS = 200
G_GEO_SERVER_ERROR = 500
G_GEO_MISSING_QUERY = 601
@themiurgo
themiurgo / convert_all_gzipped.sh
Created September 25, 2012 13:36
Convert a one-line stream of JSON objects into a newline separated (multiline) stream
#/bin/bash
# Fix all the files and puts them in a 'fixed' subdirectory
mkdir fixed
for f in *.gz; do gunzip -c $f | ruby jsonsm.rb | gzip -c > fixed/$f; done
@themiurgo
themiurgo / mapquest_geocoder.py
Created September 10, 2013 15:31
MapQuest bulk geocoder
import requests
API_KEY = "" # FILL THIS
class Geocoder(object):
endpoint = "http://www.mapquestapi.com/geocoding/v1/batch"
endpoint = "http://open.mapquestapi.com/geocoding/v1/batch"
def __init__(self, api_key):
self.api_key = api_key
@themiurgo
themiurgo / merge-geojsons.py
Last active September 11, 2022 12:41 — forked from migurski/merge-geojsons.py
Merge two or more geojson files.
#!/usr/bin/env python
from json import load, JSONEncoder
from argparse import ArgumentParser, FileType
from re import compile
import sys
float_pat = compile(r'^-?\d+\.\d+(e-?\d+)?$')
charfloat_pat = compile(r'^[\[,\,]-?\d+\.\d+(e-?\d+)?$')
@themiurgo
themiurgo / word_generator.py
Created May 29, 2014 13:47
Word Generator
#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""This script was used to generate random test files for the course
of Computer Networks 2014 at University of Birmingham, Computer Science.
Author: Antonio Lima
License: WTFPL
"""
@themiurgo
themiurgo / csvtable.py
Created January 19, 2015 17:09
csvtable
import csv
import os
from collections import namedtuple
def read_csv(fname, tabname=None, names=None, headers=True):
with open(fname, "r") as fobj:
if not tabname:
full_basename = os.path.basename(fname)
basename, ext = os.path.splitext(full_basename)
tabname = basename.capitalize()
@themiurgo
themiurgo / ndjpaste.py
Created April 1, 2015 22:28
Paste for NDJSON documents
import sys
import json
import itertools
fnames = sys.argv[1:]
jsons = [(json.loads(i) for i in open(fname)) for fname in fnames]
def paste(iterables):
for docs in itertools.izip_longest(*iterables, fillvalue={}):
@themiurgo
themiurgo / folium_embed.py
Created May 29, 2015 11:47
Embed folium maps in iPython
def embed(fmaps, width='100%', height='510px', *args, **kwargs):
"""
Embeds a folium map in a IPython/Jupyter notebook.
This method will not work if the map depends on any files (json data). Also this uses
the HTML5 srcdoc attribute, which may not be supported in all browsers.
fmaps -- a single folium map or an iterable containing folium maps
"""