Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VUIでシェル芸を実行できるようにしてみた

amanoese
August 10, 2019

 VUIでシェル芸を実行できるようにしてみた

第43回シェル芸勉強会(2019/8/10)のLTで発表した内容です。

amanoese

August 10, 2019
Tweet

More Decks by amanoese

Other Decks in Technology

Transcript

  1. VUIでシェル芸を実行できるよう
    にしてみた

    View full-size slide

  2. 自己紹介
    RustとElmに憧れてる自称うぇっぶけいふるすたっくえ
    んじにあ javascriptとシェル芸が好き
    仕事では Java kotlin使い始めました
    taka@SIではたらくフレンズ
    @amanoese

    View full-size slide

  3. VUIってなに?
    AlexaとかGoogle のスマートホームとか音声で操作するユーザーインターフェー
    スのこと
    個人的にはAlexaが好き

    View full-size slide

  4. VUIでシェル芸をしたい
    rm -rf /
    unko.shout

    View full-size slide

  5. Alexaに実装してみた

    View full-size slide

  6. シェル芸をどうやって音声で伝えるか

    View full-size slide

  7. シェル芸 -> Base32 -> ひらがな
    Base64をひらがなにマップすると半濁音鼻濁音の発音難しいため
    シェル芸をBase32に変換後ひらがなにマップした発音をAlexaにする。
    つまりこういうこと
    $ echo 'unko.shout 私が公式マスコット' | base32 -w0 | sed
    'y@ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=@あいうえおかきく けこさし
    すせそたちつてとなにぬねのはひふへほまみむ@'
    そにねきぬふはそそせなきまほしなおえとひたあたえちききそしいせす
    へぬまけみのへえとふつのかそたえちさはまくあへえへそいのちうちむ

    View full-size slide

  8. シェル芸 -> Base32 -> ひらがな
    しかし…
    さすがに脈絡の無い単語を発音するのは困難(やってみてわかった)
    なのでVUIを意識して変更してみる
    そにねきぬふはそそせなきまほしなおえとひたあたえちききそしいせす
    へぬまけみのへえとふつのかそたえちさはまくあへえへそいのちうちむ

    View full-size slide

  9. シェル芸 -> dump
    echo -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 81
    8C E5 85 AC E5 BC 8F E3 83 9E E3 82 B9 E3 82 B3
    E3 83 83 E3 83 88

    View full-size slide

  10. そして呪文(詠唱)を集めたJSONを用意
    適当に集めてきた呪文(詠唱)をMecabで名詞と動詞に分けて、
    0~FFまでの数字と対応付けたJSONファイルを作成します。
    cat spell.txt | mecab | tr '\t' ,|awk -F, '$2~/名詞/||$1~/EOF/{print
    s;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

    View full-size slide

  11. シェル芸 -> 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
    客を希望を眼差しで示せ。永久に鬼を棺に示せ。客を義務を印を討つ。光に狭間の
    雫よ囚われ。空を七色の極限の吹き飛べ。七色の砂の結晶渡れ。胸に言の雫よ終
    わり。魂を雫よ狭霧清め。雫よ胸に胸に渡れ。胸に具現

    View full-size slide

  12. かっこよく呪文を唱えて
    シェル芸を実行
    客を希望を眼差しで示せ。永久に鬼を棺に示せ。客を義務を印を
    討つ。光に狭間の雫よ囚われ。空を七色の極限の吹き飛べ。七
    色の砂の結晶渡れ。胸に言の雫よ終わり。魂を雫よ狭霧清め。
    雫よ胸に胸に渡れ。胸に具現

    View full-size slide

  13. かっこよく呪文を唱えて
    シェル芸を実行
    実際にデモ

    View full-size slide

  14. 感想とか今後とか
    がんばってリリース目指す(Alexaスキルアワード参加させてみたい)
    生成した文言が呪文ぽくないので、良い感じになるように修正したい
    ツイートするだけでなく実際にシェルを実行するようにしたい

    View full-size slide