Skip to content

Instantly share code, notes, and snippets.

dteoh /
Created February 4, 2015 01:02

Keybase proof

I hereby claim:

  • I am dteoh on github.
  • I am dteoh ( on keybase.
  • I have a public key whose fingerprint is 981E AFFF 4AE6 5ED3 AC3E 401E 8498 2F30 A58D F5CB

To claim this, I am signing this object:

dteoh / arel_select_star_from_table.rb
Last active December 2, 2019 14:45
Select all columns of an Arel table
users = User.arel_table
query = users.project(users[])
dteoh /
Last active February 1, 2017 11:14
Checksumming backups

par2 is not just for checksumming and recovering Usenet binaries, you can use it for your backups as well.

In my case, I wanted to make sure my RAW and JPG files don't get corrupted by bitrot.

Generating the checksum:

$ cd /the/directory/where/files/are/kept
$ par2 c something.par2 *
$ shasum -a 256 * > shasum256.txt
dteoh / hash_to_numeric.rb
Last active March 22, 2016 07:36
Get numeric value from hash digest
require 'digest'
key = 'the value to hash'
num = Digest::MD5.digest(key).unpack('L').first
dteoh /
Created July 12, 2016 07:33
PUT or POST JSON in a Rails 5 ActionDispatch::IntegrationTest

In Rails 5, the preferred base class for testing controllers is ActionDispatch::IntegrationTest.

If you have an API that receives parameters as JSON request bodies, here are some helper methods to facilitate testing:

class ActionDispatch::IntegrationTest
  def put_json(path, obj)
    put path, params: obj.to_json, headers: { 'CONTENT_TYPE' => 'application/json' }
dteoh /
Last active April 28, 2018 03:31
Adding extra test paths to Rails 5 `rails test` command

In Rails 4.x, you could add extra test paths to rake test by overriding the Rake task like so:


namespace :test do do |t|
    paths = ['test/**/*_test.rb']
    paths << 'engines/foo_engine/test/**/*_test.rb'
dteoh /
Created February 23, 2017 23:23
Preventing macOS from sleeping

There is a built-in command line utility caffeinate that can be used to prevent macOS from sleeping.

To prevent macOS from sleeping before a process with given PID exits:

$ caffeinate -w PID

To prevent macOS from sleeping for the next N seconds:

dteoh / puma_rb_backtrace.txt
Created April 10, 2017 00:05
Puma rb_backtrace() crash in lldb
(lldb) expression (void) rb_backtrace()
/Users/dteoh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.8.2/lib/puma/plugin/tmp_restart.rb:22: [BUG] pthread_cond_wait: Invalid argument (EINVAL)
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/CrashReporter
* /Library/Logs/CrashReporter
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
dteoh / .gitconfig
Created March 17, 2019 23:40
Use Neovim as git mergetool
tool = vimdiff
keepBackup = false
[mergetool "vimdiff"]
cmd = nvim -d $LOCAL $REMOTE $MERGED -c '$wincmd w' -c 'wincmd J'
dteoh /
Last active April 2, 2019 01:31
A pattern for encoding records with bs-json

A pattern for encoding records with bs-json

If you have a record type like:

type post = {
  title: string,
  body: string,