Elixir初心者向けハンズオンに行ってきた
Elixir楽しい。
きっかけ
1年くらい前に Rebuild.fm や 勉強会などで Elixir の名前を知って興味を持っていたが、 同じくらいの頃に業務で TypeScript を触り始めたので、同時 2つの言語を勉強する力が無く、ずっと放置していた。 最近になって、ようやく時間に余裕ができたぞ、と思ったタイミングでこのイベントを知り、すぐに申し込んだ。
流れ
会場はレバレジーズ。 会場の案内や挨拶の後、 @ohrdevさんによるElixirの概要説明を受け、いざハンズオン。
やったこと
↑を進めてElixir でチャットアプリを作った。 Pub/Subも WebSocket も初めてだったけどすんなり動いた。
Twitter/Gitter/口頭で質問できるので、進捗ダメです、なことにはならない、と思う。
一通り終わったら人によってやることは様々で、私は Elixir School を読み進めてた。 パターンマッチ面白い。この辺もっと深掘りしたい。
メモ
以下、メモ書き
- Elixirはコンパイル言語(知らなかった!)
%{a: 1, b: 2}
==%{:a => 1, :b => 2}
!=%{"a" => 1, "b" => 2 }
- OTP
- Open Telecom Platform
- 並列プログラミング用のフレームワーク・開発環境・ライブラリ集
- 汎用的な処理のパターン(ビヘイビア)を提供
- 全く分かってないので調べる
- mix
- mixコマンドで Elixir のプロジェクトを作成・管理する
- こういうツールが標準で入ってると便利…
- mixコマンドで Elixir のプロジェクトを作成・管理する
おまけ
ファイルの空行を削除するElixirのワンライナー書いた
空行を消す
— yasuhiroki (@duck_yasuhiroki) 2017年3月11日
elixir -e '"./file"|>https://t.co/zdQoPhQr2e|>elem(1)|>String.split("\n")|>Enum.filter(&(&1 != ""))|>Enum.join("\n")|>IO.puts'
FLOCSSなディレクトリ・ファイルを作成するシェル
無理やりワンライナーっぽくしてみた。
echo foundation/{_base,_reset} \ layout/{_footer,_header,_main,_sidebar} \ object/component/{_button,_dialog,_grid,_media} \ object/project/{_articles,_comments,_gallery,_profile} \ object/utility/{_align,_clearfix,_margin,_position,_size,_text} \ | \ xargs -n1 -I% bash -c \ 'mkdir -p $(dirname scss/%); [ ! -f scss/%.scss ] && { : > scss/%.scss; echo "@import \"%\";" >> scss/app.scss; }'
もうちょっと綺麗にできるといいなぁ。
yarnpkgは~/.yarnrcを見ている
なので、シェルをカスタムするためのオレオレ設定を ~/.xxxrc
に書いてるとあかんよ、という話。
yarnを使おうとしてインストールしたけど動かなかった。
$ yarn init yarn init v0.15.1 error SyntaxError: Unknown token 1:0 at Parser.unexpected (/usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/lib-legacy/lockfile/parse.js:218:11) at Parser.parse (/usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/lib-legacy/lockfile/parse.js:323:14) at exports.default (/usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/lib-legacy/lockfile/parse.js:13:17) at /usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/lib-legacy/registries/yarn-registry.js:105:62 at next (native) at step (/usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30) at /usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:28:20 at run (/usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/node_modules/core-js/library/modules/es6.promise.js:87:22) at /usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/node_modules/core-js/library/modules/es6.promise.js:100:28 at flush (/usr/local/Cellar/yarn/0.15.1/libexec/lib/node_modules/yarn/node_modules/core-js/library/modules/_microtask.js:18:9)
lockfile
がどうのと言っているが、 yarn.lock ファイルは作ってない。
GitHubのIssueを漁ったところ
Getting SyntaxError when running basic command · Issue #613 · yarnpkg/yarn · GitHub
~/.yarnrc
が原因だと判明。
私は、色々なツール・コマンド用のオレオレ設定を ~/.xxxrc
に書いて source
で読み込むようにしていた。
その癖で ~/.yarnrc
を作って、 export PATH=~/.yarn/bin:$PATH
などと設定していたのだけど、それが悪かった。
現在のyarnは、yarn自身の設定を ~/.yarnrc
から読み込む。
設定ファイルの管理場所考え直そう..
jqでURLエンコーディング
$ echo "a+b=b&c=hoge&d=hfua piyo" | jq -R '[split("&")[] | ([split("=")[] | @uri] | join("="))] | join("&")' "a%2Bb=b&c=hoge&d=hfua%20piyo"
jq
には @uri
で URLエンコーディングする機能がある。
& で split して、= でさらに split して、片っ端から @url して、 = と & で join し直す、という仕組み。
もうちょっとシンプルに出来そう。
Virtualbox + Ubuntu に Android をデバッグモード接続できなくなった時
Android端末に「デバッグモードに接続しました」の通知が出ては消える状態になった。 USB繋げ直したりVMを再起動したりしてもダメ。
http://kobegdg.blogspot.jp/2015/01/androidwindowsusb.html
これの3,4をやったが、ダメだった。
http://stackoverflow.com/questions/16909439/why-does-virtualbox-not-detect-my-android-device
の echo Y | sudo tee /sys/module/usbcore/parameters/old_scheme_first
やったら何とかなった
Rubyで小数第x位までを表示する
String#%
さらっとググると、
puts sprintf("%.1f", 0.11111)
puts 0.11111.round(1)
などが見つかる。
が、String#%を使った、もっと簡単な方法があった。
puts "%.1f" % 0.11111 # => 0.1
参考) http://ref.xaio.jp/ruby/classes/string/percent http://docs.ruby-lang.org/ja/2.0.0/method/String/i/=25.html
"%.1f" % 0.1
と "%.1f" .% 0.1
盲点というか、勉強になったのが、 anarchy golf の解答で、
puts "%.1f" .% 0.15 * 2
のような使い方をしているものがあった。
http://golf.shinh.org/p.rb?Convert+Radians+to+Degrees#Ruby2
一瞬、何が違うのか分からなかったが、
puts "%.1f" % 0.15 * 2 # => 0.10.1 puts "%.1f" .% 0.15 * 2 # => 0.3
確かに結果が違う。
.
を付けることで、計算の優先順位が変わったようだ。
よくよく考えれば、メソッド呼び出し時のカッコを省略しているので、
puts "%.1f" .% 0.15 * 2 # ↓ puts "%.1f".%(0.15 * 2)
となっている。
追記
@ebanさんから、↓に書いてあると教えていただいた。
Rubyist Magazine - るびまゴルフ 【第 2 回】
ちゃんと勉強してないことが露呈した...