適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

Log::Handlerの標準出力を色付きにしたら10倍捗った

最近、ロギングはLog::Handlerを利用している。

このモジュールは、例えばplackupしているターミナルの標準出力にもログを吐けるので開発時に重宝している。

その標準出力(&標準エラー出力)に色を付けて、さらにそれをログレベルによって色分けするともっと捗るよ、というそれだけのお話。

use Log::Hander;

my $timeformat = '%Y-%m-%d %H:%M:%S';
my $layout = '%T %L pid %P %f line %l %s : %m';

my $log = Log::Handler->new(
        screen => {
            timeformat     => $timeformat,
            message_layout => "\e[1;31m${layout}\e[m",  # 赤の太字
            log_to         => 'STDERR',
            maxlevel       => 'alert',
            minlevel       => 'alert',
        },
        screen => {
            timeformat     => $timeformat,
            message_layout => "\e[31m${layout}\e[m",    # 赤
            log_to         => 'STDERR',
            maxlevel       => 'error',
            minlevel       => 'error',
        },
        screen => {
            timeformat     => $timeformat,
            message_layout => "\e[33m${layout}\e[m",    # 黄
            log_to         => 'STDERR',
            maxlevel       => 'warning',
            minlevel       => 'warning',
        },
        screen => {
            timeformat     => $timeformat,
            message_layout => "\e[34m${layout}\e[m",    # 黄
            log_to         => 'STDOUT',
            maxlevel       => 'info',
            minlevel       => 'info',
        },
        ...
    );

GNOME Shell@Ubuntu12.10でインストールしているExtension

LinuxMintを使っていたんだけどライブアップデートに対応していない(ような)ので、リリース毎にインストールするのも面倒だなーと思い、Ubuntuに戻った。

戻ったはいいんだけど相変わらずUnityは好きになれないので、GNOME Shellを入れた。

デフォルトのGNOME ShellはAlt+Tabを中心に使いづらさが残るので、そのあたりはExtensionで対応。

以下、インストールしたExtension。

Remove Accessibility

トップパネルのユニバーサルアクセスのアイコンを削除してくれる。それだけなのだけれども使わないアイコンは極力消したいので...。

AlternateTab

デフォルトのAlt+Tabは、例えば端末を複数開いているとグルーピングしてひとつにまとめてしまう。マウスOR十字キーで選択しなければならないのでかなりやっかい。そのあたりを解消してくれるのがこれ。

設定で「サムネイル」「アイコン」「サムネイル&アイコン」が選べる。自分はシンプルに「アイコン」表示。

Activities Configurator

トップパネルの色やら文字やらの見栄えをカスタマイズできる。なくても困らないかな...。

No Topleft Hot Corner

GNOME Shellはデスクトップの左上にマウスを持っていくと「アクティビティ・オーバービュー」を表示してくれるんだけど、これをdisableにしてくれる。自分はWindowsキー押したときだけ反応してくれればいいので結構重宝している。

TopIcons

デフォルトの状態だろSkypeDropboxのアイコンが普段は見えないボトムパネル(?)に表示されてしまうのだけれども、これらのアイコンをトップパネルに表示してくれる。これが一番重宝している。

以上、チラ裏でした。

fon 2405Eの11Nモードを75Mbpsから150Mbpsに変更したらWi-Fi接続できなくなってしまったけれども一応解消できたのでメモ

fon 2405EはソフバンでiPhoneを買ったときに貰ったもの。

変更前の設定

モード n/g/bミックス
チャンネル オート
11Nモード 75Mpbs(HT20)

11Nモードを150Mbps(HT20/HT40)に変更したらPCもiPhoneもWi-Fiに接続できなくなった。

いろいろいじっていたら接続できるようになった。

それがこの設定

モード Nのみ
チャンネル 1*1
11Nモード 150Mpbs(HT20/HT40)

それだけ。

*1:おそらくオートでなければOK

PerlyBookがすばらしいサービスだと思ったので、もっと便利に利用できるグリモン書いた

perlybookが便利だなぁと思ったんだけれども、perlybookのページ上でモジュール名をわざわざ手打ちで入力するのが面倒なので、CPANの各モジュールのページから直接ダウンロードできるグリモンを書いた。

tekiomo/CPAN_ePub_Downloader · GitHub

久々にネイティブなjsを書いたので、モジュール名の取得とか要素の追加とかなんか微妙だったりするけれど、私はげんきです。

ここからインストールできます

Vimperatorで表示しているタブ以外をすべて閉じる

あるようでいまいち見つからなかったので書いた。

上のコードを.vimperatorrcに書いておくと、

:removeAnotherTab
:ra
とか
normal modeで"D"

で今表示しているタブ以外すべて閉じます。

閉じ放題。

Vimperatorでパスワードをクリップボードにコピーする

Show Passwordはログインページなどで非表示になっているパスワードを表示できるようになるGreasemonkeyプラグインなのだけれども、少々やっかいなところがある。

input[@type="password"]な要素にマウスオーバーするとその要素のtypeがtextになりパスワードが可視化されるのだが、

  1. マウスオーバーした状態で
  2. 入力した状態でPOSTするためにエンターキーを押す

ことで入力履歴として残ってしまう。


個人的な用途としては「パスワードを忘れてしまったがブラウザには値が残っているので、その値を知りたい」だけなので、vimpでクリップボードにコピー&一定時間経過したらクリアするようにしてみた。

js <<EOM
  // パスワードをクリップボードにコピー
  commands.addUserCommand(
    ['passwordcopy', 'pc'],
    'パスワードをコピー',
    function() {
      var ps = content.document.getElementsByTagName('input');
      var passwords = []; 
      for (var i = 0, n = ps.length; i < n; ++i) {
        var p = ps[i];
        if (p.getAttribute('type') !== 'password' || !p.value) {
          continue;
        }   
        p.setAttribute('type', 'text');
        passwords.push(p.value);
        p.setAttribute('type', 'password');
      }   

      if (!!passwords.length) {
        util.copyToClipboard(passwords.join(','));
        liberator.echo('yanked password');
      } else {
        liberator.echoerr('not yanked');
      }   

      // 20秒たったらクリア
      setTimeout(function() {
        util.copyToClipboard('');
      }, 1000 * 20);
    }
  );
EOM

追記: !p.valueの判定を追加