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

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

サーバーサイドなLESSを試してみた

LESSのサーバーサイド版を試してみた。
インストールには比較的新しめのnodejs(v0.4.9だとだめだった)とnpmが必要。

$ git clone https://github.com/joyent/node.git
$ cd ./node
$ ./configure
$ make
$ make install
$ git clone https://github.com/isaacs/npm.git
$ cd ./npm
$ git submodule update --init --recursive
$ sudo make install
$ npm install less

これで準備完了。

サンプルからコピーしてきた.lessファイル

$ cat /tmp/styles.less 
@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;

#header { color: @light-blue; }

これをlesscすると

$ ~/.npm/less/1.2.2/package/bin/lessc /tmp/styles.less          
#header {
  color: #6c94be;
}

のように出力された。

LESSの使用で設計はだいぶ楽になると思った。上記の手順でピュアなCSSにすぐに戻せるので試す価値はありそう。

TerminatorのSearchPluginを試してみた

Linux環境ではターミナルはTerminatorを使ってる。
今までは画面分割の機能が便利で使っていたんだけど、Terminatorにはプラグイン機能も備わっていてちょっと探してみたら、choffee/terminator-plugins - GitHubにあるsearchplugin.pyがちょっと気になったので入れてみた。

$ git clone https://github.com/choffee/terminator-plugins.git
$ cp ./terminator-plugins/searchplugin.py ~/.config/terminator/plugins/

あとはTerminaitor上でマウスで選択して右クリックメニューから「Search Google」を選択するとデフォルトのブラウザが立ち上がってGoogle検索結果が表示される。

エラーログの内容を検索したいときにプチ便利かも知れないような雰囲気を醸し出しそうな様子に感じそうな気がした。

Zshでホスト名とユーザ名とカレントディレクトリをTerminal(&タブ)のタイトルに表示させてみた

Gnome Terminalはタブを利用できるので重宝しているのですが、普段の開発時には複数のタブを開きサーバにログインしているので、今開いているタブがどのサーバなのか咄嗟に分からないことがあります。

なのでホスト名とユーザ名とカレントディレクトリをTerminal(&タブ)のタイトルに表示するようにしました。


まーありがちな処理なのですが、カレントディレクトリが深い場合に表示しきれなくなってしまうので、ちょっとだけ工夫して下記のように省略表示させました。

/path/to/directory
↓
/p/t/directory


~/.zshrc

function changetitle {
  # pwdを二回も実行しているのがなんかダサい...
  current_dir=`pwd | sed -e "s%\(/\([^.]\|\..\)\)[^/]*%\1%g"``pwd | sed -e "s%^.*/\([^.]\|\..\)\([^/]*\)$%\2%"`
  # タイトル用に整形
  title=[${USER}@${HOST%%.*}]${current_dir}
  case "${TERM}" in
    xterm*|kterm*|rxvt*)
      echo -ne "\033]0;${title}\007"
    ;;  
    screen*)
      echo -ne "\033P\033]0;${title}\007\033\\"
    ;;  
  esac
}

# zsh起動時にとりあえず実行
changetitle

# cd実行後に変更
function chpwd() {
  changetitle
}

# Screenの場合、window切り替え時に前のwindowのタイトルがTerminal(&タブ)のタイトルとして
# 残ってしまうのでせめてcdコマンド以外のコマンドでも実行前にタイトルを変更
preexec () {
  changetitle
}

Screenに現在のメモリ使用率を表示させてみた

過去に掲題のエントリーをどこかで見かけた記憶があるのですが、失念してしまいやむなく自作しました。


まずは下記のようなメモリの使用率を出力するshellを用意します。

#!/bin/sh
# echo `free | grep "buffers/cache" | awk '{print substr($3/($3+$4)*100,1,5)}'`'%'
# echo `free | grep "buffers/cache" | awk '{printf  "%3.1f", $3/($3+$4)*100}'`'%'
echo `free | awk '/buffers\/cache/{printf  "%3.1f", $3/($3+$4)*100}'`'%'

処理を簡単に説明します。
freeコマンドでメモリの状態を出力し、

$ free
             total       used       free     shared    buffers     cached
Mem:       2058796    1998692      60104          0      84788    1032096
-/+ buffers/cache:     881808    1176988
Swap:      1951740       3352    1948388

その結果から「buffers/cache:」のある行だけgrepして

# grep "buffers/cache"
-/+ buffers/cache:     881808    1176988

grep結果をawkして許されるのは小学生までだよねー
3つめ(881808:OSとアプリケーションが使用しているメモリサイズ)と4つめ(1176988:空きメモリサイズ)からメモリの使用率を算出して、小数点二桁くらい一桁(printf便利!)に揃えて

# awk '{print substr($3/($3+$4)*100,1,5)}
# awk '{printf  "%3.1f", $3/($3+$4)*100}'
awk '/buffers\/cache/{printf  "%3.1f", $3/($3+$4)*100}'

最後に「%」をくっつけています

echo 上の処理の結果'%'

このshellを適当なところに置きます。
今回、homeディレクトリに.screenディレクトリを掘り、mem.shとして保存しました。

~/.screen/mem.sh


次に.screenrcファイルに下記のような一行を追加します。

backtick 0 2 2 ${HOME}/.screen/mem.sh

そして、hardstatusまたはcaptionに「%0`」を追加すると完了です。

hardstatus string "memory : %0`"

この0は backtick のひとつめの引数(id)に該当し、例えば「backtick 1 2 2 ${HOME}/.screen/mem.sh」とした場合は「%1`」とします。


以上で完成です。


参考にさせて頂いたエントリー
screenのcaptionに東京電力の電力使用状況を表示するようにしてみた - ケーズメモ

Ubuntu11.04環境でgm-notifyが起動しないときの対処法

4/28にUbuntu11.04が正式リリースされました。さっそく新しいUnityインタフェースに慣れず、Ubuntuクラシックに逃げました...


さて、GMail Notifier(gm-notify)というpython製のGmailのメールチェッカーがあります。Ubuntu10.10の頃から利用していたのですが、素のUbutu11.04環境では動作しませんでした。
下記のように Twisted と python2.7-dev のインストールが必要となります。


まずは gm-notify をインストールします。

$ wget http://launchpad.net/gm-notify/0.x/0.10.3/+download/gm-notify-0.10.3.tar.gz
$ tar xvf gm-notify-0.10.3.tar.gz
$ cd gm-notify-0.10.3
$ sudo python setup.py install

インストールは完了しますが、メニューから「GMail Notifier Configuration」を選択しても起動しません。

ログを覗いてみるとこのようになっていました。

$ less ~/.xsession-errors
Traceback (most recent call last):
  File "/usr/local/bin/gm-notify-config", line 36, in <module>
    from twisted.words.protocols.jabber import jid
ImportError: No module named words.protocols.jabber

words.protocols.jabber がなさそうなのでまずは Twisted をインストールします

$ wget http://twistedmatrix.com/Releases/Twisted/11.0/Twisted-11.0.0.tar.bz2
$ tar xvf Twisted-11.0.0.tar.bz2
$ cd Twisted-11.0.0
$ sudo python setup.py install
fatal error: Python.h: No such file or directory

今度は Python.h がないと言われますので、さらにaptitudeで python2.7-dev をインストールします

$ sudo aptitude install python2.7-dev

再度、Twisted をインストールすると正常に完了しました

$ sudo python setup.py install

以上を行なうことでgm-notifyを起動することができました。

UbuntuのVPN接続が頻繁に切断されるときの対処法

Ubuntu9.04+でのVPN接続は、vpncとnetwork-manager-vpncをインストールすることによってGUIからでも行なえます。
ただCiscoVPN環境下において、頻繁にその接続が切断されていました(一日3,4回
それが最近(今のところ)解消されたのでその対処法です。


結論から言えば、デッドピア検出をオフにすることで解消されました。
下記のようにconfファイルに「DPD idle timeout (our side) 0」を追加しCLIからvpncを実行します。

$ sudo vpnc ~/.vpn/defalult.conf
[sudo] password for tekiomo: 
Enter password for tekiomo@VPN_SERVER: 
VPNC started in background (pid: 1234)...
# confファイルの中身
$ cat ~/.vpn/default.conf
## generated by pcf2vpnc
IPSec ID VPN_GROUP_ID
IPSec gateway VPN_SERVER
IPSec secret GROUP_PASSWORD
DPD idle timeout (our side) 0

Xauth username tekiomo
IKE Authmode psk

# 切断の仕方
$ sudo vpnc-disconnect

またconfファイルに追加せずに直接コマンドから「--dpd-idle 0」と指定することも可能です

$ sudo vpnc --dpd-idle 0 ~/.vpn/default.conf

(本当はGUIでDPDをオフに設定したかった(接続状況が可視できるので)のですが、GUIでの設定方法が分かりませんでした。)


上記のconfファイルはpcfファイルからpcf2vpncを使ってコンバートしました。pcf2vpncのインストール方法については下記を参考にしてださい。
How to setup Cisco VPN using VPNC Ubuntu Jaunty (9.04) | Ubuntu Geek

なおページ中でwgetしているcisco-decrypt.cはデッドリンクです。
このあたりからダウンロード可能です。