やごみで打ち合わせ

久々にやごみで。

真鯛とホタルイカ

1494534344 1494534347

ネギトロ

1494534349

尚、次回の勉強会は7/8(sat)の予定です。会場押さえてconpassの用意が出来たらまたアナウンスします。 今回はテーマは特に決まってないので好きなことを喋る会になるかもしれません。

GWあたりの出来事

今年のGWはMBAも壊れてたし車も足回りが調子悪かったりして遠出する気が全くおきなかった。そのうえ、娘がヒッキーのネット三昧という堕落生活を希望したので後半はなんか酒飲んでたら次の日になっているというループを繰り返してよかった。

まぁ働きすぎで疲れていたのでいいリフレッシュにはなったかな。GWあたりの活動ログ

富士宮の買い物に行ったついでに富士宮の蕎麦屋に行った。ちょっと名前を失念したけど美味しかった。 オススメ。名前は忘れたけどw

1494334460 1494334463

連休明け朝一に会議が入ったため、急遽1,2に出勤することになり、やさぐれた面子で焼肉に癒やしをというか燻しを求めにいった。まぁあそこですw 尚、爆裂に食したというか飲んだというかマジ~でという金額だった。若さやばい。

1494334465

で3日は電車に乗って沼津からの昼タップルームでまったり。メニューが懐かしのアイテム揃いでよかった。

1494334468 1494334470

早くあの頃のメニューにもどってくんないかなー。ビール美味しいのに安居酒屋みたいなメニューは勘弁みたいな感じに なってしまっていて、久しぶりにフード頼んだんじゃないかなぁ。

1494334473 1494334475

4日は西の方に旅立った。朝ラー行けるかなーと思ったけど無理っぽかった(13時閉店の店が多い)ので 静岡で途中下車して中村屋で親子丼食べてからブラブラと島田へ

1494334477 1494334480

五和の駅内カオスだったわ。尚、五和の居酒屋っていったら一軒しかないけど、SL見られるし、お酒も超ウマイので 16時の開店で凸して18時くらいの電車で帰ると普通に帰ってこれます。大井川鉄道の電車の本数ないから注意しないとヤバイことになるけど。

1494334483 1494334485

6日は冷蔵庫に大根があったので、大根、ネギ、油揚げでカレーを作った。鶏肉と見栄えの悪いトマトも消費したかったのでヨーグルトに漬けておいて後から投入した。

根菜はカレーに合うのでマジオススメですね。じゃがいもなんてグズグズになってドロっとするから不要。

1494334487 1494334490

よくある人参、玉ねぎじゃがいも云々のレシピはステレオタイプすぎると思うので、もっと自由にカレーを作れるようになると楽しいというか冷蔵庫の整理に役立ちますな。

最終日はシュウマイ作ったけど、いつも通りなので写真はなし。

それから、ぬか床をメンテし始めたのが去年のGWでちょうど1年続いたので自分を褒めたい。最近キュウリがでてきて楽しいですね。そろそろズッキーニとかそら豆なんかも漬けられるので楽しみが増えた。

2代目MBA(Macbook Air)

3週間くらい前にMBAが故障したので、ノートなし生活を送っていたのだけど、流石に耐えられないのでMBAを買いました。

SSDを換装したときの要領でSSDを取り出して、新しい方のMBAにデータを移行できたので復旧作業は簡単だった。これが心理的なハードルだったので安心した。

もともとのSSD(256GB)用にUSB変換アダプターがほしいんだけどMBA2012専用じゃないと駄目っぽいのでちょうどいいのがなくて困っている。trancendのケースだけ売ってないかな

秋葉館でしか見つけられなかったけど256のSSDの体裁を整えるために5Kはコスパ的にどうなんだろう?

「知識管理システムを導入したい」ではうまくいかないのでは?

知識管理システムを導入するだけで全て上手くいくと思っているヒトが多いなぁと。そういうヒト達は「自分たちにはITスキルがないからソフトの導入が出来ない」と言い訳するのもステレオタイプな気がする。

そもそも真の課題は「システムの助けを借りて知識管理する文化を醸成したい」というのが正しい認識だと思うのだが、上記の人達は文化醸成のための努力をする気が全く無いので、ソフトの導入がゴールになってしまい結局うまくいかないのかなぁと思う。

で、うまくいかないのをソフトのせいにして、別のソフトを導入すれば今度こそうまくいくかもとまた夢をみてしまうという負の連鎖が起きているのではないだろうか?

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

静岡に行ってきた。

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

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

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