仕事の役には立たない、Linuxにおけるジョークプログラムの話

# この記事は？
- Linuxというと業務向けで使用されており、個人で使用している人は（世間一般としては）多くない
- こんな無駄なプログラムがあるんだぜ！是非仕事に活かしてくれよな！というコマンドをまとめてみた。
- CUIのものを中心にジョークプログラムを紹介する。
- 手持ちのCentOSだけの紹介ですがご了承ください。

# まずは環境情報
## 環境情報
私の環境では下記ですので、ubuntuだとかのディストリビューションや
AIX,SolarisのようなUNIX機器でも同様にできるかは不明。

| 項目 | 情報 |
|:-:|:-:|
|CentOS|CentOS Linux release 7.2.1511|

# イカれたメンバーを紹介するぜ！
## 格言を出力する：fortune
### これは何？
英語の格言、明言をランダムに出力する。
ユーザ独自に格言を追加することも可能。

### 導入方法
```bash
# yum install fortune-mod
```

### 実行
```bash
$ /usr/bin/fortune
```

### 実行結果例
```bash
$ /usr/bin/fortune
I understand why you're confused.  You're thinking too much.
                -- Carole Wallach.

$ fortune -f
100.00% /usr/share/games/fortune
     2.94% art
     1.75% perl
     0.06% ascii-art
     0.33% pets
     2.88% bofh-excuses
     1.67% literature
     6.56% computers
     3.20% platitudes
     7.28% cookie
     4.48% politics
     7.59% definitions
     1.33% drugs
     0.84% riddles
     1.30% education
     0.96% love
     3.99% science
     1.04% ethnic
     1.27% food
     4.60% songs-poems
     2.76% fortunes
     0.94% sports
     0.35% goedel
     1.45% startrek
     0.58% hitchhiker
     0.52% tao
     1.26% humorists
     0.19% magic
     0.08% translate-me
     1.78% humorix-misc
     1.29% humorix-stories
     0.22% osfortune
     0.46% paradoxum
     1.98% kernelnewbies
     0.96% kids
     2.69% wisdom
     3.54% knghtbrd
     1.29% law
     4.03% work
     2.51% linux
     3.50% zippy
     0.67% linuxcookie
     0.47% medicine
     4.15% miscellaneous
     7.95% people
     0.34% news
$ fortune perl
Just don't compare it with a real language, or you'll be unhappy...  :-)
             -- Larry Wall in <1992May12.190238.5667@netlabs.com>
```

## UNIXで有名なアスキーアートを出力する：cowsay
### これは何？
UNIXには古来から牛(cow)に喋らせる(say)というジョークコマンドがあり、それがこれにあたる。
Perlで製作されており、パイプでつないで前述のfortuneなどの実行結果を喋らせるとシュールな結果が得られる。
引数で-fオプションを与えると牛以外に変更可能。

### 導入方法
ubuntuなどはapt-getできるがCentOS7ではyumで落とせない…ので
GitHubからもらってくる。
[cowsay](https://github.com/schacon/cowsay)
取得したZIPファイルをサーバ上に転送。

```bash
$ unzip cowsay-master.zip
$ cd cowsay-master/
$ ./install.sh
```

Perlのパスを教えてくれよ、とメッセージが出るがデフォルトでOKなのでそのままEnter。

### 実行
```bash
$ cowsay <表示させたいメッセージ>
```

### 実行結果例
```bash
$ cowsay -l
Cow files in /usr/local/share/cows:
beavis.zen bong bud-frogs bunny cheese cower daemon default dragon
dragon-and-cow elephant elephant-in-snake eyes flaming-sheep ghostbusters
head-in hellokitty kiss kitty koala kosh luke-koala meow milk moofasa moose
mutilated ren satanic sheep skeleton small sodomized squirrel stegosaurus
stimpy supermilker surgery telebears three-eyes turkey turtle tux udder
vader vader-koala www

$ cowsay Orange 
 ________
< Orange >
 --------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

$ cowsay -f tux hello
 __________
< Sapphire >
 ----------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/


$ cowsay -f ghostbusters  Passion
 _________
< Passion >
 ---------
          \
           \
            \          __---__
                    _-       /--______
               __--( /     \ )XXXXXXXXXXX\v.
             .-XXX(   O   O  )XXXXXXXXXXXXXXX-
            /XXX(       U     )        XXXXXXX\
          /XXXXX(              )--_  XXXXXXXXXXX\
         /XXXXX/ (      O     )   XXXXXX   \XXXXX\
         XXXXX/   /            XXXXXX   \__ \XXXXX
         XXXXXX__/          XXXXXX         \__---->
 ---___  XXX__/          XXXXXX      \__         /
   \-  --__/   ___/\  XXXXXX            /  ___--/=
    \-\    ___/    XXXXXX              '--- XXXXXX
       \-\/XXX\ XXXXXX                      /XXXXX
         \XXXXXXXXX   \                    /XXXXX/
          \XXXXXX      >                 _/XXXXX/
            \XXXXX--__/              __-- XXXX/
             -XXXXXXXX---------------  XXXXXX-
                \XXXXXXXXXXXXXXXXXXXXXXXXXX/
                  ""VXXXXXXXXXXXXXXXXXXV""
```



## 英文文字列をAAに変換する：figlet
### これは何？
英文文字列をAAに変換する。
派生形としてtoiletというものもあり、こちらは日本語にも対応できる模様。

### 導入方法
```bash
# yum install figlet
```

### 実行
```bash
$ figlet <変換したい英文>
```

### 実行結果例
```bash
$ figlet Message
 __  __
|  \/  | ___  ___ ___  __ _  __ _  ___
| |\/| |/ _ \/ __/ __|/ _` |/ _` |/ _ \
| |  | |  __/\__ \__ \ (_| | (_| |  __/
|_|  |_|\___||___/___/\__,_|\__, |\___|
                            |___/
```

## 汽車が走る：sl
### これは何？
汽車(Steam Locomotive)のAAを出力する。
製作者は「高度に発展した、キータイプ矯正を目的とするアニメーションプログラムである」と主張している。
ついうっかりlsコマンドを打ち間違えた時に楽しくなる。
引数がlsに似せてあるのも憎たらしい。

- -a …車内の客が助けを求めるようになる
- -l…SLが小さくなる
- -F…SLが空（画面の上のほう）へ飛んでゆく
- -e…SLが走っている最中に「Ctrl + C」で離脱できるようになる


### 導入方法
```bash
# yum install sl
```

### 実行
```bash
$ sl
```

### 実行結果例
こいつ…動くぞ！という楽しみがあるので
是非ご自分の環境でどうぞ


## 虹色にファイルを読む：lolcat
### これは何？
ファイルの標準出力によく使われるのがcatコマンド。
このcatのようにファイル出力を行うに当たり、実行結果が虹色になって派手にできる。
英文であれば、-aオプションを付与することでカラーアニメーション表示もできる。
Ruby製。

### 導入方法
```bash
$ gem install lolcat 
```

### 実行
```bash
$ lolcat <ファイル名>
```

### 実行結果例
```bash
$ cat MilkyWayRailroad.txt
```
![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/129674/b674dbf2-4ad9-c2fc-8fd5-c04df2ed3376.jpeg)


```bash
$ lolcat MilkyWayRailroad.txt
```
![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/129674/6cc29ffd-bde3-ede3-9a5d-9b08aecd1301.jpeg)



## コンソール上でアクアリウムを眺める：asciiquarium
### これは何？
たまにはアクアリウムでも眺めて心穏やかになりたい時もある。
そんなときにこのコマンドを使って、
コンソール上をアクアリウムにしちゃおう。
Perl製。
同作者さんはHPにて[weatherspect](http://www.robobunny.com/projects/weatherspect/html/)というのも提供しているのでこちらも試してみてね。

### 導入方法

```bash
# yum install perl-Curses
# exit
$ wget http://www.cpan.org/authors/id/K/KB/KBAUCOM/Term-Animation-2.6.tar.gz
$ tar zvxf Term-Animation-2.6.tar.gz
$ wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz
$ tar zvxf asciiquarium.tar.gz
$ cp -p asciiquarium_1.1/
asciiquarium /usr/local/bin
$ chmod 755 /usr/local/bin/asciiquarium
$ cd Term-Animation-2.6/
$ su
# perl Makefile.PL && make && make test
# make install
```

### 実行
```bash
$ asciiquarium
```

### 実行結果例
![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/129674/72b99e68-2ac1-6edb-7bbc-4b6b719a2c2b.jpeg)

## マトリックスのあの画面を再現する：cmatrix
### これは何？
映画Matrixで出てくるあの画面にを再現するコマンド。
オプションの-sをセットするとスクリーンセーバーモードになり、何かキーを押すまで続行になるので案外使えるかもしれない。

### 導入方法

```bash
$ wget http://www.asty.org/cmatrix/dist/cmatrix-1.2a.tar.gz
$ tar zvxf cmatrix-1.2a.tar.gz
$ cd cmatrix-1.2a/
$ ./configure
$ make 
$ su 
# make install 
```

### 実行
```bash
$ cmatrix -ab
```

### 実行結果例
![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/129674/6760a2ac-5fa8-9f75-c8c3-25767c13c392.jpeg)

## 牛ではなくポニーに喋らせる：ponysay / ポケモンに喋らせる：pokemonsay
### これは何？
コメント欄より、@sharowさん、@mmizutaniさんから情報提供いただきました。
cowsayならぬponysay、pokemonsayを作ったものがGitHubにあるらしい。
あまりcowsayの拡張の話をしても記事の本題からそれるのでponysayのみ紹介。
pomysayはPython3で書かれているものなのですが、CentOS7ではPython2系なので、
バージョンを共存させスイッチさせつつ導入する。

### 導入方法
まずはPython3と共存させるため、pyenvを導入。

```bash
# yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
# vi /root/.bashrc
  下記を追記
  # pyenv
  export PYENV_ROOT="$HOME/.pyenv"
  export PATH="$PYENV_ROOT/bin:$PATH"
  eval "$(pyenv init -)"
# source /root/.bash_profile
# pyenv install --list
# pyenv install 3.5.2
```

切り替え実施。

```bash
# python --version
  Python 2.7.5
# pyenv global 3.5.1
# pyenv rehash
# python --version
  Python 3.5.1
```

パッケージはGitHubからもらってくる。
[ponysay](https://github.com/erkin/ponysay)
取得したZIPファイルをサーバ上に転送。

```bash
$ unzip ponysay-master.zip
$ cd ponysay-master/
$ sudo python3 setup.py --freedom=partial install
```

### 実行
```bash
$ ponysay <表示させたいメッセージ>
```

### 実行結果例
「?」が出てしまっているのはTeratermの文字コード設定かな？未調査。
coysayよりもカラフルなのが見栄えがいいですね！
![000045.jpg](https://qiita-image-store.s3.amazonaws.com/0/129674/217b88e7-164e-a201-f476-d76b0a99cea6.jpeg)

## PingではなくPingPongする：pong
### これは何？
コメント欄より、@kurehajimeさんから情報提供いただきました。
pingコマンドで疎通確認をするつもりが打ち間違えてpongと打ち込んでしまった！そういった時があるかと思います。OとIはqwerty配列ではお隣ですしね。
「PONG is Not PING.」というわけで、pongコマンドではピンポンのCLIゲームを提供してくれます。


### 導入方法
パッケージ、というかバイナリをGitHubからもらってくる。
[kurehajime/pong-command
](https://github.com/kurehajime/pong-command/releases/tag/1.1)
動作させたい環境のZIPファイルをサーバ上に転送。

```bash
# unzip linux_amd64.zip
# mv pong /usr/local/bin/
```

### 実行
アドレスの指定はなくても本当はいいのだけれど、アドレス指定があるほうが玉がアドレスになっていい感じ。

```bash
$ pong <IP Address>
```

### 実行結果例
192.168.1.100にpongした例。
![000047.jpg](https://qiita-image-store.s3.amazonaws.com/0/129674/f9bcff77-4d82-3f07-e9eb-feb3a537397e.jpeg)

## 作業を終わらせたらビールを飲もう！ : beer-mug
### これは何？
あなたの勤務時間を測定し、働いた後のあなたの幸せな生活を助けます。製作者GitHubのREADMEより。
（…若干、仕事の役に立ってしまっている気がしないでもない）

### 導入方法
GitHubからgo getでもらってくる。

```bash
# go get github.com/misoton665/beer-mug
# go install github.com/misoton665/beer-mug
```

### 実行

```bash
// タイマーの初期化
$ beer-mug init

// 実行
$ beer-mug start

// 適切に労働した後、タイマーを止める
$ beer-mug end
```

### 実行結果例
「あなたはxx時間働いたよ！！おめでとう！！！」ってやかましいわ！
![000209.jpg](https://qiita-image-store.s3.amazonaws.com/0/129674/73e75317-b063-9968-7328-e910fe59acac.jpeg)
なお、Unicode絵文字を使用しているので、適切にフォントを入れないといけません。
方法は[Qiita記事:Linux とかでも Unicode 絵文字を表示するためのフォント](http://qiita.com/polamjag/items/7295a15fca6a9eeb5d84)などを参照。

## Nyancat をターミナル上で走らせよう！ : nyancat
### これは何？
コメント欄より、@noromanbaさんから情報提供いただきました。
nyancatをご存知でしょうか。知らない人はググってください。
このコマンドはnyancatをターミナル上で走らせる、ただそれだけのコマンドです。
一応、下部に「xx秒nyanしたよ」とメッセージが出るのでタイマーとして使えなくもないが、
お仕事としては役に立たないかもしれない。

### 導入方法
GitHubからもらってくる。

```bash
# git clone https://github.com/klange/nyancat.git
# cd nyancat/src/
# make && cd src
```
以下のディストリビューションはパッケージマネージャから取得できるらしい。
(手元のCentOSではないので未検証)

[Arch](http://aur.archlinux.org/packages.php?ID=55279) / [Debian](http://packages.qa.debian.org/n/nyancat.html)  /  [Gentoo](http://packages.gentoo.org/package/games-misc/nyancat) / [Mandriva](http://sophie.zarb.org/rpms/928724d4aea0efdbdeda1c80cb59a7d3) / [Ubuntu](https://launchpad.net/ubuntu/+source/nyancat) / [FreeBSD](http://www.freshports.org/net/nyancat/) /  [OpenBSD](http://openports.se/misc/nyancat)
### 実行

```bash
$ ./nyancat
```

### 実行結果例
「あなたはxx秒nyanしたよ！！」
![000143.jpg](https://qiita-image-store.s3.amazonaws.com/0/129674/031747e8-44e1-d4d0-1b45-7dc9506d4f30.jpeg)

仕事上、これをタイマーとして活用するという方は`tmux` や `screen` 内では以下のオプションでウインドウタイトルの惨事を防げます。

```bash
$ nyancat --no-title # or `-s`
```


## プリティでキュアキュアなツール群 : cureutils
### これは何？
Twitterにてリプライより、@graymd さんから情報提供いただきました。
表題の通りです。

### 導入方法・実行・実行結果例
[当該のQiita記事を参照してください](http://qiita.com/greymd/items/666a26459aa1bd4cb06c
)

### 補足
記事の性質上、「仕事の役には立たない」と区分していますが、cureutilsは仕事として使うことで利用者にハピネスチャージできる素敵ツールです。
「ジョークが通じる現場の空気作り」さえできていれば、キュアエンジニアにとってこれほど有用なツールはないでしょう。


## [番外編] 天気を知りたい
話題になったやつ。Linuxのジョークプログラムではないけれど、面白いなーと思ったのでメモがてら記載。

```
curl wttr.in/Sapporo
```

現在の天気だけ出力したり、出力する日数を制限したり、画像で取得したりもできます。詳しくは、http://wttr.in/:helpを参照してください。

```
curl wttr.in moon
```

月の満ち欠けも取れちゃうぞ。

# ご存知でしたら教えてください
Linuxの世界は深く、世の中にはたくさんのジョークプログラムが溢れているでしょう。
「こんなのもあるよ！」というのがあれば教えてください。
役に立たなければ役に立たないほど嬉しいです。



* * *
以上