ファイルアップローダを手軽に立てられるようにした
端末からスクリーンショットをPCにアップロードしたいことがあって、でもAndroidのBluetoothとかよくわからないし…というときに、手軽に立ち上げられるようなアップローダを作った。
$ curl -sL https://raw.githubusercontent.com/a2ikm/uploader/master/uploader.rb | ruby - [-p PORT] [-u DIRECTORY]
なお、事前にRubyとbundler/inline
が使えるBundler(v1.16以上)を入れておく必要がある。
きっと車輪の再発明だろうけど、bundler/inline
やSinatraでサクッと作れたので面白かった。
追記
git.ioで短縮URLを作成したので、そちらでも起動できるようになった。
$ curl -sL https://git.io/uploaderrb | ruby - [-p PORT] [-u DIRECTORY]
インタラクティブにRipperで構文解析するIRipperというREPLを作った
「この記述はRubyにどういうふうに解析されているんだろう!?」という疑問を逐次解決していくためのREPLとして作りました。
lex
、sexp
、tokenize
というRipperのメソッドを使って、引数で与えられたコードを解析して表示します。
$ iripper iripper> tokenize 1 + 1 ["1", " ", "+", " ", "1"] iripper> sexp 1 + 1 [:program, [[:binary, [:@int, "1", [1, 0]], :+, [:@int, "1", [1, 4]]]]] iripper> lex 1 + 1 [[[1, 0], :on_int, "1", EXPR_END|EXPR_ENDARG], [[1, 1], :on_sp, " ", EXPR_END|EXPR_ENDARG], [[1, 2], :on_op, "+", EXPR_BEG], [[1, 3], :on_sp, " ", EXPR_BEG], [[1, 4], :on_int, "1", EXPR_END|EXPR_ENDARG]]
「いちいちlexと入力するのが面倒くさい」「ワシはtokenizeにしか興味が無いんじゃ」「S式だけを見ていたい」というように、実行したいメソッド(READMEでは「コマンド」と記載していますが)が決まりきっている場合には、起動引数もしくはdefault
コマンドでデフォルトのメソッドを指定するのが便利でしょう。
$ iripper tokenize iripper(tokenize)> 1 + 1 ["1", " ", "+", " ", "1"] iripper(tokenize)> default sexp iripper(sexp)> 1 + 1 [:program, [[:binary, [:@int, "1", [1, 0]], :+, [:@int, "1", [1, 4]]]]] iripper(sexp)> default iripper> tokenize 1 + 1 ["1", " ", "+", " ", "1"]
例の最後のように、default
コマンドに何も与えなければデフォルトのメソッド指定を外します。
履歴やカーソル移動などはできません。気が向いたらReadlineなどで対応します。
ペンギン・ハイウェイ
9/4
カメラを止めるな!
8/23