44
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ダージリンさんに格言をお喋りしてもらおう、という話

Posted at

この記事は?

  • よし、やるか。

まずは環境情報

環境情報

前回同様、私の環境では下記です。
今回はPerlとRubyに少し触るのでバージョン明記。

項目 情報
CentOS CentOS Linux release 7.2.1511
Perl v5.16.3
Ruby ruby 2.0.0p598 (2014-11-13)

ゴール地点の設定

ダー様に喋らせる、とは

そもそもダー様とはなんだ、という人のために説明をすると、ダー様とは
ガールズ&パンツァー(GIRLS und PANZER)というTVアニメがあり、そこに登場する人物である
ダージリンという女の子を指す。
644862.png
作中では度々、「こんな格言を知ってる?」という前置きを使いつつ格言や諺を披露することがあったため、
この記事のゴール地点は
『ダー様に様々な格言や諺を披露させる』
と定めようと思う。

Step1:ダージリンさんのAAを出力する

やること

cowsayではデフォルトでは牛がしゃべるが、-fオプションとして用意された様々な動物、
もしくはTuxやハローキティなどのキャラクターを指定することができる。
この設定ファイルをいじって、ダー様のファイルを用意します。

実装

さて、当該の設定ファイルはcowファイルとして保存されており、cowsay -lでどこに保存されているか確認できる。

$ cowsay -l
Cow files in /usr/local/share/cows:
$ ls -l /usr/local/share/cows
合計 196
-rw-r--r-- 1 root root 1595  7月 11 01:00 Darjeeling.cow
-rw-r--r-- 1 root root  584  3月 11  2010 beavis.zen.cow
-rw-r--r-- 1 root root  286  3月 11  2010 bong.cow
-rw-r--r-- 1 root root  310  3月 11  2010 bud-frogs.cow
-rw-r--r-- 1 root root  123  3月 11  2010 bunny.cow
<中略>

touchでもcpでも構わないので次のようなファイルを作成します。
残念ながら私はAA職人ではないのでAAの微調整は各個、お願いしたいところです。

##
## ダージリンさん
##
##
$the_cow = <<EOC;
   $thoughts
    $thoughts
      | . . . . . . x. . .\ . . \ . . . . . . \ . . . . . . .\.∨| . .
      x. . . . . . . .|.| . . . . |\ . . \. . / . .\. . . . . . . .|x| . .
      x. . . . . . . .|.|i . . . . 、 \ . . Х>― .斗\ . . . |x| . .
      x. . . . . . . .|八 . . . . \ ` ‐---/ 弌Y^ . . . . .ト|人厶
      |. .| . . .l. .x \\ . . \   〈/V \ ヽ | . . . |tく ヘ
      |. .| . . .| . .|____,\\. . \    \く___ノ | . |. ∧|. . . . . 〉
      |. .| . . .|/|     .斗≧=‐----       ノイ|/ 人_/〉
      |. . . . . ∧. .'.  Y^Vj弌                __/ . j. . .イ
       . . . . . . . . . .V人 \__〉            |/. . /\イ
        \.〈\ . . \\ヽ.     ′    k     ∧. ∧. . . .ソ
         \ \ . . \トヘ.      く  ノ     ∨__,>く
             ` ‐--- T\           /    V ̄\
                     乂__≧=‐-----rく    /    \
                   (  \_ノ、__,ノ/|    /        ト
                       / ∧ _/         |  \
EOC

実行確認

$ cowsay -l
Cow files in /usr/local/share/cows:
Darjeeling beavis.zen bong bud-frogs bunny cheese cower daemon default
    ↑ 想定通りのファイルが表示されること

000049.jpg

Step2:cowsayではなくDarsayとして出力する

やること

せっかくならcowsayでなくDarsayにしてやりたい。ダー様がしゃべる、としてDarsay。
やることとしては、

1: 日本語の格言にも対応する。
2: デフォルトの動作を牛ではなくダー様にする
3: 「こんな格言を知ってる?」を埋め込む。

そんなわけで日本語対応と若干のアレンジを行う。

実装

1: 日本語の格言にも対応する。
先人がいたのでそちらを参照。
参考:Devlion Memo cowsay日本語化

2: デフォルトの動作を牛ではなくダー様にする
引数設定の場所をちょちょいと変更してあげればOK。

# 変更前
%opts = (
    'e'         =>      'oo',
    'f'         =>      'default.cow',
    'n'         =>      0,
    'T'         =>      '  ',
    'W'         =>      40,
);
# 変更後
%opts = (
    'e'         =>      'oo',
    'f'         =>      'Darjeeling.cow',
    'n'         =>      0,
    'T'         =>      '  ',
    'W'         =>      40,
);

3: 「こんな格言を知ってる?」を埋め込む。
標準入力をPerlの処理に受け渡すタイミングでメッセージを付与しようと思う。
具体的にはslurp_input関数の中身です。
message配列には受け取った文字列が改行ごとにVAR1,VAR2と格納されるので、
配列の先頭にdarjeeling の2行を追加してあげることで簡易実装とした。

# 変更前
chomp(@message = <STDIN>);
# 変更後
chomp(@message = <STDIN>);
my @darjeeling = ("こんな格言を知ってる?","");
unshift(@message, @darjeeling);

実行確認

WS000013.JPG

Step3:日本語の名言をしゃべらせる その1

やること

せっかくなら日本語の格言や名言をしゃべらせたいよね。
そんなわけでまずは正攻法、fortuneコマンドに日本語の名言を入れ込む。

実装

日本語のfortuneのファイルを提供している場所はいくつかあるのですが、
今回は星が見える名言集から取得。
EUC-JPのエンコーディングのため、UTF-8環境においては、meigenをUTF-8エンコーディングに変換後、strfileで.datファイルを作成する必要がある。

# wget http://web.archive.org/web/20060930055512/http://worris.sakura.ne.jp/fortune-meigen.tar.gz
# tar zvxf fortune-meigen.tar.gz
# iconv -f eucjp -t utf8 fortune-meigen/meigen > meigen
# strfile meigen
# mv meigen* /usr/share/games/fortune
# fortune meigen
ソクラテスがソフィストを批判したのも、彼らが『教える事』を重視し、
教師が『主題を教える』のだと彼らが考えていたからに他ならない。
これは怠慢であり、自惚れである、とソクラテスはみなした。
教師が『学習法を教え』、学生が『主題を学ぶ』のである。
学習は実を結ぶ行為であり、教える事は思い上がり、瞞着行為なのである。
これゆえにデルファイの神託は彼を『ギリシア最高の賢人』と呼んだのである。
                --P・F・ドラッカー

実行確認

日本語だと横幅がやや長めになる傾向があるので、-nオプションを付けるとそれらしく出力できる。
WS000010.JPG

Step4:日本語の名言をしゃべらせる その2

やること

せっかくなら日本語の格言や名言をしゃべらせたいよね。
先ほど参考にしたDevlion Memo cowsay日本語化では、
名言格言サイト 言霊inからデータ取得していた。
なるほど、その手法をいただこう。

実装

前述のサイトから丸ごと使わせていただいた。
私の環境では /usr/local/bin/kotodama として設置した。

# !/usr/bin/ruby
require 'rss'
rss = RSS::Parser.parse("http://www.kotodama.in/bbs/rss/board/remark/", false)
i = rand(rss.items.length)
puts rss.item(i).title
puts " -- " + rss.item(i).content_encoded

実行確認

WS000011.JPG

終わりに

WS000012.JPG


以上

44
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?