第43回シェル芸勉強会(2019/8/10)のLTで発表した内容です。
VUIでシェル芸を実行できるようにしてみた
View Slide
自己紹介RustとElmに憧れてる自称うぇっぶけいふるすたっくえんじにあ javascriptとシェル芸が好き仕事では Java kotlin使い始めましたtaka@SIではたらくフレンズ@amanoese
VUIってなに?AlexaとかGoogle のスマートホームとか音声で操作するユーザーインターフェースのこと個人的にはAlexaが好き
VUIでシェル芸をしたいrm -rf /unko.shout
Alexaに実装してみた
シェル芸をどうやって音声で伝えるか
シェル芸 -> Base32 -> ひらがなBase64をひらがなにマップすると半濁音鼻濁音の発音難しいためシェル芸をBase32に変換後ひらがなにマップした発音をAlexaにする。つまりこういうこと$ echo 'unko.shout 私が公式マスコット' | base32 -w0 | sed'y@ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=@あいうえおかきく けこさしすせそたちつてとなにぬねのはひふへほまみむ@'そにねきぬふはそそせなきまほしなおえとひたあたえちききそしいせすへぬまけみのへえとふつのかそたえちさはまくあへえへそいのちうちむ
シェル芸 -> Base32 -> ひらがなしかし…さすがに脈絡の無い単語を発音するのは困難(やってみてわかった)なのでVUIを意識して変更してみるそにねきぬふはそそせなきまほしなおえとひたあたえちききそしいせすへぬまけみのへえとふつのかそたえちさはまくあへえへそいのちうちむ
シェル芸 -> dumpecho -n 'unko.shout 私が公式マスコット' | od -tx1 -A n|tr '[:lower:]' '[:upper:]'75 6E 6B 6F 2E 73 68 6F 75 74 20 E7 A7 81 E3 818C E5 85 AC E5 BC 8F E3 83 9E E3 82 B9 E3 82 B3E3 83 83 E3 83 88
そして呪文(詠唱)を集めたJSONを用意適当に集めてきた呪文(詠唱)をMecabで名詞と動詞に分けて、0~FFまでの数字と対応付けたJSONファイルを作成します。cat spell.txt | mecab | tr '\t' ,|awk -F, '$2~/名詞/||$1~/EOF/{prints;a=1;s=$1}a==2{a=0;s=""}a==1&&$2~/助詞/{a=0;if($3~/連体化/){a=2}s=s$1}'|sed -n '/../p'|sort -u |grep -P '\p{Han}' paste - 255.txt | head -256| sed -r 's/^(.*)\t/\"\1\":/;s/:(.*)/:"\1",/'| sed '1s/^/{/;256s/,/}/' > meisi.json{"安らぎ":"00","為す":"01","移る":"02","育み":"03","育む":"04","引き":"05","引き継が":"06","引き裂く":"07","羽ばたき":"08","渦巻く":"09","汚し":"0A","汚れ":"0B","汚れた":"0C", ... }https://gist.github.com/amanoese/92ee02989a1e3371981a96aa8dce36c1
シェル芸 -> dump -> 呪文JSONを利用してシェル芸を呪文に変換$ echo -n 'unko.shout 私が公式マスコット' | od -tx1 -A n|tr '[:lower:]' '[:upper:]' |xargs -n1 | sed -f <(cat meisi.json meisi.json meisi.json dousi.json |tr -d '{},'|sed -r's#^$##;s#(.*):(.*)#s\2:\1#;s#:"##;s#"#/#g'|awk '$0'|awk '{print int((NR-1)/256 +1)"~4"$0}') |sed '4~4s/$/。/'|tr -d \\n客を希望を眼差しで示せ。永久に鬼を棺に示せ。客を義務を印を討つ。光に狭間の雫よ囚われ。空を七色の極限の吹き飛べ。七色の砂の結晶渡れ。胸に言の雫よ終わり。魂を雫よ狭霧清め。雫よ胸に胸に渡れ。胸に具現
かっこよく呪文を唱えてシェル芸を実行客を希望を眼差しで示せ。永久に鬼を棺に示せ。客を義務を印を討つ。光に狭間の雫よ囚われ。空を七色の極限の吹き飛べ。七色の砂の結晶渡れ。胸に言の雫よ終わり。魂を雫よ狭霧清め。雫よ胸に胸に渡れ。胸に具現
かっこよく呪文を唱えてシェル芸を実行実際にデモ
感想とか今後とかがんばってリリース目指す(Alexaスキルアワード参加させてみたい)生成した文言が呪文ぽくないので、良い感じになるように修正したいツイートするだけでなく実際にシェルを実行するようにしたい