読者です 読者をやめる 読者になる 読者になる

Playground of Natural Selection : Gene Pool

The immediate manifestation of natural selection is nearly always at the individual level. But the long-term consequences of non-random individual death and reproductive success are manifested in the form of changing gene frequencies in the gene pool. -- Richard Dowkins The Selfish Gene

This concept is key ingredient to think about genetic diversity and some philosophical problem of the definition of diverse.

cythonコマンドを使ったcythonコードのビルド

Cythonのtutorialでsetup.pyを使うやり方は載ってるのだがcythonコマンドでやる方法は 詳述されてなかったので、メモ.

f:id:mcbiophys:20160730163824p:plain


Cython のコードはPythonと異なりコンパイルする必要があるが、それには二つのステップがある。

  • .pyx ファイルを Cython をつかって.c ファイルに変換する。そうしてできたファイルにはPython extension moduleが実装されている

  • .cファイルはC言語コンパイラをつかって .so ファイル (Windowsユーザーは.pyd に変換する。このファイルはpythonからインポート可能となる


上の作業を実行する方法はいくつかあるが,tutorialで詳しくふれられていて、一般的な方法はsetup.pyを書いてpythonのdistutils パッケージを利用する方法だ。OSやマシンの違いを吸収する安全な方法としてはこれが一番いいのかもしれない。 しかし、ちょっとした確認のためにいちいちsetup.pyを用意するもの面倒だ.

そこでこれ以外にも以下で示すように直接cythonコマンドをつかって”手で”コンパイルする方法がある*1

Step 1 : cythonコマンドで.pyx ファイル→ .c ファイルに変換.

helloworld.pyx

print "test"

を用意して、.cファイルをcythonファイルで生成する.

$ cython --embed helloworld

ここで--embedオプションをつけておかないと後でgccコンパイルするときにmain()関数がないと怒られる

--embed[=<method_name>] Generate a main() function that embeds the Python interpreter.

Step2 : gccをつかってsharedライブラリを作る

pkg-configコマンドが使えるなら使うと便利だ.

$ gcc `pkg-config --cflags  --libs python` -o helloworld.so helloworld.c"

これでpythonインタプリタからimportできるはずだ

> import helloworld
#test

mcbiophys.hatenablog.com

mcbiophys.hatenablog.com

*1:マニュアルには"This is mostly for debugging and experimentation. "と注意書きがある

Numpyでヘッダーのinclude pathを取得する方法 ( How to print include path of Numpy FIles ? )

Pythonでヘッダーのinclude pathを取得する方法 ( How to print include path of Python FIles ? ) - mcbiophys'sDigital Bio

の応用問題.

cythonを使うときにsetup.pyでよく使うトリックだが makefileでinclude pathが欲しい場合も当然使える.

NUMPY_INCL_PATH  = $(shell python -c "import numpy; print numpy.get_include()")

Pythonでヘッダーのinclude pathを取得する方法 ( How to print include path of Python FIles ? )

MakefilePythonのファイルパスを取得したいときなどがたまにあるだろう。 そんなときはsys.prefixのトリックが便利だ.

import sys
print(sys.prefix) #/usr/local/Cellar/python/2.7.xx/Frameworks/Python.framework/Versions/2.7 etc ...

MakefilePython のインクルードパス*1を取得するときは

PYTHON_PREFIX  = $(shell python -c "import sys; print(sys.prefix)")
PYTHON_VERSION = $(shell python -c "import sys;\
print '%d.%d' % (sys.version_info.major, sys.version_info.minor)")
PYTHON_INCL_PATH = ${PYTHON_PREFIX}/include/python${PYTHON_VERSION}

などとすると良いだろう

mcbiophys.hatenablog.com

mcbiophys.hatenablog.com

*1:The main collection of Python library modules is installed in the directory prefix/lib/pythonX.Y while the platform independent header files (all except pyconfig.h) are stored in prefix/include/pythonX.Y, where X.Y is the version number of Python, for example 3.2.

vimの外部grepでshell出力を抑える方法  

vimの外部grep(i.e :grepコマンド)はshellの出力が鬱陶しいので vimrcに以下のように書くことで,新しい:Grepコマンドを定義してそれを黙らせることができる.


command! -nargs=+ Grep execute 'silent grep! <args>' |:redraw!


  • -nargs=+ : n>= 1の引数をもつ
  • silent : silent command でshell の出力を抑える
  • | :1行で複数のコマンドを書きたいとき、コマンドを分割するのに使う
  • :redraw! : shell の出力をsilentしたとき、リロードしなければならない


[参考: quickfix - Vim日本語ドキュメント ]

これで,

:Grep <args> |:cw


みたいに使うことができる



mcbiophys.hatenablog.com

"tee" command の有用性

プログラムの間のパイプで渡されているデータを見てみたい時 "tee" command が非常に有用である このteeコマンドは標準出力からデータを受け取ってファイルに書き出し、また標準出力に再びそのデータを受け渡しする。 この方法であれば、pipでつないだプログラムの間で何かしらの問題が起こったとしてもどんなデータがパイプを通して受け渡しされているかを 調べることができるのだ。で、teeコマンドは以下のように使えるわけだ:

$ ps aux |tee filename |grep init

ここで"ps aux" の標準出力が"filename"というファイルに書き込まれながら、 "grep"コマンドは"ps aux"の標準出力の結果を受け取ることができる点が肝である。 この方法を使えば、パイプでつないだプログラムの間で何かしら問題が起こっていたとしても、 その問題をパイプで受け渡しているデータを調べることで判断できるのである。 さて、この場合"ps aux"の標準出力内容はfilenameは上書き保存されてしまう。それが嫌なら"-a" オプションを使うといいだろう

$ps aux | tee -a filename | grep init

Tips for vim

vimで管理者権限でファイルを編集する必要があるのに謝ってsudoを付け忘れていろいろ編集し始めてしまった時に使えるtipsとして以下のようなものがある.

:w !sudo tee %

Shellのhackがいろいろ詰まっているので解説しよう。

:wはファイルを保存するときによく使う定番のvimコマンドであるが、 :w newfilenameのような使い方ができることからもわかるように、 その機能の本質は, "bufferをファイルに送る"ということだ。 ここではshell commandがファイルに変わってデータを受けとっており、そのコマンドが 他ならぬ(管理者権限で実行された)teeコマンドというわけだ.

note : %は現在のファイル名

おまけ: :w !sudo cat > % じゃだめなの??

これはsudoがcatに適用されるがリダイレクト(>)には適用されないためだめ.

Ref :

explainshell.com - match command-line arguments to their help text

Elsevier(エルゼビア)負の歴史メモ

Elsevier社がまたやらかしたようなのでメモ

https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Elsevier.svg/220px-Elsevier.svg.png

The Lancet(医学)、Cell(生物学),Nuclear Physics(高エネルギー物理学) などの権威のある雑誌を多数擁する老舗学術出版社Elsevierの負の歴史をメモ. 日本語版wikipediaには情報がかなり不足してる


2009: 2000~2005年の間に6つの虚構ジャーナルを出版してたことが報じられる

http://www.the-scientist.com/?articles.view/articleNo/27383/title/Elsevier-published-6-fake-journals/


2012 :学界の春(Academic Spring) -- "The Cost of Knowledge" boycott--
フィールズ賞受賞数学者ウィリアム・ティモシー・ガワーズによるエルゼビア社ボイコット運動. 謝罪とともに数学系の雑誌のオンライン使用料を大幅に下げる.


2013:医学系オープンアクセス雑誌大量摘発事件にひっかかる

"Who's Afraid of Peer Review?"と題したScience誌の記事で数百のopen accessジャーナルの査読がざるだということが証明される. その中の一つにElsevierの雑誌 "Drug Invention Today"が含まれていた

2015 : 言語学におけるボイコット運動
Entire editorial staff of Elsevier journal Lingua resigns over high price, lack of open access | Ars Technica UK

New Jorunal は

Glossa: a journal of general linguistics


2016 : 国家レベルでの集団ボイコット運動

www.nature.com

最近は追いかけてなかったのだが、ボイコット運動は国家レベルに波及してるようだ. ペルー、ドイツ、台湾では大学が集団でボイコット運動するようだ 例えば台湾では、上位11機関を含む大学の75%以上がエルゼビアとの共同ボイコットに参加している またドイツではDEALと呼ばれる団体が交渉にあたっているようだが、この交渉は合意に至らず十二月に終了した。一月から交渉が再開される可能性もあるようだが、仮にそれも物別れに終わったとしても、DEAL結成以前はドイツの機関がElsevierと個別に契約を交わしており、何百もの大学が依然として複数年契約を結んでいるため、まだ影響はないみたいだ。
  ところでもしElsevierの論文がどうしても読みたい場合の代替案対策はどうしてるのだろうか? 一つの合法的な解決策として国際的な「図書館間貸付」サービスに参加するという方法があるようだ。 またおそらく違法ではあるがSci-Hub というサイトを使うこともできる.ペルーの科学者は割と使ってるようだ。というのもペルーは世界保健機関(WHO)が設立したヒナリ(HINARI)というイニシアチブのもと、最近まで科学の主要ジャーナルへの無料または低コストのアクセスを受ける資格があったのだが経済成長のために2012年にその権利が失効したためにSci-Hubを使うようになったようだ。ペルーのある植物学者は「私は30歳です。私の世代の約95%がそれを使っている」と述べている.


しかし、やはりペルー以外の科学者たちは、Sci-Hubの使用には消極的であり、アクセス不足の永続的な解決策ではないと考えているようだ。



ペルーの件を見て思ったが、これらの有料雑誌制度の最も醜悪なところは先進国、とりわけ欧米の先進国が雑誌購読料として 貧しい国から高額の購読料金を搾取してると言うことだ。本来なら知識を世界にあまねく拡散するように努力するべきなのに、その知を 先進国だけに止めようとする愚かしさに加担してはならないだろう。 また、納税者は、税金の使われた研究について読む権利があるのは当然だろう. 日本もボイコット運動に参加しよう


ところでたまたまこんな動画を見つけた. 14歳の時、RSSの規格作成に参加し、SNSRedditの開設にも関わったアーロン・シュワルツ氏が自殺した話題。シュワルツ氏はかねてより学術雑誌論文のオープンアクセスを提唱しており、その実現のために自身もゲリラ的に論文を大量取得していた事で禁固50年、罰金100万ドルという懲罰的な刑罰を検察により求刑された。シュワルツ氏の自殺を受けて、世界各国の学者の間で自分の書いた論文を無料でウェブに公開する運動が起きていたようだ。

www.youtube.com