“...I've been working since 2008 with Ruby / Ruby on Rails, love a bit of Elixir / Phoenix and learning Rust. I also poke through other people's code and make PRs for OpenSource Ruby projects that sometimes make it. Currently working for InPay...”

Rob Lacey
Senior Software Engineer, UK

Google Drive Access

Grrrr….. Faraday::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

https://github.com/google/google-api-ruby-client/issues/253

Robs-iMac:epic-invite roblacey$ brew update
Error: /usr/local is not writable. You should change the ownership
and permissions of /usr/local back to your user account:
  sudo chown -R $(whoami) /usr/local
Robs-iMac:epic-invite roblacey$ brew updatesudo chown -R $(whoami) /usr/local
Robs-iMac:epic-invite roblacey$ sudo chown -R $(whoami) /usr/local
Password:
Robs-iMac:epic-invite roblacey$ brew update
Updated Homebrew from b77a695 to 34f08a9.
Updated 2 taps (homebrew/core, homebrew/services).
==> New Formulae
alot                              gitversion                        libngspice                        openssl@1.1                       sslsplit
amqp-cpp                          gmic                              libosmium                         osmfilter                         svgcleaner
apache-zeppelin                   gofabric8                         libsquish                         osrm-backend                      termbox
archi-steam-farm                  grafana                           libuninameslist                   p11-kit                           terraform-provisioner-ansible
armor                             gron                              linkerd                           pacparser                         terragrunt
borg                              hana                              liquigraph                        pdftoedn                          timewarrior
coffeescript                      hashcat                           loc                               piknik                            tldr
compose2kube                      hesiod                            locateme                          presto                            treefrog
consul-backinator                 hg-fast-export                    luaver                            pybind11                          ttyd
csvtomd                           hopenpgp-tools                    metricbeat                        pyinvoke                          ttygif
dbhash                            hostess                           mfterm                            questdb                           twarc
direvent                          httpdiff                          micro                             rancher-cli                       typescript
dscanner                          httpstat                          mikutter                          rclone                            urbit
elvish                            jsonlint                          minimesos                         ripgrep                           vaulted
eventql                           jumanpp                           minio-mc                          rmlint                            wdc
feedgnuplot                       jxrlib                            modd                              shyaml                            wego
folly                             kube-aws                          mpage                             snap-telemetry                    willgit
fsevents-tools                    lean-cli                          nats-streaming-server             sonar-scanner                     xcenv
git-remote-hg                     lego                              neatvi                            sql-translator                    yarn
git-series                        libbdplus                         nmh                               sqldiff                           zsh-git-prompt
gitless                           libdivecomputer                   nvc                               ssh-audit                         zstd
==> Updated Formulae
abcm2ps                           dropbear                          httping                           mksh                              rocksdb
abi-compliance-checker            dropbox-uploader                  hub                               mkvtoolnix                        rolldice
abook                             dspdfviewer                       hugo                              mldonkey                          roswell
ace                               dtach                             hunspell                          mlogger                           rswift
acmetool                          dub                               hydra                             mlt                               rtags
acpica                            duplicity                         hyper                             mmix                              rtv
activemq                          dvm                               hyperscan                         mobile-shell                      ruby
advancecomp                       dwarfutils                        i2p                               mogenerator                       ruby-build
afflib                            dwdiff                            ibex                              monetdb                           runit
afl-fuzz                          dxpy                              ice                               mongo-c                           rush
agedu                             dynamodb-local                    icu4c                             mongodb                           rust
aha                               efl                               idris                             mongoose                          s-search
airspy                            eigen                             imagemagick ✔                     monit                             s6
akka                              ejabberd                          imapsync                          monkeysphere                      saltstack
algernon                          ekg2                              infer                             mono                              sane-backends
allegro                           elasticsearch                     influxdb                          moreutils                         sassc
amap                              elixir                            inspircd                          mosquitto                         sbcl
amazon-ecs-cli                    elixirscript                      internetarchive                   mozjpeg                           sbt
ammonite-repl                     emacs                             ios-deploy                        mpc                               scala
android-ndk                       emacs-clang-complete-async        ios-sim                           mpd                               schismtracker
anjuta                            embulk                            ios-webkit-debug-proxy            mpfr                              scons
ansible                           emp                               ipbt                              mpg123                            scour
ansible-cmdb                      emscripten                        iperf3                            mpich                             scriptcs
ansifilter                        enca                              ipfs                              mpop                              scw
ansiweather                       epic5                             ironcli                           mpv                               sdcc
antigen                           eris                              irrlicht                          msitools                          sdcv
antlr                             erlang                            irssi                             msktutil                          sdl2
apache-flink                      esniper                           isc-dhcp                          msmtp                             sdl_image
apache-spark                      etcd                              iso-codes                         mtools                            selenium-server-standalone
apktool                           evince                            ispc                              mtr                               ser2net
app-engine-go-32                  exercism                          jack                              mu                                serf
app-engine-go-64                  exim                              jansson                           multimarkdown                     sf-pwgen
app-engine-java                   exploitdb                         jasper                            multirust                         sfcgal
app-engine-python                 fabio                             jbake                             mutt                              sflowtool
appscale-tools                    fabric                            jboss-forge                       mvtools                           sfml
apr                               fastd                             jemalloc                          mycli                             shadowsocks-libev
apr-util                          fdk-aac-encoder                   jena                              mypy                              shairport-sync
aqbanking                         fdroidserver                      jenkins                           mysql ✔                           shared-mime-info
arangodb                          fdupes                            jenkins-job-builder               mysql-sandbox                     shellcheck
argon2                            ffind                             jetty                             mysqltuner                        shellinabox
argus-clients                     ffmbc                             jfrog-cli-go                      nanopb-generator                  shpotify
argyll-cms                        ffmpeg ✔                          jlog                              nasm                              siege
aria2                             ffmpegthumbnailer                 jmxtrans                          natalie                           sift
artifactory                       ffms2                             joe                               ncdu                              signify-osx
asciidoc                          fftw                              jpegoptim ✔                       ncmpc                             sile
asciinema2gif                     file-roller                       jq                                ncmpcpp                           simple-tiles
asciiquarium                      filebeat                          jruby                             ncrack                            sjk
asio                              fio                               jsdoc3                            neo4j                             skinny
assh                              fish                              json-fortran                      neofetch                          sleuthkit
at-spi2-atk                       flake8                            json-glib                         neon                              slimerjs
at-spi2-core                      flatbuffers                       jsoncpp                           netpbm                            smali
atk                               flatcc                            jsonnet                           nettle                            smartmontools
ats2-postiats                     fleetctl                          jsonpp                            newlisp                           smlnj
aubio                             flex                              jsonschema2pojo                   nexus                             sngrep
augeas                            flow                              kafka                             nghttp2                           socat
aurora-cli                        flowgrind                         kapacitor                         nginx                             sops
autoconf-archive                  fluent-bit                        kawa                              nickle                            source-highlight
autoenv                           flvmeta                           kerl                              nifi                              sourcekitten
autojump                          fmt                               kes                               nim                               spatialite-gui
avro-c                            fobis                             kettle                            nmap                              spatialite-tools
awf                               fontconfig                        keybase                           node ✔                            spdylay
aws-apigateway-importer           fontforge                         khal                              node-build                        spidermonkey
aws-elasticbeanstalk              fonttools                         khard                             nodeenv                           spring-loaded
aws-sdk-cpp                       ford                              kibana                            nomad                             sqlite
aws-shell                         format-udf                        kitchen-sync                      noti                              sqlite-analyzer
awscli                            freeipmi                          knot                              notmuch                           sqlmap
azure-cli                         freeling                          kobalt                            nsd                               ssdb
b2-tools                          freeradius-server                 konoha                            nspr                              sshguard
babl                              freetds                           kore                              nss                               sshuttle
bacula-fd                         freetype ✔                        kotlin                            ntl                               ssllabs-scan
baobab                            fstar                             kpcli                             nvm                               sslscan
basex                             fswatch                           kubernetes-cli                    nzbget                            sslyze
bash                              fuseki                            kyua                              oauth2_proxy                      storm
bash-git-prompt                   fwup                              languagetool                      ocamlbuild                        stout
bash-preexec                      fzf                               latex2html                        offlineimap                       strongswan
bashdb                            galen                             latexml                           ola                               stunnel
bazel                             gammaray                          launch                            omega                             subliminal
bdw-gc                            gammu                             launch4j                          oniguruma                         subnetcalc
bear                              gauche                            lbdb                              ooniprobe                         supersonic
beecrypt                          gauge                             ldapvi                            open-babel                        supervisor
bfg                               gawk                              ldc                               open-mpi                          suricata
bgpq3                             gcc                               ldns                              open-scene-graph                  svtplay-dl
bib-tool                          gcovr                             le                                opencc                            swagger-codegen
bibtexconv                        gd                                leaps                             openconnect                       swi-prolog
bind                              gdal                              ledger                            opencsg                           swift
binutils                          gdb                               legit                             opendbx                           swiftgen
binwalk                           gdk-pixbuf                        leiningen                         openhmd                           swiftlint
bitrise                           gdl                               lensfun                           openjpeg                          swig
blackbox                          gdm                               leveldb                           openrtsp                          syncthing
bmake                             geckodriver                       lfe                               openshift-cli                     syncthing-inotify
boost                             gedit                             libass                            openssl ✔                         sysdig
boost-bcp                         gegl                              libatomic_ops                     openvdb                           szl
boost-build                       generate-json-schema              libbluray                         openvpn                           taglib ✔
boost-python                      geoserver                         libbson                           ophcrack                          tailor
botan                             ghc                               libbtbb                           orc                               takt
brew-gem                          ghex                              libcddb                           oscats                            tarantool
brotli                            ginac                             libcdio                           osh                               tbb
bsdconv                           git                               libcdr                            osm-pbf                           tbox
buku                              git-annex                         libcec                            osm2pgrouting                     tccutil
c-ares                            git-archive-all                   libcouchbase                      osm2pgsql                         tcpkali
cabal-install                     git-cola                          libdap                            osmosis                           telegraf
cadaver                           git-credential-manager            libdrawtext                       osquery                           terminal-notifier
caddy                             git-extras                        libebur128                        owfs                              terraform
caf                               git-fixup                         libetonyek                        oysttyer                          texinfo
cake                              git-flow-avh                      libexosip                         packer                            texmath
calabash                          git-fresh                         libflowmanager                    paket                             tgui
calc                              git-imerge                        libfreenect                       pam_yubico                        the_platinum_searcher
carina                            git-lfs                           libftdi                           pandoc                            the_silver_searcher
carthage                          git-octopus                       libgaiagraphics                   pandoc-citeproc                   thefuck
cask                              git-secret                        libgcrypt                         pandoc-crossref                   tig
cassandra                         git-town                          libgda                            pango                             tile38
castxml                           git-when-merged                   libgee                            pangomm                           tin
cattle                            gitbucket                         libgeotiff                        paperkey                          tinc
cayley                            giter8                            libgetdata                        parallel                          tinyproxy
ccache                            gitg                              libgit2                           pass                              tippecanoe
ccextractor                       gitlab-ci-multi-runner            libgit2-glib                      passenger                         titan-server
cconv                             gjs                               libgraphqlparser                  passpie                           tmux
cereal                            gjstest                           libgsf                            pazpar2                           tmux-mem-cpu-load
cern-ndiff                        glade                             libicns                           pcap_dnsproxy                     todolist
certbot                           glib                              libiscsi                          pcb2gcode                         tomcat
certigo                           glib-networking                   libjson-rpc-cpp                   pce                               tor
ceylon                            glibmm                            libksba ✔                         pdal                              torsocks
cfr-decompiler                    glide                             liblastfm                         pdf2htmlex                        trafficserver
cgal                              glm                               liblwgeom                         pdnsrec                           transcrypt
cgdb                              global                            libmagic                          pdsh                              translate-shell
cgrep                             globus-toolkit                    libmicrohttpd                     peco                              translate-toolkit
chaiscript                        glyr                              libmill                           peg                               typesafe-activator
chapel                            gnatsd                            libmongoclient                    percona-server                    uchardet
charm                             gnome-builder                     libmspub                          percona-toolkit                   uhd
charm-tools                       gnome-icon-theme                  libmtp                            pgbadger                          unbound
cheat                             gnome-themes-standard             libnfs                            pgcli                             uncrustify
checkstyle                        gnu-apl                           libnotify                         pgroonga                          unrar
chisel                            gnu-complexity                    libosinfo                         pgrouting                         upscaledb
chromedriver ✔                    gnu-smalltalk                     libosip                           pick                              urweb
citus                             gnu-tar                           libpeas                           picocom                           uwsgi
cjdns                             gnu-units                         libphonenumber                    pidcat                            vala
clang-format                      gnumeric                          libpng ✔                          pillar                            valabind
clearlooks-phenix                 gnupg ✔                           libpointing                       pius                              valgrind
cli53                             gnupg2                            libprotoident                     pkg-config ✔                      vapoursynth
clib                              gnuplot                           libqalculate                      planck                            varnish
cliclick                          gnuradio                          librasterlite                     plantuml                          vault
clipper                           gnutls                            libraw                            platformio                        vc4asm
clisp                             go                                librdkafka                        plowshare                         vcdimager
clutter-gst                       goaccess                          libreadline-java                  pmd                               vdirsyncer
clutter-gtk                       gobject-introspection             libressl                          pngcrush                          vegeta
cmake                             godep                             libsamplerate                     poco                              verilator
cmocka                            goffice                           libscrypt                         pod2man                           vert.x
coccinelle                        gollum                            libsigc++                         ponyc                             vim
cocoapods                         google-benchmark                  libsoup                           poppler                           vmtouch
codequery                         googler                           libspatialite                     postgis                           vnstat
cogl                              gor                               libspiro                          postgres-xc                       voldemort
collectd                          gosu                              libssh2                           postgresql                        voltdb
commandbox                        govendor                          libstrophe                        pre-commit                        voms
conan                             gpgme                             libswiften                        predictionio                      vowpal-wabbit
concurrencykit                    gphoto2                           libtess2                          premake                           vte3
consul                            gpm                               libtiff ✔                         primesieve                        vultr
consul-template                   gprof2dot                         libtorrent-rasterbar              privoxy                           wakatime-cli
convox                            gputils                           libu2f-host                       profanity                         wartremover
coq                               gqlplus                           libuv                             progress                          watch
corectl                           gradle                            libvirt                           proguard                          watchman
coturn                            grails                            libvisio                          proj                              watson
couchdb                           graphicsmagick                    libvpx                            prometheus                        webkitgtk
cppcheck                          graphite2                         libxml++3                         proof-general                     weboob
cpprestsdk                        graphviz                          libxmp                            protobuf                          wellington
creduce                           grib-api                          libxslt                           protobuf-c                        wgetpaste
cromwell                          gringo                            libyaml ✔                         protobuf-swift                    whatmp3
cryptopp                          groonga                           liquibase                         psgrep                            wildfly-as
crystal-lang                      gsettings-desktop-schemas         lldpd                             pulledpork                        wimlib
csfml                             gsl                               llnode                            purescript                        wine
cucumber-cpp                      gsoap                             llvm                              pushpin                           winetricks
curl                              gspell                            lmdb                              pwntools                          wireguard-tools
dar                               gssdp                             lnav                              pwsafe                            wireshark
darcs                             gssh                              logentries                        pyenv                             with-readline
darkice                           gst-editing-services              logstash                          pyenv-virtualenv                  wolfssl
dash                              gst-libav                         logtalk                           pygobject3                        wrangler
datetime-fortran                  gst-plugins-bad                   luajit                            pypy                              wxmac
datomic                           gst-plugins-base                  luaradio                          pyqt5                             x264 ✔
davix                             gst-plugins-good                  lynis                             python                            x265
dbus                              gst-plugins-ugly                  m-cli                             python3                           xapian
dc3dd                             gst-python                        macosvpn                          qbs                               xcproj
dcmtk                             gst-validate                      macvim                            qca                               xctool
dcraw                             gstreamer                         mailhog                           qemu                              xmake
ddar                              gstreamermm                       mailutils                         qjackctl                          xonsh
debianutils                       gtk+                              makepkg                           qscintilla2                       xorriso
deheader                          gtk+3                             mapnik                            qt5                               yadm
deis                              gtk-gnutella                      mapserver                         quantlib                          yafc
deisctl                           gtk-vnc                           mariadb                           quazip                            yank
deja-gnu                          gtkextra                          mas                               quilt                             yara
dependency-check                  gtkmm                             matlab2tikz                       qwt                               yash
depqbf                            gtkmm3                            mawk                              qxmpp                             yaz
devd                              gtksourceview3                    mbedtls                           radare2                           yazpp
devhelp                           gucharmap                         mbelib                            rainbarf                          yle-dl
devtodo                           guile                             mdbtools                          rakudo-star                       you-get
dieharder                         gupnp                             mdds                              rancher-compose                   youtube-dl
diff-pdf                          gupnp-av                          mdk                               rapidjson                         yubico-piv-tool
diff-so-fancy                     gupnp-tools                       mdp                               rbenv-binstubs                    z3
digdag                            gwyddion                          mdv                               re2                               zbackup
discount                          gx                                media-info                        readline ✔                        zebra
distribution                      gx-go                             mediaconch                        reattach-to-user-namespace        zenity
ditaa                             gxml                              memcached ✔                       rebar                             zero-install
djview4                           h2o                               mercurial                         redis ✔                           zeromq
dmd                               hadolint                          meson                             redpen                            zile
dnscrypt-wrapper                  hadoop                            mesos                             remarshal                         zimg
docker                            harfbuzz                          metabase                          remctl                            znapzend
docker-cloud                      haskell-stack                     metaproxy                         renameutils                       zookeeper
docker-compose                    hbase                             metashell                         repo                              zorba
docker-machine                    hebcal                            mg                                reposurgeon                       zpaq
docker-machine-driver-xhyve       heroku                            mg3a                              rethinkdb                         zplug
docker-machine-nfs                hh                                micropython                       rfcmarkup                         zsh-autosuggestions
docker-swarm                      highlight                         midnight-commander                rgxg                              zsh-completions
dockutil                          highlighting-kate                 mighttpd2                         rhash                             zsh-navigation-tools
doctl                             hive                              miller                            rhino                             zsh-syntax-highlighting
dovecot                           hledger                           minio                             riemann                           zurl
doxygen                           homebank                          mitmproxy                         riemann-client
dpkg                              httpie                            mkdocs                            rlwrap
==> Renamed Formulae
geode -> apache-geode                     racket -> minimal-racket                  sonar -> sonarqube                        stash-cli -> atlassian-cli
==> Deleted Formulae
aeskeyfind              curaengine              fugu                    lftp                    pyqwt                   sgfutils                treeline
aget                    cuty_capt               geany                   libdbusmenu-qt          pyside                  shiboken                txt2man
apt-cacher-ng           czmqpp                  gimp                    libechonest             pyside-tools            slony                   ucspi-tools
automoc4                dircproxy               git-stree               libmarisa               qbzr                    sonar-runner            valkyrie
box2d                   disco                   idcomments              libnice                 qwtpolar                sqliteman               wyrd
bzr-explorer            dwarf                   jing                    libqglviewer            rbenv-readline          sqsh                    yap
caudec                  elementary              jless                   openlitespeed           rcssserver              swish-e
cfitsio                 evas-generic-loaders    jsdoc-toolkit           orpie                   rfcdiff                 tevent
class-dump              ezlupdate               kjell                   pgtap                   rsense                  tlassemble
coin                    frescobaldi             lastfmlib               puddletag               samba                   trang
==> Migrating HOMEBREW_REPOSITORY (please wait)...
==> Migrated HOMEBREW_REPOSITORY to /usr/local/Homebrew!
Homebrew no longer needs to have ownership of /usr/local. If you wish you can
return /usr/local to its default ownership with:
  sudo chown root:wheel /usr/local
Robs-iMac:epic-invite roblacey$ sudo chown root:wheel /usr/local
Robs-iMac:epic-invite roblacey$ brew upgrade openssl
==> Upgrading 1 outdated package, with result:
openssl 1.0.2j
==> Upgrading openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2j.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring openssl-1.0.2j.sierra.bottle.tar.gz
==> Using the sandbox
==> Caveats
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include
    PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig

==> Summary
 /usr/local/Cellar/openssl/1.0.2j: 1,695 files, 12M

turning off ActiveRecord logging in the console

It’s sometimes quite annoying to have SQL queries clogging up the Rails console when you don’t need to see it. You Can turn it off by setting ActiveRecord’s logger to nil

old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil

You can of course turn it back on again.

ActiveRecord::Base.logger = old_logger

since upgrading to macOS Sierra

Of course I need to re-install Command Line Developer Tools without XCode, same after every upgrade.

Robs-MBP:themadkatter rl$ git pull orgin master
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Robs-MBP:themadkatter rl$ xcode-select --install
xcode-select: note: install requested for command line developer tools

Itty Bitty City

Found this rather nice Ardunio kit, which integrates nicely with LEGO compatible components.

https://comingsoon-tech.com/itty-bitty-city-by-microdunio-build-smart-legos

Hooking into ActiveRecord logging

Quick and dirty hook to log long SQL queries and their caller.

ActiveSupport::Notifications.subscribe 'sql.active_record' do |name, start, finish, id, payload|
  time = (finish - start) * 1000
  if payload[:sql] && time > 500
    time = (time * 1000).to_i / 1000.0
    c = caller.select { |l| l =~ /something_(core|music|artists)/ }[0]
    logger = Logger.new(Rails.root.join('log', 'active_record_slow_queries.log'))
    logger.info("(#{time}s) #{payload[:sql]} - #{c}")
  end
end

Ruby WTF #1

Answers on a postcard.

2.2.0 :004 > %w( dave )
=> ["dave"] 
2.2.0 :005 > %w) dave )
=> ["dave"]

I'm so dizzy

Playing with generating SVGs manually, we’ll with a txt file of the image and HAML and Ruby but still…

It’s only appropriate really to link to YolkFolk at this point.

Comparing plain old Ruby objects

Try Google-ing for <=> it not very helpful. It’s the spaceship method, I can never remember that. So in my case I had a custom classes representing a remote resource and I needed to compare if these objects were similar based on their id. If you compare object == other_object, they won’t be the same because they are different objects in memory. You could write…

class Tentacle
  def ==(other)
    self.id == other.id
  end
end

..but what about >, >=, <, <=, !=, etc. Comparable covers all of this.

class Tentacle
  include Comparable
  def <=>(other)
    self.id <=> other.id
  end
end

…but what if the object you’re comparing against is an instance of another class?

class Tentacle
  def <=>(other)
    return nil unless other.is_a?(self.class)
    self.id <=> other.id
  end
end

And that was the day that was.

Test expiry of a PEM Certificate

Want to test the expiry of PEM Certificate?

Robs-iMac:something roblacey$ openssl x509 -enddate -noout -in config/certificates/ios/production.pem
notAfter=Apr 21 16:55:18 2017 GMT

Nice.

RangeError (2918996727 is out of range for ActiveModel::Type::Integer with limit 4):

If you’re attempting to store an IP as an Integer in MySQL, you’ll find that an Integer just isn’t enough. I hadn’t noticed for a few days and came home to a log file full of

RangeError (2918996727 is out of range for ActiveModel::Type::Integer with limit 4):

Easily fixed.

Database changed
MariaDB [robl]> ALTER TABLE fossa_logs MODIFY ip bigint(20) NULL;
Query OK, 209 rows affected (0.03 sec)             
Records: 209  Duplicates: 0  Warnings: 0
GPK of the Day TOMMY Tomb