Skip to content

Instantly share code, notes, and snippets.

@tompave
tompave / actors_and_messages.rb
Created November 10, 2018 18:43
Actors and Messages in Ruby
require "colorize"
REGISTRY = {}
DEBUG = false
SLEEP = 0.5
def register(id)
mailbox = Queue.new
Thread.current[:process_id] = id
REGISTRY[id] = mailbox
@tompave
tompave / thread_memory_overhead.rb
Created March 14, 2018 11:13
Find the memory overhead of threads in Ruby
def memory_kb
`ps -o rss= -p #{Process.pid}`.chomp.to_i
end
MEM_LOG = "current memory: %{mem} kB (+%{incr})".freeze
THR_LOG = "New Thread!".freeze
current_mem = 0
loop do
m = memory_kb()
@tompave
tompave / timing.exs
Last active August 20, 2016 15:44
Fun with Elixir macros and Streams
defmodule Timing do
def now do
:os.system_time(:milli_seconds)
end
# broken! the block is executed immediately
#
def ftime([do: block]) do
t0 = now
{ :ok, block, now - t0 }
@tompave
tompave / middleman_build.sh
Last active May 30, 2016 18:02
Build a Middleman site and commit it to an orphan master branch, see the related blog post for the setup: http://tommaso.pavese.me/2016/05/22/how-to-deploy-a-middleman-website-to-github-pages/
#!/bin/bash
middleman build &&
echo "--- middleman build complete"
git checkout master &&
echo "--- cleaning old build"
(ls -1 | grep -v 'build' | xargs rm -rf ) &&
require 'digest/md5'
require 'base32'
require 'rqrcode'
require 'rotp'
def print_as_qr(string)
qrcode = RQRCode::QRCode.new(string)
filename = File.expand_path "~/Desktop/qr_#{rand(10_000)}.png"
qrcode.as_png.save(filename, :fast_rgb)
end
@tompave
tompave / closures.rb
Created December 16, 2015 00:52
closures in Ruby
i = 1000
f1 = Proc.new { |x| x * x }
f2 = -> (func, int) { puts "the result is: '#{func.call(int)}', i is: '#{i}'" }
def run(range, operation, printer)
range.each do |i|
printer.call(operation, i)
end
end
@tompave
tompave / percent_encoding_guard.rb
Last active August 29, 2015 14:20
Rack middleware guards
# Issue on github:
# https://github.com/rack/rack/issues/337
#
# Possible patch:
# https://gist.github.com/psychocandy/3130349
# but I don't like the idea of monkeypatching the standard library
#
# Rack middleware:
# http://stackoverflow.com/questions/16269897/rails-argumenterror-invalid-encoding
#
@tompave
tompave / risotto.md
Created April 16, 2015 17:06
risotto!

Risotto for 4 people

Ingredients

  • rice (type: Carnaroli or Arborio)

    • 80-100 g per person, total: ~400 g
    • a bit more if you're hungry
  • one onion

@tompave
tompave / try_chain.rb
Created January 11, 2015 19:30
Try Chain
require 'active_support/core_ext/object/try'
module TryChain
def try_chain
@proxy = Proxy.new(self)
end
class Proxy
@tompave
tompave / impersonation_utilities.rb
Last active August 29, 2015 14:05
Poor Man's cross-authentication
# impersonation_utilities.rb
require 'digest/md5'
module ImpersonationUtilities
SHARED_SECRET = "I'm a secret string!"
TOKEN_VALID_FOR_DAYS = 1
class << self