日々之迷歩

世の中わからんことだらけ

ITが複雑で難しくなっていく様に翻弄される日々です

「第30回シェル芸勉強会:福岡サテライト」レポート

ヘコたれそうな、というよりヘコたれる超忙しさだったが、なんとかシェル芸勉強会の福岡サテライトを開催することができた。今回も参加いただきありがたや。会場は久しぶりにAIP Cafe。

今日は結構涼しくなった。しかし午前中は雨が降って湿度が高め。歩いて会場まで来ると結構汗だく。 今回は総勢6人の参加者が集った。初参加の方もいらっしゃった。

勉強会募集サイト

本家東京会場募集

usptomo.doorkeeper.jp

大阪サテライト会場募集

atnd.org

福岡サテライト会場募集

atnd.org

イベント報告関連

今回のTLはどうだったのかな?

(上田会長による)jus共催 第30回危念シェル芸勉強会の報告

jus共催 第30回危念シェル芸勉強会の報告 – 上田ブログ

(くんすとさんによる)大阪サテライト会場開催レポート

www.kunst1080.net

(上田会長による)Togetterまとめ

togetter.com

午前の部

「eval系超絶ワンライナー教祖」鳥海さんによるPerl入門の第二回だった。今回は本題?であるPerlの正規表現。大学の学部生時代はコンピュータはいっちょんわからんほうだったが、大学院生になってからはデータを扱うことが多くなり、データ処理のためにPerlやシェルスクリプトをやり始めた記憶がある。ちなみに学部は情報系ではなく理学系だった。

昼食

お昼は会場近くのラーメン屋さん「一風堂」。知らなかったのだがここが本店らしい。なかなかに美味い。

http://www.ippudo.com/store/daimyo/

Webシステムでの決済に関する話題が上がったり。決済やったことないなあ。

午後の部

今回はイントロのスライドとか準備出来てなかっ他ので、とりあえず一息ついた。せっかくなので持ってきたSoftware Design 9月号の宣伝も。連載開始だ。

今回の問題と解答は、下記の上田さんブログを参照のこと。

【問題と解答】jus共催 第30回危念シェル芸勉強会 – 上田ブログ

今回も福岡サテライトなりのペースで進めていく。自分なりに考えて解説した内容は下記の通り。

Q1

Markdown形式で書かれたテキストファイルが、複数のディレクトリ内にばらまかれている状況。簡単なようでうまくさばくことが出来ず、解答は会長の解答を参照した。grepコマンドの-mオプションについて知見を得た。

Q2

これはsedの置換に慣れるための練習問題。後方参照や正規表現の最長一致についてなど解説しながら考えた。解答は会長の解答を参照した。

正規表現の最長一致についてはgrep -oを使ってこんな感じで解説。"でクォーティングされた範囲を指定する場合について。

# "が複数ある場合には最長の長さでマッチする。
$ echo '<li><a href="/files/https://blog.ueda.tech/">クソブログ</a><a href="/files/huge.html">ふげ</a></li>' | grep -o '".*"'
"/files/https://blog.ueda.tech/">クソブログ</a><a href="/files/huge.html"

# "[^"][^"]*"という具合に指定すれば意図した範囲にマッチする。
$ echo '<li><a href="/files/https://blog.ueda.tech/">クソブログ</a><a href="/files/huge.html">ふげ</a></li>' | grep -o '"[^"][^"]*"'
"/files/https://blog.ueda.tech/"
"/files/huge.html"

Q3

力技でゴリゴリやればいいのだが、pandocの使い方を復習する問題となった。pandoc便利。

Q4

GitHubにリポジトリを作るhubコマンドってのがあるのを知った。へえー。福岡ではncコマンド(netcat)について少し解説をした。

Q5

色々やったがうまくいかず。福岡ではbcコマンドについて解説した。例えば1行目と2号目を掛け算する場合はこんなふうに。

$ echo -e '5\n8' | xargs | tr ' ' '*' | bc
40

Q6

フィボナッチ数列について色々調べてみた。自然界に多く存在し、花の花弁数やヒマワリの種の数、その他黄金比率など色々と役に立つらしいスゴイ。そんなことを調ベているうちに、問題を考える時間が無くなる始末。

Q7

ようやくまともに解けた唯一の問題。と言ってもシェルのループを使っているが。会長の解答例と同じ。

$ seq -w 00 99 | while read n; do grep -q $n nums || echo $n; done
31
33
42
43
56
61
64
65

Q8

アルファベットをasciiコードに変換して、引き算して数を数える方法を考えた。結局何行目が一番多いか?という解答しか思いつかず。MacやFreeBSDの場合は、3つ目のコマンドはgsedを使う。

$ cat alphabet | xxd -p -u | sed 's/2D/-/g;s/0A/\n/g' | ( echo ibase=16; cat ) | bc | tr -d '-' | awk '{print NR,$i}' | sort -k2,2nr | awk 'NR==1{print $1}'
2

午後の部終了後

今回はあまりの忙しさゆえに、イントロスライドやLTなど準備が出来ず。福岡サテライトでは基本的に私の解説や話を中心に進めていっているのだが、参加者の方にも何か話題を提供してもらったりする方向にしていきたいなあと思ったり。

大阪サテライトを主催されているくんすとさんのこの意見が、実にマトを得ていると思った。ハードルを低くしていきたい。