<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>opsin / Drkcore</title><link>http://blog.kzfmix.com/opsin</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Mon, 30 Jun 2008 21:44:20 +0919</lastBuildDate><item><title>jython+web.pyでお手軽Webアプリ</title><link>http://blog.kzfmix.com/entry/1214827204</link><description>&lt;p&gt;jython+web.pyがお手軽で、ちょっとしたことをやるならいい感じ。&lt;/p&gt;

&lt;p&gt;jythonのosモジュールにはfstatがないので&lt;a href="http://blog.kzfmix.com/entry/1214571375"&gt;trunk&lt;/a&gt;のSimpleHTTPServerの静的ファイルの転送ができない。そのため、2.2.1のSimpleHTTPServerと入れ替えた。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import java.io.StringReader as StringReader
import org.openscience.cdk.interfaces.IMolecule
import org.openscience.cdk.io.CMLReader as CMLReader
import org.openscience.cdk.ChemFile as ChemFile
import org.openscience.cdk.layout.StructureDiagramGenerator as StructureDiagramGenerator
import uk.ac.cam.ch.wwmm.opsin as opsin
import net.sf.structure.cdk.util.ImageKit as ImageKit

import web

urls = (
    '/(.*)', 'img2d' 
)

class img2d:       
    def GET(self, name):
        cml = opsin.NameToStructure().parseToCML(name).toXML()

        str_reader = StringReader(cml);
        cmlr = CMLReader()
        cmlr.setReader(str_reader)
        chem = cmlr.read(ChemFile());
        mol = chem.getChemSequence(0).getChemModel(0).getSetOfMolecules().getMolecule(0)

        sdg = StructureDiagramGenerator()
        sdg.setMolecule(mol)
        sdg.generateCoordinates()
        mol = sdg.getMolecule()

        ImageKit.writePNG(mol, 300, 300, "./static/test.png")
        print '&amp;lt;h1&amp;gt;' + name + '&amp;lt;/h1&amp;gt;' + '&amp;lt;img src="/static/test.png" /&amp;gt;'

if __name__ == "__main__": web.run(urls, globals())
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;http://localhost:8080/(2,3-diethyl-benzyl)-isobutanolというURLにアクセスすると、IUPACを２次元構造に変換していい感じに描画して表示してくれる。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kzfmix.com/images/blog/webopsin.png" alt="opsin_web" title="" /&gt;&lt;/p&gt;

&lt;p&gt;ImageKitが必ずファイルに出力するのでテンポラリのファイルを作ればいいのだけど、とりあえず動く事を確認したかったので決めうちの名前で。&lt;/p&gt;
</description><pubDate>Mon, 30 Jun 2008 21:44:20 +0919</pubDate><category>chemoinformatics</category><category>jython</category><category>opsin</category></item><item><title>jythonでwebappサーバー</title><link>http://blog.kzfmix.com/entry/1214694906</link><description>&lt;p&gt;&lt;a href="http://henkenotes.blogspot.com/2007/09/cherrypy-3-jython-third-attempt.html"&gt;CherryPyはSignalがないぜよっていうエラー&lt;/a&gt;を解決できなさそうだったのであきらめた。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://groups.google.co.jp/group/webpy/browse_thread/thread/95f5c80429364a31"&gt;webpyはSSL関係のクラスをコメントアウトして830行あたりをちょっと修正すれば&lt;/a&gt;動く。&lt;/p&gt;

&lt;p&gt;これで、cgiとかサーブレットみたいな面倒な手段をとらなくても、javaライブラリとwebserverをつなげられる。&lt;/p&gt;

&lt;p&gt;例としてIUPAC名をCMLに変換するjavaライブラリである&lt;a href="http://oscar3-chem.sourceforge.net/"&gt;opsin&lt;/a&gt;を利用したwebappを作る&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import uk.ac.cam.ch.wwmm.opsin as opsin
import web
urls = (
    '/(.*)', 'hello' 
)
class hello:
    def GET(self, name):
        i = web.input(times=1)
        for c in range(int(i.times)):
            print opsin.NameToStructure().parseToCML(name).toXML()

if __name__ == "__main__": web.run(urls, globals())
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;http://localhost:8080/benzeneってアクセスするとbenzeneのCMLがブラウザに出力される。&lt;/p&gt;
</description><pubDate>Sun, 29 Jun 2008 08:27:22 +0919</pubDate><category>chemoinformatics</category><category>jython</category><category>opsin</category></item></channel></rss>