Skip to content

Instantly share code, notes, and snippets.

View chrisbloom7's full-sized avatar
👂
Open to work

Chris Bloom chrisbloom7

👂
Open to work
View GitHub Profile
@chrisbloom7
chrisbloom7 / farewell-and-gratitude-external.md
Last active October 22, 2024 02:24
Farewell and Gratitude to GitHub

Dear Colleagues,

After much reflection, I’ve made the difficult decision to leave GitHub, with my last day being October 29, 2024.

My time here has been nothing short of transformative. The one constant through all the highs and lows has been the incredible people I’ve had the privilege to work with. You have consistently shown courage in speaking up, advocating for what’s right, and putting out extraordinary work. I’ve grown more here over the last five years than in any other position, thanks in no small part to the collaboration, mentorship, and friendship you’ve all offered me.

I’ll miss our shared problem-solving, the inside jokes, and, of course, our collective drive to make great things happen. I hope we keep in touch and that our paths cross again.

Thank you all so much. It has truly been an honor and a priveledge to call you my calleagues. I wish you all the best in your future endeavors.

@chrisbloom7
chrisbloom7 / 01-ruby-slack-websocket-client-example.md
Last active November 18, 2024 16:51
Improved implementation of a websocket connector for Slack using the `async-websockets` gem
@chrisbloom7
chrisbloom7 / slack_ruby_client_websockets.rake
Last active September 20, 2024 18:43
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: