Skip to content

Instantly share code, notes, and snippets.

@keithrbennett
keithrbennett / compare_request_methods.rb
Last active September 20, 2024 16:40
Illustrates getting responses from multiple HTTPS resources in Ruby using conventional, thread, and fiber approaches.
#!/usr/bin/env ruby
# frozen_string_literal: true
# IMPORTANT: You may need to increase the number of available file handles available to this process.
# The number should be greater than the maximum number of requests you want to make, because each process
# opens at least 3 file handles (stdin, stdout, stderr), and other files may be opened during the program's
# run (e.g. for the logger).
# ulimit -n 300 && scripts/compare_request_methods.rb
require 'async/http/internet' # gem install async-http if necessary
ERROR in ./app/javascript/stylesheets/application.scss (./node_modules/css-loader/dist/cjs.js??ref--6-1!./node_modules/postcss-loader/src??ref--6-2!./node_modules/sass-loader/dist/cjs.js??ref--6-3!./app/javascript/stylesheets/application.scss)
Module build failed (from ./node_modules/postcss-loader/src/index.js):
ParserError: Syntax Error at line: 1, column 29
at /Users/kbennett/code/bbs-website/app/javascript/stylesheets/application.scss:5:44227
at Parser.error (/Users/kbennett/code/bbs-website/node_modules/postcss-values-parser/lib/parser.js:127:11)
at Parser.operator (/Users/kbennett/code/bbs-website/node_modules/postcss-values-parser/lib/parser.js:162:20)
at Parser.parseTokens (/Users/kbennett/code/bbs-website/node_modules/postcss-values-parser/lib/parser.js:245:14)
at Parser.loop (/Users/kbennett/code/bbs-website/node_modules/postcss-values-parser/lib/parser.js:132:12)
at Parser.parse (/Users/kbennett/code/bbs-website/node_modules/postcss-values-parser/lib/parser.js:51:17)
at
@keithrbennett
keithrbennett / chg-screenshot-filenames
Created February 18, 2024 13:49
Renames Mac screenshot files using a more command line friendly format.
#!/usr/bin/env python3
# This script reads the filespecs in the current directory, collects names of files
# in the default screenshot file name format, converts the names to lower case
# with spaces converted to hyphens, and removes the "at" to produce a command line friendly filespec;
# for example, "Screenshot 2024-02-18 at 21.06.31.pdf" becomes "screenshot-2024-02-18--21.06.31.pdf".
#
# It ignores but preserves the extensions, so if you have changed the screenshot file type with, e.g.:
# defaults write com.apple.screencapture type pdf && killall SystemUIServer
# then it will rename those PDF files too.
@keithrbennett
keithrbennett / 2023-12-09-chiang-mai-ai-meeting-notes.md
Last active December 10, 2023 05:45
2023-12-09 Chiang Mai AI Meeting Notes
def modules_including_module(target_module)
ObjectSpace.each_object(Module).select do |object|
# All Class'es are modules, but we are not interested in them, so we exclude them.
!object.is_a?(Class) \
&& \
object.ancestors.include?(target_module) \
&& \
!object.equal?(target_module)
end
end
# Any module (not class) that includes SemanticLogger::Loggable must also implement an
# `included` method that gets the including class to also include SemanticLogger::Loggable.
# This is because the module's instance method `logger`, when it becomes part of the including
# class, will look for `self.class.logger` when called, and `self` will evaluate to the instance
# of the class and not the module. Having the class include `Loggable` will cause a class method
# `logger` to be created so that this will work.
#
# This method returns the modules that have included Loggable but do not have an `included`
# method implementation. This is an imperfect test since we are not testing the content of that
# implementation, but I don't know a better way.
@keithrbennett
keithrbennett / module-method-doesnt-override-class-instance-method.rb
Last active September 18, 2022 07:54
Shows that a module instance method will not overwrite a class instance method of the same name if `include` is used, but *will* if `prepend` is used.
#!/usr/bin/env ruby
module M
def foo
puts 'I am a module instance method.'
end
end
# Class whose foo instance method is defined *after* the include.
class C1
@keithrbennett
keithrbennett / force_class_inclusion_of_module.rb
Last active September 15, 2022 15:01
Illustrates forcing inclusion of a module by another included module in Ruby.
#!/usr/bin/env ruby
# From solution at https://stackoverflow.com/questions/73676857/guaranteeing-that-module-includer-classes-include-another-module-in-ruby.
module M1
def m1; puts 'M1 was included by M2.'; end
end
module M2
def self.included(including_class)
#!/usr/bin/env ruby
# Illustrates cycling through the SemanticLogger log levels with signals.
# For reference by https://github.com/reidmorrison/semantic_logger/issues/231.
require 'semantic_logger'
# Redefine add_signal_handler to output to STDERR (omit TTIN behavior for brevity):
module SemanticLogger
def self.add_signal_handler(log_level_signal = "USR2", thread_dump_signal = "TTIN", gc_log_microseconds = 100_000)
@keithrbennett
keithrbennett / trap_user_signals.rb
Created July 28, 2022 04:56
Illustrates the use of 'trap' in Ruby for crude interprocess communication
#!/usr/bin/env ruby
# Author: @keithrbennett (Github)
# Illustrates how to respond to Unix signals in a Ruby program, using SIGUSR1 and SIGUSR2
# for user-defined signals, and SIGINT for trapping Ctrl-C.
require 'awesome_print'
require 'json'
require 'yaml'