mumumu の日記

Development, Translation, daily life, thoughts, and so on.

2013-05-14 01:16:00 +0900

Appeal in communitation

数年前、とあるソーシャルゲームな会社の人と飲む機会があった。彼が「日本のエンジニアは着飾る(=自分のことをアピールする。よく見せる)のが極めて下手糞だ」と強調していたのを今でもよく覚えている。

あー今の自分もそうだなー。と思ったり。自分が思ってもいないところが評価されたり、見てほしいところが評価されなかったり。そんな毎日。相手によって響く言葉や実績が違ったりするのが当然だからこそ難しい。

「相手を知り己を知れば百戦危うからず」なんていうけれども、相手を全て知ることは実際には不可能だ。探りながら駆け引きをする。相手が投げかけてくる言葉はその手がかりになる。本当はそんな気を回す必要がなければ一番よいのだけれども。

... そんな毎日がもうしばらく続きそうである。

2013-05-09 11:26:00 +0900

IMAP4rev1 client command

http://tools.ietf.org/html/rfc3501

IMAPサーバとの疎通確認のため、以下のように telnet で接続してみても login でエラーばかり返ってきて困った。

$ telnet XXX.XXX.XXX.XXX 143
Trying XXX.XXX.XXX.XXX...
Connected to XXX.XXX.XXX.XXX (...).
Escape character is '^]'.
* OK Dovecot ready.
login username password
login BAD Error in IMAP command received by server.

username や password は合っているので、なんでだろうといろいろ見ていると、クライアントから送信するコマンドには必ず先頭にアルファベットか数字からなる "tag" という文字列が付くそうな。。完全に忘れていたのでここにメモしておく。

2.2.1.  Client Protocol Sender and Server Protocol Receiver

   The client command begins an operation.  Each client command is
   prefixed with an identifier (typically a short alphanumeric string,
   e.g., A0001, A0002, etc.) called a "tag".  A different tag is
   generated by the client for each command.

   Clients MUST follow the syntax outlined in this specification
   strictly.  It is a syntax error to send a command with missing or
   extraneous spaces or arguments.

サーバからの応答内容は、"*" で始まる。telnet とかで確認するには、各コマンドは適当に a とか b とか付けておけば良いようだ。

$ telnet XXX.XXX.XXX.XXX 143
Trying XXX.XXX.XXX.XXX...
Connected to XXX.XXX.XXX.XXX (...).
Escape character is '^]'.
* OK Dovecot ready.
a login username password
a OK Logged in.
b list "" *
* LIST (\NoInferiors \UnMarked) "/" "Trash"
* LIST (\NoInferiors \UnMarked) "/" "INBOX"
b OK List completed.

何も考えないでコマンドだけうろ覚えだとこういうことになるので気をつけましょう(´ー`;)

2013-05-09 01:32:00 +0900

Fabric

http://fabfile.org/

以前から Python をちゃんと使いたいと思いながらやるやる詐欺をしていた mumumu です。こんばんは。

最近 Learning Python をちゃんと読み終え、個人的なプログラムも書き始めた。現在も Python は 2.x と 3.x が過渡期のため、make altinstall をしつつ複数のバージョンを共存させながらいろんなことを試している。

Fabric もそのひとつだ。いろんなコマンドを複数サーバ群で実行するためのデコレータとAPIが備わっている。以前から自宅の仮想マシン群で面倒臭いと思っていた Debian の アップデート作業をなんとかしたいと思っていたところに、@volantus さんが twitter で試している旨をつぶやいていたので自分もやってみることにした。

setuptools の fork である distribute から入れてること自体が初心者丸出しですね。

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py 
curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python get-pip.py 
sudo pip install fabric

fabfile.py を以下のように書く。local() はssh接続せずにコマンドを実行する。run() は ssh 接続してコマンドを実行する。そして、リモートで sudo 権限が必要なら sudo() を使う。ローカルで sudo したいときは、local() を使うしか現状無いようだ。

@hosts デコレータ で、リモートのサーバ群を指定できる。とっても簡単。

#!/usr/bin/env python

from fabric.api import *

env.password = 'XXXXXXX'

def localup():
    local('echo %s | sudo -S apt-get update && sudo apt-get upgrade' % env.password)

@hosts('host1', 'host2', 'host3')
def upgrade():
    sudo('apt-get update')
    sudo('apt-get upgrade')

上記はパスワードベタ打ちなので、自分だけの環境に置くこと。

あとは、fabfile.py があるディレクトリで、以下を実行すればよい。fabfile.py に定義した関数が、fab コマンドに引き渡すコマンド名になる。

fab localup
fab upgrade

簡単で良いのだけど、ローカルの sudo が local() でしかできないのはなんとかならんもんかね(*゜ー゜) ちょい調べてみるか。

2013-05-05 23:21:00 +0900

Debian GNU/Linux 7.0 Wheezy

http://www.debian.org/News/2013/20130504
http://www.debian.org/releases/wheezy/releasenotes

今のところ手元で運用している全仮想マシンが Debian なので、早速アップデートした。アップグレードに関する手順や注意点はリリースノートに全て纏まっていることと、Fedora とかと違って Debian のアップグレードは凄く安定しているのでそんなに手間を掛けなくても移行できる。

バックアップや細かいチェックを除けば、/etc/apt/sources.list の squeeze を wheezy に書き換えて以下を実行するのみだ。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

自分が nagios をソースから入れていたことから、insserv まわりで衝突が起きて止まったことと、 Ruby を 2.0.0-p0 にしていて sudo -u mumumu ruby .... と rc.local に書いていた部分が動かなくなったことを除けば順調に進行。 楽チンだなー。この移行の安定性が サーバに Debian を使う一番の理由だったりする。

debian upgrade complete!

2013-05-04 13:11:00 +0900

Selectors, Specificity, and the Cascade

セレクタ、詳細度、カスケード 奥付

今年のゴールデンウィークは、JavaScript と CSS の重点補強期間と勝手に位置付けている。そこに上の「セレクタ、詳細度、カスケード」が目にとまったので ebook を買って読んでみた。

内容を有り体に言えば、「CSS完全ガイド 第2版」 の 第2章と第3章 を CSS3 対応に書き直したもの、ということになる。基本的な内容、および解説に使われているサンプルの内容もそれと変わっていないと思われる。だから、 CSS完全ガイド をちゃんと読んでいる人、もしくはCSSの基礎が体に染みついている人であれば、特にセレクタの部分を セレクタレベル3 に頭の中を置き換えれば、別にこの本は必要ないのではないか、という気がする。

とはいえ、CSS完全ガイド 第2版 を持っていない人、もしくはその内容があやふやにしか頭に残っていない人であれば、この本は有用であろう。じっくり読んでも1日かからない (70ページ弱) ので、特にセレクタの内容を CSS3 にアップデートする意味でも、CSS の基礎となっている 詳細度やカスケードの意味を再確認するという意味でもとてもよいと思う。