Skip to content

Instantly share code, notes, and snippets.

🦆 🦆 🦆 🦆

Henrik Nyh henrik

🦆 🦆 🦆 🦆
View GitHub Profile
henrik / each_in_thread_pool.rb
Last active Feb 2, 2021
Run a block on a list of things in a limited number of concurrent threads. Mostly for the fun of it – there are more featureful libs like
View each_in_thread_pool.rb
# Lets you call a block for each item in a list, just like `each`.
# But instead of running serially, it runs in a limited number of parallel threads.
# This is useful when you don't just want one thread per item, e.g. to avoid rate limiting or network saturation.
class EachInThreadPool
def, pool_size:, &block)
queue =
inputs.each { queue << _1 } {
henrik /
Created Jan 1, 2021
IRCC codes for Sony Bravia KD55XH9296BU. For my own reference for future automation.
henrik / pathname_extras.rb
Last active Dec 8, 2020
Ruby code to check if a pathname is contained within another pathname (e.g. "/foo/bar/baz" within "/foo/bar") without being tricked by "..". Written with @olleolleolle.
View pathname_extras.rb
class PathnameExtras
def self.in_dir?(path, dir:)
path_parts = path.expand_path.each_filename.to_a
dir_parts = dir.expand_path.each_filename.to_a
return false if path_parts == dir_paths { |x, y| x == y }
henrik / toggle_zoom_mute.scpt
Created Nov 21, 2020
AppleScript proof-of-concept for toggling Zoom mute. Gracefully handles Zoom not being installed, or not running, or not currently being in a meeting.
View toggle_zoom_mute.scpt
-- Based on:
tell application "System Events"
if exists window 1 of process "" then
tell application process ""
if exists (menu 1 of menu bar item "Meeting" of menu bar 1) then
set meetingMenu to menu 1 of menu bar item "Meeting" of menu bar 1
set canMute to exists menu item "Mute audio" of meetingMenu
set canUnmute to exists menu item "Unmute audio" of meetingMenu
henrik /
Last active Nov 22, 2020
AWS Lambda Ruby script to get cat status from the SureFlap cat flap. Very rough-and-ready. Intended to be used with an iOS shortcut to get cat status.

AWS Lambda Ruby script to get cat status from the SureFlap cat flap. Very rough-and-ready.

Intended to be used with an iOS shortcut to get cat status – see for a screenshot of the shortcut.

This is not a tutorial, just some public notes for my own future use.

Setup hints

Create this as a AWS Lambda running on Ruby.

henrik / example.ex
Created Aug 29, 2020
Elixir "@foo bar" macro example
View example.ex
defmodule MyMacro do
defmacro @{name, _meta, [arg]} do
IO.inspect "Your #{name} is a #{arg}"
defmacro __using__(_) do
quote do
import Kernel, except: [@: 1]
import unquote(__MODULE__)
henrik / app.js
Last active Mar 27, 2021
Phoenix LiveView hook that makes links with a "phx-click" still trigger the default navigation event, and also prevents clicks on buttons inside these links from doing the same.
View app.js
// Fixes two issues:
// - Clicking a link with a `phx-click` attribute did not cause the link default (navigation) to trigger.
// - Clicking a button inside the link *would* cause the link default to trigger.
Hooks.AllowLinkDefaultAndPreventNestedDefault = {
mounted() {
this.el.addEventListener("click", (e) => {
// `closest` in case we click an element inside a button, e.g. an icon.
if ("button")) {
} else {
henrik /
Last active May 26, 2020
LiveView rendering lab

Lab (LiveView 0.13.0, Phoenix 1.5.3)

A - straight for loop

First render, 8233 bytes

["4","4","lv:phx-FhF6gwiU2cjuXjoB","phx_reply",{"response":{"rendered":{"0":"<a class="tabs__tab " data-phx-link="patch" data-phx-link-state="push" href="/"><i class="fas fa-eye mr-1">\nCommits\n","1":"<a class="tabs__tab " data-phx-link="patch" data-phx-link-state="push" href="/comments"><i class="fas fa-comments mr-1">\nComments\n","2":"<a class="tabs__tab " data-phx-link="patch" data-phx-link-state="push" href="/settings"><i class="fas fa-cog mr-1">\nSettings\n","3":"","4":"","5":{"0":{"d":[["1","Item 1","1"],["2","Item 2","2"],["3","Item 3","3"],["4","Item 4","4"],["5","Item 5","5"],["6","Item 6","6"],["7","Item 7","7"],["8","Item 8","8"],["9","Item 9","9"],["10","Item 10","10"],["11","Item 11","11"],["12","Item 12","12"],["13","Item 13","13"],["14","Item 14","14"],["15","Item 15","15"],["16","Item 16","16"],["17","Item 17","17"],["18","Item 18","18"],["19

henrik / consignor_portal_data_ws_example.rb
Created Mar 12, 2020
Using the Consignor Portal Data WS (web service) with Savon in Ruby.
View consignor_portal_data_ws_example.rb
require "savon"
client = Savon.client(
pretty_print_xml: true,
log: true,
wsdl: "",
namespace_identifier: "edis",
#pp client.operations
henrik / gemdiffs.rb
Last active Apr 20, 2020
Ruby script (gemdiffs.rb) to generate Coditsu gem diffing URLs from a Gemfile.lock diff, to help catch hijacked gems, or just to keep on top of changes. Also supports gems sourced straight from GitHub. There's also updategems.rb which updates gems and calls gemdiffs.rb to pre-fill the commit message.
View gemdiffs.rb
#!/usr/bin/env ruby
# Usage example (in a Terminal):
# bundle update
# script/gemdiffs.rb
# Rubygems version diffs.
puts `git diff Gemfile.lock`.lines.
select { |line| line.match?(/^[+-] \w/) }.