Skip to content

Instantly share code, notes, and snippets.

@thom-nic
thom-nic / express5_mutable_query.js
Last active May 6, 2025 15:21
Monkey-patch for ExpressJS v5 to allow `req.query` to be mutable by middleware
/* eslint-disable no-invalid-this */
const { request: Request } = require('express');
const parseQuery = Object.getOwnPropertyDescriptor(Request, 'query').get;
function getQuery() {
if (this.__queryModified)
return this.__queryModified;
return parseQuery.call(this);
}
@thom-nic
thom-nic / build.gradle
Last active August 28, 2024 11:24
find the largest classnames in Spring libraries. Also find FactoryFactories
/**
* Find the longest class names in Spring.
* Also find FactoryFactory classes.
* a goof-off project by @thom_nic
*/
import java.util.jar.*
defaultTasks 'longest', 'factoryfactory'
@thom-nic
thom-nic / cx_oracle_instructions.md
Created July 16, 2013 19:14
Installing CX Oracle for Python & Mac OS X. Instructions exist around the web, but they seem to be piecemeal and incomplete.
@thom-nic
thom-nic / NumberPickerPreference.java
Created May 6, 2011 22:06
NumberPicker Preference Dialog for Android!
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import com.quietlycoding.android.picker.NumberPicker;
public class NumberPickerPreference extends DialogPreference {
@thom-nic
thom-nic / cidr_iter.sh
Last active December 11, 2020 04:50
Generate all IPv4 addresses in bash from a CIDR or netmask
#!/bin/bash -ue
# Modified "CIDR to IP range" function taken from https://stackoverflow.com/a/18120519/213983
# use like `cidr_iter "192.168.1.1/24"`
cidr_iter() {
# create array containing network address and subnet
local network=(${1//\// })
# split network address by dot
local iparr=(${network[0]//./ })
# if no mask given it's the same as /32
@thom-nic
thom-nic / _spacing-helpers.scss
Last active September 3, 2020 15:28 — forked from jacurtis/_spacing-helpers.scss
SASS Margin and Padding Helpers Loop. Generates .mts type helper classes.
/*
* Spacing helpers for consistent margin and padding on elements. Uses rems (not px!)
*
* With the current default settings, generates classes like:
* .mts = margin-top: 0.5rem
* .phl = padding-left: 2rem; padding-right: 2rem; // h = horizontal = left/right
*
* Inspired by:
* https://github.com/mrmrs/css-spacing
* https://getbootstrap.com/docs/4.0/utilities/spacing/
@thom-nic
thom-nic / Dockerfile
Last active August 13, 2020 14:35
Dockerfile that attempts to run the app as non-root user. This creates a `node` user & sets permissions on app files. Note you cannot `chown` files in a docker 'volume' during the build process, but you can at runtime (as part of your `CMD`) but in that case you can't use the `USER` command to change the UID before `CMD` runs.
###
# Node.js app Docker file
#
# Some basic build instructions:
# ```
# # you should delete node_modules b/c you don't want that copied during 'ADD'
# docker build -t thom-nic/node-bootstrap .
# # run a shell in the container to inspect the environment (as root):
# docker run --rm -itu root thom-nic/node-bootstrap /bin/bash
# ```
@thom-nic
thom-nic / example.py
Created March 5, 2013 19:50
Handler for authenticating HTTPS connections with urllib2. (Python 2.x) Note that the 'ciphers' option in ssl.wrap_socket is python 2.7 only.
import logging, urllib2
import https
client_cert_key = None # file path
client_cert_pem = None #file path
ca_certs = None # file path
handlers = []
handlers.append( HTTPSClientAuthHandler(
@thom-nic
thom-nic / Dockerfile
Created June 18, 2014 15:15
Node.js Dockerfile based on ubuntu 14.04. This is a little smaller than dockerfile/nodejs which depends on python
# Node.js app Docker file
FROM ubuntu:14.04
MAINTAINER Thom Nichols "thom@thomnichols.org"
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get -qq update
RUN apt-get install -y nodejs npm
@thom-nic
thom-nic / chunked_transfer_decoder.rb
Last active February 5, 2020 15:23
Rack middleware to decode chunked transfer HTTP request
#require 'rack/request'
# Rack middleware to decode a `Transfer-Encoding: chunked` HTTP request.
#
# USAGE NOTE:
#
# Some HTTP servers (Webrick and Unicorn/Rabinbows/Zbatery) already decode the
# chunked stream, but they leave the 'Transfer-Encoding' header and don't bother
# to add a 'Content-Length' header, which causes rails ActionDispatch::Request
# to not parse the whole request body.