Skip to content

Instantly share code, notes, and snippets.

View chrisbloom7's full-sized avatar
💭
I may be slow to respond.

Chris Bloom chrisbloom7

💭
I may be slow to respond.
View GitHub Profile
@chrisbloom7
chrisbloom7 / slack_ruby_client_websockets.rake
Last active August 21, 2023 08:33
Basic implementation of a websocket connector for Slack using slack-ruby-client and async-websockets gems
# frozen_string_literal: true
# Basic implementation of a websocket connector for Slack using the slack-ruby-client gem
#
# Run this rake task in a virtual container that is set to automatically restart on failure; this
# will help deal with disconnects from Slack since socket URLs are temporary.
# https://api.slack.com/apis/connections/socket-implement#disconnect
#
# This rake task can be called in multiple virtual containers to help with resilliancy and rolling restarts
# https://api.slack.com/apis/connections/socket-implement#connections
@chrisbloom7
chrisbloom7 / README.md
Last active October 20, 2021 22:10
Simple rails-ish app that demonstrates bug in paper_trail gem when using serialized fields that contain unicode characters

I've found a bug that is specific to the following scenario:

  • Using MySQL
  • Using a longblob column type
  • Using a serialized attribute
  • Using paper_trail gem
  • Serialized field contains unicode character

Under those conditions, after saving changes to the serialized field, record#changed? still reports true, and record#changes contains an entry for the serialized field where both the before and after elements are identical. Calling record#reload clears the changes and loads the record with the changed value. If paper_trail is removed from the scenario, the ActiveModel attribute mutation tracking works as expected.

test result reserved method call type error reported
Error :render_to_body called directly ArgumentError: wrong number of arguments (given 1, expected 0)
Error :render_to_body called indirectly ArgumentError: wrong number of arguments (given 1, expected 0)
Error :instance_variable_get called directly ArgumentError: wrong number of arguments (given 1, expected 0)
Error :instance_variable_get called indirectly ArgumentError: wrong number of arguments (given 1, expected 0)
Error :process called directly ArgumentError: wrong number of arguments (given 1, expected 0)
Error :process called indirectly ArgumentError: wrong number of arguments (given 1, expected 0)
Error :logger called indirectly SystemStackError: stack level too deep
Error :logger called directly SystemStackError: stack level too deep
Error :send_action called indirectly ArgumentError: wrong number of arguments (given 1, expected 0)
@chrisbloom7
chrisbloom7 / singleton_test_isolation.rb
Created October 2, 2019 02:57
Using an anonymous subclass to test singleton objects in isolation
class MySingletonClass
include Singleton
attr_reader :client
def initialize
@client = Service::We::Only::Ever::Need::One::Connection::To.new(SERVICE_URL)
end
end
@chrisbloom7
chrisbloom7 / ex_passing_slices_and_arrays_by_val.go
Created June 4, 2019 00:57
Surprising behavior when passing arrays and slices to functions in Go
package main
import (
"fmt"
)
var a1 = [3]int{1, 2, 3}
var s1 = a1[0:3]
func main() {
@chrisbloom7
chrisbloom7 / prime.rb
Created May 22, 2019 16:31
Detecting prime numbers in Ruby
# A prime is a natural number greater than 1 that cannot be formed by multiplying two smaller natural numbers
def prime?(int)
# A prime is a natural number greater than 1...
return false if int < 2
# Is _int_ evenly divisible by any number 2 -> int-1?
(2..(int - 1)).each do |divisor|
return false if int % divisor == 0
end
return true

Doubly Linked List implementation in Ruby

Setup

  • Install Ruby ~> 2.6
  • gem install rspec
  • Open an IRB session with irb -r ./linked_list.rb
list = LinkedList.new
@chrisbloom7
chrisbloom7 / A ruby module to assist in capturing stdout and stderr from a detached thread in jRuby.md
Last active April 9, 2019 21:07
Ruby module to assist in capturing stdout/stderr from a detached thread

A ruby module to assist in capturing stdout/stderr from a detached thread in jRuby

  1. create some temp files (but not Tempfiles since they would be GC'd too quickly)
  2. append standard file descriptor redirects to the commands that we'll run in the detached spawned process, i.e. 1>>stdout_tempfile_path 2>>stderr_tempfile_path
  3. tack on a final command that will trigger copying the files to S3 regardless of exit status of original commands, i.e. {original commands with io redirection &&'d together}; bundle exec rake cleanup_task
  4. cleanup other io redirection temp files older than some threshold

Example usage:

@chrisbloom7
chrisbloom7 / I18n for Panini.md
Last active April 9, 2019 21:10
Adding a MailChimp Template Language (MTL) based I18n helper for Panini templates

i18n for Panini

Requirements

Other than the default Panini pieces, you will also need to make sure that lodash is included as a devDependencies in your package.json

Usage

Tag a section of text as translatable. The section will be replaced with a set of if/elseif/else Merge Tags for each translation provided, otherwise only the wrapped content is displayed.

@chrisbloom7
chrisbloom7 / rake_benchmark.rb
Created June 8, 2016 15:09 — forked from harley/rake_benchmark.rb
Benchmarking a rake task
# Put this in Rakefile (doesn't matter where)
require 'benchmark'
class Rake::Task
def execute_with_benchmark(*args)
bm = Benchmark.measure { execute_without_benchmark(*args) }
puts " #{name} --> #{bm}"
end
alias_method :execute_without_benchmark, :execute