[PYTHON] Führen Sie die Matrix zum Terminal Ihres Chefs!

Livesense Advent Caelendar 2015 Tag 12 ist @sion_cojp.

Zurückblicken ...

Ich habe als Infrastrukturingenieur gearbeitet, und als ich krank war, fuhr ich mit dem Zug zum Terminal meines Chefs. ](Http://qiita.com/sion_cojp/items/e4c61485f9204b2abf95) Jetzt wechsle ich als Webanwendungsingenieur in eine andere Abteilung und entwickle APIs.

Sie sehen sich diesen Artikel an.

Haben Sie so etwas bei der Arbeit?


Ich bin in eine andere Abteilung gezogen, aber mein Chef hat immerhin eine unvernünftige Anfrage gestellt. Lass uns gehen. .. .. </ b>

Ich verstehe. Dieses Gefühl. Ja. ~~ Ich bin so viel umgezogen, dass ich mir wünschte, ich könnte teures Sushi kaufen. .. ~~ Aber ich muss Ihnen dafür danken, dass Sie sich bewegen können. Die Gesellschaft ist kompliziert, nicht wahr?





Lassen Sie uns die Matrix zum Terminal laufen, wo der Chef arbeitet! !! </ b>







Zunächst die Vorbereitung.


① Finden Sie den Host, an dem Ihr Chef arbeitet

Ich werde irgendwie krank sein. (Kimon) Wieder schlich ich mich von hinten in den Monitor meines Chefs.


Ich bin entspannt und ringe mit dem Legacy-Code von PHP.

Dumm. </ b>

Holen Sie sich die Serverinformationen, die Ihr Chef entwickelt.

② Schreiben Sie ein Programm zum Ausführen der Matrix.

Mach es richtig. Lassen Sie uns MATRIX_ANGRY_CHARS mit Wut schlagen. Wie Sie beim Ausführen des Programms sehen können, können Sie sicher sein, dass der verärgerte Teil nicht kahl sein darf </ b>.
Wir danken MATRIX_THANKS_CHARS.

matrix_curses.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import unicode_literals
import locale
import time
import curses
import sys, string
import random
import struct
locale.setlocale(locale.LC_ALL, '')
encoding = locale.getpreferredencoding()

########################################################################
# const

MIN_SPEED = 1
MAX_SPEED = 2
MATRIX_ANGRY_CHARS = "Es ist in Ordnung, mich spät per Chat statt per E-Mail zu kontaktieren. Ich möchte Hadoken eingeben. Ich bin fast weg."
MATRIX_THANKS_CHARS = "THANKS DEAR TAKU !!!"
MATRIX_COLOR_WORD = 46
MATRIX_COLOR_BACK = 232

########################################################################

class FallingChar(object):
    matrixchr = list(MATRIX_ANGRY_CHARS)
    normal_attr = curses.A_NORMAL
    highlight_attr = curses.A_REVERSE

    def __init__(self, width, MIN_SPEED, MAX_SPEED):
        self.x = 0
        self.y = 0
        self.speed = 1
        self.char = ' '
        self.reset(width, MIN_SPEED, MAX_SPEED)

    def reset(self, width, MIN_SPEED, MAX_SPEED):
        self.char = random.choice(FallingChar.matrixchr).encode(encoding)
        self.x = random.randint(1, width - 1)
        self.y = 0
        self.speed = random.randint(MIN_SPEED, MAX_SPEED)

    def tick(self, scr):
        height, width = scr.getmaxyx()
        self.out_of_screen_reset(width, height)
        scr.addstr(self.y, self.x, self.char, curses.color_pair(1))
        self.char = random.choice(FallingChar.matrixchr).encode(encoding)
        self.y += 1
        if not self.out_of_screen_reset(width, height):
            scr.addstr(self.y, self.x, self.char, curses.A_REVERSE)

    def out_of_screen_reset(self, width, height):
        if self.x > width-2:
            self.reset(width, MIN_SPEED, MAX_SPEED)
            return True
        if self.y > height-2:
            self.reset(width, MIN_SPEED, MAX_SPEED)
            return True
        return False

def rand():
    a = 1
    while True:
        a ^= (a << 1);
        a ^= (a >> 135);
        a ^= (a << 104);
        yield a

r = rand()
def randint(_min, _max):
    n = r.next()
    return (n % (_max - _min)) + _min

def color():
    curses.start_color()
    curses.init_pair(1, MATRIX_COLOR_WORD, MATRIX_COLOR_BACK)
    curses.curs_set(0)
    curses.noecho()

def main():
    scr = curses.initscr()
    scr.nodelay(1)
    color()

    height, width = scr.getmaxyx()
    lines = []
    for i in range(8):
        l = FallingChar(width, MIN_SPEED, MAX_SPEED)
        lines.append(l)

    scr.refresh()
    while True:
        for line in lines:
            line.tick(scr)
        for i in range(30):
            x = randint(0, width-1)
            y = randint(0, height-1)
            scr.addstr(y, x, ' ')

        scr.refresh()
        time.sleep(0.04)

def last_main():
    curses.endwin()
    curses.curs_set(1)
    curses.reset_shell_mode()
    curses.echo()

    screen = curses.initscr()
    color()
    lastchr = string.join(list(MATRIX_THANKS_CHARS), " ")

    last_height, last_width = screen.getmaxyx()
    start_width = last_width/2 - len(lastchr)/2
    for i in range(last_height/2):
        screen.clear()
        screen.addstr(i, start_width, lastchr, curses.color_pair(1))
        screen.refresh()
        time.sleep(0.2)
    screen.getch()
    curses.endwin()

try:
    main()
except KeyboardInterrupt:
    try:
        last_main()
    except KeyboardInterrupt:
        curses.endwin()
        curses.curs_set(1)
        curses.reset_shell_mode()
        curses.echo()

Lassen Sie uns im Test laufen

$ python /tmp/matrix_curses.py




Gut. </ b>

④ Lassen Sie uns die Matrix zum Terminal des Chefs laufen!

$ w

Es stellt sich heraus, dass mein Chef, taku, / dev / pts / ○○ ist. Befehlseingabe sofort.

$ python /tmp/matrix_curses.py > /dev/pts/○○





mymovie1.gif

Drücken Sie dann Strg + C, wenn Sie zufrieden sind oder der Ärger Ihres Chefs maximal ist.

mymovie2.gif



THANKS DEAR TAKU!!!

erreicht. Ich bin dir wirklich dankbar. </ b>

⑤ Endlich

Verwenden Sie es nicht, wenn es wichtig ist, z. B. wenn ein Fehler vorliegt. Absolut. Geben Sie es Ihrem humorvollen, warmen und sanften Chef, der niemals wütend wird!

Recommended Posts