Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

インストール済みtmux pluginのバージョンをリスト表示したい

手元のPCではtpmを使ってtmux pluginの管理を行っています。

github.com

そういえば各プラグインのバージョンを見たいなあと思ったので、チュートリアルにほんのちょろっと手を加えて各プラグインのHEAD Commitを表示する tmux plugin を作ってみました。

ディレクトリは以下の構成になります。

.
├── my_plugin.tmux
└── scripts
    └── tmux_list_plugins.sh

1 directory, 2 files

tmuxを起動した状態で ./my_plugin.tmux を実行した後に <Bindkey> T を打つと以下のようなリストが表示されます。

tmux-better-mouse-mode        4c686e5 Fixed quotes in bind-key WheelDownPane causing #23.
tmux-continuum                499b6a7 Merge pull request #17 from jarosser06/rm_hardcoded_home
tmux-resurrect                3a31bfb Use 'xargs rm' instead of 'find -delete'
tmux-sessionist               7218406 Accept strings with spaces in a prompt
tmux-yank                     feb9611 Add @override_copy_command to force copy command.
tpm                           c8ac32a Update README.md (#66)

いい感じですね 😄 tpmで管理するならばこれをGitレポジトリにpushして、.tmux.confに定義してあげれば良いです。tmux pluginがどこにインストールされているかというのを今まで知らなかったのですが、 デフォルトでは $HOME/.tmux/plugins/ もしくは .tmux.conf で TMUX_PLUGIN_MANAGER_PATH という変数にセットしたパスになります。 で、tpmプラグインをインストールすると先ほどのパスに各プラグインがgit cloneされます。作ったプラグインでは愚直に(?)プラグインごとに git log を叩いて先頭のコミットを抽出するという作業を行っています。

シェルスクリプトでお手軽に書けるのがいいですね。

kanazawa.rb meetup #59 に参加しました #kzrb

kzrb.doorkeeper.jp

いつもの感じでもくもくしていました。いつもと違うのはメインのメンバーが揃って不在なことで、 @cotton_desu さんが準備や司会業や会計業などもろもろ頑張っていました。ありがとうございます!

今回は特定用途のCSVファイルを取り込んでそれをいい感じにフィルタリングするというようなスクリプトを書いていました。Rubyで。

気付き

CSV converterという仕組みがあり、ファイルを読み込んでCSVフォーマットの文字列をパースするときに特定のルールにマッチしていれば得られた値をNumericやDateの型にしてくれるという便利なものです。ドキュメント見ていて今回初めて気付きました。くわしい記事を見つけたので参照してみてください。

tech-kazuhisa.hatenablog.com

ドキュメントはこちらです。

class CSV (Ruby 2.4.0)

自分のケースではカンマを含む金額のフィールドがありそれを数値として扱いたかったため自作converterを作って処理しました。

require 'csv'

filename = 'foo.csv'
converter = -> (f) { 
  begin
    e = f.encode(CSV::ConverterEncoding)
    e =~ /[\d,]+/ ? Integer(e.gsub(/,/, '')) : f
  rescue
    f
  end
}

CSV.foreach(filename, converters: [converter]) do |row|
  # ...
end

銀行口座の明細CSVファイルを取り込んで項目などでフィルター掛けて畳み込むみたいなことが一応できました。(CSVファイル読み込みさえすればあとはRuby組み込みのメソッドを使ってるだけですが…w) 進捗出せたので良かったです。

# 電気料金の引き落とし額の合計値を求める例
bank_account.parsed_data.select {|d| d.summary =~ /電気/ }.reduce(0) {|sum, d| sum + d.payment }
=> 7291

懇親会

いわゆる昔ながらのビアガーデンという雰囲気。この日は相当暑い日でしたのでビールが進みました😆 食べ放題だったのですが、最初のバッチ(3枚目の写真)で割と満腹になったのは少々誤算ではありましたねw

次回はkzrb 5周年。

kanazawa.rb meetup #58 に参加しました #kzrb #ふくもく会

kzrb.doorkeeper.jp

今回は「開発環境自慢」というテーマでLTする回でした。でもって福井で開催されている「ふくもく会」とのコラボレーション。

fukumoku.connpass.com

テレカンでお互い接続してLTし合うスタイルでした。綿密な設計と準備があって大きなトラブル無くできたのは素晴らしかったです。皆様ありがとうございました。

左側でお互いのLT資料を映し、右側でふくもく会の様子を映す。

Tmuxの話をしました

docs.google.com

開発環境って範囲の大きなものでなかなかテーマを絞り込むのに苦労しましたが、普段から使ってるものであったり自分の事例なんかを話せればいいなと思ったときにTmuxが一番適しているなと思いました。人によって使い方も様々だろうなあ〜ということで、ありきたりかもしれませんがこんな風に使って日々やってるよと言うのが少しでも伝われば嬉しいです。

5分だったのでふわっとした感じですが、プラグインやステータスバーの話は深堀りできそう(やるとは言ってない)。

興味深かったことで、デモをgifにしていたのが良かったという感想をもらいました。画面の切り替え等、動きのあるものを表現したいときってキャプチャを撮ってgifにエクスポートして貼っておくのがお手軽で良いです。GitHubのPull Requestやブログの記事でたまにデモのgif使うのですが、スライドに貼り付けるのは私も初めての試みでした。

感想

エディタ、PC内環境から物理的な作業空間(机、職場環境、カフェなど)、そして道具、筋肉にいたるまで、様々なテーマのLTを聞けてとても有意義でした。質問も飛んだり、わちゃわちゃしたりでふくもく会の皆さんとも楽しく時間を過ごせたのではと思います。あと、meetupページに初コミットしました😆。

懇親会

kanazawa.rb meetup #57 に参加しました #kzrb

kzrb.doorkeeper.jp

なんだか久しぶりだなあと思っていたら5週間振りだったんですね(カレンダー的に1週多かった)。ITビジネスプラザ武蔵のサロンスペースでもくもくする回でした。室内は空調が効いてた(はず)んですが、座りながら太ももの上にPC乗せて作業していたら若干汗ばんでいました😅そんな季節です。

今回は15人と参加者が多く、かつ17歳の若者2人が初参加していて懇親会含めなかなか面白かったです。

プログラミングElixir

引き続き第8章「マップ、キーワードリスト、セット、構造体」〜第10章「コレクションの処理ーーEnumとStream」の序盤まで読んでいました。基本的なデータ型について知りつつ少しづつ抽象化した処理の話も入ってきました。

プログラミングElixir

プログラミングElixir

懇親会

1件目は肉る’s(みーとるずと読む)で豚肉三昧。2件目は四川中華をまったり味わいました。よだれ鶏美味しかった。結構飲んでて何話してたかあんまり覚えてない…w

次回

kzrb.doorkeeper.jp

福井でやってる「ふくもく会」の皆さんと一緒に開発環境自慢 LTというのをやります。いろんな話が聞けそうで面白そう。

kanazawa.rb meetup #56 に参加しました #kzrb

kzrb.doorkeeper.jp

今回は新生活の季節ということでペアプログラミングを通して勉強しようという回でした!

45分 * 3セッションで1セッションごとにペアを変えて、ソースコードも0から作り上げるという形でした。題材はライフゲームです。googleで検索したらライフゲーム動き始めるの面白いw

ここからはペアプロ3セッションを終えて私が感じたことを書いていきます。

よかったこと

  • 自分では気付けないことをペアに指摘してもらえる
  • 単純に他の人はこう考えるのか〜と勉強になった
  • Rubyの便利メソッドを思い出させてくれた
  • AtomとかVSCodeでやるのがペアプロではよさそう
    • とりあえず書き始められて保存ができる
    • 操作に手間取ってる間にも時間が進んでもったいなかった(VimEmacsだと使い慣れてないと厳しい)
  • 他の人の癖が見えて面白い
    • スペースとかインデントを気にする/気にしない
    • 名前のつけ方

悪かったこと

  • 45分でどこをゴールにするかというところで本当はこうしたらいいんじゃないかって思うところをスルーしてしまった
    • 動くことを優先して、自分の中で妥協した部分があった
    • 時間あったら後でリファクタしたい、というようにペアに伝えておくのがよかったのかなあ?
  • 先に方針を決めるのがいいのか、とりあえず書いてみるのがいいのかっていうのがふわっとしたまま進んでしまった
    • ある程度モデルやインターフェース決めて取り掛かるのが良さそうだった
    • どうしましょうかねえと悩み続けてもしょうがないので、何かしらたたき台を書いてみるというのもありかもしれない
  • Ruby結構忘れてる

その他感想

45分続けてペアプロやるとだいぶ疲れることが分かりました(;^ω^) 考えながら喋りながら手を動かし続けるのってなかなか消耗するし、人が見ていると言う緊張感もあったりして精神的にも疲れやすいと思いました。(なので適度に休憩を挟む構成になっているのだろう)

設計で悩ましかったのは、セルの次の状態を確定するのに周りのセルの状態を参照して行うのですが、それをセル自身にやらせるのか、グリッドにやらせるのかというところでした。あと、表示については別のサービスに任せておく(Viewの責務とする)的な考えもあるかもなーと終わってから考えていました。ライフゲームというシンプルな題材ですが、いろいろ方法があって奥深いですねえ。

パターンマッチあれば判定部分がもう少し楽に書けそうっていうのはありました。

懇親会

飲むのと話聞くのに夢中で1件目の写真撮るの忘れてましたw

Instagram

のどぐろ茶漬

kanazawa.rb meetup #55 に参加しました #kzrb

3月ももくもく会でした。ITビジネスプラザ武蔵サロンスペースというオシャレスペースでの初めての開催となりました。

kzrb.doorkeeper.jp

小学校にあった机や椅子を再利用しているらしいです。

図工室的な #kzrb

プログラミングElixir

前回に引き続き『プログラミングElixir』を読み進めました。6章「モジュールと名前付き関数」から7章「リストと再帰」の途中まで。関数型プログラミングの基礎的なところを押えた章になっていて、mapやreduceを実装してみたり少し複雑な処理を行う関数を実装する練習問題に取り組んだりしました。Scala関数型プログラミング慣れてきたかなーと思っていたんですが、問題をうまく再帰にすることができないなど手間取ってしまい練習問題を解くのに時間がかかってしまいました。

プログラミングElixir

プログラミングElixir

懇親会

加能商店は4時からオープンしていて立地的にも良いですね。懇親会では、採用時に何を聞くか聞かれるか→海外ではcourseraやudemyのカリキュラム修了済みっていうのを条件にしている会社も増えてきているらしい、部屋は目的別に分かれていた方が良い、家の基礎工事やってるときはちゃんと見に行った方が良い、などなど話してました。

鴨〜

明太子 on ポテサラ

でかい( ‘ω’)

次回

ペアプログラミングする回なんで楽しみ。4月だしRubyやっていくぞ!という方もぜひお待ちしております。 http://kzrb.org/meetup/56/

あと、Kanazawa IoTというコミュニティも爆誕していました。 kziot.connpass.com

kanazawa.rb meetup #54 に参加しました #kzrb

kanazawa.rb #54 に行ってきました。今回はもくもく会です。 kzrb.doorkeeper.jp

同日に富山でTDDBCが開催されていてそちらに行ってた人も多く、5人でもくもくしていましたw

プログラミングElixir

会場に行く前に本屋に寄りたまたま見つけたのが『プログラミングElixir』。 以前 @tyabe さんがElixirっていう言語があって気になるんですよねえと言っていて(確か)、当時はScalaをやるのに精一杯で全く見れていなかったんですが、Ruby風味な文法ということもありkanazawa.rbで触るのにも良さそうと思い即購入!

プログラミングElixir

プログラミングElixir

Macに環境を構築し、第5章までの内容を読みながら写経していました。

インストール

Mac OSXならばbrewでインストール可能です。また、Dockerイメージが用意されているのでこちらを使うのも良いかと思います。

$ brew install elixir

Installing Elixir - Elixir

インストールすると iex という対話型シェルが使えるので、これで様々なスクリプトを試していました。特に設定しなくとも名前の補完や結果の表示に色が付いていて、ナウくて優秀だなあと思いました。パターンマッチや無名関数の章を読みましたが、ScalaHaskellを触っていたのでこの辺はスッと入ってきました。また、全てが不変な値で扱われるという性質があるため、これも馴染みのある感じでした。

まだまだ基礎的な章なのでコード片しか書けてないですが、読み進めていろいろ書けるようになりたいです。

飲み会

Golangが使われ始めているという話から、プログラミング言語選定におけるRubyの優位性、プログラミング教育に使う言語(Pythonが圧倒的で最近はSwiftも力を入れてきている?)。あとはライフイベントとそれに伴って働き方どうするみたいなことを話したような気がします。酒が弱くなってたので、もうちょっと頑張りたいw

唐揚げ

豚タン煮込み

普通に原子時計が出てくる懐の深さ #kzrb

三次会 #kzrb