「電子書籍と出版」を読んだ

手にとったら面白そうだったので読んでみたら、かなり面白かった。リストラなう日記読んでたからってのもあるかも。

最初の対談形式の章と、次の「弾言」と「決弾」の編集者の対談の章が特に面白かった。 最後のXMLとかEPUBの話はさらっと流しすぎだった。

ProductName 電子書籍と出版─デジタル/ネットワーク化するメディア
高島 利行,仲俣 暁生,橋本 大也,山路 達也,植村 八潮,星野 渉,深沢 英次,沢辺 均
ポット出版 / ¥ 1,680 ()
在庫あり。

  • コンテンツが読者に最終的に紙で届くか、デジタルで届くかはあまり大した問題ではない
  • ロングテール理論のポイントはヘッドをどう押さえるか
  • ITにより印刷をはるかに凌駕した複製速度、流通速度を持った仕組みが、普通の人の手に入ったのだと考えれば、印刷技術の登場よりも遥かにすごい文化形成力があるのは当然
  • 今の教科書のシステムは学校教育の一斉授業の中で、かなり鍛えられているから、そのままでは電子にはならない
  • 電子ジャーナル好きの研究者はディスプレイで読むのが好きなのではなくて、いつでもどこでも検索できるのが好き
  • 新聞の部数がそれほど減ってないのは宅配制度という、断るための努力をしないといけない制度があるから
  • 日本での電子書籍販売は日本の出版社側がそういう体制を整えてないので、amazonでの電子書籍販売はもう少し先ではないか?

ちなみにSphinxってEPUBに対応しているのね。あと、今書いてる原稿が最終的にwordで提出らしくてどうしようかなと調べてみたら、rst -> odt -> docでOKらしいのでSphinx使うことに決めた。

ポケットモンスター ホワイトとブラック

DSを息子に破壊されて以来、あまりDSで盛り上がることがないのだけど、ポケモン欲しいという部分で娘と欲求の一致をみた。

ProductName ポケットモンスター ホワイト

任天堂 / ¥ 4,800 (2010-09-18)
近日発売 予約可

ProductName ポケットモンスター ブラック

任天堂 / ¥ 4,800 (2010-09-18)


でもホワイトかブラックで意見が割れた。

今日の畑(100803)

おくらの花が咲いていた。

1280919607 1280919613

最初の収穫は納豆とイカと一緒に和えて酒の肴にするんだ。

ProductName おつまみ横丁―すぐにおいしい酒の肴185
編集工房桃庵
池田書店 / ¥ 1,050 ()
在庫あり。

今日の畑(100807)と千代むすび純米吟醸古酒

夕方、秋に向け畑を耕しつつ、隣で畑仕事していたおじいさんに植え付けに関して色々教えてもらった。去年の失態に関して突っ込まれたし、今年のミニトマトの富豪的収穫に関しても言及されたし、結構みんな他人の畑を見ているのね(僕も色々参考にさせてもらっている)と思った。

あと、あまり作付け計画立てないでいきあたりばったりで作っていることに笑われた。大まかには決めておいたほうがやっぱり、気持ち的に良いらしい。

1281180215

  • 秋植えのジャガイモはここらへんはうまくいかない。春植えに限る
  • 葉物は寒冷紗で虫を防げ
  • 白菜、小松菜で硬くなり過ぎたらそのまま放っておいて花を収穫しろ
  • ニンニクは青森という品種は土地に合わない。平戸とかそんなのをつかえ
  • ゴーヤの支柱はやっぱ高くしておかないと
  • 玉ねぎは効率が、、、広く使わないと
  • 人参、カブは難しい

ミョウガとオクラ。ミョウガもそろそろなんか出て欲しい。

1281180217 1281180221

オクラは初収穫。

1281180212

イカと納豆とオクラを叩いて合わせてた。満足の出来。

1281180219

酒は千代むすび純米吟醸古酒。美味い。

1281180299

Flask+jQuery UIでAutocomplete

Flaskはjsonで返すメソッドがあるのでjQueryとの親和性は高そうな感じ。Autocomplete(suggest機能)が欲しかったので色々調べた結果、jQuery UIのがよさそうだったのでこれで。

GoogleのAJAX Libraries APIを使えばローカルにライブラリ置いておかなくてもよいので楽ちん。タグのリストはあえてJSONで取得するようなサンプルにしてみた。ちなみに実際に作っているモノはSQLiteでデータベースからselectした結果を返すようにしている。

下のコードだけで動く。

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/")
def hello():
    response = """<html><head>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.3/themes/base/jquery-ui.css" type="text/css" media="all" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.3/jquery-ui.min.js" type="text/javascript"></script>         
<script type="text/javascript">
$(function() {$.getJSON("/tags", function(json){$("#tags").autocomplete({ source: json.tags});});});
</script></head>
<body><div class="demo"><div class="ui-widget"><label for="tags">Tags: </label><input id="tags"></div></div></body></html>
"""
    return response

@app.route("/tags")
def show_tags():
    tags = ["ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL",
            "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", 
            "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"];
    return jsonify(tags = tags)

if __name__ == "__main__":
    app.run()

実際に動かしてみたらタグを複数選択することが出来なくて、自分の欲しいものとはちょっと違うので、AutoSuggest使うかも。

あとautocompleteはリストじゃなくてURLを指定することもできるんだけど、Flask側でJSONのリストだけを返す方法がわからなくて困った。必ずハッシュで返ってきちゃうのかな?

化合物の類似性ネットワークのために閾値とedgeの数をプロットする。

昨日の化合物の類似性ネットワークのやつは何がメリットなのかなぁと考えてみたけど、一つにはedgeの数を自由に決められるあたりなんじゃないかと。あんまり低い閾値だとなんでもかんでもつながって何見てるかわからんし、逆に厳しい閾値にしちゃうとシングルトンばかりになっちゃうし。

というわけで、プロット欠かせてそれ見て閾値決める必要はあるんだろうなと。最終的にはeddgesの数とか、ノードあたりに生えているedgeの数の平均とかを統計的に処理して自動で閾値を決めるのが楽なんだろうけど、、、(一般的な方法あるのかな?)。X-meansに倣って、BICとかAIC使ってみようかなぁ。

で、プロット描いた。最初に書いたコードがナイーブすぎて遅くていらっときたので書き直した。まだかなり遅いけど、耐えられるのでこれでよしとした。

import pybel

mols = list(pybel.readfile("sdf", "pc_sample.sdf"))
fps = [x.calcfp() for x in mols] 

similarity_matrix = []
for i in range(len(fps)):
    for j in range(i+1,len(fps)):
        similarity = fps[i] | fps[j]
        similarity_matrix.append(similarity)

threshold = 0.0
print "threshold\tnodes"
while threshold < 100:
    t = threshold / 100.0
    new_matrix = [e for e in similarity_matrix if e > t]
    nodes = len(new_matrix)
    print "%2.1f\t%d" % (threshold, nodes)

    similarity_matrix = new_matrix
    threshold += 0.1

あとはRで

library(ggplot2)
nodes <- read.table("xxxx",header=T)
qplot(threshold,edgess, data=nodes, log="y")
dev.copy(device=png,filename="xxxxxx")
dev.off()

nuedges

node数が1158なのでedgeの数が10000から100あたりの間でちょうどいい閾値を探したいんだけど、これだけじゃわからん。やっぱシングルトンの数とかノードあたりに生えているエッジ数の平均とか数えないとだめかな。

化合物の類似性でネットワークを構築してCytoscapeで見てみる

chemoinformaticsでもネットワークアナリシスは重要だと思う。今はマイナーだけど今後精力的に研究されんじゃないかなぁと。

cytoscape

pybel使うとシミラリティベースのネットワークは簡単に作れる。

import pybel

mols = list(pybel.readfile("sdf", "pc_sample.sdf"))
fps = [x.calcfp() for x in mols] 

for i in range(len(fps)):
    ids = []
    for j in range(i,len(fps)): 
        if (fps[i] | fps[j]) > 0.5 and i != j: 
            ids.append(mols[j].title)
    print "%s %s %s" % (mols[i].title, "sim", " ".join(ids))

SIF(simple interaction format)形式なので、拡張子sifでcytoscapeに読み込まさせればOK。

あとでケモインフォクックブックにも載せておこう。

Metamorphose 2010 Official compilation METAMORPHOSE2010

metamoが近づいてきた。

ProductName Metamorphose 2010 Official compilation METAMORPHOSE2010
オムニバス
ウルトラ・ヴァイヴ / ¥ 2,400 (2010-08-04)
通常9~10日以内に発送

そわそわしてきた。

「白波トップウォーター」の良さに気づいた

ネイティブダンサーに勝るものなし。とか思っていたんだけど、聴くと馴染む曲が結構あるっぽい。

白波トップウォーターもその中の一つ

ProductName GO TO THE FUTURE
サカナクション
ビクターエンタテインメント / ¥ 1,500 (2007-05-09)
在庫あり。

Pythonで演算子のオーバーライド

openbabelのPythonのとこ見てたらFingerprintsのとこで

>>> print fps[0] | fps[1] # Print the Tanimoto coefficient
0.3333

タニモト距離を求めるように、メソッドオーバーライドしてんのかと。コードを眺めた。

class Fingerprint(object):
    def __init__(self, fingerprint):
        self.fp = fingerprint
    def __or__(self, other):
        return ob.OBFingerprint.Tanimoto(self.fp, other.fp)
    @property 
    def bits(self):
            return _findbits(self.fp, ob.OBFingerprint.Getbitsperint())
    def __str__(self):
        return ", ".join([str(x) for x in self.fp])

参考

ProductName Python クックブック 第2版
Alex Martelli,Anna Martelli Ravenscroft,David Ascher
オライリー・ジャパン / ¥ 4,410 ()
在庫あり。