Skip to content

Instantly share code, notes, and snippets.

Avatar
⚖️
Let's make it scalable!

Samuel Williams ioquatix

⚖️
Let's make it scalable!
View GitHub Profile
@ioquatix
ioquatix / reflector.conf
Last active Feb 14, 2021
Reflector weekly update for fast arch linux package download in New Zealand!
View reflector.conf
samuel@hana ~ [1]> sudo systemctl enable --now reflector.timer
Created symlink /etc/systemd/system/timers.target.wants/reflector.timer → /usr/lib/systemd/system/reflector.timer.
samuel@hana ~> cat /etc/xdg/reflector/reflector.conf
# Reflector configuration file for the systemd service.
#
# Empty lines and lines beginning with "#" are ignored. All other lines should
# contain valid reflector command-line arguments. The lines are parsed with
# Python's shlex modules so standard shell syntax should work. All arguments are
# collected into a single argument list.
View ipc.rb
#!/usr/bin/env ruby
require 'async'
require 'async/io/unix_endpoint'
endpoint = Async::IO::Endpoint.unix("foo.ipc")
fork do
Async do
endpoint.accept do |peer|
View searchable.rb
require 'thread/local'
class Searchable
extend Thread::Local
def initialize
@index = "rubygems"
end
@ioquatix
ioquatix / query.rb
Created Jun 27, 2020
multiple queries
View query.rb
Sync do
query = subject.call(<<~SQL * 10)
SELECT PG_SLEEP(0.1) AS LIFE;
SQL
query.results do |result|
Console.logger.info(query) {"#{result.count} #{result.field_names}"}
result.each do |row|
Console.logger.info(result, row)
end
@ioquatix
ioquatix / fibonacci.rb
Created May 17, 2020
Threads vs Processes with the GVL
View fibonacci.rb
# gem install async-container
gem "async-container"
require 'async/clock'
require 'async/container'
def fibonacci(n)
if n < 2
return n
View async-websocket.gemspec
require_relative 'lib/async/websocket/version'
Gem::Specification.new do |spec|
spec.name = "async-websocket"
spec.version = Async::WebSocket::VERSION
spec.authors = ["Samuel Williams"]
spec.email = ["samuel.williams@oriontransfer.co.nz"]
spec.summary = %q{An async websocket library on top of websocket-driver.}
spec.homepage = ""
@ioquatix
ioquatix / dump.rb
Created Apr 24, 2020
Linux Memory Dump
View dump.rb
#!/usr/bin/env ruby
# This script reads a list of PIDs from the command line and dumps all readable memory regions.
REGION_PATTERN = /(\h+)-(\h+) (r)/
ARGV.each do |pid|
maps = File.open("/proc/#{pid}/maps")
mem = File.open("/proc/#{pid}/mem")
@ioquatix
ioquatix / README.md
Created Apr 16, 2020
How to setup v4l2 loopback for use with OBS.
View README.md

Firstly, you need to install v4l2loopback and obs-v4l2sink. On arch linux with yay:

yay -Syu obs-v4l2sink v4l2loopback-dkms

Then, set up a systemd service:

koyoko% cat /etc/systemd/system/v4l2loopback.service 
@ioquatix
ioquatix / monads.rb
Created Apr 2, 2020
Compare Monads with Pure Ruby
View monads.rb
require 'benchmark/ips'
require 'dry/monads/result'
extend Dry::Monads::Result::Mixin
def pure_square(x)
value = x ** 2
if value > 50
View request_with_timeouts.rb
#!/usr/bin/env ruby
require 'async'
require 'async/http/internet'
Async do |task|
internet = Async::HTTP::Internet.new
# Effectively a connection timeout:
response = task.with_timeout(10) do