「第37回シェル芸勉強会 大阪サテライト」の備忘録
2018年9月1日に開催された「第37回シェル芸勉強会 大阪サテライト」の記録です。
現在、公私ともに多忙なこともあって、この記事は自分にとっての単なる備忘録でしかありませんが、少しでも目を通していただければ幸いです。
午前の部:
シェルで文字コードに触れてみる その2
- 講師:
- 鳥海秀一(@hid_tori)さん(USP友の会)
当日の朝は母の認知症の容体が思わしくなかったため、残念ながら午前の部に参加することはできませんでした(会場スタッフおよび参加者の皆さんにはご迷惑をおかけしました)。
後日に動画およびスライドを閲覧して、EBCDICおよびそのバリエーションの多さと文字コード変換ツールiconv
の使用例を知ることができました。
EBCDICといえばメインフレームで使われる文字コードであること程度しか知らなかった自分にとり、この講義は前回に続きインフラとしての文字コードについて学ぶ上で非常に有益なものだと感じました。
ちなみに、Perl周辺に限った話にはなりますが、perldoc perlebcdic
してもEBCDICについて知ることができます。
午後の部:
- 問題と解答例:
- 動画:
使用コマンド:
解答でanimation
およびimgout
コマンドを使ったものがありますが、これらはImageGeneratorForShBotをインストールすると使うことができます。
なお、これらのコマンド(シェルスクリプト)をローカルで使用する際には、あらかじめ
- 各コマンドのソースコードの末尾にあるファイルの生成先ディレクトリを
/images
から/tmp
に変更 - VL GothicフォントとSymbolaフォントをインストール
しておくと良いと思います。
また、Q7とQ8の解答にはmatsuya
コマンドが必要になりますので、matsuya-generator-rubyの説明を参考にしてインストールしてください。
A1:
N=1; while :; do clear; echo $N | awk '$1%15==0{printf "%8s\n","FizzBuzz";exit}$1%5==0{printf "%8s\n","Buzz";exit}$1%3==0{printf "%8s\n","Fizz";exit}{printf "%8s\n",$1;exit}'; N=$((N+1)); sleep 1; done
(...出力略...)
animation
を使った別解は次の通りです。
$ seq 100 | sed '3~3s/.*/Fizz/;5~5s/.*/Buzz/;15~15s/.*/FizzBuzz/' | awk '{printf "%8s\n",$1}' | sed 's/ / /g' | animation
animation
(およびimgout
)の内部で使われているconvert
は先頭および末尾の半角スペースを認識しないため、あらかじめ半角スペース2個を全角スペースに置換しておく必要があります。
A2:
※端末およびフォントの環境設定によっては、表示がずれる場合があります。
$ perl -E 'for($i=4;$i>0;$i--){if($i==2){say " "x$i."/"." 👁 "."\\"}else{say " "x$i."/"." "x((4-$i)*2)."\\"}};say " ̄"x5'
/\
/ \
/ 👁 \
/ \
 ̄ ̄ ̄ ̄ ̄
A3:
$ seq 111 999 | grep -v 0 | sed 's/./& /g' | awk '$1+$2+$3==15' | tr -d ' ' | xargs
159 168 177 186 195 249 258 267 276 285 294 339 348 357 366 375 384 393 429 438 447 456 465 474 483 492 519 528 537 546 555 564 573 582 591 618 627 636 645 654 663 672 681 717 726 735 744 753 762 771 816 825 834 843 852 861 915 924 933 942 951
A4:
$ perl -C -E 'say "\N{MAHJONG TILE EAST WIND} "x3 ." "."\N{MAHJONG TILE SOUTH WIND} "x3 ." "."\N{MAHJONG TILE WEST WIND} "x3 ." "."\N{MAHJONG TILE NORTH WIND} "x3 ." "."\N{MAHJONG TILE WHITE DRAGON} "x2'
🀀 🀀 🀀 🀁 🀁 🀁 🀂 🀂 🀂 🀃 🀃 🀃 🀆 🀆
imgout
を使った別解は次の通りです。
perl -C -E 'say "\N{MAHJONG TILE EAST WIND}"x3 ." "."\N{MAHJONG TILE SOUTH WIND}"x3 ." "."\N{MAHJONG TILE WEST WIND}"x3 ." "."\N{MAHJONG TILE NORTH WIND}"x3 ." "."\N{MAHJONG TILE WHITE DRAGON}"x2' | imgout -f Symbola
A5:
$ echo ICAgIOWxsSAgICAKICAgIOWxsSAgICAKICAgIOWxsSAgICAK5bGxICDlsbEgIOWxsQrlsbHlsbHlsbHlsbHlsbEKICAgICAgICAgIArivaXivaXivaXivaXivaUK4r2lICDivaUgIOK9pQrivaXivaXivaXivaXivaUK4r2lICDivaUgIOK9pQrivaXivaXivaXivaXivaUK | base64 -d
山
山
山
山 山 山
山山山山山
⽥⽥⽥⽥⽥
⽥ ⽥ ⽥
⽥⽥⽥⽥⽥
⽥ ⽥ ⽥
⽥⽥⽥⽥⽥
A6:
$ echo cHJpbnRmICdfX1lfX1xuX19EX19cbl9fWV9fXG5ZX0RfWVxuRFlEWURcbl9fX19fXG5EWURZRFxuWV9EX1lcbkRZRFlEXG5ZX0RfWVxuRFlEWURcbicgfCBzZWQgJ3kvX1lEL+OAgOWxseeUsC8nCg== | base64 -d | sh
山
田
山
山 田 山
田山田山田
田山田山田
山 田 山
田山田山田
山 田 山
田山田山田
なお、base64
で難読化されている部分は次のようになっています。
$ echo cHJpbnRmICdfX1lfX1xuX19EX19cbl9fWV9fXG5ZX0RfWVxuRFlEWURcbl9fX19fXG5EWURZRFxuWV9EX1lcbkRZRFlEXG5ZX0RfWVxuRFlEWURcbicgfCBzZWQgJ3kvX1lEL+OAgOWxseeUsC8nCg== | base64 -d
printf '__Y__\n__D__\n__Y__\nY_D_Y\nDYDYD\n_____\nDYDYD\nY_D_Y\nDYDYD\nY_D_Y\nDYDYD\n' | sed 'y/_YD/ 山田/'
A7:
$ matsuya | mecab -Oyomi | nkf --hiragana | toilet | awk '{L[NR%8]=L[NR%8]$0}END{for(i=0;i<=8;i++)print L[i]}' | imgout
A8:
$ matsuya | perl -C -nlE 'use utf8;$l=length;say;for($i=2;$i<$l;$i++){say substr($_,$i-1,1)." "x($l-2).substr($_,$l-$i,1)};say(scalar reverse)'
プレミアム牛めし
レ め
ミ 牛
ア ム
ム ア
牛 ミ
め レ
しめ牛ムアミレプ
LT大会:
CLIツール作るの楽しい
- 発表者: たいちょー(@xztaityozx_001)さん
fzf
やpeco
のようなCLI用あいまい検索ツールと組み合わせてcd
コマンドを強化するcdx(golang版)の開発についての発表です。
ラズパイ用シェルスクリプトで監視カメラもどきを作る
- 発表者: 日柳光久(@mikkun_jp)
タイトル通り、Raspberry Piで監視カメラを作るためにシェルスクリプト(ソースコード)を書いたという発表です。
参考リンク:
- jus共催 第37回シェル芸勉強会リンク集 | 上田ブログ
- jus共催 第37回シェル芸bot生きてるかどうか分からないけどシェル芸bot向けシェル芸勉強会 - Togetter
- 第37回シェル芸勉強会 大阪サテライト レポート - so’s diary
- 第37回シェル芸勉強会@大阪サテライトに参加しました - たいちょーの雑記
Thanx:
- 大阪サテライト:
- 主催:
- so(@3socha)さん
- 小原一哉(@KoharaKazuya)さん
- 会場:
- 主催:
- メイン会場:
- 講師:
- 鳥海秀一(@hid_tori)さん
- 上田隆一(@ryuichiueda)さん
- 講師: