華音で昼酒やってたので行ってきた

静岡に行ってきた。

で、華音が昼酒始めてたので寄ってみた。

ホタルイカ、よっぱらい鶏

1492035356 1492035359

ピータン豆腐とうなぎの肝のチリ炒め

1492035363 1492035366

お燗と中華でまったりしてきた。

ひなよしで飲んだ

前の職場の同僚という後輩が近所に転職するので、同僚とその転職先知り合いとひなよしで飲んできました。

ちょっとここでは書けないけどどこも困っているんだなぁっていう話とか色々できて楽しかった。 尚、今回は静岡出張無しで帰宅した。

お通し。お酒は一升瓶から注いでくれます。升にこぼして戻すスタイルは賛否両論あるかと思う。

1492034581 1492034584

あんきもと造りの盛り合わせ

1492034587 1492034589

のどぐろは美味しかった

1492034592

そういえば、今の会社の謎メール文化を伝搬させようと出向いたんだけど、ひなよし着いた瞬間にそのこと忘れてしまった。

  • 「謎のスラッシュルール」と転職組に命名されているメール仕様(尚、暗黙w)
  • メールのCcに自分のメールアドレスを入れる風習(たまにうざくてメールを即消すらしいw)
  • フラグを立てずに【重要】とか【読み飛ばし禁止】とか書いてある

pexpectとclickで劇的ビフォーアフター

何故か最近GAMESSでFMOを計算することに全力を注いでおりまして。

GAMESSでFMO計算を行う場合にはfmoutilという便利ツールを使うことが多いのだが、これは対話的な環境の上にデフォルトというものが用意されていないので、毎回毎回手打ちしないといけない。

それから、きれいな複合体データでないと上手く動かない(途中に欠損があると駄目)とか実践で使っていく場合には色々と不都合があるので、今は自分用の 超便利有能空気読みすぎpython版のプリプロセッサ をガシガシ書いている。

で、ヘッダーチェックのためにfmoutilをすごい重宝してるんだけどなんせ毎回手打ちで1日何十回も対話していると流石に疲れる。

pexpectclickを使ってこんな感じに実行できるようにしてみた。

$ ./fuu --help
Usage: fuu [OPTIONS] IFILE

  Create FMO Input

Options:
  -o, --ofile TEXT         output option (default: fmo.inp)
  -n, --node INTEGER       node option (default: 4)
  -c, --core INTEGER       core option (default: 8)
  -m, --memory INTEGER     memory option (default: 48000)
  -w, --wavefunction TEXT  wavefunction option (default: RHF)
  -b, --basis-set TEXT     basis set option (default: STO-3G)
  --help                   Show this message and exit.

コードは至ってシンプルなのにモダンなfmoutilに生まれ変わって満足

#!/usr/bin/python
import pexpect
import click

bs = {"STO-3G": 1, "3-21G": 2, "6-31G": 3, "6-31G*":4, "6-311G*":5}
wf = {"RHF": 1, "DFT": 2, "MP2": 3, "CC": 4, "MCSCF": 5}

@click.command(help="Create FMO Input")
@click.argument("ifile")
@click.option("--ofile",  "-o", default="fmo.inp", help="output option (default: fmo.inp)")
@click.option("--node",  "-n", default=4, help="node option (default: 4)")
@click.option("--core",  "-c", default=8, help="core option (default: 8)")
@click.option("--memory",  "-m", default=48000, help="memory option (default: 48000)")
@click.option("--wavefunction",  "-w", default="RHF", help="wavefunction option (default: RHF)")
@click.option("--basis-set",  "-b", default="STO-3G", help="basis set option (default: STO-3G)")
def cli(ifile, ofile, node, core, memory, wavefunction, basis_set):
    c = pexpect.spawn("./fmoutil")
    c.expect(".*") #   Enter Job # :     1. Generate FMO input data for GAMESS
    c.sendline("1")
    c.expect(".*") #   Enter Input PDB File(s) :
    c.sendline(ifile)
    c.expect(".*") #   Enter Output File : 
    c.sendline(ofile)
    c.expect(".*") # 1> How many computer nodes do you want to use ?
    c.sendline("{}".format(node))
    c.expect(".*") # 1> How many CPU cores does each node have ?
    c.sendline("{}".format(core))
    c.expect(".*") # 1> How much memory does each node have (in megabyte) ?
    c.sendline("{}".format(memory))
    c.expect(".*") # 1> Choose runtyp (1:energy, 2:gradient, 3:geometry optimization)
    c.sendline("1") 
    c.expect(".*") # 1> How many layers do you want to define (1-5) ?
    c.sendline("1")
    c.expect(".*") # 1> Choose wavefunction type (1:RHF, 2:DFT, 3:MP2, 4:CC, 5:MCSCF)
    c.sendline("{}".format(wf[wavefunction]))
    c.expect(".*") # 1> Enter basis set (1:STO-3G, 2:3-21G, 3:6-31G, 4:6-31G*, 5:6-311G*)
    c.sendline("{}".format(bs[basis_set]))
    c.expect(".*") # 1> Do you add diffuse functions on COO- groups ? (1:yes, 2:no)
    c.sendline("2")
    c.expect(".*") # 1> Enter the desired n-body expansion (2 or 3) ?
    c.sendline("2")
    c.expect(".*") # 1> Would you like to perform the pair analysis (PIEDA) ? (1:yes, 2:no)
    c.sendline("1")
    c.expect(".*") # 1> Would you like to print Mulliken charges (1:yes, 2:no) ?
    c.sendline("1")
    c.expect(".*") # 1> Would you like to produce a cube file with the total electron density ? (1:no, 2:standard, 3:sparse)
    c.sendline("1")
    c.expect(".*") # 1> Whould you like to use PCM ? (1:yes, 2:no)
    c.sendline("2")
    c.expect(".*") # 1> Enter fragment size (1:1res-per-frg, 2:2res-per-frg)
    c.sendline("1")
    c.expect(".*") # 1> are S-S bonded CYSs combined to one ? (1:yes, 2:no)
    c.sendline("1")
    c.expect(".*") # 1> is GLY combined to the neighbor ? (1:yes, 2:no)
    c.sendline("2")
    c.expect(".*") # Enter Job # :
    c.sendline("")
    c.close()

if __name__ == "__main__":
    cli()

以上、clickの提供でお送りしました☆

あと、clickで--helpしたときにデフォルトの値も表示させたかったんだけど、やりかたわからんかった。誰か知ってたら教えてください。尚、オプションにchoiceを入れてないのは僕の怠慢ですw

半自動スクレイピングに最適なファイル形式、それがmht

reCAPTCHAみたいな画像認証が組み込まれていてロボットも弾くようになっているサイトだけど、どうしてもスクレイピングしたいから、マニュアルアクセスでページを保存してスクレイピングのプログラムにまわしたい、さらにその際に表示されている画像も一緒にとりたいというなかなか難しそうな課題に取り組んでいた。

IEで保存すると(完全とかいうオプション選ぶんだっけ?忘れた)フォルダに画像ファイルとかまとめて保存してくれるんだけどスクレイピングにまわすの不便というか、ウェブサービスにしたいからuploadしやすいファイル形式がいいなぁと調べていたらIEだとmhtという形式で保存できるということに気がついた。

調べたら相当前からあったらしい。

そして単一のファイルでMIMEなのも便利なところ。

RFC 2557 は、MHTMLは電子メール以外のプロトコル (HTTPやFTP) でも一度に転送出来ることや、完全なHTML文書のアーカイブとして保存出来ることを示唆している。

unpackの実装見てみたら、emailモジュール使ってunpackしていた。まぁそうだろうなと。

そこまでわかればスクレイパーをサクッと書いてやりたい仕事は終了した。

もう、半自動スクレイピングは怖くないw

あとmhtをそのままメールで送ったらアクセスポリシーがとか画像の表示を許可しますか?とか言われなくていいんではないかと思ったけどどうなんだろう?

菊芋のぬか漬けとわさびの花の三杯酢

菊芋は使い方がよくわからなかったので今まで買わなかったけど、ぬか漬けにしたらシャキシャキして美味しいので また買うかも。どっちかというとポタージュにしてみたいが。

1490702208

わさびの花は今の時期だけなのでお湯をさっとかけて三杯酢に。

1490702211 1490702214

最近ちょっと仕事が楽しくてあまり料理できてないが、もう少しバランスを考えながら生活したい。

三連休はなかなか充実していた

土曜日はメンチカツを作った。キャベツを山盛りフードプロセッサーにかけてボール一杯になったところで塩をふって水分を放出させると3分の一くらいの量になるのでそこにちょっと下味をつけた合挽き肉300gを投入して混ぜ混ぜするだけ。コロッケより手間がかからないので好き

1490171205

二日目は富士錦の蔵開きに行ってきた。知り合いが来ていたらしいんだけど会えず。後日知り合いのグループが写真に移っていることが判明。酒ばかりに気を取られていたというのが真相。

1490171208

三日目は色々求めて沼津の方をうろろしていたら安定の三つ割り菊

1490171214

そしてJAの直売所を覗いたら、まさかのほだ木が2コイン価格で販売中だった。物欲センサーあがりまくったけど、栽培ガイド読んだら収穫までに2年かかるって知って断念。そこまで世話は焼けん。ぬか床で一杯一杯だ。

1490171216

帰りにアラビカでコーヒー豆買おうと思ってたけど、花野子通るじゃんと、コーヒ休憩。飲んで美味しかったマラウィゲイシャを購入して帰宅

1490171219

JAでわさびの花も買ったけど、三杯酢に漬けずに放置してあるので帰ったらやる。あと菊芋もぬか漬けにしているのでそろそろ出さないと…

ラスト藤堂

先週、「あと二週間で藤堂しまっちゃいますねー」と雑談をしながらチェックしてたら、先週木曜日と明日の木曜日しかチャンスがないことが判明して、先週木曜日に凸してきた。

雫の塩

1490170912 1490170915

ちょっと濃い感じはしたけど、美味しかった。

行ければ明日も行こうかなと思ったけど、明日はサーバーにubuntuインストールしまくり大会からの実践ansible導入伝説が待ち構えているので無理だった。

というわけでラスト藤堂でした。

綾からの静岡出張

先々週くらいに転職組のメンバー(+転職組っぽい感じの方w)と綾にすき焼きを食べにいった。

すき焼きにたどり着くまでの道は険しかった。お造りにはじまり、焼き物揚げ物エトセトラエトセトラ

1490096016

すき焼きは割り下系で、最初に肉を焼くらしい。確かにこっちのほうが肉が焼けてて美味かった。

1490096019

でもすき焼き鍋のような厚手の鍋じゃないと美味しくできなさそうな気がする。

1490096022 1490096024

すき焼き鍋欲しい。

尚、岳南鉄道の終電で帰る予定だったのが、楽しすぎて遅くまで滞在していたため、中途半端な電車にのって静岡出張してしまい、次の日はおにぎりのまるしまでおにぎりを食べてから出社した。

おにぎり美味かったので良し。

次回は遅くなりそうだったら、コーヒーでも飲んで時間つぶして終電(富士止まり)で帰ろう。

それにしてもJR東海の座席が熱すぎるのはトラップだわ。

Python Testing読みなおそうっと

pygamessをopenbabelからRDKitに依存させるように書き換えてるんだけど、pyvowsのサイトにずっとアクセスできなくてnoseでいいじゃんってなってさっきpyvowsで書いてたテストを削除した。

pychembldbもunittest使ってるしpyvowsとはサヨナラだな。

そして、色々忘れていてあれなのでPython Testingを読み直すことにした。バッグが更に重くなるけど仕方ない。

ProductName Python Testing: Beginner's Guide
Daniel Arbuckle
Packt Publishing / ?円 ( 2010-01-19 )


富士宮ぐるっとお買い物ツアー

日曜は久々に富士川のほうから色々まわって買い物を満喫してきた

蒲原館で揚げ餃子ラーメン。メニューに餃子はないのに上げ餃子ラーメンは存在するという不思議。

1488839374

にんにくが強かったので、次はタンメンにするかな。

それから富士川SAの観覧車が稼働していた。一周700円でお得だけど、スイッチのゼルダで高所を満喫しているので僕には不要です。

グロースヴァルトサノでハムを買って、神戸醤油店で味噌を買って、ヨコゼキで日本酒を買って、大富士で野菜をかって魚清で魚を買うという完璧なルート。

満足