blockdiag 1.1.1で複雑な図を書いてwishlistを作ってみるテスト

どうもこんにちは。 今日はblockdiagでちょっと複雑な、でも業務で使う図を作ってみて、細かい要望をwishlistにしてみます。
なんてわがままな私でしょう!

ちなみに作成した図はアプリケーション構成を表す図です。
厳密に記法など決めているわけではないですが、 トラブルシュートなどのときに大まかな構成を把握するのに使います。

できた図 & wishlist

  • ネストしたグループのラベルが重ならないようになってほしい
  • ネストしたグループのサイズがきっちりになるので、大きい方は少し余裕をもったサイズになってほしい
  • ノード間接続のラベルが重ならないようになってほしい
  • ノード間接続のラベルのサイズを自動拡張してほしい(…にならないように)
  • apache -> mysqlのところとか、disk -> diskのところとか、ノード間接続で直角線コネクタと曲線が選べるといいなぁ
  • ノードの縦サイズをテキスト内容にあわせて自動拡張してほしい(特に改行が入っている場合)
  • apache -> diskのところは縦一列にならんでくれるとキレイだなぁ
    • apache -> diskのところを子groupにすることで解決できた!(2012.1.5追記。ソース未反映)

誰かなんとかしてくれないかなぁ。
自分で書けって話かなぁ。時間かかりそうだ。。。

ソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
diagram {
 
    internet [shape="cloud"];
    firewall[label="firewall\n(shared)"];
    vip_lb[label="VIP",shape="beginpoint"];
    keepalived_lb01[label="keepalived"];
    keepalived_lb02[label="keepalived"];
    keepalived_lb01 -- vip_lb[folded];
    keepalived_lb02 -- vip_lb[folded];
 
    proxy_web01[label="proxy"];
    apache_web01[label="apache+php"];
    disk_web01[label="disk",shape=flowchart.database];
    proxy_web01     -> apache_web01;
    apache_web01    -> disk_web01[folded];
 
    proxy_web02[label="proxy"];
    apache_web02[label="apache+php"];
    disk_web02[label="disk",shape=flowchart.database];
    proxy_web02     -> apache_web02;
    apache_web02    -> disk_web02[folded];
 
    mysql_db01[label="mysql\n(master)",shape=flowchart.database];
    mysql_db02[label="mysql\n(slave)",shape=flowchart.database];
    mysql_db01  -> mysql_db02[folded,label="replication"];
 
    internet    -> firewall -> vip_lb;
    vip_lb      -> proxy_web01,proxy_web02;
    apache_web01,apache_web02 -> mysql_db01[label="insert/update"];
    apache_web01,apache_web02 -> mysql_db02[label="select"];
    disk_web01  -> disk_web02 [folded,label="rsync"];
 
    group lb_group {
        color="#882222";
        textcolor="#660000";
        shape=line;
        style=dashed;
        label="Clusterd Load Balncer";
        group lb01_group{label="lb01";keepalived_lb01;};
        vip_lb;
        group lb02_group{label="lb02";keepalived_lb02;};
        };
    group production_group { 
        color="#882222";
        textcolor="#660000";
        shape=line;
        style=dashed;
        label="production";
        group web01_group{label="web01";proxy_web01;apache_web01;disk_web01};
        group web02_group{label="web02";proxy_web02;apache_web02;disk_web02};
        group db01_group{label="db01";mysql_db01;};
        group db02_group{label="db02";mysql_db02;};
        };
 
    stg-proxy_web01[label="proxy"];
    stg-apache_web01[label="apache"];
    stg-disk_web01[label="disk",shape=flowchart.database];
    stg-apache_web01    -> stg-disk_web01[folded];
 
    stg-mysql_db01[label="mysql",shape=flowchart.database];
    vip_lb  -> stg-proxy_web01;
    stg-proxy_web01 -> stg-apache_web01;
    stg-apache_web01   -> stg-mysql_db01;
 
    group staging_group { 
        color="#882222";
        textcolor="#660000";
        shape=line;
        style=dashed;
        label="staging";
        group stg-web01_group{label="stg-web01";stg-proxy_web01;stg-apache_web01;stg-disk_web01};
        group stg-db01_group{label="stg-db01";stg-mysql_db01;};
        };
 
    }

GNU screen でシリアル通信 + xmodem転送

ターミナルマルチプレクサ Advent Calendarの12日目でございます。

今日はさらにコアなネタに。

みなさん、シリアル通信することってありますよね?
ネットワーク機器に接続して設定したりとか、とかとか。

そんな時にもscreenが使えちゃうんです。 ちなみに私はMac(MBA Snow Lepard)で使ってます。

screenでシリアル接続する

  1. ケーブルをつなぐ。最近はUSBタイプのものですね。ドライバとかは入れておいてください
  2. screenでつなぐ

たとえば、USB接続のシリアルが /dev/tty.usbserial に接続できた場合は下記のように接続します。
※Ctrl-aではなくCtrl-zの場合

screen -e ^z^z  /dev/tty.usbserial 115200

xmodem転送する

ネットワーク機器のファームウェアアップデートのために、xmodem転送でデータを送信したいことってありますよね!
そんな時にもscreenでうまいこといけちゃうんです。

step0. lrzszをインストール

準備は簡単。brewでlrzszをインストールしておきましょう。

brew install lrzsz

では使ってみましょう。

step1. 接続する

上にかいてありますね。 ここでは特別なことはありません。

※Ctrl-aではなくCtrl-zの場合

screen -e ^z^z  /dev/tty.usbserial 115200

step2. 転送する

※Ctrl-aではなくCtrl-zの場合(しつこいかな)

Ctrl-z
:exec !! /usr/local/Cellar/lrzsz/0.12.20/bin/lsx -kb /Users/baba/Desktop/firmware.img

※パスとかは適宜読み替えてください!

・・・とまぁこんな感じで、懐かしのxmodem通信もできちゃいます。
xmodem通信とか、パソコン通信時代に◯☆△◇な画像をダウンロードする時にしか使った記憶がないんですが、 知っておいて損はないと思います。
得があるかはわかりませんが気にしたら負け。

GNU screenをもうちょっとだけ便利に使おう!

これはターミナルマルチプレクサ Advent Calendarの6日目でございます。

ノリと勢いでAdvent Calendarしたくてそのためにblogを移設したんだけど、 実はそんなにネタなかったりして。

と、いうわけで、今回は手持ちのtipsを紹介します。

その1. ログインしたら自動でscreen

.bashrcに自動でscreenが起動するように仕込めば、 今日からあなたもとても自然にscreen使いになれちゃいます。

自動screenデビューしたい? そんなあなたは↓のコードを .bashrc に書きましょう。

if [ $TERM != "screen" ]; then
    if [ $TERM != "dumb" ]; then
        screen -e ^z^z
    fi
fi

ポイントは次の2つ。

  1. 無限ループしないように、 $TERMscreen の時はscreenを起動しない
  2. SCPが使えるように、 $TERMdumb の時はscreenを起動しない

その2. 画面がチラチラするのが嫌!

screenでは、TAB連打で候補を出す時などにaudio bellの代わりにvisual bell(画面がチカチカする)が発動します。 でも、visual bellって画面チカチカするしすんごい見づらいですよね。 そんな私に共感してくれるあなたは ~/.screenrc に↓を書くと幸せになれるかもしれません。

vbell off

その3. 敢えて hardstatus を使わない

~/.screenrc に、頑張って hardstatus 云々って書くと、 画面上に時計やらウィンドウ一覧やらを表示できるんですよね。

これがまたカッコいい。 サイバーな感じで、こうなんというか、ハッカーっぽい!

でも私は、敢えて hardstatus を使わないのがお勧めです。

例えばMySQLで show table status した場合、 横幅広すぎでTerminal上では見づらいので、 手元のエディタにコピペしたくなりますよね。

そんな時も hardstatus を使っていなければ安心。 ターミナルソフト(MacならTerminalやiTerm)のスクロールバーを利用して少しだけ楽をしましょう。

なんとスクロールバックすれば出力がまるまる残っているではありませんか。 この出力をターミナルソフトの機能でコピーしてあげればokです。