02122012 twitter-bootstrap
RSSへのリンクが切れてたり、横長のアドセンスが邪魔だったので、ちょっとデザインを変更した。
Nexus7では快適に、iPhoneではまぁまぁ快適に読めるようになった。

twitter bootsrapを使っていて分からなかったところがあったのでメモっておく
- marginの設定が効かない(例えばプロフィール画像とか)ので、画像と文字がくっついてしまって困っている
02122012 twitter-bootstrap
RSSへのリンクが切れてたり、横長のアドセンスが邪魔だったので、ちょっとデザインを変更した。
Nexus7では快適に、iPhoneではまぁまぁ快適に読めるようになった。

twitter bootsrapを使っていて分からなかったところがあったのでメモっておく
01122012 chemoinformatics Python
ローカルに構築したChEMBLにアクセスする場合には生のSQLじゃなくてSQLALchemyを使ったほうが楽だ。その場合にはMetaDataのrelflectをTrueで。
from sqlalchemy import create_engine, MetaData db = create_engine('mysql://user:password@localhost/chembl_14?charset=utf8&use_unicode=0') metadata = MetaData(bind=db, reflect=True) table = metadata.tables['target_dictionary'] stmt = table.select(table.c['organism'] == 'Homo sapiens') for r in stmt.execute(): print r.chembl_id, r.pref_name
ChEMBLって、生物種を正規化してないのね。パフォーマンスの問題かな?
Bioinformatics Programming Using Python30112012 Python javascript
pythonでちょっとしたクローラーを書いて終夜で流したい時に、夜中に落ちたりすると時間がもったいないので、死んでも生き返るようにしておきたいことがある。
はてブで指摘された通り
forever start -c python crawler.py
で良かった。ドキュメントにちゃんと書いてあった。
node.jsで書いた場合にはforeverが使えて便利だが、他の言語で書いた場合にはchild_processで子プロセスにして呼び出せばいいので、javascriptをちょっと書いておけば、PythonでもPerlでもHaskellでもなんでも使える。
でもjavascriptを毎回書くのは(忘れるし)面倒なのでforever用のjavascriptを出力するスクリプトをpythonで書いてみた(foreverizeっていう名前)。
#!/usr/bin/env python import sys js_str = """var spawn = require('child_process').spawn; var app = spawn('{}', [{}]); app.stdout.on('data', function(data) {{ console.log('stdout: ' + data); }}); app.stderr.on('data', function(data) {{ console.log('stderr: ' + data); }}); app.on('exit', function(code) {{ console.log('exit code: ' + code); }}); """ if __name__ == '__main__': if len(sys.argv) < 2: print "Usage: {} [command]".format(sys.argv[0]) else: command = sys.argv[1] options = "" if len(sys.argv) >= 2: options = ",".join(["'{}'".format(op) for op in sys.argv[2:]]) print js_str.format(command, options)
使い方は簡単
foreverize python crawler.py > crawler.js forever start crawler.js
これで、デーモン化されて夜でも安心。
最近Alloy+Emacsで快適に開発していたのだが、ちょっと実機転送したいアプリがあったので久々にTitanium Studioを起動したら思いっきりハマっている。
run iOS deviceすると次の画面が出てきて何を直したらいいのかさっぱり分からん。

そもそも、App IDとプロビジョニングプロファイルをきちんと理解していないからなぁ。ドキュメントをきちんと読んでおかないとダメだな。
あと、そのうち東京のもくもく会にも行ってみたいなぁ。
KitchenSinkでも同じようなことになった。
初回インポートしてApp IDを変更して実機転送したところ初回は
一般設定して

次にcertificatesの設定して

最後にプロビジョニングプロファイルを登録

これで実機転送できる。
しかし二度目の実機転送を行おうとするとPlease add a provisioning profileという画面が出て先に進まなくなる。
Xcodeのコマンドラインツールを再インストールしたら直ったというコメントがあったので、ついでに4.4.1から4.5.2にあげてみたけど変わらず。他のヒトが試したようにTitanium Studioを再インストールしたり、titanium, alloyを最新版にあげてみたけどダメ。
あとは、コメントにあったとおりにpreview version入れてみるくらいだけど、時間切れなので帰ってきたらやる
RC(3.0.0.201211271925)とNightlyBuild(3.1.0.201211271945)入れてみたけど変わらず。
ところで、
titanium build -p iphone -T device -P XXXXXX -V "XXX XXXX"
とやってみたけどシミュレータが立ち上がってしまうのはなんでなんだろ?オプションでなにか足りないものがあるのかなぁ、、、
XCodeを使ってみることにした
titanium build -b -f -p iphone -T device -F iphone -P [UUID] -V [NAME]
でapp/build/[application].xcodeprojができているので、それをXCodeで開いて実機を選択してrunすればいい。
これで、KitchenSinkは実機に転送できた。
Alloyで作ったアプリも転送できるんだが、
couldn't find app.js
というエラーが出る。
29112012 Haskell javascript
(……きこえますか…きこえますか…JSerの…みなさん… 三島Ha…無名…会です… 今… あなたの…心に…直接… 呼びかけています…フロントエンドは…underscore.jsを…使う場合では…ありません…あなたが…使う…言語は… Clojure某でも…ありません…Haskellです…Haskellを…使うのです…fayでコンパイルするのです…)
fayはHaskellコードをjavascriptにコンパイルするツールで最近精力的に開発が進んでいるようで素晴らしいですね、心に呼びかけられるのも納得です。
import Language.Fay.Prelude mylist :: [Int] mylist = [1..10] -- test main :: Fay () main = print $ any (==2) mylist
fayコマンドでhaskellをjavascriptにコンパイルすればnode.jsで動かせるようになります。
$ fay test.hs $ node test.js true
underscore.jsに載ってた他の関数もこんな感じ。findなんかはMaybe型で返ってくるので値がなかった場合の処理も楽ちんです。
-- each mapM_ print mylist -- map map (3*) mylist -- reduce foldl (+) 0 mylist -- reduceRight foldr (+) 0 mylist -- find find even mylist -- filter filter even mylist -- reject filter (not . even) mylist -- all all (>0) mylist -- any any (>5) mylist -- contains any (==2) mylist
すごいHaskellをKindleで読む時が来ましたね!これは内側からなぜか湧き上がる物欲ですが、、、、
三島Haskell無名関数の会は一緒にHaskellを学ぶお友達を絶賛募集中です。今度は三島でHaskell勉強してホルモン食べながらビールを飲みます。
28112012 Haskell
Titanium Mobileがうまくいかないのだが、さすがに二三日で解決しないと気が滅入るので気分転換。
virthualenv
source .virthualenv/bin/activate
cabal install markov-chain
コードを書く。文章は魯山人(青空文庫)から。Kindle買ったら魯山人は全部入れておくといいですね。
import System.Random import Data.MarkovChain mytext = "かつおぶしはどういうふうに選択し、どういうふうにして削るか。まず、かつおぶしの良否の簡単な選択法をご披露しよう。よいかつおぶしは、かつおぶしとかつおぶしとをたたき合わすと、カンカンといってまるで拍子木か、ある種の石を鳴らすみたいな音がするもの。虫の入った木のように、ポトポトと音のするしめっぽいにおいのするものは悪いかつおぶし。本節と亀節ならば、亀節がよい。見た目に小さくとも、刺身にして味い大きいものがやはりかつおぶしにしても美味だ。見たところ、堂々としていても、本節は大味で、値も亀節の方が安く手に入る。次に削り方だが、まず切れ味のよいかんなを持つこと。切れ味の悪い鉋ではかつおぶしを削ることはむずかしい。あかさびになったり刃の鈍くなったもので、ゴリゴリとごつく削っていたのでは、かつおぶしがたとえ百円のものでも、五十円の値打ちすらないものになる。" result = take 200 $ run 2 mytext 0 (mkStdGen 123) main = putStr result
実行
かつおぶしは、かつおぶしの良否の簡単な選択し、どういうふうに、ポトと音のするものがやはりかつおぶしを削ること。切れ味の悪いかつおぶしを削ること。切れ味の悪いかつおぶしはどういうふうに、ポトポトポトポトと音のするしめっぽいにおいのするしめっぽいにおいのするしめっぽいにおいのするものは悪いかつおぶしを削るか。まず、かつおぶしの良否の簡単な選択し、どういうふうにして味い大きいものになった木のよう。よい。
日本語は形態素解析が必須だなと。
27112012 life
ジェフ・ベゾスって実はエンジニアだったのね
後悔最小化理論ってのは面白かったが、それ以外は読み物っぽかったかな。
一つ、心に残ったのがp.210の「小さな書店はアマゾンと共存」っていう節で
今後どうなるのかは-いま、どうなりつつあるのかは-リアル書店のい心地がもっとよくなる、だと思います。ソファが増える、おいしいラテが飲める、店員の質が上がるといった具合です。すぐれた書店は、20世紀のいま、コミュニティーセンター的な役割を果たしています。
これは図書館でも言われていることだけど、それは本を売る場所ではなくてスタバとかそっち方面と競争していくことになるのかなぁ。
例えば、高校生なんかは休日に図書館に勉強しに来ているけど司書に混じって教師の役割をデキる人がいるような場になってもいいんじゃないかなぁー。
というか、小学生とか中学生が集まれるようなコミュニティセンターを目指すべきなんじゃないかと思ったりもする。
図書館っていうのは本の博物館じゃなくて、知識を得る場所であるべきであろう。
25112012 iPhone
コードは出てこない。デザインの指針が満載なので、iPhoneアプリを作る人にとっては非常に参考になる本なのではないでしょうか?

特に起動画面の設計で、スプラッシュスクリーンをどうするかっていう話は、ラーメン屋の行列心理(外で待っていると待っている意識になるんだけど注文を取ってから待っている場合には待たされている感覚になってイライラしやすいとかそんな話)に似ているなぁと。
オライリーは電子書籍を買うようにしていて、大抵epubで入手している。今回はpdfしか用意されてなかったので、pdfを購入してみたのだが余白のせいで字が小さくなってしまうためNexus7のような7インチタブレットでは非常に読みにくかった。今後はepubかmobiじゃないと買わないと思う。
AldikoもKindleもBookmarkできるようになっているんだけど、範囲が大雑把すぎるのでこまっている。行単位でブックマークできると嬉しいんだが。

25112012 Emacs
昨日Gentoo Linuxの布教活動に来ていた@karky7にEmacsのタグジャンプの便利さを教えてもらったので、僕もちょっと使ってみようかなと。
ちょうどredmineの中を読んでいるのでappディレクトリで
etags */*.rb */*/*.rb
と打つとTAGSファイルができて(etags -f rb -Rとか叩けないんだろうか?)タグジャンプができるようになるのでM-.で探索しつつM-*で元の場所に戻るということが簡単にできるようになっていい感じ。
RoRみたいなフレームワークは行きつ戻りつすることが多いのでタグジャンプを使えばコードを追いかける効率が上がりそうだ。anythingとかhelmでも使えるようなのであとで設定してみる。