Skip to content

Instantly share code, notes, and snippets.

View kamermans's full-sized avatar
😏

Steve Kamerman kamermans

😏
View GitHub Profile
@kamermans
kamermans / hash_benchmark.php
Created October 21, 2018 05:43
Compute the performance of every hashing function in PHP
<?php
$loops = 100000;
$str = "whois foobar";
$algos = hash_algos();
$algo_padding = array_reduce($algos, function($carry, $val) {
$len = strlen($val);
if ($len > $carry) {
$carry = $len;
}
@kamermans
kamermans / fix_quotes.sh
Last active April 16, 2024 00:23
Replace fancy-quotes / curly-quotes / smart-quotes with standard ASCII single- and double-quotes in bash
#!/bin/bash
# Replaces annoying "fancy" quotes created by programs like Microsoft Word and everything in MacOS
# with normal ASCII single-quotes (') or double-quotes (")
# This script does NOT replace the GRAVE ACCENT (`) since it is commonly used in Markdown and as a bash command
# See: https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
SINGLE=$(echo -ne '\u00B4\u2018\u2019')
DOUBLE=$(echo -ne '\u201C\u201D')
sed -i "s/[$SINGLE]/'/g; s/[$DOUBLE]/\"/g" $1
@kamermans
kamermans / parse_elb_logs.php
Created May 4, 2018 20:02
AWS ELB Log Parsing Regex in PHP
<?php
// Cat your ELB logs into this script
$elb_regex = '#^(?<date>.+?) (?<elb>.+?) (?<client_ip>[\d\.]+):(?<client_port>\d+) (?<backend_ip>[\d\.]+):(?<backend_port>\d+) (?<request_processing_time>[\d\.]+) (?<backend_processing_time>[\d\.]+) (?<response_processing_time>[\d\.]+) (?<elb_status_code>\d+) (?<backend_status_code>\d+) (?<received_bytes>\d+) (?<sent_bytes>\d+) "(?<method>[A-Z]+) (?<https>https?)://(?<http_host>.+?):(?<port>\d+)(?<uri>/.*?) (?<protocol>HTTP/[\d\.]+)" "(?<http_user_agent>.+?)" (?<ssl_cipher>.+?) (?<ssl_protocol>.+?)$#';
while ($line = fgets(STDIN)) {
if (!preg_match($elb_regex, $line, $data)) {
continue;
}
@kamermans
kamermans / docker-functions.sh
Last active June 12, 2022 21:45
Bash functions for dealing with Docker containers in an unknown state (starting, stopping, removing, checking if they exist, etc)
# Helper functions for dealing with Docker containers
# Returns "missing", "stopped" or "running"
get_container_state() {
local CONTAINER_NAME=$1
# Faster check to see if the container *might* exist
CONTAINER_MISSING=$(container_does_not_exist "$CONTAINER_NAME")
if [[ $CONTAINER_MISSING = "true" ]]; then
echo -n "missing"
@kamermans
kamermans / libwurfl_version.c
Created November 8, 2017 02:00
Get the version of libwurfl
/**
* libwurfl_version.c
* Compile with:
* gcc -o libwurfl_version libwurfl_version.c -lwurfl
*/
#include <stdio.h>
#include <wurfl/wurfl.h>
int main(int argc, char **argv)
@kamermans
kamermans / curl-timing
Created October 21, 2017 15:01
Curl helper that adds detailed timing information
#!/bin/bash -e
# Put this file in /usr/local/bin and use 'curl-timing' in place of 'curl'
# to get a detailed timing report with the response.
# You can customize the report below. For older versions of curl, some
# of the fields below will not be available.
TIMING_FORMAT=$(cat <<EOL
url_effective: %{url_effective}
remote_ip: %{remote_ip}
@kamermans
kamermans / parse_identify.php
Last active July 29, 2023 17:34
ImageMagick identify -verbose JSON transformer
#!/usr/bin/env php
<?php namespace kamermans\ImageMagick;
/**
* Parser for the ImageMagick "identify" utility that takes "identify -verbose <file>"
* output on STDIN and outputs JSON on STDOUT.
*
* Example:
* identify -verbose foo.jpg | ./parse_identify.php
*/
@kamermans
kamermans / url_cleaner.php
Created June 6, 2017 18:07
PHP function to cleanup/re-encode a URL
<?php
$url = 'http://foo.com/path with spaces/index.php?something=something else#foo-29 32';
$reencode_url = function ($url) {
$url_parts = parse_url($url);
// Add scheme
$scheme = array_key_exists('scheme', $url_parts)? $url_parts['scheme']: 'http';
$new_url = "$scheme://";
@kamermans
kamermans / python_fnmatch_translate.php
Created April 16, 2017 02:11
PHP port of the Python 2.7 `fnmatch::translate()` function to convert shell-expansion patterns to regular expressions.
<?php
/**
* Direct port of the Python 2.7 fnmatch::translate(pat) function.
* Converts a shell-expansion pattern to a regular expression.
*
* by Steve Kamerman
*
* @see https://hg.python.org/cpython/file/2.7/Lib/fnmatch.py
*/
function pythonFnmatchTranslate($pat, $delimiter=null) {
@kamermans
kamermans / zabbix_v3_2_template_percona_mysql_server.xml
Created March 24, 2017 18:05
Percona Monitoring Plugins MySQL Template for Zabbix 3.2
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<date>2017-03-24T18:03:00Z</date>
<graphs>
<graph>
<graph_items>
<graph_item>
<calc_fnc>2</calc_fnc>
<color>157419</color>
<drawtype>1</drawtype>