drkcore

2012/02/04 06:25:13

Traktor Pro2のnml形式のプレイリストをPythonで処理する

TraktorからExportされる.nmlファイルはXMLなのでElementTreeを使えばいい。

from xml.etree.ElementTree import *
elem = parse("liquid.nml").getroot()

for e in elem.findall(".//ENTRY"):
    if e.get("TITLE") is not None:
        print "    %s / %s" % (e.get("TITLE"),e.get("ARTIST"))

/Users/####/Documents/Native Instruments/Traktor 2.X.Xの履歴ファイルを変換すればプレイリストが出力される。

Traktor LEには履歴を保存する機能はなかったので、それだけでもアップグレードする価値は十分にある。

ProductName Native Instruments TRAKTOR PRO 2

Native Instruments / 22340円 ( )


2012/02/02 20:12:10

Pythonで Google Tasks API を使う

Todo管理にはGoogle Tasksを使っている。家でも職場でもタスクを追加できて一元管理できるので便利なんだけど CUIでもできたらもっと便利だろうとAPIを触ってみている。

家では普通にDeveloper's Guideの通りに動くんだが、職場のプロキシが超えられないので調べてみたらoauth2client.toolsのrunがダメらしい。

さらに追っかけてみるとflow.step2_exchange(code)のところの第二引数にproxyを設定したhttpを渡さないからこけていた。

run関数使わなければいいじゃんってことで書きなおした。ついでにFLAGも必要なくなった。

import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow, FlowExchangeError

FLOW = OAuth2WebServerFlow(
  client_id='####',
  client_secret='####',
  scope='https://www.googleapis.com/auth/tasks',
  user_agent='gtask-client/1.0')

storage = Storage('tasks.dat')
credentials = storage.get()
if credentials is None or credentials.invalid == True:
  authorize_url = FLOW.step1_get_authorize_url('oob')
  print 'Go to the following link in your browser:'
  print
  print '    ' + authorize_url
  print
  code = None
  code = raw_input('Enter verification code: ').strip()
  try:
    http = httplib2.Http(proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '####', 8080))
    credential = FLOW.step2_exchange(code, http)
  except FlowExchangeError, e:
    sys.exit('Authentication has failed: %s' % e)
  storage.put(credential)
  credential.set_store(storage)  
  credentials = credential

http = httplib2.Http(proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '####', 8080))
http = credentials.authorize(http)

service = build(serviceName='tasks', version='v1', http=http,
                developerKey='####')

tasklists = service.tasklists().list().execute()

for tasklist in tasklists['items']:
  print tasklist['title']

2012/02/01 19:14:00

Pythonで正負のfloat numberを揃えるフォーマット

Pythonに限らないと思うんだが、%のうしろにスペース入れると正の数の場合にはスペースが挿入される

print "%-2d %-3s % 4.3f" % (a.GetIdx(), a.GetType(), a.GetPartialCharge())

pygamessの結果を整形したかったのです。

1  C3  -0.015
2  Nam -0.305
3  C3   0.006
4  C2   0.287
5  O3  -0.250

忘れるとなかなか思い出さないのでメモ

2012/01/28 09:10:47

openbabel-2.3.1が出てますね。

2.3.1がリリースされたようです。

個人的に興味があるのは

  • PNG files from Open Babel contain molecular information and can be read to give the MDL Molfile.
  • Pybel now uses the built-in 2D depiction, and no longer needs OASA.

とABINITのフォーマットに対応したあたりかな。

あと、openbabel-python.iをいじってたので、ここをいじった場合のコンパイルのオプションをメモっておく。swigが有効になるようにしないといけないのに気付かなくてハマった。

cmake ../openbabel-2.3.1 -DPYTHON_BINDINGS=ON -DEIGEN2_INCLUDE_DIR=/usr/local/tmp/eigen-eigen-2.0.12 -DRUN_SWIG=ON

OBGenericからOBOrbitalDataへのキャストをできるようにして、vectorの設定もしたので、手元のpythonバインディングでは

orb = toOrbitalData(mol.GetData(openbabel.ElectronicData))
orb.GetAlphaOrbitals()[orb.GetAlphaHOMO()-1].GetEnergy()

とやるとHOMOのエネルギー(eV)を得られるようになっている。

追記12.01.28

homebrewでいれたpythonで使いたい場合optionで指示する

$ cmake ../openbabel-2.3.1 -DPYTHON_BINDINGS=ON \
  -DPYTHON_LIBRARY=/usr/local/lib/libpython2.7.dylib -DPYTHON_EXECUTABLE=/usr/local/bin/python \
  -DEIGEN2_INCLUDE_DIR=/Users/kzfm/openbabel/eigen-eigen-2.0.17 -DRUN_SWIG=ON

2012/01/06 06:00:46

moin2の16の特徴の中から気になったもの

MoinMoin 2.0のビッグニュースに16個あげられていたんだが気になったものを

Sphinx-based docs

Sphinxベースのドキュメントになって読みやすい。でもmake pdflatexはこけた

Storage Layers: stores, backends, middlewares

ストレージにファイルだけではなくsqlalchemyで使えるRDBやKyoto Cabinetなんかも使える。

Tree based transformations

これに惹かれた

input -> converter -> DOM tree -> converter -> output

という変換経路をたどるのでフォーマットの変換ができる。つまりwikiのコンテンツを好きなフォーマットで取り出せるので、特にReSTで取り出してSphinxにもっていけるようになるのでデータの再利用がしやすそう。

GUI editor update and different approach

ckeditorが使える。WYSIWYGはイントラのサービスでは必須。

Themeing with Jinja2 templating engine

Flask-Themesを使っているので、自分用のテーマを作ってみる予定

Packaging

virtualenvのおかげで、環境を汚さずすむので便利。あとquickinstallスクリプトがインストールの面倒をほぼすべて見てくれるので超楽チン

2012/01/04 21:29:48

moin2はFlaskベース

コミュニティーベースのコラボレーションツールを探している。

個人的にはSphinxのWeb Supportがいいんじゃないかと思っているんだが、うちのITリテラシーを考えるとちょっと無理すぎるかなぁと断念した。

論文が電子化されているけどpdfは単なる紙の模倣でつまんないがHTML化されてパラグラフ単位とかfigure単位でコメントしたり編集できたりすれば、レビューも作りやすいし、実験はいいけど解釈はクズみたいなトータルでの判断に悩むような論文も切り取れるし、レターみたいな内容が薄いんだか知識を入れ込めなかったんだか分からないような中途半端な文章も好き勝手に補足できる。つまり真のマッシュアップが待っているわけです。

単語に分解して相関を取るとかそういうのとは逆方向に、文脈をつなぎあわせてより抽象とか本質を目指すようなことがやりやすくなるわけですな。正直論文の最後に載っているリファレンスは、島根の場所が知りたいのに日本のあたりを指してるわけで残念な仕組みだよなと思ってるのでもう少し、位置情報を高精度化すれば面白いのにとずっと思っているんだけどなかなかそうはならないのはみんな著者のストーリーを読むのが好きなのかね?他人事なのでどうでもいいけど。

で、音でいうところのサンプリングというか、パラグラフ単位でコメントを入れられる仕組みっていうのは未来があると思っている、RWHで未来を見たというかちょっと感動した。まぁ、そういうのをイントラに構築できたら良かったんだけど現状は難しそうだ(ヨーヨーヨー)。

かといってwikiはなぁ、、、Sphinxっぽく文書出力できる良い感じのwikiが欲しいなぁと思いながら調べていたらmoin2がFlaskベースでフォーマットの変換がしっかりしてそう。ReSTでもOKなのでSphinx->pdfってのもやりやすそう。

moin2

あとは知っているフレームワークなので手を入れやすそうってのもある。化学構造のエディタとか組み込まないといけないし。それからmoin2のソースコード読むのも勉強になるし、モチベーション的にもよろしいです。

まぁそんな感じで今年は、wikiベースの創薬用コラボレーションツールを作ってみるかなと。

2011/12/28 19:22:19

今年ブログにつけたタグを数えた

今年は640エントリ投稿してた。

エントリについたタグをカウントして多い順に並べてみた。

宣言通りにjavascriptを重点的に学んだ気がする。

tw11128

ちなみに、タグとそのカウントの辞書を作った後に、itemでソートしたい場合にはちょっとめんどくさかった。

for k,v in  sorted(tag_table.items(), key=lambda (k, v): (v, k), reverse=True):
    print k,v

来年はAndroidかなぁ

2011/12/04 07:58:11

PyPy速いね

PyPyが動くようになったので。

SlidePuzzleの3x3(57問)を解かせてみた

cPython

real    3m40.901s
user    3m29.312s
sys 0m0.749s

pypy-1.7

real    0m24.389s
user    0m24.114s
sys 0m0.236s

pythonをpypyに変えるだけで(ソースコードを変更することなく)こんだけ速くなるんだからすばらしいですね。

2011/12/02 20:43:55

buildoutの練習も兼ねてflask-gae-templateをpython2.7に対応させてみている

buildoutを使えるようになりたいとflask-gae-templateをpython2.7に対応させてみている。

これで、まぁ動くことは動くんだけど色々とwarningが出る。

特に

WARNING  2011-12-02 11:23:39,704 py_zipimport.py:139] 
Can't open zipfile /opt/local/Library/Frameworks/Python.framework/Versions/2.7/
lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info: IOError: [Errno 13] 
file not accessible: '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/
lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info'

は、なんで出るんだろうか?

2011/12/02 06:20:40

OS10.6にあげたのでPyPy入れて遊んでる

10.5だと動かなかったので。

PyPyのサイトからpypy-1.7をダウンロードしてきて解凍して動かしたらさくっと動いた。楽しい。

GDD2011の時に書いたスライドパズルソルバーのコードがどんだけ速くなるのか知りたいのであとでベンチマーク取っておく。

ついでにPython3に対応して欲しいので、寄付もした。paypalもgoogle checkoutもそうだけど少額決済の仕組みは便利だなぁと。