Required tools for playing around with memory:
hexdump
objdump
readelf
xxd
gcore
class Array | |
def heapsort! | |
#heapify | |
1.upto(self.length - 1) do |i| | |
#move up | |
child = i | |
while child > 0 | |
parent = (child - 1) / 2 | |
if self[parent] < self[child] | |
self[parent], self[child] = self[child], self[parent] |
Latency Comparison Numbers (~2012) | |
---------------------------------- | |
L1 cache reference 0.5 ns | |
Branch mispredict 5 ns | |
L2 cache reference 7 ns 14x L1 cache | |
Mutex lock/unlock 25 ns | |
Main memory reference 100 ns 20x L2 cache, 200x L1 cache | |
Compress 1K bytes with Zippy 3,000 ns 3 us | |
Send 1K bytes over 1 Gbps network 10,000 ns 10 us | |
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD |
#!/usr/bin/env ruby | |
# -*- coding:utf-8 -*- | |
require 'socket' | |
require 'openssl' | |
require 'timeout' | |
require 'pp' | |
include OpenSSL | |
timeout=15 |
# ruby-2.5.0 | |
user system total real | |
YAML 15.112795 0.030577 15.143372 ( 15.190573) | |
JSON 0.648957 0.001520 0.650477 ( 0.652856) | |
Marshal 0.474775 0.000922 0.475697 ( 0.477678) | |
MessagePack 0.326430 0.001763 0.328193 ( 0.330159) | |
# ruby-2.4.3 | |
user system total real | |
YAML 20.400000 0.050000 20.450000 ( 20.517600) |
# Pass in an enumeration of data and | |
# (optionally) a block to extract the grouping aspect of the data. | |
# | |
# Optional: sort_by lambda (operates on group key and count) | |
# | |
def puts_hist(data, sort_by:nil, &blk) | |
data = data.map(&blk) if blk | |
counts = data.each_with_object(Hash.new(0)) {|k,h| h[k]+=1} | |
max = counts.values.max | |
width = Pry::Terminal.size!.last |
package main | |
import ( | |
"bytes" | |
"encoding/gob" | |
"fmt" | |
"github.com/ugorji/go/codec" | |
"io/ioutil" | |
"labix.org/v2/mgo" | |
"labix.org/v2/mgo/bson" |
#!/bin/bash | |
# Slack notification script for Munin | |
# Mark Matienzo (@anarchivist) | |
# | |
# To use: | |
# 1) Create a new incoming webhook for Slack | |
# 2) Edit the configuration variables that start with "SLACK_" below | |
# 3) Add the following to your munin configuration: | |
# |
require 'benchmark/ips' | |
Benchmark.ips do |x| | |
SingleFilterStruct = Struct.new(:method, :values) do | |
def call(value) | |
Array(value).any? { |v| v.send(method, *values) } | |
end | |
end | |
class SingleFilterClass |
#!/usr/bin/env bash | |
declare -i last_called=0 | |
declare -i throttle_by=2 | |
@throttle() { | |
local -i now=$(date +%s) | |
if (($now - $last_called >= $throttle_by)) | |
then | |
"$@" |