平面バナー(sysvbanner)を立体(vpython)へ

banner_vpython

宮藤官九郎x岡田将生のドラマ「ゆとりですがなにか」で、ゆとり第一世代の青年(岡田将生)が、ゆとりど真ん中世代の新入社員に振り回されるのですが、演じてる俳優さんが上手いのでしょうか、ものすごくその新入社員に腹が立ちます。

私の職場にも新入社員(新卒プログラマー)が配属されましたが、普通の人で良かったと思います。応対は丁寧だし挨拶もできます。当たり前のことができない世なので、当たり前のことができることが新鮮に感じます。
職場に慣れた頃でしょうか、ある時その新卒プログラマーから、「Windowsなのにコマンドラインなんて使って、古臭いことやっていますね」と指摘されました。ぎくり。色とりどりのGUIツールを使いこなし生産性を求めてこそ、プログラマーになった意味があるそうです。
なかなか痛い所ついてきます。通信パケットの解析に、WireSharkが使えずtcpdumpオンリー白黒画面でログ解析する姿がトロ臭く感じたのでしょう。

GUIの時代になぜコマンドラインを追うのか。その理由は、私がコマンドラインをGUIよりも進んでいるものと考えているからです。たまたまCUI(コマンドライン)が生まれたのがGUIよりも先だっただけで 、コマンド一つで物が作れる発想や技術はかなり進んだものだと思うのです。
そもそもCUIの方が結果を得るのが早い時もあります。Windowsでも、ネットワーク系コマンドを確認する時はほとんどコマンドプロンプトを使うでしょうし、ディレクトリ一覧がほしい場合、エクスプローラーを使うよりもdirコマンドを入力した方が早いです。まあコマンドラインを無理やり使うのではなく、GUIかCUIかどちらが早いか天秤にかけて都度選択していくのが賢者でしょう。

新卒プログラマーに冒頭のバナー画像を見せたら、コマンドラインに関して見解を改めたそうで、今では立派に日々bashやコマンドプロンプトの勉強をするようになりました。(私はコマンドライン宗教の勧誘をしてるのだろうか)
プログラマーは日々勉強してなんぼなので結果オーライです。プログラマーという道を選択してしまったら永遠に勉強、出口のない迷路が始まります。それが面白いんです。

さて、冒頭の立体バナーですが、bannerコマンドの結果を、pythonへパイプ渡しすることで実現しています。

3Dフィルタ前

~$ banner HELLO
#     # ####### #       #       #######
#     # #       #       #       #     #
#     # #       #       #       #     #
####### #####   #       #       #     #
#     # #       #       #       #     #
#     # #       #       #       #     #
#     # ####### ####### ####### #######

~$ 

(以下を実行するには、pythonのvisualモジュールが必要ですが、Debianではapt-get install python-visualでインストールできます)

3Dフィルタ後

~$ banner HELLO | python -c'
from visual import *
display(center=(40,0,0))
y=0
for line in sys.stdin:
  x=0
  for c in list(line):
    if c=="#":
      sphere(pos=(x*2,0,y*2))
    x=x+1
  y=y+1'
~$ 

コマンドラインですので、当然sysvbannerを他のコマンドにすることもできます。バナーの代わりにテキストで迷路を作ってみました。

~# cat a.txt
#######################################
        #          #     #            #
# ####### ########## ### # ## ####### #
#       #            ### # ## #     # #
# ####### ### #### ##### # ## # # # # #
#       # ############## # ## # # # # #
# #######      #         # ## # # # # #
#       ### ## ####### ### ## # # # # #
####### # #  # #     #   # ## # # # # #
#       # # ## # ### # ### ## ### # # #
####### # # ## # ### # #   ##     # # #
#     # # #  #   ### # # ########## # #
# # # # # # ######## #              # #
# # # # # ########## ### ############ #
# # # # #            #   ##           #
# # # # # ### # ########### ######### #
# # # # # # # # ##       ## #       # #
# # # # # # # # #  ##### ########## # #
# # # # # # # # # ##   #              #
# ### # # # # # # #  # # ############ #
# # #   # # # # # ## # # ##           #
# # ##### # ### #    # ################
#               ######            #    
#######################################

ではこの平面迷路を立体化してみましょう。迷路っぽくするため、pythonで描画するオブジェクトはsphereではなくboxにしました。

~$ cat a.txt | python -c'
from visual import *
display(center=(10,0,10))
y=0
for line in sys.stdin:
  x=0
  for c in list(line):
    if c=="#":
      box(pos=(x*1,0,y*1))
    x=x+1
  y=y+1'
~$ 

vpython_maze

さて、迷路から出られるでしょうか。(出口はないんですけどね)

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA