Skip to content

Instantly share code, notes, and snippets.

View aabs's full-sized avatar

Andrew Matthews aabs

View GitHub Profile
{config,pkgs,...}:
let
myVim = pkgs.vim_configurable.customize {
name = "vim";
vimrcConfig = {
customRC = ''
syntax on
set nu
set foldmethod=syntax

Scaling your API with rate limiters

The following are examples of the four types rate limiters discussed in the accompanying blog post. In the examples below I've used pseudocode-like Ruby, so if you're unfamiliar with Ruby you should be able to easily translate this approach to other languages. Complete examples in Ruby are also provided later in this gist.

In most cases you'll want all these examples to be classes, but I've used simple functions here to keep the code samples brief.

Request rate limiter

This uses a basic token bucket algorithm and relies on the fact that Redis scripts execute atomically. No other operations can run between fetching the count and writing the new count.

@manveru
manveru / configuration.nix
Last active July 26, 2020 23:41
Updating vim plugins for nix
{ pkgs }:
let plugins = pkgs.callPackage ./plugins.nix {};
in {
customRC = ''${builtins.readFile ./vimrc}'';
vam = {
knownPlugins = pkgs.vimPlugins // plugins;
pluginDictionaries = [{
names = [
"Tagbar"
"css-pretty"
@rymdolle
rymdolle / _rebar3
Created November 4, 2016 21:23
rebar3 autocomplete for zsh
#compdef rebar3
#autoload
# rebar3 zsh completion
typeset -A opt_args
_rebar3() {
local rebar3_commands cmd cmds
if [[ "$CURRENT" -lt 2 ]]; then
@Sup3rc4l1fr4g1l1571c3xp14l1d0c10u5
Sup3rc4l1fr4g1l1571c3xp14l1d0c10u5 / TopologicalSort.cs
Created June 18, 2016 15:15
Topological Sorting (Kahn's algorithm) implemented in C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace TopologicalSort {
static class Program {
static void Main() {
//
// digraph G {
// "7" -> "11"
odoo:
image: odoo:9
ports:
- "8069:8069/tcp"
links:
- "db:db"
db:
image: postgres:9
environment:
- POSTGRES_USER=odoo
export EDITOR=vim
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="nicoulaj"
plugins=(docker fasd fzf git helm history kubectl macos direnv mise)
source $ZSH/oh-my-zsh.sh
eval "$(atuin init zsh)"
export FZF_DEFAULT_OPTS="--bind ctrl-k:kill-line,ctrl-b:preview-page-up,ctrl-f:preview-page-down"
export _FASD_BACKENDS="native spotlight"
@Pitometsu
Pitometsu / configuration.nix
Last active July 11, 2023 18:58
NixOS system config
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{ config, pkgs, ... }:
rec {
imports =
@rcmachado
rcmachado / Makefile
Last active September 28, 2024 13:29
Add a help target to a Makefile that will allow all targets to be self documenting
.SILENT:
.PHONY: help
# Based on https://gist.github.com/prwhite/8168133#comment-1313022
## This help screen
help:
printf "Available targets\n\n"
awk '/^[a-zA-Z\-\_0-9]+:/ { \
helpMessage = match(lastLine, /^## (.*)/); \
@acolyer
acolyer / service-checklist.md
Last active September 24, 2025 07:57
Internet Scale Services Checklist

Internet Scale Services Checklist

A checklist for designing and developing internet scale services, inspired by James Hamilton's 2007 paper "On Desgining and Deploying Internet-Scale Services."

Basic tenets

  • Does the design expect failures to happen regularly and handle them gracefully?
  • Have we kept things as simple as possible?