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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. Alexaに実装してみた

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 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 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. View Slide