Skip to content

Instantly share code, notes, and snippets.

View thiagoa's full-sized avatar

Thiago Araújo Silva thiagoa

  • thoughtbot
  • Natal / RN - Brazil
View GitHub Profile
RSpec.shared_examples_for "check interface against canonical" do |canonical_interface, classes_to_check|
classes_to_check.each do |class_to_check|
example "#{class_to_check} conforms to the required interface", :aggregate_failures do
interface_methods = canonical_interface.public_instance_methods(false)
methods_to_check = class_to_check.public_instance_methods(false)
diff = interface_methods - methods_to_check
expect(diff).to be_empty, (<<~MESSAGE).split("\n").join(" ")
Expected #{class_to_check} to be polymorphic with
RSpec.shared_examples_for "interface checker" do
def diff_for(array_1, array_2)
(array_1 - array_2) + (array_2 - array_1)
end
def arities_for(object)
object.public_methods.map do |m|
arity = object.method(m).arity
[m, arity == -1 ? anything : arity]
end
@thiagoa
thiagoa / linux-usb-file-copy-fix.md
Created November 3, 2021 01:14 — forked from 2E0PGS/linux-usb-file-copy-fix.md
Fix Ubuntu and other Linux slow/hanging file copying via USB.

If your running a x64 bit Ubuntu or other Linux and find USB transfers hang at the end apply this fix:

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

I suggest you edit your /etc/rc.local file to make this change persistant across reboots.

sudo nano /etc/rc.local

# Using these pry gems -- copy to your Gemfile
# group :development, :test do
# gem 'pry', '>= 0.14.1' # Console with powerful introspection capabilities
# # Need to use master of pry-byebug to use latest pry version
# gem 'pry-byebug', github: 'deivid-rodriguez/pry-byebug' # Integrates pry with byebug
# gem 'pry-doc' # Provide MRI Core documentation
# gem 'pry-rails' # Causes rails console to open pry. `DISABLE_PRY_RAILS=1 rails c` can still open with IRB
# gem 'pry-rescue' # Start a pry session whenever something goes wrong.
# gem 'pry-theme' # An easy way to customize Pry colors via theme files
#
;; - unmix1 is my go-to solution
;; - unmix2 is 21% faster than unmix1
;; - unmix3 is 212% faster than unmix1
;; - unmix3 is a classic car-cdr lispy solution
;;
;; Benchmarked with criterium
(defn unmix1 [s]
(reduce (fn [memo [a b]] (str memo b a))
""
@thiagoa
thiagoa / index.txt
Created December 30, 2019 14:28 — forked from gus/index.txt
Ruby/Clojure analogs
For each Ruby module/class, we have Ruby methods on the left and the equivalent
Clojure functions and/or relevant notes are on the right.
For clojure functions, symbols indicate existing method definitions, in the
clojure namespace if none is explicitly given. clojure.contrib.*/* functions can
be obtained from http://github.com/kevinoneill/clojure-contrib/tree/master,
ruby-to-clojure.*/* functions can be obtained from the source files in this
gist.
If no method symbol is given, we use the following notation:
#!/usr/local/bin/sbcl --script
(load (merge-pathnames ".sbclrc" (user-homedir-pathname)))
(ql:quickload "cl-json" :silent t)
(require "inferior-shell")
(defparameter *ssh-user* "ec2-user")
(defparameter *ssh-key-path* "~/.ssh/us-east-1-platform-key.pem")
defmodule BinarySearch do
def find(item, _left, [i | _right]) when i == item, do: true
def find(item, _left, [i | right]) when i < item, do: find(item, right)
def find(item, left, [i | _right]) when i > item, do: find(item, left)
def find(_item, _left, []), do: false
def find(item, list) do
{left, right} = split(list)
find(item, left, right)
end
@thiagoa
thiagoa / align.el
Created July 6, 2018 04:05 — forked from WaYdotNET/align.el
Align function emacs
;; Align command !!!
;; from http://stackoverflow.com/questions/3633120/emacs-hotkey-to-align-equal-signs
;; another information: https://gist.github.com/700416
;; use rx function http://www.emacswiki.org/emacs/rx
(defun align-to-colon (begin end)
"Align region to colon (:) signs"
(interactive "r")
class HStruct
def self.new(*members, defaults: {}, &block)
invalid_defaults = defaults.keys - members
fail "Invalid defaults #{invalid_defaults}" if invalid_defaults.any?
klass = Class.new do
@members = members
@defaults = defaults
class << self