Java開発環境の設定
自分のJava開発環境についてまとめました。もっといいツールが見つかれば更新します。
Tomcat
$ wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz $ tar xzvf apache-tomcat-6.0.33.tar.gz $ mkdir -p /usr/local/app/apache-tomcat-6.0.33 $ ln -snf /usr/local/app/apache-tomcat-6.0.33 /usr/local/app/tomcat
Eclipse
インストール
設定
- メニューの英語化
- eclipse.iniに以下の2行を追加
-Duser.language=en -Duser.country=US
- 行番号の表示
- Preferences -> General -> Editors -> TextEditors -> Show line numbers
- どこで「;」「{」「}」を押しても行末にいれてくれる
- Preferences -> Java -> Editor -> Typing -> Automatically insert at correct position -> Semicolons, Braces
- 保存時にimportを修正
- Preferences -> Java -> Editor -> Save Actions -> Organize imports
- 改行コード
- Preferences -> General -> Workspace -> New text file line delimiter
- 文字コード
- Preferences -> General -> Workspace -> Text file encoding
- 自動でリフレッシュ
- Preferences -> General -> Workspace -> Refresh On Access
YouTubeに歌詞を表示するGreasemonkeyスクリプト
を書きました。http://userscripts.org/scripts/show/116088からインストールすると、ビデオの下に歌詞が自動的に表示されます。
Fabricによるデプロイの自動化
Python製デプロイツール『Fabric』について調べました。これを使って業務を楽にするスクリプトを作成したいと思っています。
Pythonの文字列の話
エキスパートPythonプログラミング読書会19に参加して、Unicodeの話を聞いてきました。自分が理解できた範囲でメモしておきます。decode(), encode(), io.open()を使いこなせるようになれば、UnicodeErrorに困ることも減るのでは、と感じました。
文字列にはstr型 (バイト文字列) とunicode型 (ユニコード文字列) の2種類がある。
>>> type('こんにちは') <type 'str'> >>> type(u'こんにちは') <type 'unicode'>
str型の文字列は思い通りの文字列処理ができない。unicode型を使うべき。
>>> len('こんにちは') 15 >>> len(u'こんにちは') 5
str型→unicode型には、decode()を、unicode型→str型にはencode()を使う。
>>> u = 'こんにちは'.decode('utf-8') >>> type(u) <type 'unicode'> >>> s = u'こんにちは'.encode('utf-8') >>> type(s) <type 'str'>
decode()とencode()を間違えるとエラーになる。
>>> 'こんにちは'.encode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) >>> u'こんにちは'.decode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
unicode型の内部表現にはUTF-16とUTF-32がある。sys.maxunicodeが65536ならUTF-16、1114111ならUTF-32。
>>> import sys >>> sys.maxunicode 1114111
str型とunicode型の変換でデフォルトで使用されるエンコーディングはascii。
>>> import sys >>> sys.getdefaultencoding() 'ascii' >>> u = 'こんにちは'.decode() Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
デフォルトエンコーディングを変更できるが、問題の原因を見つけにくくなるのでやらない。
>>> import sys >>> reload(sys) <module 'sys' (built-in)> >>> sys.setdefaultencoding('utf-8') >>> sys.getdefaultencoding() 'utf-8' >>> u = 'こんにちは'.decode() >>> type(u) <type 'unicode'>
io.open()を使うと、unicode型で読み書きできる。
>>> f = open('foo.txt') >>> line = f.readline() >>> type(line) <type 'str'> >>> import io >>> f = io.open('foo.txt') >>> line = f.readline() >>> type(line) <type 'unicode'>
Python3では文字列がunicode型にまとめられ、文字列処理が簡単になった。しかし、まだPython3に対応していないライブラリも多い。どのライブラリが対応しているかはPython 3 Support on PyPIから確認できる。
Gow + NYAOS + ckw-mod でコマンドプロンプトをLinuxのように使う
最近はWindowsで開発することが多いのですが、Windowsのコマンドプロンプトは使いにくくてイライラします。かといって、Cygwinを入れるのも面倒だし…。そこで、Windowsで手軽にLinux風シェルを使う方法を紹介します。
- Gowをダウンロードし、実行
- ckw-mod-0.9.0-d2.zipをダウンロードし、解凍
- nyaos-3.0.0_1-win.zipをダウンロードし、解凍
- nyaos-3.0.0_1-winディレクトリをckw-mod-0.9.0-d2ディレクトリに移動
- ckw.cfgを編集
- フォントなどの追加設定
- ckw.cfg
- 「Ckw*font: MS Gothic」→「Ckw*font: Consolas」
- 「Ckw*fontSize: 12」→「Ckw*fontSize: 14」
- _nya
- 「option prompt $e[31;40;1m[$w]$_$$ $e[37;1m」→「option prompt $e[31;40;1m[$p]$_$$ $e[37;1m」
- ckw.cfg
これで、Linuxコマンドや補完の使えるシェルの完成です。ckw.exeを実行してみてください。
PyCon JP 2011 に行ってきました
自分が見たセッションの内容をまとめました。その他のセッションについては、aodagさんの資料まとめやnokunoさんの内容まとめをみてください。
Keynote
- パッケージング
- 今のパッケージングは複雑なので、新しくpysetupを作っている。Python3.3またはdistutils2で使える。詳細はPEP376。
- pysetupの特徴
- パッケージのアンインストール可能
- setup.pyに加えて、setup.cfgを書く
- データファイルの管理
- 現状
import os.path here = os.path.dirname(__file__) pic = open(os.path.jpoin(here, 'pic.jpg'))
-
-
- pysetup
-
# データファイルの場所はsetup.cfgとsysconfig.cfgに記述しておく from packageing.database import get_file pic = get_file('MyProject', 'pic,jpg')
- バージョンのつけ方
- PEP386に準拠するべき
- 1.1 < 1.2a1 < 1.2 < 1.3.dev2 < 1.3 < 1.3.2
- Python3
- Python3.0にはバグがあるから使わない。Python3.3から使いましょう。
C APIへの誘い
Asynchronous Python Programming
PyQtではじめるGUIプログラミング
- Qtの特徴
- 読み方は「キュート」
- SIGNAL/SLOTを使い、イベントを結び付けてプログラミングする
- アプリケーション作成の流れ
- 開発ツール
- Qt Assistant:ドキュメントをローカルで読める。
- Qt Designer:GUI作成ツール。上級者向け。
- 次のステップへ
- 日本語書籍はあまりない
- Qtはドキュメントが充実しているので読もう
Tuning Python Code
High Performance PythonというEuroPython 2011の資料が分かりやすい。
モニタリングツール
まずはモニタリングツールを使い、Disk I/Oなどのボトルネックを調べる。
- top
- CPUやメモリ使用量の表示
- dsat
- strace
$ strace -c python -c "print 'hello'"
プロファイラ
CPUがボトルネックだと分かった場合はプロファイラを使い、コードの中のボトルネックを調べる。PythonレベルとCレベル、両方のプロファイラに慣れておくとよい。
Pythonレベル (cProfile)
$ python -m cProfile myapp.py
Cレベル (perf)
$ perf record python myscript.py $ perf report
可視化ツール (Run Snake Run)
$ python -m cProfile -o callgrind.out myapp.py $ runsnake callgrind.out
高速化
- 正しいアルゴリズムとデータ構造を選択する
- dict, tuple, list, deque, heapq, ...
- 実行するバイトコードを減らす
- ループの代わりに組み込み関数を使う
- functools, itertools, collections, heapq, bisect,...
- 辞書の読み込みを減らす
- グローバル関数をローカル関数に移す
X = 1 def foo(): """グローバル変数Xを直接参照。遅い。""" for _ in xrange(100): X def bar(): """1度ローカル変数xに代入し、ローカル変数を参照。早い。""" x = X for _ in xrange(100): x
- 循環参照をなくす
- 不要になった循環参照を切る。
def foo(): """循環参照。GCの際に遅くなる。""" for _ in xrange(1000000): x = [] y = [x] x.append(y) def bar(): """不要になった循環参照を切る。""" for _ in xrange(1000000): x = [] y = [x] x.append(y) del x[:]
TOEICを600点から900点に上げるための英語勉強法
最近やっとTOEICで900点を超えることができました。記念に私の英語勉強方法をメモしておきます。
600点以下のとき
勉強すれば点数は上がります。どうやって勉強するか分からん!という人は『TOEICテスト900点・TOEFLテスト250点への王道』を読んでみてください。基本的な勉強方法は載っていますし、英語に対するモチベーションも上がります。
600〜800点のとき
リーディングについては、とにかく単語を覚えましょう。その際、私は『必ず覚えられるTOEFLテスト英単語3400』という単語帳を使っていました。この本では単語1つ1つにゴロ・語源・例文などがついており、記憶しやすいように工夫されています。また、「短期大量」という記憶のメカニズムに基づいた暗記方法も紹介されているため、暗記全般に役立ちます。TOEFLを対象にしていますが、TOEFLが解ければTOEICも解けるので問題ありません。
リスニングで一番おすすめの教材はESL Podcastです。日本語は一切ありませんが、簡単な単語で内容を説明してくれるので理解できます。これを会話が完全に分かるまで何度も聞いていました。また、・1回のリスニングが適度に長い・リスニングのボリュームが多い・内容が面白いという点で以下の教材も良かったです。
800〜900点のとき
英語を勉強するのではなく、英語で勉強する段階だと思います。多読・多聴してできるだけ多くの英語に触れましょう。
リーディング能力を高めるためには、英語の本を買って読んでいました。最初はつらいですが3冊目あたりからすらすら読めるようになります。本の内容はなんでもいいので、自分の興味ある本(日本語で書かれていたら読みたい本)にしてください。私が面白いと思った本を一応挙げておきます。
- 59 Seconds:どうすれば幸せになれるのか?正しいストレス対処法は?などの疑問に科学的にこたえた本。
- Presentation Zen:聴衆の記憶に残るプレゼンテーションをする方法。
リスニングは、TEDでプレゼンを見たり、超字幕で『You've Got Mail』などの映画を見たりしました。同じ動画を分かるまで何回も見て、シャドーイングするのが大事だと思います。