30082012 life
犬の散歩してたら蝉の幼虫を拾ったので、家の網戸に貼り付けて観察してみた。

ちょっと目を離した隙に、ニョロっと出てきた。セミのように蛹を経ずに羽化するのを不完全変態というらしい。

羽が固まるまで結構時間がかかるみたい。

朝起きたら抜け殻が残っていた。無事に飛び立っていた。

娘の模写

30082012 life
犬の散歩してたら蝉の幼虫を拾ったので、家の網戸に貼り付けて観察してみた。

ちょっと目を離した隙に、ニョロっと出てきた。セミのように蛹を経ずに羽化するのを不完全変態というらしい。

羽が固まるまで結構時間がかかるみたい。

朝起きたら抜け殻が残っていた。無事に飛び立っていた。

娘の模写

29082012 life
多数決というのは少数の反対意見を握りつぶす行為であって、合意の形成(全員の落としどころをみつける)とは違うというか、そういう皮肉はこめられているよなぁと。
子どもが読んでも面白さは伝わらないけど、大人(ちょっとすれた)が読むと面白い。
ストーリーはナマズにこぶができてて近くにザリガニのハサミが落ちてて、犯人としてザリガニが疑われたんだけど、嫌いだという心情で多数決で有罪にされたけど、ロジカルに突き詰めていくとなんかおかしいと。結局ナマズがザリガニを食べた時に抵抗して暴れた時の傷だったというオチ。
その過程が面白い。
東京都知事選の泡沫候補の政見放送がループすんね。
29082012 life
オートマトンの特集が読みたくて買ってしまった。
WEB+DB PRESSの特集は、その性格上妙に入門っぽい部分が多かったりして、思ったより満足感が得られなかったりするから最近はあまり買ってなかったんだけど。
どっちかっていうと、数ページくらいの連載とかコラムのほうが好きだったりするが、今回もそんな感じだった。
オートマトンの特集以外では
が面白かった。
29082012 work
2月くらいからredmineを使い始めて、中規模なサイトを2,3個作って、チケットの粒度とか運用サイクルとかリズム(トヨタ生産方式でいうタクトに近いかな)なんかについて色々とわかってきたので改めて読んでみた。
最初は複数人で使うつもりで啓蒙してみたりしたんだけど、予想通り難しかったので、他人にふった仕事もIssueとして全て自分で管理したら、うまくまわった。4.2節の権限ポリシーをワークフロー型に振って、他人に仕事をアサインするっていうタスクをチケットとして切ったことになるのかな。
他人への仕事のアサインを不確実性のあるタスクとして登録して、タイムアウトしたら自分に再アサインするというやり方にしたわけだけど、これで淡々とこなせるようになったし、さらにイライラしなくなって精神的にも都合が良かった。
ついでにチケットも会議と紐付けるようにしたので、会議を定期的にやれば、プロダクトの開発サイクルもそれにつられてタイミングが揃うようになったし、会議の議題とかチケットの粒度も次の会議までの期間でできそうな(3週間くらい)に揃えやすくなった。
変化を受け入れる技術、プロジェクト管理、開発環境がなければ、アジャイル開発は絵に描いた餅です
これはそうだよなとしみじみと思った。というわけで、これも読む予定
化合物の合成を1つのチケットにしてbacklogsプラグイン使えば、かなり便利に使えると思うんだけどどうかな?と思った。そのうち試してみたい。
28082012 MongoDB
最初
{$size: {$gt:1}
とやったが結果が返ってこなかったのでおかしいなぁと調べてみたらsofにあった。
$whereを使って問い合わせをするらしい。つまり、
{ $where: "this.name.length > 1" }
という形になる。とはいえ、
{$size: {$gt:1}
は直感的だと思うんだけどね。
28082012 life
以前購入したのだけど、予想通り遊ばなくなったので、僕のiPhone用のキーボードとして職場に持ち込んで使っているが便利だ。
iPhoneに認識させるのも簡単で、iPhone側のbluetoothをONにしておいて、キーボードのfnを押しながら電源を入れるだけで認識する。
28082012 chemoinformatics Python
論文読んでたら、コンベンショナルなMMPの求め方が載ってたので、似たようなやり方を考えてみた。
要するに網羅的に結合を切断していって
{Scaffold; [fragment, fragment, fragment]}
っていうハッシュを作っていく。fragmentは共通のScaffoldを持つので配列中の任意のフラグメントのペアがMMPということになる。
僕の切断ルール
CHEMBL327743の結果
('CC[C@@H]([C@H](NC(=O)[C@@H]1CCCCN1CC(=O)*)/C=C/c1ccccc1)C', 'COc1cccc(c1*)OC', 'CHEMBL327743') ('CC[C@@H]([C@H](NC(=O)[C@@H]1CCCCN1C*)/C=C/c1ccccc1)C', 'COc1cccc(c1C(=O)*)OC', 'CHEMBL327743') ('CC[C@@H]([C@@H](/C=C/c1ccccc1)N*)C', 'COc1cccc(c1C(=O)CN1CCCC[C@H]1C(=O)*)OC', 'CHEMBL327743') ('CC[C@@H]([C@H](NC(=O)*)/C=C/c1ccccc1)C', 'COc1cccc(c1C(=O)CN1CCCCC1*)OC', 'CHEMBL327743') ('CC[C@@H](C(NC(=O)[C@@H]1CCCCN1CC(=O)c1c(OC)cccc1OC)*)C', '*/C=C/c1ccccc1', 'CHEMBL327743') ('COc1cccc(c1C(=O)CN1CCCC[C@H]1C(=O)N[C@H](/C=C/c1ccccc1)*)OC', 'CC[C@H](C)*', 'CHEMBL327743') ('*c1ccccc1', '*/C=C\\[C@H]([C@H](CC)C)NC(=O)[C@@H]1CCCCN1CC(=O)c1c(OC)cccc1OC', 'CHEMBL327743') ('*OC', 'CC[C@@H]([C@H](NC(=O)[C@@H]1CCCCN1CC(=O)c1c(*)cccc1OC)/C=C/c1ccccc1)C', 'CHEMBL327743') ('*OC', 'CC[C@@H]([C@H](NC(=O)[C@@H]1CCCCN1CC(=O)c1c(*)cccc1OC)/C=C/c1ccccc1)C', 'CHEMBL327743') ('*CC', 'COc1cccc(c1C(=O)CN1CCCC[C@H]1C(=O)N[C@@H](C(C)*)/C=C/c1ccccc1)OC', 'CHEMBL327743') ('CC[C@@H]([C@H](NC(=O)[C@@H]1CCCCN1CC(=O)c1c(OC)cccc1OC)/C=C/c1ccccc1)*', 'C*', 'CHEMBL327743') ('*C[C@@H]([C@H](NC(=O)[C@@H]1CCCCN1CC(=O)c1c(OC)cccc1OC)/C=C/c1ccccc1)C', 'C*', 'CHEMBL327743')
どこで切断されたかどうかを明確にするために切断されたボンドにダミーアトム(atomicnumが0のアトム)をおいた。
canonicalSMILESで出力して.の文字でsplitした文字列をそのままキーに使っているが、openbabelのcanonicalizationアルゴリズムはMorgan Algorithmを改変したものを使っているのでおそらく大丈夫。
下のコードでは標準出力に書きだしたが、実際はデータベース化することになる。多分Mongo使う。
smi_string,id = clone.write(format="can")[:-1].split('\t') frag1, frag2 = smi_string.split('.') dbh.mmp.update({"core": frag1}, {"$push": {"frags": (frag2, id)}}, True) dbh.mmp.update({"core": frag2}, {"$push": {"frags": (frag1, id)}}, True)
こんな感じだろうか。
以下MMPを求めるのに使ったコード
import pybel import openbabel import sys input = sys.argv[1] def mkclone(mol): obc = openbabel.OBConversion() obc.SetInAndOutFormats("mol", "mol") molstring = obc.WriteString(mol) new_mol = openbabel.OBMol() obc.ReadString(new_mol, molstring) return new_mol def ring_member(rings, atom): for i, ring in enumerate(rings): if ring.IsMember(atom): return i return -1 def is_same_ring_member(rings, a1, a2): a1_idx = ring_member(rings, a1) a2_idx = ring_member(rings, a2) if a1_idx == -1 or a2_idx == -1: return False return a1_idx == a2_idx def detect_del_bonds(mol): rings = mol.OBMol.GetSSSR() del_bonds = [] for a in mol: if a.atomicnum == 6: for na in mol: n_a = na.OBAtom b = a.OBAtom.GetBond(n_a) if b != None and b.GetBondOrder() == 1 and not is_same_ring_member(rings, a.OBAtom, n_a): if a.OBAtom.GetIndex() < n_a.GetIndex(): del_bonds.append((a.OBAtom.GetIndex(), n_a.GetIndex())) return del_bonds for mol in pybel.readfile("sdf", input): chembl_id = mol.data["CHEMBL ID"] print chembl_id del_bonds = detect_del_bonds(mol) for a1, a2 in del_bonds: clone = pybel.Molecule(mkclone(mol.OBMol)) # !!! index starts 0 but GetAtom starts 1 !!! ob_a1 = clone.OBMol.GetAtom(a1 + 1) ob_a2 = clone.OBMol.GetAtom(a2 + 1) bond = ob_a1.GetBond(ob_a2) clone.OBMol.DeleteBond(bond) new_atom1 = clone.OBMol.NewAtom() new_atom1.SetAtomicNum(0) new_bond1 = clone.OBMol.NewBond() new_bond1.SetBegin(ob_a1) new_bond1.SetEnd(new_atom1) new_bond1.SetBondOrder(1) new_atom2 = clone.OBMol.NewAtom() new_atom2.SetAtomicNum(0) new_bond2 = clone.OBMol.NewBond() new_bond2.SetBegin(ob_a2) new_bond2.SetEnd(new_atom2) new_bond2.SetBondOrder(1) smi_string, id = clone.write(format="can")[:-1].split('\t') frag1, frag2 = smi_string.split('.') #print (frag1, chembl_id) #print (frag2, chembl_id) print (frag1, frag2, chembl_id)
27082012 life
最後のほうは生産方式のボトルネックを潰す話になってて面白い
渋滞の種類
自然渋滞をなくすには、
その他
27082012 life
本書は2007年に出版されているが、最近の学校絡みの事象はその当時に指摘されまくっていて改善なんかこれっぽっちもされてないのがわかる。
親、子ども不在の不毛な議論はもうごめんだ「よい先生」のいる「よい学校」に学びたい。こんな簡単な望みがどうして叶わないのか。学習者の立場から教師、校長、教委の「しがらみ共同体」にメスを入れる。
というような、教師が如何に駄目かを語る本だった。
個人的には教育バウチャーは賛成かな。弊害があるとしても、今より悪くなるってことはないだろうし、そのうえで揺り戻しがあってもいいのかなーと。教師は聖職者じゃなくて労働者だという認識を持ったほうがいいでしょう。
公立学校はお客が増えようが減ろうが、あるいはまったくこなくても統廃合すればいいし、校長、教員は転勤すれば済む
僕は分校みたいな小さな小学校を出たのだけど、そういう学校にはちょっと頭のおかしい教師が送られてくるんだよね。お盆に実家に帰った時もばぁば(つまり母)がその当時の話を語ってたけど、自分の記憶とほとんどズレてなかった。「お前の学年は1,2年生の時はマトモな授業してなかったんだよねー」とか語りだして、「もうちょっと問題にしとけよ」と思った。まぁ、田舎の学校はPTAの癒着もすごいからねー。
で、多分小学校一年のときは担任が三人くらい変わっていて、そのうちの二人(一人は確実)は精神病院に入った気がする。二年の時も一回代わってたかなぁ。まぁそんな感じでw
結構色々、覚えてるんだけど幾つか。
二年の時のおかしい男性教師は、あるひ女子生徒がいたずらでおとなしい男子生徒の椅子を休み時間中に隠しちゃって、授業が始まっても椅子が見つからず困っているその生徒に対していきなりブチ切れて、すげー勢いでぶん殴られ突き飛ばされて、まぁ当たり前に鼻血はでてまわりの机もドンガラガッシャンで。その後少し経ったら消えたんだけどw。なんだったんだろあれ?とか書いてたら思い出したけど臨時教師だったかもしれん。
一年生の時のも覚えていて、更年期障害みたいなばあさん先生が、下校中に奇声を発しながらいきなり追いかけてきて、同じ下校グループの女の子を道路から1メートルくらい下にある田んぼに着き落としてた。
たしかその女教師はすぐに消えたはず。
あーいうの経験してるから、教師は選べるようにして欲しいなぁと思うし、選べないなら何かあった時のペナルティを厳しくして欲しいなぁと思うんだけどね。
学校はムラ社会
夏休みの最後のイベントとして、ふもとっぱらにいってきた。去年はこどもの国に泊まったけど、今回はこどもの国とちがって犬連れオッケーなので、犬同伴で。

だだっ広い原っぱの好きなところにテントを張れる。途中によった青木養鶏場の焼き鳥を焼きながら、夕食の準備。

夜は、八月の終りでもかなり冷えるのでフリースか、それなりの寝袋は必須。震災時のことも考えていいやつを買っておくとよい。子供もどうせ大きくなるので大人用を買っておくのがコスパがいいらしい。
朝起きて、椅子に座りながらtwitter+日の出待ち。

日が出たので撮った。

カモが隊列を組んで池に向かって歩いていったので、息子と娘が最後尾からついていった。

帰りにミルクランドでジェラートを食べて終了。
