Electrospective / Vector Lovers

somaの中ではAlex Smokeと並んで最も好きなアーティストの一人であるVector Loversのベストトラック+新曲

3,4,6,9,10,11と名曲揃い。

ProductName Electrospective
Vector Lovers
Soma / 1990円 ( 2011-03-30 )


チルっぽい遅めのテクノというかエレクトロニカというか、とにかく柔らかい感じのメロディーが好きならオススメです。

未読のPython標準モジュール

最近朝早く起きて読みまくっているので、結構減った

標準モジュール読むと、コードのお作法とか勉強になるし、あーこうなってんのか!という気付きが何度もあって階段登ってるという実感があって楽しい。

ProductName 初めてのPython 第3版
Mark Lutz
オライリージャパン / 4830円 ( 2009-02-26 )


  • bdb.py
  • cProfile.py
  • code.py
  • difflib.py
  • doctest.py
  • gettext.py
  • htmllib.py
  • httplib.py
  • modulefinder.py
  • optparse.py
  • pdb.py
  • pipes.py
  • profile.py
  • pstats.py
  • pydoc.py
  • random.py
  • re.py
  • repr.py
  • shutil.py
  • socket.py
  • subprocess.py
  • threading.py
  • token.py
  • tokenize.py
  • unittest.py
  • urllib.py
  • urllib2.py
  • xmllib.py
  • xmlrpclib.py

cPythonのソースコードも読むと楽しいのかな?

Pythonのsiteモジュールはサイト固有のパスをモジュール検索パスに追加するわけだが

addpackage関数を読んでいたら

for line in f:
    if line.startswith("#"):
        continue
    if line.startswith(("import ", "import\t")):
        exec line
        continue
    line = line.rstrip()
    dir, dircase = makepath(sitedir, line)
    if not dircase in known_paths and os.path.exists(dir):
        sys.path.append(dir)
        known_paths.add(dircase)

最初のifはコメント対応で次はpthでimportではじまる場合にはimportするってことだ。最後は行のパスがまだモジュール検索パスに含まれていなかったら追加するようになっている。

またmain関数は設定が出力されるようになっている。

$ python /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site.py
sys.path = [
    '/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6',
    ...
    '/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC',
    '/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/wx-2.8-mac-unicode',
]
USER_BASE: '/Users/kzfm/.local' (exists)
USER_SITE: '/Users/kzfm/.local/lib/python2.6/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

あれ、USER_SITEってことはローカルにライブラリインストールして使えるってことか?

easy_installのヘルプを見たら--userオプション入れればローカルにインストールすることが出来るって書いてあった。いつもvirtualenv使っているから知らなかった。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


デザインの骨格はドラッグデザイナーも読むべし的な超良書です

僕はドラッグデザインにはアートの要素が沢山含まれていて楽しい仕事だと思っているし、工業デザインの範疇に入ると考えている。

例えば

  • 技術者は常に性能向上を目指します。しかし新しい価値は、性能のいかんにかかわらず、はじめからその技術自体に遺伝子のように組み込まれているように思います

これは、スキャフォールドのポテンシャルは決まっていて、リードオプティマイゼーションってのはスキャフォールドをできるだけ磨いて薬剤としての美しさを引き出す行為とも捉えることができるし

  • 形を描こうとしてはいけない。構造を描くことによって自然に形が生まれる
  • 絵を描くことは、ものの輪郭を描くことではない。重要なのは向こう側にあって見えてないものや、中心軸のような仮想の線を描く事。そうやって立体や空間の構造を把握したときに迷いなく輪郭を決定することができる

これはファーマコフォアをきちんと認識することの重要性ともろかぶりする

ドラッグデザインを工業デザインとして捉えるヒトはあんまり知らないけど、ケミストやケモインフォマティストが本書を読めば新たな視点が開けると思う

ProductName デザインの骨格
山中俊治
日経BP社 / 1680円 ( 2011-01-29 )


  • 技術者は常に性能向上を目指します。しかし新しい価値は、性能のいかんにかかわらず、はじめからその技術自体に遺伝子のように組み込まれているように思います
  • 生物らしい形の典型は、螺旋と節
  • 携帯電話機の一番重要な機能は「私であることの証明」なんじゃないか
  • 形を描こうとしてはいけない。構造を描くことによって自然に形が生まれる
  • 絵を描くことは、ものの輪郭を描くことではない。重要なのは向こう側にあって見えてないものや、中心軸のような仮想の線を描く事。そうやって立体や空間の構造を把握したときに迷いなく輪郭を決定することができる
  • インボリュート曲線
  • 図面というのは、設計者と製作者をつなぐ言葉のような物

pycとは一体何なのか?

pycはバイトコードのキャッシュファイルなんだが、実際に中身がどうなっているかはpy_compile.pyのソースコードを読んで理解した。

with open(cfile, 'wb') as fc:
    fc.write('\0\0\0\0')
    wr_long(fc, timestamp)
    marshal.dump(codeobject, fc)
    fc.flush()
    fc.seek(0, 0)
    fc.write(MAGIC)

ここで、codeobjectは

codeobject = __builtin__.compile(codestring, dfile or file,'exec')

でコンパイルしたコードでMAGICはimp.get_magic()で得られたマジックナンバー、wr_longはリトルエンディアンで32bitの整数値を書きこむ関数(py_compileで定義されてる)

つまり、先頭の4バイトがマジックナンバーで次の4バイトにタイムスタンプが続き、その後にmarshalでダンプされたコードオブジェクトが続いたものがpycファイルということだ

実際にpy_compile.pycで確かめてみる。まずマジックナンバーは

>>> import imp
>>> imp.get_magic()
'\x03\xf3\r\n'

タイムスタンプ

>>> l = long(os.stat('py_compile.py').st_mtime)
>>> hex(l & 0xff)
'0xbbL'
>>> hex((l >>8) & 0xff)
'0x8L'
>>> hex((l >>16) & 0xff)
'0x8fL'
>>> hex((l >>24) & 0xff)
'0x4dL'

pycをbviで開いて確かめてみる

00000000  03 F3 0D 0A BB 08 8F 4D 63 00 00 00 00 00 00 00 00

確かに先頭からマジックナンバー、タイムスタンプの順に入っていることがわかる。

ところで、なぜ最初に'\0\0\0\0'を入れてからfseekで先頭に戻ってきて改めてマジックナンバーを書き出しているんだろうか?

「Webデザインのためのデジカメ基礎講座」を読んだ

僕がよく撮るような「料理」とか「日本酒」は天逆光で撮れと。

ProductName Webデザインのためのデジカメ基礎講座
内田 広由紀
視覚デザイン研究所 / ?円 ( 2002-08 )


週末は久しぶりにピザを作った

娘がピザを作りたいと言い出したのでピザ作り。強力粉400gから直径18cmの生地が8枚くらい出来る分量なので薄い生地ですな。後ろに見えるのは食べるラー油。ピザにかけてみようかと買ってみた。トマトソースもめんどくさかったので市販のミートソースで代用した。

1301211751 1301211748

強力粉は子供には捏ねることができないので混ぜるとこだけやらせたが、捏ねたいと言って聞かなかったので飽きるまで捏ねさせてみた。ちなみに台は蕎麦打ち用のやつだったりする。

1301211755

休ませて8等分して、麺棒でゴロゴロやって延ばす。手でちまちまやるのはめんどくさいし強力粉はなかなか延びない。

1301211750

生地が出来たら色々載せてオーブンで焼く

1301211746 1301211753

勝沼醸造のワインをあわせた

1301211744

Pythonでまだ読んでない標準モジュールのリスト

wikiで必要なデータってこれぐらいしかなかった。

まだ読んでないPython標準モジュール

  • BaseHTTPServer.py
  • Bastion.py
  • CGIHTTPServer.py
  • Cookie.py
  • DocXMLRPCServer.py
  • SimpleHTTPServer.py
  • SimpleXMLRPCServer.py
  • SocketServer.py
  • _strptime.py
  • _threading_local.py
  • aifc.py
  • asynchat.py
  • asyncore.py
  • atexit.py
  • audiodev.py
  • bdb.py
  • cProfile.py
  • calendar.py
  • cgi.py
  • cgitb.py
  • chunk.py
  • cmd.py
  • code.py
  • codecs.py
  • codeop.py
  • cookielib.py
  • copy.py
  • copy_reg.py
  • csv.py
  • decimal.py
  • difflib.py
  • dircache.py
  • doctest.py
  • dumbdbm.py
  • dummy_thread.py
  • filecmp.py
  • fileinput.py
  • formatter.py
  • fpformat.py
  • gettext.py
  • gopherlib.py
  • gzip.py
  • hashlib.py
  • heapq.py
  • hmac.py
  • htmlentitydefs.py
  • htmllib.py
  • httplib.py
  • ihooks.py
  • imaplib.py
  • imputil.py
  • locale.py
  • macpath.py
  • mailbox.py
  • mailcap.py
  • mhlib.py
  • mimetools.py
  • mimetypes.py
  • mimify.py
  • modulefinder.py
  • multifile.py
  • nntplib.py
  • optparse.py
  • os.py
  • os2emxpath.py
  • pdb.py
  • pickle.py
  • pickletools.py
  • pipes.py
  • pkgutil.py
  • platform.py
  • popen2.py
  • poplib.py
  • posixfile.py
  • posixpath.py
  • pprint.py
  • profile.py
  • pstats.py
  • pty.py
  • py_compile.py
  • pyclbr.py
  • pydoc.py
  • quopri.py
  • random.py
  • re.py
  • repr.py
  • rexec.py
  • rlcompleter.py
  • runpy.py
  • sched.py
  • sha.py
  • shelve.py
  • shutil.py
  • site.py
  • smtpd.py
  • smtplib.py
  • sndhdr.py
  • socket.py
  • string.py
  • stringold.py
  • stringprep.py
  • subprocess.py
  • symtable.py
  • tabnanny.py
  • tarfile.py
  • textwrap.py
  • threading.py
  • timeit.py
  • toaiff.py
  • token.py
  • tokenize.py
  • trace.py
  • traceback.py
  • unittest.py
  • urllib.py
  • urllib2.py
  • uuid.py
  • warnings.py
  • wave.py
  • xdrlib.py
  • xmllib.py
  • xmlrpclib.py

実用SSH

今週からさくらのVPSを使い始めた。

sshをきちんと使えなきゃなということで数年前に買って積んでいたこの本をじっくり読んだら、大変勉強になったというかちゃんと読んでよかった。

7章のクライアント使用法 応用編が役に立った。

特にscpは非常に便利で使い方覚えたらこればっか使うようになってしまい、Cyberduck立ち上げなくなった。

ProductName 実用SSH 第2版―セキュアシェル徹底活用ガイド
Daniel J. Barrett
オライリー・ジャパン / 5040円 ( 2006-11-22 )


  • OpenSSHでパスフレーズの変更は-pオプション
  • SFTPとFTPはプロトコル上の互換性はない
  • OpenSSHでは-Tオプションでptyを割り当てない
  • <ESC> .でSSHセッションの終了
  • scpでディレクトリの再帰的コピーは-rオプション
  • sshでトラブったら-vで冗長モードにする
  • scpのポート指定オプションは-P
  • scpの-Cでデータ圧縮して転送

Python の可変引数は関数定義だけじゃなくて実行の際にも使える

defするときに*とか**といった可変引数を取れるのはおなじみ

>>> add = lambda x,y: x+y
>>> l = [1,2]
>>> add(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 arguments (1 given)

このキーワードは関数実行の際にも使えることを今日知った

>>> add(*l)
3

知ってしまえば自然に感じるが、なぜそういう思考に至らなかったのだろうか?