“...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 who are based in Denmark...”
No really I am. Well two. Over the past year I’ve spent too much time trying to solve the Staff Scheduling Problem and learned a bit about using OR-Tools as a constraint solver. I thought this would be perfect to put my findings into wordsings and publish it. It might just help someone else, how selfless am I? Right?
I could jump in on that but then realistically I’m still learning, but I have spent the last 13 years working with Ruby / Rails and having to fix bugs, and make horrid hacks, and get all of the stuffs working. I realised I could cut my teeth on something I have more experience of and all the sorts of things I post on here, if I remember, and in more detail.
So this year we will have Ruby Expletives (things I learned whilst swearing at Ruby).
I really want to play with Ruby 3.0.0, but oooooohhhhhhh noooooooooo. Seems I can’t un tar the rvm archive. I’m just not finding anything :( rbenv it is.
Robs-MacBook-Pro:~ rl$ \curl -sSL https://get.rvm.io | bash -s stable
Downloading https://github.com/rvm/rvm/archive/1.29.10.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.10/1.29.10.tar.gz.asc
gpg: Signature made Wed 25 Mar 21:58:42 2020 GMT
gpg: using RSA key 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
gpg: Good signature from "Piotr Kuczynski <piotr.kuczynski@gmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7D2B AF1C F37B 13E2 069D 6956 105B D0E7 3949 9BDB
GPG verified '/usr/local/rvm/archives/rvm-1.29.10.tgz'
.github/: Can't restore time
bin/: Can't restore time
binscripts/: Can't restore time
config/: Can't restore time
config/solaris/: Can't restore time
contrib/: Can't restore time
contrib/hudson/: Can't restore time
docs/: Can't restore time
examples/: Can't restore time
gem-cache/: Can't restore time
gemsets/: Can't restore time
gemsets/jruby/: Can't restore time
gemsets/ruby/: Can't restore time
gemsets/ruby/1.8.5/: Can't restore time
gemsets/ruby/1.8.6/: Can't restore time
gemsets/ruby/1.8.7/: Can't restore time
help/: Can't restore time
help/gemset/: Can't restore time
help/rvmrc/: Can't restore time
hooks/: Can't restore time
lib/: Can't restore time
lib/rvm/: Can't restore time
man/: Can't restore time
man/man1/: Can't restore time
patches/: Can't restore time
patches/goruby/: Can't restore time
patches/jruby/: Can't restore time
patches/jruby/1.7.9/: Can't restore time
patches/libxslt-1.1.26/: Can't restore time
patches/rbx/: Can't restore time
patches/rbx/2.5.2/: Can't restore time
patches/readline-5.2/: Can't restore time
patches/readline-6.2/: Can't restore time
patches/ree/: Can't restore time
patches/ree/1.8.6/: Can't restore time
patches/ree/1.8.7/: Can't restore time
patches/ree/1.8.7/2010.02/: Can't restore time
patches/ruby/: Can't restore time
patches/ruby/1.8.7/: Can't restore time
---8<---
patches/ruby/2.4.1/: Can't restore time
patches/ruby/2.5.0/: Can't restore time
patches/ruby/2.5.1/: Can't restore time
patches/tcs/: Can't restore time
patchsets/: Can't restore time
patchsets/jruby/: Can't restore time
patchsets/jruby/1.7.9/: Can't restore time
patchsets/rbx/: Can't restore time
patchsets/rbx/2.5.2/: Can't restore time
patchsets/ree/: Can't restore time
patchsets/ree/1.8.6/: Can't restore time
patchsets/ree/1.8.7/: Can't restore time
patchsets/ree/1.8.7/2012.02/: Can't restore time
patchsets/ruby/: Can't restore time
patchsets/ruby/1.8.7/: Can't restore time
---8<---
patchsets/ruby/2.4.1/: Can't restore time
patchsets/ruby/2.5.0/: Can't restore time
patchsets/ruby/2.5.1/: Can't restore time
rvm-test-rvm1/: Can't restore time
rvm-test/: Can't restore time
scripts/: Can't restore time
scripts/extras/: Can't restore time
scripts/extras/bash_zsh_support/: Can't restore time
scripts/extras/bash_zsh_support/chpwd/: Can't restore time
scripts/extras/completion.zsh/: Can't restore time
scripts/extras/java_read_properties/: Can't restore time
scripts/functions/: Can't restore time
scripts/functions/detect/: Can't restore time
scripts/functions/detect/system_name/: Can't restore time
scripts/functions/detect/system_version/: Can't restore time
scripts/functions/hooks/: Can't restore time
scripts/functions/manage/: Can't restore time
scripts/functions/manage/install/: Can't restore time
scripts/functions/notes/: Can't restore time
scripts/functions/notes/warnings/: Can't restore time
scripts/functions/requirements/: Can't restore time
scripts/zsh/: Can't restore time
scripts/zsh/Completion/: Can't restore time
tar: Error exit delayed from previous errors.
Could not extract RVM sources.
Downloading https://bitbucket.org/mpapis/rvm/get/1.29.10.tar.gz
Downloading https://bitbucket.org/mpapis/rvm/downloads/1.29.10.tar.gz.asc
gpg: Signature made Wed 25 Mar 21:58:45 2020 GMT
gpg: using RSA key 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
gpg: Good signature from "Piotr Kuczynski <piotr.kuczynski@gmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7D2B AF1C F37B 13E2 069D 6956 105B D0E7 3949 9BDB
GPG verified '/usr/local/rvm/archives/rvm-1.29.10.tgz'
.github/: Can't restore time
bin/: Can't restore time
binscripts/: Can't restore time
config/: Can't restore time
config/solaris/: Can't restore time
contrib/: Can't restore time
contrib/hudson/: Can't restore time
docs/: Can't restore time
examples/: Can't restore time
gem-cache/: Can't restore time
gemsets/: Can't restore time
gemsets/jruby/: Can't restore time
gemsets/ruby/: Can't restore time
gemsets/ruby/1.8.7/: Can't restore time
help/: Can't restore time
help/gemset/: Can't restore time
help/rvmrc/: Can't restore time
hooks/: Can't restore time
lib/: Can't restore time
lib/rvm/: Can't restore time
man/: Can't restore time
man/man1/: Can't restore time
patches/: Can't restore time
patches/goruby/: Can't restore time
patches/jruby/: Can't restore time
patches/jruby/1.7.9/: Can't restore time
patches/libxslt-1.1.26/: Can't restore time
patches/rbx/: Can't restore time
patches/rbx/2.5.2/: Can't restore time
patches/readline-5.2/: Can't restore time
patches/readline-6.2/: Can't restore time
patches/ree/: Can't restore time
patches/ree/1.8.6/: Can't restore time
patches/ree/1.8.7/: Can't restore time
patches/ree/1.8.7/2010.02/: Can't restore time
patches/ruby/: Can't restore time
patches/ruby/1.8.7/: Can't restore time
---8<---
patches/ruby/2.4.1/: Can't restore time
patches/ruby/2.5.0/: Can't restore time
patches/ruby/2.5.1/: Can't restore time
patches/tcs/: Can't restore time
patchsets/: Can't restore time
patchsets/jruby/: Can't restore time
patchsets/jruby/1.7.9/: Can't restore time
patchsets/rbx/: Can't restore time
patchsets/rbx/2.5.2/: Can't restore time
patchsets/ree/: Can't restore time
patchsets/ree/1.8.6/: Can't restore time
patchsets/ree/1.8.7/: Can't restore time
patchsets/ree/1.8.7/2012.02/: Can't restore time
patchsets/ruby/: Can't restore time
patchsets/ruby/1.8.7/: Can't restore time
---8<---
patchsets/ruby/2.4.0/: Can't restore time
patchsets/ruby/2.4.1/: Can't restore time
patchsets/ruby/2.5.0/: Can't restore time
patchsets/ruby/2.5.1/: Can't restore time
patchsets/ruby/head/: Can't restore time
rvm-test-rvm1/: Can't restore time
rvm-test/: Can't restore time
scripts/: Can't restore time
scripts/extras/: Can't restore time
scripts/extras/bash_zsh_support/: Can't restore time
scripts/extras/bash_zsh_support/chpwd/: Can't restore time
scripts/extras/completion.zsh/: Can't restore time
scripts/extras/java_read_properties/: Can't restore time
scripts/functions/: Can't restore time
scripts/functions/detect/: Can't restore time
scripts/functions/detect/system_name/: Can't restore time
scripts/functions/detect/system_version/: Can't restore time
scripts/functions/hooks/: Can't restore time
scripts/functions/manage/: Can't restore time
scripts/functions/manage/install/: Can't restore time
scripts/functions/notes/: Can't restore time
scripts/functions/notes/warnings/: Can't restore time
scripts/functions/requirements/: Can't restore time
scripts/zsh/: Can't restore time
scripts/zsh/Completion/: Can't restore time
tar: Error exit delayed from previous errors.
Could not extract RVM sources.
I still haven’t got to grips with Docker, I need to sort out our CI environment as it’s a bit weird and stuff is missing so….let’s give Docker a whirl. I’ve already got it installed so.
Robs-MacBook-Pro:rostering rl$ docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:41:33 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:49:27 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Run a Ruby command without that version of Ruby installed.
Robs-MacBook-Pro:rostering rl$ docker run ruby:2.7 ruby -e "puts :hello"
hello
Ok that’s pretty cool :)
Now if we want to mount an existing directory inside our Docker instance, and boot it with interactive mode
Robs-MacBook-Pro:rostering rl$ docker run -it -v ${PWD}:/apps/rostering ruby:2.6.6 bash
Unable to find image 'ruby:2.6.6' locally
2.6.6: Pulling from library/ruby
d6ff36c9ec48: Already exists
root@520c19cb27a6:/# cd apps/rostering/
root@520c19cb27a6:/apps/rostering# bundle install
Traceback (most recent call last):
2: from /usr/local/bin/bundle:23:in `<main>'
1: from /usr/local/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.1.4) required by your /apps/rostering/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
root@520c19cb27a6:/apps/rostering# gem install bundler:2.1.4
Fetching bundler-2.1.4.gem
Successfully installed bundler-2.1.4
1 gem installed
It’s effectively a new version of Ruby with no dependencies, so we need to install bundler, etc.
2. It’s not quite Erlang either, Elixir is different
3. Assignment is not assignment, it’s making sure stuff matches
iex(18)> a = 1
1
iex(19)> 1 = a
1
iex(20)> 2 = a
** (MatchError) no match of right hand side value: 1
(stdlib) erl_eval.erl:453: :erl_eval.expr/5
(iex) lib/iex/evaluator.ex:257: IEx.Evaluator.handle_eval/5
(iex) lib/iex/evaluator.ex:237: IEx.Evaluator.do_eval/3
(iex) lib/iex/evaluator.ex:215: IEx.Evaluator.eval/3
(iex) lib/iex/evaluator.ex:103: IEx.Evaluator.loop/1
(iex) lib/iex/evaluator.ex:27: IEx.Evaluator.init/4
iex(20)> a = 2
2
iex(21)> 2 = a