Hatena::ブログ(Diary)

logiqboard このページをアンテナに追加 RSSフィード Twitter

2012-02-01

macで256色terminal使いたいけどiTermが重すぎて死にたい

こたえ

iTerm2つかえよ

時は201X年...

にも関わらずmacのTerminal.appはansiカラーしか出せなかった。*1


feizは8色の世界に飽き飽きしていた。ansiカラーはやたら眩しいか暗すぎて見えないかの2択しかなくて終わっている。

特にvimシンタックスハイライトでそれをやられては仕事にもならない。desertは確かに鉄板なのだが、それでも多少目に眩しい。

256色カラースキームを使おうにもそもそもTerminalが対応していないのでどうしようもない。本当に終わっている。

救世主iTerm

そんな世紀末の荒野でiTermというターミナルエミュレータを見つけた。256色対応らしい。

しかしいざ起動してみるとあまりの弱さに愕然とする。

256色こそ触れ込み通り対応しているが、よくわからない設定、最大化ボタンを押すだけでがくがくする挙動、再描画漏れ…

そしてなにより27インチiMacで最大化してssh>tmux>vimと起動するともはや使い物にならないレベルで重い。

世紀末覇者iTerm2

救世主かと思われたiTermはジャギだった。

誰もが希望を捨てかけたその時、真の世紀末覇者iTerm2を見つけた。

iTermの派生らしいが、ジャギiTermと違ってめちゃくちゃ軽い。設定も解りやすい。

かくして

よくできた弟の活躍により世界は救われたのであった。

*1:職場のmacSnow Leopardなのだ

2011-09-15

fabfileの構造化

fabfile.pyって、task数個までならまあ1ファイルでいいんですが、それ以上増えてくるとスクリプト自体がカオスになって収集がつかなくなります。

更に似たような、けど微妙に違うtaskをいっぱい定義したりすると名前まで酷くなってきます。こんなかんじに。


@roles('lb')
def lbserver_deploy():
    """ロードバランサーにデプロイする"""
    ...

@roles('app')
def appserver_deploy():
    """アプリケーションサーバーにデプロイする"""
    ...

@roles('batch')
def batchserver_deploy():
    """バッチサーバーにデプロイする"""
    ...

こんなファイルメンテする気が起こらないので、なんとか綺麗にしたいと思って調べたところ、fabric1.1から付いたクラスベースのtaskというのを使うとよいようです。

Defining tasks — Fabric 1.2.2 documentation

つかいかた

あんまり詳しく調べてないのでベーシックな使い方を。

1. まずfabfile.pyを、モジュールからパッケージに直します

fabfile/
     ┣__init__.py

__init__.pyに元のfabfile.pyの内容をまんま移せばとりあえずこれまでどおり動きます。

2. 思うがままにモジュール化する

心ゆくまで分割してください。


fabfile/
     ┣__init__.py
     ┣lb.py
     ┣app.py
     ┣batch.py

とりあえずサーバー種別ごとに3つのモジュールに分解した と思ってください。

この段階で関数名も被りを気にしない短いモノに変えてしまいましょう。この例だと"appserver_deploy" -> "deploy"ぐらい。

3. 各task関数に@taskデコレータをかける

from fabric.decorators import task

@task
@roles('app')
def deploy():
    """アプリケーションサーバーにデプロイする"""
    ...

これはまあおまじないで。

4. __init__.pyでimportする

最後に分割した各モジュールを__init__.pyでimportします


import lb
import app
import batch

これで終わりです。fab --listコマンドで一覧をだしてみると


$ fab --list

lb.deploy     ロードバランサーにデプロイする
app.deploy    アプリケーションサーバーにデプロイする
batch.deploy  バッチサーバーにデプロイする

みたく表示されます。モジュール名がまんま名前空間になってくれてる感じですね。

もちろん

fab app.deploy

と叩けば動作します。

モジュールじゃなくてパッケージにしたら多段の名前空間が使えるのか とかは調べてないです(´・ω・)

おわり

極力こういう複雑なfabfileは書きたくないもんですが、必要なときにはこうやって構造化するのもよいかと思います。汚いよりよっぽどいいです。

他にもcontribとか面白そうなモジュールがいっぱいありそうなので、また調べて書くかも。

2011-09-10

認証と認可

OpenIDだのOAuthだのFacebookコネクトだの認証だの認可だの白だの黒だの!

たまに混同しそうになるので認証と認可についてまとめておく。

認証

英語でAuthentication -> 辞書的な意味*1

目的

アクセスしてきたユーザーが誰なのかを特定すること。

一般的な認証

認可

英語でAuthorization -> 辞書的な意味*3

目的

認証されたユーザーが、サービスのデータや機能のうちどれを利用できるのかを決めること

一般的な認可

ふつうのwebサイトにおいては、認証された時点で全ての機能が使えるようになっているが、これは認証された時点でそのユーザーに対して全ての機能の利用が認可されているとみなす。

TwitterAPIとかは、APIを利用する各サービスについて認可される内容が決まっている。ユーザーはそのサービスの利用開始前に認可される機能を確認でき、その内容によっては認可をとりやめることも出来る。


まとめ

まとめてみると大したことはないのだが、日本語しかり英語しかり、名前似すぎ。

英語での略称はAuth(Authentication)とAuhz(Authorization)というのがあるらしい。

*1動詞形のauthenticateの方が分かりやすかったのでそっちを貼ってます

*2OAuthについては認証と認可が混じっている

*3動詞形のauthorizeの方が略

2011-08-28

PyconJP2011のかんそうぶん

PyCon JP 2011

行ってきました。

プログラムひとこと感想

Webフォームウィジェットツールキットを総括する - aodag

途中から参加。種類が多く、機能も使い勝手も千差万別と中々選定が難しいが、やっぱりdeform使っとくのが一番安定しそうな気がした。

Object-oriented usage of using command line tools in Python - Hsin-Yi Chen

ucltipというライブラリの紹介。

Pythonオブジェクトシェルコマンドをラップして、

>>>apt_get = ucltip.CmdDispatcher('apt-get')
>>>apt_get.install('vim', 'emacs', y=True)

みたくかける。

シェルスクリプトなりos.system()使うなりすりゃええやん という意見ももっともだが、なれないシェルスクリプトで複雑な条件分岐ロジックをえっちらおっちら書いたりos.systemに渡すコマンド文字列文字列結合して構築したりするよりよっぽど素敵な解答じゃないかなと思った。

実際今そういう複雑なシェルスクリプトをいじるハメになっていて「ああpythonでかきてぇ」ともやもやしていたというのもある。

Tuning Python Code - INADA Naoki

チューニングのいろは。

%timeとかdstatとか知らなかったキーワードがいっぱいなのでぐぐる

内容は濃かったがデモが多くて非常に分かりやすかった。


Party

当日券で参加。

おやぶんとid:rokujyouhitomaを取り合ったり知らない人と話したりと十二分に楽しんだ。

人数多いところに立食だったので交流しやすくて非常に良かった。

あと、俺の事をブログとか経由で知ってくれてる人がいるのに驚いた。

新卒準備カレンダーに夢のない記事書いてたfeizさんですか!?」なんて話しかけられた日には苦笑いするしかない。

でも素直に嬉しい。

その他

今回はTarekはじめ海外からの参加者が居たり、English Trackがあったりしたので英会話ができないのはすごくもどかしかった。

別の記事で書こう

おわり

非常に楽しいイベントでした。運営チームのみなさま、おつかれさまでした&ありがとうございました。

次回はなにかしらお手伝いしたいな…

2011-08-04

英語弱者のためのchromeプラグイン

python界の英弱、feizです。

英語の文章を読む時に便利なchromeの辞書/翻訳プラグインを2つ紹介します。英弱必携。

英辞郎

Chrome Web Store - 英辞郎 on the WEB 拡張機能

ページ内の単語選択>右クリックメニュー>英辞郎で検索 で英辞郎 on the webの検索結果が別タブで開く

単語の意味を正確に調べるなら英辞郎が最強だと思う。

MultiLookup

Chrome Web Store - MultiLookup

初期設定としてオプションページのサイト選択の右側からgoogle翻訳(英日)を選んで右側に移してチェックを入れる。

ページ内の翻訳したい文章選択>右クリックメニュー>MultiLookup->自動判別 でページ下部にオーバーレイで原文と翻訳結果が出てくる。

オーバーレイで ってとこがかなり素敵。わかんないとこだけ大雑把に訳してざくざく読み進めるのに非常に便利。

おしまい

どちらも翻訳結果見るまでのアクションが少なくていい。こういうツールは本来やりたいことの邪魔をしないことが重要だ。