明太子ソースに鮭フレークを添えて

雑多な備忘録とか戯言とか。

"gnuplot: X11 aborted."

私はあまり詳しくないので間違った認識かもしれないけど、 Macユーザーでかつ描画ツールなんか使う人には多分必須なんじゃないかと思われるX11

そしてX11が必要なソフトウェアのためにはXQuartzを入れなきゃいけない。

新しいPCの環境構築をやっていたらこいつ関係で詰んだので、メモしておく。

  1. 当時最新だったXQuartz-2.7.7.dmgをダウンロード。
  2. dmgファイルを展開してインストールする。アプリケーションのユーティリティ内のx11が立ち上がるのを確認。
  3. brew install gnuplot --with-aquaterm --with-x11gnuplotインストール。
  4. gnuplot立ち上げると、デフォはaquaterm
  5. set term x11するとgnuplot: X11 aborted.と出る。なんでや。

version下げたりoption変えたり他の依存関係を調べたり色々試したが、上手くいかず。

諦めて電源落として次付けたら使えるという非常に悲しい解決。

ということで、X11入れたら再起動しましょう。

pipが使えなくなった時はとりあえずpython入れ直そう(?)

問題

pipでパッケージを入れようとすると以下のようなエラーが出るようになった。

$ pip install progressbar
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
  File "build/bdist.macosx-10.6-x86_64/egg/pkg_resources.py", line 356, in load_entry_point
  File "build/bdist.macosx-10.6-x86_64/egg/pkg_resources.py", line 2439, in load_entry_point
  File "build/bdist.macosx-10.6-x86_64/egg/pkg_resources.py", line 2155, in load
  File "/usr/local/Cellar/python/2.7.7_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/__init__.py", line 10, in <module>
    from pip.util import get_installed_distributions, get_prog
  File "/usr/local/Cellar/python/2.7.7_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/util.py", line 18, in <module>
    from pip._vendor.distlib import version
  File "/usr/local/Cellar/python/2.7.7_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/_vendor/distlib/version.py", line 14, in <module>
    from .compat import string_types
  File "/usr/local/Cellar/python/2.7.7_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg/pip/_vendor/distlib/compat.py", line 31, in <module>
    from urllib2 import (Request, urlopen, URLError, HTTPError,
ImportError: cannot import name HTTPSHandler

対処

brewpythonを入れ直してみたら治った。

$ brew reinstall python
$ pip install --upgrade pip
You are using pip version 6.0.8, however version 6.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-6.1.1-py2.py3-none-any.whl#md5=172eb5abab25a5e0f7a7b63c7a49378d
  Downloading pip-6.1.1-py2.py3-none-any.whl (1.1MB)
    100% |################################| 1.1MB 297kB/s 
Installing collected packages: pip
  Found existing installation: pip 6.0.8
    Uninstalling pip-6.0.8:
      Successfully uninstalled pip-6.0.8
$ pip install progressbar
Collecting progressbar
  Downloading progressbar-2.3.tar.gz
Installing collected packages: progressbar
  Running setup.py install for progressbar
Successfully installed progressbar-2.3

ブラウザでPDFを開く時にプレビューを使いたい

一度Adobe Readerがデフォルトにしてみたら、動きが重かったり検索が使いにくかったりで困ったため、プレビューに戻すことを決意。

Adobe Readerの環境設定で「デフォルトで閲覧モードで表示」のチェックを外したら一度は解除された、のだが。

何かの拍子に気付けばAdobeに戻ってしまっていた、つよい。

/Library/Internet Plug-Ins内に入っているプラグインをエスケープすることで解決。

該当プラグインは以下の2つ。

AdobePDFViewer.plugin
AdobePDFViewerNPAPI.plugin

大量のファイルをファイル名そのままに一括で文字置換

コマンドラインで動かすプログラムをよく使うようになって数年経ちますが、 未だにunixコマンドを全然覚えていません、酷い。

この1年くらいでcshやらPythonやらで軽いコードを書く機会は増えたものの、 基本的は既存のプログラムに任せっきりで、コマンドを覚えるのは怠ってる。

知らない便利なコマンドはきっと沢山あって、覚えれば作業効率も段違いに上がるだろう予感はするんだけど。 必要に駆られないと存在自体に気付かないことが多い。

で、大量のテキストファイルを一括で文字置換して上書きしたいという状態に陥った。 sedコマンドの存在は知っていたけど、今まではリダイレクトでファイル名を指定していたので、ファイル数が多いとめっちゃ嵩張った。あと作業的にファイル名変えたくない時もあるし。

んでググってみたら解決。-iオプションなんてあったんですね。

sed "" -i 's/a/b/g' *.txt

これで同じディレクトリ内の全txtファイルのファイル名そのままでaをbに変換できる。

VMDで出力する画像を調整する

MDの結果を確認する時に毎度お世話になっているVMDさん。

しかし未だに使い方がよく分からず困る。

よく使う割に毎回悩まされるのが色関係。

VMDは(多分)背景透過ができないので、>Graphics>Colors…>Display>Background>whiteで白背景にしといて、保存画像を別ソフトで透過してるんだけど。

白背景だとなんか背景以外も白っぽくなる(写真の白飛びみたいな)。

背景色を他の色に変えると全体的に若干その色が上塗りされてるような色合いになる。

画面で見る分には良いかもしれないけど、画像として紙に印刷する場合には見栄えが気になる。

仕方ないので画像出力後にちまちま調整してたものの、枚数が多いと辛くなってきた。

多分立体感を出すための設定の問題なんだろうなと思いつつ、VMDの設定を色々弄っていたら白飛びが改善できたのでメモ。

デフォでは>Display>Display SettingsのCue Densityが恐らく0.32になっているが、これを下げると白っぽさが落ちていく。(主観では0.27くらいがちょうど良い?)

あるいはCue ModeをLinearにしても良い感じ(デフォは恐らくExp2)。

奥行きの設定のためのパラメータのようだけど、詳しくは分からない。

pythonでのファイルオープン数の上限エラー回避

普段使っているスクリプトで以下のようなエラーが出た。

IOError: [Errno 24] Too many open files: 'input.txt'

このスクリプトにはforで複数回openするコードが入っており、今回は特に幾千万レベルを回す処理だったため、上限に引っかかったようだ。

for n in N:
    for line in open('input.txt', 'r'):
    print line

上限を外すことで解決する方法もあるようなのだけど、よく分かってない初心者が根の方を弄るのはやばいと思い、スクリプト側で何とかする事にした。

そういえば最初に読んだpython教本に、開いたら閉じなさいって書いてあったなあ……と思い出し、毎回閉じるようにしたら通った。

for n in N:
    f = open('input.txt', 'r')
    for line in f:
        print line
    f.close()

安全に次のジョブを流す方法

例えばGromacsなんかはMDを行うと、基本的には設定した保存間隔置きに出力ファイルを書き足していきますが、1つ例外のファイルがあります。

groファイルには最終構造のみが記述されるため、計算が終了するまで出力されないのです。

これを利用して、計算Aのgroファイルが見つかったら次の計算Bへ、という命令をスクリプトに組み込めば、実は計算Aが途中で止まっていたけど構わずBが始まってしまった、という凡ミスを無くすことができます。

#ファイルがない間ループ
while (! -f mdA.gro)
    echo mdA.gro not exist
    sleep 300   #300秒=5分置きに探す
end
echo mdA.gro exist!

#以降に次の処理が続く

この方法は結構前に後輩から聞いて良いな!と思ったものの、当時の自分(シェルスクリプト初心者)では上手く書けず失敗し、放置していたのでした。