この限界のはてに、まだ救いがあると思っている
お前が生まれたこの世界は、お前を救ってくれるとまだ信じている
なんかこんな感じのことをメタルギアで聞いた気がする。
震源+大雨=限界
弊キャンパスは直近の地震で震源の真上ぐらいにあったところです。ここにこの間の大雨を合わせるとまさに限界!という感じです
大阪サテライトがこの雨の影響で中止となってしまったため、家に変えることも出来ないぼくはこの限界キャンパスで勝手にサテライトを開催することにしました。
明日大阪サテライト参加できそうにないので震源&&豪雨地帯サテライトを開催したいんですがいいですか #シェル芸
— たいちょー (@xztaityozx_001) 2018年7月6日
echo-sd 限界キャンパスサテライトは開催します!!#シェル芸
— たいちょー (@xztaityozx_001) 2018年7月6日
こちらシェル芸勉強会@限界サテライトです。見えてますとても楽しみです。#シェル芸 pic.twitter.com/fy26Jl87Yq
— たいちょー (@xztaityozx_001) 2018年7月7日
あーたのしい
午前の部
鳥海さんによる文字コード
の講義が始まりました。難読化クラスタとしては何かネタが転がっているかもしれないとワクワクしていました。
まずはlocale
やiconv
のような文字コードなどに関わってきそうなコマンドについてでした。
ずっと「ja_JP.utf8
ってなんやねん冗長やなオイ」って思ってたんですが、どういう意味なのか解ることが出来てよかったです。
locale -k LC_MESSAGES#シェル芸
— たいちょー (@xztaityozx_001) 2018年7月7日
これかんどうしている
そのあと基数変換の話題ではbash
の$((2#bbbb))
というパターンで変換できると知り驚きました。これすごい便利
いよいよ文字コードっぽいところに来た時、続きは次回ですとなっりました。えっ次回も参加するしか無い
昼休憩
昼休憩の間に限界サテライトからLTの配信が出来ないかどうか試していました。手伝ってくれた方々ありがとうございました。
限界サテライト側の機材不足で、音声がクリアに拾えないという問題があったため、結局配信は無しということになりました。悔しい・・・
昼飯を食ったあとは完全に体力の限界という感じでした。でも家に帰る手段も無いのでこのまま午後も見ることにしました。あとこれは秘密ですが、気づいたらメイド服を着ていました。
ズボンの中が最悪なのでね。スカートをはいています。フリフリがかわいいです pic.twitter.com/XlvuCQ7JMC
— たいちょー (@xztaityozx_001) 2018年7月7日
午後の部
とっても楽しい問題の始まりです。今回は時間内に解けた問題が全然ありませんでした。チクショー
因みに問題と解答はここです
問1
welcome.txt
というファイルに仕込まれたバイナリを解析して、AAを見つける問題。いきなりヘビー過ぎて泣いた。とりあえずxxd
してみると不思議な模様があったので目を細めて見てみると0x00
が紛れていたので、sed
してみました
するとめちゃめちゃなAAが出てきたので、適当にターミナルの横幅を動かしてみると70ぐらいだと解りました
cat welcome.txt | sed 's/\x00/@/g' | fold -70
因みに幅が70だったのは、toilet
コマンドの出力の幅が70だったからだそうです。なるほどな〜〜〜〜
問2
フォーマットがめちゃくちゃなファイル名を揃える問題。こういうのはよくありそうだし、できると最高かもしれないですね
これはゴリゴリやればいいなとおもったので、ゴリゴリ。
ls -1|nkf -Z|sed 's/[0-9]/& /g;s/[aA-Z]/ & /g'|sed -r 's/^([0-9]).*([aA-Z])[^組]/\1年\U\2組/g'|sed 's/組組/組/g'|paste <(ls -1) - | xargs -n2 echo "mv" | bash
まずsed
で年次と組を分離し、その後またsed
しました。ちょっと冗長ですねこれ
因みに、ぼくは全角英数と半角英数が混ざっていると死にます。
問3
2018年の日付のうち2,3,5,7
が4つ含まれる日付を列挙する問題。 例えば2018/07/23
と言った感じ。
4つあるかどうかgrep
やtr
で削ったあとawk
でlength
を見ればいいなと思っていたんですが、日付の列挙がうまく出来なかった・・・
時間内には解けなかったんですが、dateutils.dseq
というコマンドがあるよということだったのでそれを使って解いてみました。
dateutils.dseq 2018-01-01 2018-12-31|sed -E 's/[^2357]//g'| paste - <(dateutils.dseq 2018-01-01 2018-12-31)|awk 'length($1)==4{print $2}'
paste
を使えるようになってから、よく使うようになりました。とっても便利ですよねこのコマンド
問4
tanzaku
ファイルをcat
すると・・・
$ cat tanzaku ┏ ーー-┷-ーー┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ーーーーーー┛
このように表示されるのでこの中に俳句を入れる問題。ゴリゴリでいけそう
┏ ーー-┷-ーー┓
— シェル芸bot (@minyoruminyon) 2018年7月7日
┃ らおた ┃
┃ せうの ┃
┃ てちむ ┃
┃ にか ┃
┃ から ┃
┃ え ┃
┃ ┃
┗ーーーーーー┛ https://t.co/dUnDHHliqE
字余りするところは全角スペースで埋めてtetayoko
。そのあとはsed
の後方参照をつかってそれーという感じ。見た目ほど難しくなかった
問5
cowsay
コマンドの出力を右向きにする。ただし文章はひっくり返しちゃダメ。
見た瞬間うっとなるのは響け!ユーフォニアム問題に似たものを感じる。
これは最初にrev
したあとsed
で行を選択して末尾にスペースを埋め込んでいく戦法を考えました。でもあんまりよくないし何よりもめんどくさいので脳を休めてた。
問6
seq 20
のうち素数である番号を○で囲む問題。
1 ② ③ 4 ⑤ 6 ⑦ 8 9 10 ⑪ 12 ⑬ 14 15 16 ⑰ 18 ⑲ 20
こういう感じですね。午前でやったことを活かして行こうと思い。まず②のxxdを見る。ASCIIコードを見つけて、それを基準に差分を足していけばいいのでは?と思ったのでゴリゴリしてみる
seq 20|factor|awk 'NF==2{print $2}'|xargs -I@ echo "echo \$((0xe291a1+@-2))"|bash|bc <(echo "obase=16") |tr '[A-F]' '[a-f]'|sed 's/$/0a/g'|xxd -p -r|paste <(seq 20|factor|awk 'NF==2{print $2}') -|awk '{print "s/^"$1"$/"$2"/g"}'|sed -f- <(seq 20)
前回のシェル芸勉強会で覚えた-f-
も使えたので良かった。ちょっと冗長なので、他のシェル芸人さんみたいにスマートなやり方も鍛えていきたい
問7
text
というファイルには見えない文字が含まれているらしい。どこにどんなのがあるか調査する問題。
調査するというのが難しかったので、とりあえずどんなのがありそうなのかbat
で見る。すると・・・
batコマンドで丸見えだ pic.twitter.com/rDqR87EqN7
— たいちょー (@xztaityozx_001) 2018年7月7日
丸見えになったのでコレで良いのではとなってしまった。この辺でもう脳が死んでたのでこんな解答しか出来なかった・・・
問8
最後はルビをふる問題。シェル芸人からの挑戦状を読んでいたので、sed
で送り仮名を削りつつ、ルビのペアを作るのは出来てたけど上につける時のスペースの入れ方がわからなくてダメだった。
column -t
でいいよということだったので覚えていきたい。
LTしたかったやつ
都合でいつものパワポテーマで作れなかったんですが。また難読化でLTする予定でした。今回は日夜手で難読化しているシェル芸人さんたちのために難読化コンバータを作りました。Go製です。ぜひ使ってみてください
因みにぼくは使ったことないです
まとめ
シェル芸勉強会はやはりサテライトでみんなで集まってやるのがたのしいですね。一人でサテライト開いても寂しいだけでした。問題が激しかったので寂しがっている暇はありませんでしたが。次回も参加したいなーとおもっています
今回もとても楽しかったです!ありがとうございました!!!