この記事をご覧になっている、そこのあなた。
仕事中にこんなことはありませんか?
上司から無理な依頼をされた。ちくしょう。。。
わかります。その気持ち。ええ。
#そんな上司の作業中のターミナル(端末)に汽車を走らせてやりましょう!!
まずは準備。
①上司が作業しているホストを探そう
何かしらの方法でげっとします。(鬼門)
私は上司のモニターを後ろからこっそり覗いてやりました。
のんびり開発してるわ。 #### 馬鹿め。
上司が開発しているサーバ情報をげっと。
インフラエンジニアの私は上司のサーバにアクセス。
②汽車を流すプログラムを書く
https://github.com/mtoyoda/sl
ここを参考に。
$ cd /tmp
$ mkdir train
$ cd train
$ vim test.c
#include <signal.h>
#include <unistd.h>
/*こいつはカーソルを移動させたり、画面上の文字列を移動させたりする*/
#include <curses.h>
/*AAが書かれてるライブラリの読み込み*/
#include "test.h"
int add_FUGA(int x);
int mvfuga(int y, int x, char *str);
void add_man(int y, int x);
int mvfuga(int y, int x, char *str)
{
for ( ; x < 0; ++x, ++str)
if (*str == '\0') return ERR;
for ( ; *str != '\0'; ++str, ++x)
if (mvaddch(y, x, *str) == ERR) return ERR;
return OK;
}
int main()
{
int x;
/* 初期化*/
initscr();
/*対話的なシグナルの受け取り*/
signal(SIGINT, SIG_IGN);
/*カーソルキーの入力を受け取るが画面に表示しない*/
noecho();
/*カーソルを表示しない*/
curs_set(0);
nodelay(stdscr, TRUE);
leaveok(stdscr, TRUE);
scrollok(stdscr, FALSE);
/*横の動き*/
for (x = COLS - 1; ; --x) {
if (add_FUGA(x) == ERR) break;
/*キーボードから入力した文字を読み込むが画面には表示しない*/
getch();
/*画面再表示*/
refresh();
/*0.04秒待つ*/
usleep(40000);
}
/*前の位置から移動。mvcur(oldrow, oldcol, newrow, newcol)*/
mvcur(0, COLS - 1, LINES - 1, 0);
/*端末をリセットし、標準入出力が出来るように戻す*/
endwin();
}
int add_FUGA(int x)
{
static char *foo[FUGAPATTERNS][FUGAHIGHT + 1]
= {{FUGABODY1, FUGABODY2, FUGABODY3, FUGABODY4, FUGABODY5, FUGABODY6, FUGABODY7,
FUGAWHL11, FUGAWHL12, FUGAWHL13, FUGADEL},
{FUGABODY1, FUGABODY2, FUGABODY3, FUGABODY4, FUGABODY5, FUGABODY6, FUGABODY7,
FUGAWHL21, FUGAWHL22, FUGAWHL23, FUGADEL},
{FUGABODY1, FUGABODY2, FUGABODY3, FUGABODY4, FUGABODY5, FUGABODY6, FUGABODY7,
FUGAWHL31, FUGAWHL32, FUGAWHL33, FUGADEL},
{FUGABODY1, FUGABODY2, FUGABODY3, FUGABODY4, FUGABODY5, FUGABODY6, FUGABODY7,
FUGAWHL41, FUGAWHL42, FUGAWHL43, FUGADEL},
{FUGABODY1, FUGABODY2, FUGABODY3, FUGABODY4, FUGABODY5, FUGABODY6, FUGABODY7,
FUGAWHL51, FUGAWHL52, FUGAWHL53, FUGADEL},
{FUGABODY1, FUGABODY2, FUGABODY3, FUGABODY4, FUGABODY5, FUGABODY6, FUGABODY7,
FUGAWHL61, FUGAWHL62, FUGAWHL63, FUGADEL}};
int y, i = 0;
if (x < - FUGALENGTH) return ERR;
y = LINES / 2 - 5;
for (i = 0; i <= FUGAHIGHT; ++i) {
mvfuga(y + i, x, foo[(FUGALENGTH + x) % FUGAPATTERNS][i]);
}
add_man(y + 2, x + 43);
return OK;
}
void add_man(int y, int x)
{
/*あなたの上司の名前にしましょう*/
static char *man[2][2] = {{" Dear ", "(O)"}, {"TAKASHI!", "\\O/"}}; int i;
for (i = 0; i < 2; ++i) {
mvfuga(y + i, x+10, man[(LOGOLENGTH + x) / 12 % 2][i]);
}
}
$ vim test.h
#define FUGAHIGHT 10
#define FUGALENGTH 50
#define FUGAPATTERNS 6
#define LOGOLENGTH 84
#define FUGABODY1 " ==== ________ ___________ "
#define FUGABODY2 " _D _| |_______/ \\__I_I_____===__|_________| "
#define FUGABODY3 " |(_)--- | H\\________/ | | =|___ ___| "
#define FUGABODY4 " / | | H | | | | ||_| |_|| "
#define FUGABODY5 " | | | H |__--------------------| [___] | "
#define FUGABODY6 " | ________|___H__/__|_____/[][]~\\_______| | "
#define FUGABODY7 " |/ | |-----------I_____I [][] [] D |=======|__ "
#define FUGAWHL11 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define FUGAWHL12 " |/-=|___|= || || || |_____/~\\___/ "
#define FUGAWHL13 " \\_/ \\O=====O=====O=====O_/ \\_/ "
#define FUGAWHL21 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define FUGAWHL22 " |/-=|___|=O=====O=====O=====O |_____/~\\___/ "
#define FUGAWHL23 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define FUGAWHL31 "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__ "
#define FUGAWHL32 " |/-=|___|= || || || |_____/~\\___/ "
#define FUGAWHL33 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define FUGAWHL41 "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__ "
#define FUGAWHL42 " |/-=|___|= || || || |_____/~\\___/ "
#define FUGAWHL43 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define FUGAWHL51 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define FUGAWHL52 " |/-=|___|= O=====O=====O=====O|_____/~\\___/ "
#define FUGAWHL53 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define FUGAWHL61 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define FUGAWHL62 " |/-=|___|= || || || |_____/~\\___/ "
#define FUGAWHL63 " \\_/ \\_O=====O=====O=====O/ \\_/ "
#define FUGADEL " "
$ vim Makefile
CC=gcc
CFLAGS=-O
test: test.c test.h
$(CC) $(CFLAGS) -o test test.c -lncurses
③テストで走らせてみよう
$ make
$ /tmp/train/test
よし。
④上司のターミナルで汽車を走らせよう!
$ w
私の上司、takashiが/dev/pts/○○ だと言う事が判明。
すかさずコマンド投入。
$ /tmp/train/test > /dev/pts/○○
ポッポー
Dear TAKASHI!
### 達成。本当にありがとうございました。
⑤最後に
障害時など、大事なときはダメ。絶対。
決して怒らない、ユーモアたっぷりで温厚で優しい上司にやってね!