f

2014-07-27

Solve conflict of zsh zaw plugin

前回の記事でzshのzawプラグインの問題が解決できたと思っていた。しかし,zaw-cdrの問題に遭遇した。試行錯誤の上,この問題も解決した。ここでzshのzawに関する問題と解決策について整理する。

まず,zshのzawプラグインは Emacsの anythin.el やVimのunite.vimのようにディレクトリやファイル,プログラムへのアクセスなど普段の作業に必要なものをzsh上でアクセスするための機能を 提供するものだと私は認識している。例えばzaw-cdrという機能を使えば,最近アクセスしたディレクトリに瞬時に移動ができ,作業効率の向上が見込まれる。

問題

zawプラグインを導入する際に生じた問題について説明する。問題は大きく以下の3種類だ。

  1. zsh起動時にfilter: と表示され絞り込み検索状態になり,C-gで解除してもすぐに同じ状態になり,zshで作業できない。
  2. zsh-cdr の機能を使うために定義したキーを入力すると以下のエラーメッセージが表示され実行できない。
    zaw-src-cdr:2: closing brace expected
  3. auto-fu プラグインをzawより先に読み込むと,zawの絞り込み検索を使うには最初にC-gでキャンセルしてからでないとzawの機能が使えない。

1.の問題の解決策は冒頭に上げたとおり前回の記事で対処した問題である。2.の問題は1.の問題を解決した後に発覚した問題である。3.の問題は他のプラグインとの競合の問題である。

問題の発生条件

1.と2.と3.の問題が発生する状況について説明する。

zshの起動時にfilter: から抜け出せない問題の再現

この問題の発生は以下の二つの条件が重なって生じる。

  1. パッケージマ ネージャーantigenによりzawを管理している。
    antigen-bundle zsh-users/zaw.git
  2. lsのaliasを-Fオプションをつけて定義している。
    alias ls="ls -F"

antigenによりzawを管理していければこの問題は発生しない。正確にはsource antigen.zshを実行すると問題が発生する。この問題は 以下の.zshrc を使うこ とで再現できる。antigenによりパッケージ管理をする都合上,最初にantigen をインストールしておく。以下の.zshrcの2行目から3行目のコメント文で記述したコマンドを入力することでantigenのインストールはされる。 zawはzshの起動時に自動的にインストールされる。

##~/.zshrc
#mkdir ~/.zsh/
#cd ~/.zsh
#git clone https://github.com/zsh-users/antigen.git
alias ls="ls -F"
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
  ADOTDIR=$HOME/.zsh/
  source ~/.zsh/antigen/antigen.zsh
  antigen-bundle zsh-users/zaw
  antigen-apply
fi

zaw-cdr実行時のzaw-src-cdr:2: closing brace expectedの再現

この問題は以下のコマンドによりオプションをどこかで有効にしていると発生する。

setopt sh_word_split

問題の起こる最小限の.zshrcを以下に示した。

## .zshrc
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
  ADOTDIR=$HOME/.zsh/
  source ~/.zsh/antigen/antigen.zsh
  autoload -Uz chpwd_recent_dirs cdr add-zsh-hook # valid zsh cdr
  antigen-bundle zsh-users/zaw.git
    bindkey "^m^m" zaw-cdr
  antigen-apply
fi
setopt sh_word_split
# source ~/.zsh/repos/https-COLON--SLASH--SLASH-github.com-SLASH-zsh-users-SLASH-zaw.git/zaw.zsh

この問題はzawをantigenで管理していようが,上記の.zshrcの最終行にコメ ントで書いたようにsourceコマンドで直接zawを有効にしても発生する。具体的にはzshを起動後にC-m C-mによりzaw-cdrの絞り込み検索に移行しようとすると以下のエラーが表示される。

zaw-src-cdr:2: closing brace expected

auto-fuとの競合の問題の再現

この問題はzshのインクリメンタル補完を行ってくれる,auto-fuプラグインとの競合により起こる。auto-fuプラグインをzawプラグインより先に読み 込むとauto-fuプラグインの機能が優先され,最初にC-gでキャンセルしないと,zawの各種絞り込み機能が使えなくなる。C-m C-mによりzaw-cdrの絞り込みもできないし,C-x;による標準の絞り込み検索もできない。

問題の起こる最小限の.zshrcを以下に示した。

## .zshrc
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
  ADOTDIR=$HOME/.zsh/
  source ~/.zsh/antigen/antigen.zsh
  antigen-bundle hchbaw/auto-fu.zsh # need unsetopt sh_word_split
    zle-line-init () {auto-fu-init;}
  autoload -Uz chpwd_recent_dirs cdr add-zsh-hook # valid zsh cdr
  antigen-bundle zsh-users/zaw.git
    bindkey "^m^m" zaw-cdr
  antigen-apply
fi

また,auto-fuもsh_word_splitのオプションを有効にしている問題が発生する。以下のエラーが表示される。

afu-register-zle-accept-line:local:3: not valid in this context: $afufun
hi=''
zstyle=''
zle=''

この問題は開発者のhchbawさんも公認している問題で以下で発言がある。

auto-fu.zsh を読み込む際には、unsetopt sh_wordsplit してくださいませ。
auto-fu.gif

確認はしていないが,おそらくantigenを使っていなくても auto-fuとの競合は発生すると思われる。

解決策

上記で示したzawをめぐる3点の問題に対して解決策を示す。問題と対処方法の流れを以下の図に示し た。

zawプラグインの問題対処の流れ

大きく以下の2条件により対処法が異なる。

  1. antigen によるパッケージ管理の有無。
  2. auto-fu の有無。

1. antigenによるパッケージ管理を行っている場合,zawを 読み込む前に以下のコマンドを実行してはいけない。zawを読み込む前なので.zshenvにも記載があってはならない

alias ls="ls -F"

2. auto-fuをzawを使う場合はzawをauto-fuよりも先に読み込む。

auto-fuとzawの両方に共通する事項として,sh_word_splitのオプションは有効にしない。zshではデフォルトではsh_word_splitオプションは無効になっているので通常は何も書かなければ問題ない。念の為に以下のコマンドで明示的に解除しておくのもよいだろう。

unsetopt sh_word_split

最後に以下の2条件に当てはまる人(自分)がすべき設定をまとめる。

  1. antigenによりパッケージ管理を行っている
  2. zawとauto-fuを読み込んでいる

以下の3条件をこなせば問題なくzawを運用できる。

  1. zawの前にalias ls="ls -F"は書かない。
  2. zawの設定を auto-fuの前に書く。
  3. setopt sh_word_splitを書かない。

ここまでで説明したzawの問題に対処して動作する最小限の.zshrcを参考までに以下に示す。

## .zshrc
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
  ADOTDIR=$HOME/.zsh/
  source ~/.zsh/antigen/antigen.zsh
  ## zaw-cdr
  autoload -Uz chpwd_recent_dirs cdr add-zsh-hook # valid zsh cdr
 
  antigen-bundle zsh-users/zaw.git
    bindkey "^m^m" zaw-cdr
  ## auto-fu
  antigen-bundle hchbaw/auto-fu.zsh # need unsetopt sh_word_split
    zle-line-init () {auto-fu-init;}
  antigen-apply
fi

参考

参考として記事中に登場した各パッケージのリポジトリのURLを示しておく。

2014-07-26

Cannot exit zsh zaw filter: search mode

zshのプラグインzawをantigenによりインストールしてzshを起動すると,以下のようにfilter:の絞り込み検索の状態で起動する。C-gで解除しても即座にfilter:の状態に戻るためzshで操作できない。

filter:

zshでの作業が完全に止まるため, 致命的なバグだといわざるを得ない。原因を調べるとこの現象は以下の3条件が重なると発生するようだ。

  1. lsの aliasに-Fオプションをつけている。
    alias ls="ls -F"
  2. antigen でパッケージ管理をしている。
    source antigen.zsh
  3. zawパッケー ジを読み込んでいる。
    asource zaw.zsh

原因が発生する最小構成の.zshenvを以下に掲載した。コメント文で書いている方法で,事前に~/.zshにantigen.gitをインストールしておく。zawはzshの起動時に自動的にインストールされる。以下の.zshenvファイルを~/に配置してzshを起動するとfilter: の状態となり,抜け出すことができない。

##~/.zshenv
#mkdir ~/.zsh/
#cd ~/.zsh
#git clone https://github.com/zsh-users/antigen.git
alias ls="ls -F"
if [ -f ~/.zsh/antigen/antigen.zsh ]; then
  ADOTDIR=$HOME/.zsh/
  source ~/.zsh/antigen/antigen.zsh
  antigen-bundle zsh-users/zaw
  antigen-apply
fi

この問題の解決策として以下の3種類が考えられる。

  1. lsの aliasから-Fオプションを外す。
  2. antigenによるパッケージ管理をやめ,preztoに乗り換える。
  3. zawの利用をやめる。

現実的な対処法としては,1.のlsのaliasから-Fオプ ションを外すことだろう。これが一番変更が少なくて済む。

複数パッケージの競合による問題のため,どちらに知らせればよいかわからない。よろしければどなたかこの問題を開発者に伝えていただければ幸いである。

以下にリポジトリへのリンクを記載しておく。

また,zawの読み込みはauto-fuより前にかかないと動作しない模様。

2014-07-27追記

.zshenvに,上記で記載したalias ls="ls -F"を指定していたのが原因だった。.zshrcにaliasを移せば動作した。

2014-07-24

WindowsでのPythonデスクトップアプリ開発環境構築

Windows環境でもPythonのちょっとしたプログラムを汎用化して他の人に渡せるようにしたい。しかし,これにはいくつか問題がある。ここではそれらの問題の自分なりの解決策を示していきたい。大きく以下の構成で記述していく。

  1. Python環境の整備
  2. GUI
  3. exe化
  4. サンプルアプリ
    1. PyQt4
    2. Tkinter
  5. まとめ

Python環境の構築

Pythonプログ ラムはPythonがインストールされていないと動かないので,動作確認もできない。Python環境を構築するために,いろいろなPythonのディストリビューションがある。例えばAnacondaやEnsightなどだ。 WindowsでのおすすめはPython(x, y)を使うことだ。

2016-08-10追記:この記事はもともと2014-07-24に書かれ,内容が古くなったので少し修正。

今はもうPython(x, y)はお勧めでない。なぜなら,Python(x, y)はPython2系しか使えないからだ。現在では,Python2系と3系の両方を提供しているWinPythonAnacondaがお勧めだ。WinPythonはWindows専用で,ポータビリティに重点が置かれたディストリビューションで,USBなどにインストールしてそのまま使えるようになっている。Anacondaはクロスプラットフォームで独自のcondaというパッケージ管理システムを持っている。デスクトップでメインの開発環境として使うなら,Anacondaがよいだろう。

このインストーラーを使うことで,QtやwxPythonやpipなどたいていのPython関係のモジュールやプログラムインストールできる。おそらくこれひとつでPython環境の構築は事足りる。不足しているもの(例えばBasemap)などは追加でインストーラーからインストールするか,一緒についてきたpipでインストールすればよい。

GUI

Pythonで作ったプログラムを他の人にも使ってもらえるようにするには,GUIを搭載したものがやはりよいだろう。PythonでGUIを実現するためのライブラリはいくつかある。主要なものは以下4種類だろう。

  • PyQt(PySide)
  • wxPython
  • Tkinter
  • PyGTK

これら4種を主観で比較すると以下となる。

機能
PyQt>wxPython=PyGTK>Tkinter
ライセンス
Tkinter=wxPython>PyGTK=PySide>PyQt
手軽さ
Tkinter>wxPython=PyGTK>PyQt

機能やコミュニティーとしては,PyQtが一番安定している。ライセンスとしては,TkinterとwxPythonがゆるく(BSD系),商用利用も問題ない。PyQtはQtをベースにしたウィジェットである。こちらはオープンソースプロジェクトならフリーに使えるが,商用だと有料となる。

どのライブラリを採用するかは用途によって変わってくる。

PyQt
パフォーマンスや品質,大規模プロジェクト
Tkinter
手軽さ

パフォーマンスや品質,大規模プロジェクトを念頭に置くなら,PyQt一択となるだろう。しかし,個人で既存のPythonプログラムにGUIをちょっと付け足したいくらいなら,Tkinterがよいだろう。Tkinterはtcl/tkというライブラリがベースとなっている。Python標準のライブラリとなっており,Pythonさえインストールされていれば,パッケージングしなくてもそのまま配布可能だ。PyQtやwxPythonはPython非標準ライブラリなので,配布時にはパッケージングが必須となる。また,ライブラリ自体もこれら3種の中では最も小さいので,全体的に手軽で個人でGUIを作るのに向いている。

wxPythonは,手軽さや機能がPyQtとTkinterのちょうど間の位置づけとなっている。個人的には,wxPythonやPyGTKを使うくらいならPyQtかTkinterでよいと思う。おそらく,機能性が要求されるが,ライセンス的に商用利用を視野に入れる場合や,GTK+やwxWidgetsの開発経験を活かす場合にwxPythonやPyGTKを使うことになるのだろうと思う。

私はLinuxと同じ環境で開発できることから,Windowsでは基本的にCygwinやMSYS2を使っている。CygwinだけでPythonのGUIを開発するのは非常に困難だ。CygwinでインストールするPyQtやwxPythonなどの各種のPython GUIモジュールはインストール自体が困難であり,しかもX Windows上でしか動作しない。つまり一旦Cygwinで以下のようにstartxコマンドを実行してXを起動してX Windows上でしか動作しない。

startx

ここは妥協してGUIの 動作確認はPythonxyでインストールしたWindowsのPythonを実行することで確認することがベストだ。ソースの記述だけはCygwinか ら行い動作の確認のみ以下のようにしてWidowsのPythonで起動して確認する。

C:/Python27/python.exe GUIプログラム.py

なお,単にファイルをダブルクリックしたり,以下のコマンドでデフォルトのプログラムで起動しても問題ない。 おそらくこちらの方が確認は楽だろう。

cygstart GUIプログラム.py

exe化

PythonでGUIやその他の便利なプログラムを作ったとしても他の人が使えるとは限らない。独自のモジュールを使っていたり,利用者にPython環境がないことも ありえるからだ。この解決策は,Pythonプログラムをバイナリ化(exe)にすることだ。こうすることでWindows環境でPythonのない環境でもPythonのデスクトップアプリを実行できる。

Pythonプログラムのexe化にはいくつか方法がある。例えば以下のプログラムを使ってパッケージ化するのが一つの方法だろう。

  • py2exe
  • cx_Freeze

しかし,上記のプログラムを利用した場合,作成されたexeファイルとともに共有ライブラリ(.dll)ファイルが必要となる。つまり,exeファイルとdllファイルを同じディレクトリに配置しないといけない。またはPATHを通しておかないといけない。他人に渡すことを考えるとはっきりいって邪魔くさい。単一のexeファイルだけでスタンドアローンで実行するようにするのが親切だろう。多少ファイルサイズがでかくなったとしてもだ。

これを実行するよい方法がある。それはpyinstallerを使うことだ。これを使うことで驚くほど簡単に単独で動作するexeファイルを作れる。py2exeやcx_Freezeを試すのがバカらしくなってしまった。

参考

まず,前提としてWinPythonやAnacondaでPython環境をインストールしておく。

  1. コマンドプロンプトを開く。
  2. 以下のコマンドを実行してPyInstallerをインストール
pip install pyinstaller

これで準備は完了。例えばhoge.pyファイルをバイナリにするときは以下のコマンドを実行する。

pyinstaller -F --noconsole hoge.py

なおWindowsで動作するようにしたければWindowsのPyInstallerでexe化しないといけない。Cygwinからやる場合は,例えば以下のようにしてこのときだけ先ほどインストールしたWindowsのPyInstallerを使う。

C:/Python27/Scripts/pyinstaller -F --noconsole hoge.py

また,デメリットとしてバイナリサイズが肥大化する。例えば以下で掲載した簡単なアプリでもPyQtで16 MB,Tkinterで9 MBほどになる。これは必要なDLLやモジュールを一つのファイルにまとめたことによる弊害である。ただ,サイズの大きさよりも単独で動くものを作れるメリットのほうが大きいので,この問題には目をつぶることにする。

サンプルアプリ

以上の手順によりWindowsにおけるPythonデスクトップアプリ開発環境が整った。試しにPyQtとTkinterのサンプルアプリを起動させてみよう。

以下のコードを適当な名前で保存してバイナリ化してみよう。

PyQt4

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# hello-qt4.py
#
# Here we provide the necessary imports. # The basic GUI widgets are located in QtGui module. import sys from PyQt4.QtGui import * # Every PyQt4 application must create an application object. # The application object is located in the QtGui module. a = QApplication(sys.argv) # The QWidget widget is the base class of all user interface objects in PyQt4. # We provide the default constructor for QWidget. The default constructor has no parent. # A widget with no parent is called a window. w = QWidget() w.resize(320, 240) # The resize() method resizes the widget. w.setWindowTitle("Hello, World!") # Here we set the title for our window. w.show() # The show() method displays the widget on the screen. sys.exit(a.exec_()) # Finally, we enter the mainloop of the application.

引用元:PyQt - Wikipedia

PyQt4での表示例

Tkinter

#!/usr/bin/env python3
# hello-tkinter.py

import tkinter as tk class Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.pack() self.createWidgets() def createWidgets(self): self.hi_there = tk.Button(self) self.hi_there["text"] = "Hello World\n(click me)" self.hi_there["command"] = self.say_hi self.hi_there.pack(side="top") self.QUIT = tk.Button(self, text="QUIT", fg="red", command=root.destroy) self.QUIT.pack(side="bottom") def say_hi(self): print("hi there, everyone!") root = tk.Tk() app = Application(master=root) app.mainloop()

引用元:25.1. tkinter — Tcl/Tk の Python インタフェース — Python 3.5.1 ドキュメント

Tkinterでの表示例

まとめ

WindowsでのPython開発環境の構築方法と,GUIライブラリの選定,パッケージング方法について説明し,最後にサンプルアプリのパッケージングまで紹介した。

今後はTkinterを使ったGUIアプリの開発方法を勉強していこうと思う。やはりGUIがあったほうがユーザー(未来の自分)に優しい。そして実益的だと思う。


PythonのCAD(.dxf)ファイル読み書きモジュールまとめ

PythonCADDXFファイルのデータの読み書きしたい。調べても日本語の情報は皆無。あまり使われていないみたい。DXFはテキストなので、自分で作ることも可能だ。しかし、面倒なのでモジュールに頼りたい。既存のPythonDXFファイルを読み書きできるモジュールを調べたので以下の表にまとめた。

4.1: Python DXF module list
名前
バージョン
更新日付
説明
URL
SDXF
1.1.1
201207
Python library to generate DXF drawing files (CAD)。書き出し専用。pipからインストールできない。
pyFormex
0.9.1
20131015
program to create 3D geometry from Python scripts. DXFの読み書き可能。開発も盛んで高機能。
dxfgrabber
0.7.4
20140523
DXFから情報を取得。全DXFバージョンに対応。読み込みのみ対応。
ezdxf
0.6.2
20140508
読み書き可能。DXFから他形式への変換は不可。
dxfwrite
1.2.0
201208
A Python library to create DXF R12 drawings.書き込み専用。


特に有用なのは以下の2モジュール。
  • pyFormex
  • ezdxf
pyFormexOpenFOAMの講習会資料でで名前を見かけたことがある。3次元のCADデータを作成することができる。ホームページを見る限りかなり強力なモジュールだと感じた。しかし、pipのインストールがうまくできないことと、今は2DDXFデータを編集したいので見送り。ただ,いずれ使うことになると思う。
ezdxfPyFormex以外で読み書き両方に対応した唯一のモジュールだった。DXFのバージョン指定もでき高機能だと思った。

当分はezdxfDXFファイルを操作できるようにする。機会をみてpyFormexにも挑戦したい。

2014-07-22

Install OpenFOAM on Ubuntu14.04 by APT

フリーのCFDソフトOpenFOAMは近年いろいろな分野で活用され業績がめざましい。今後のために使えるようになりたい。手始めにOpenFOAM 2.3.0Ubuntu14.04上にインストールする。
OpenFOAMはパッケージマネージャーであるAPTのパッケージが用意されておりそれを利用することでかなり簡単にインストールできる。しかし,Ubuntu14.04はまだ新しく出たばかりなので公式には未対応である。そのため,当初はソースコードからのインストールを試みていた。連休を利用して2日かけて挑戦したが,結局エラーによりうまくいかなかった。ソースコードからのインストールを諦め,どうにかAPTでインストールできないか調査していた。その結果APTを使ってUbuntu14.04OpenFOAM 2.3.0Paraview 4.1.0をインストールできた。この手順について掲載していく。
まず,公式のAPTによるインストール方法は以下のサイトで説明されている。
Ubuntu Deb Pack Installation http://www.openfoam.org/download/ubuntu.php


以下の記載の通りUbuntu 14.04は未対応となっている。


Ubuntu Versions
OpenFOAM and Paraview are currently available for the following versions of Ubuntu:


12.04 LTS, codename precise
12.10, codename quantal
13.04, codename raring
13.10, codename saucy

しかし,以下のサイトでwouterが解決方法を示している。
Installing 2.3.0 on Ubuntu 14.04 LTS -- CFD Online Discussion Forums http://www.cfd-online.com/Forums/openfoam-installation/138097-installing-2-3-0-ubuntu-14-04-lts.html


これによると,以下のように変数にUbuntu13.10のコードネームsaucyを入れてやればよいとのこと。
VERS=saucy


以下のコマンドを実行するとうまくAPTのリポジトリにOpenFOAMのパッケージが登録される。
VERS=saucy
sudo sh -c "echo deb http://www.openfoam.org/download/ubuntu $VERS main > /etc/apt/sources.list.d/openfoam.list"
sudo apt-get update


ここまではOK。しかし次が厄介だ。公式のガイドに従うと,後は以下のようにapt-get installするだけとなっている。
sudo apt-get install openfoam230
sudo apt-get install paraviewopenfoam410


paraviewのインストールはうまくいく。しかし,openfoamの方はうまくいかない。実行すると以下のように古いバージョンのlibboost-threadlibopenmpiに依存している注意が表示される。
openfoam230 : Depends: libboost-thread1.53.0 which is a virtual package.
Depends: libopenmpi1.3 which is a virtual package.


これらのパッケージはUbuntu 14.04ではサポートされていない。そのため,過去のリポジトリをAPTに登録してインストール可能にする。
例えば,以下のサイトでUbuntuの過去のバージョンのパッケージのリポジトリのURLが掲載されている。
Ubuntu – パッケージのダウンロードに関する選択 -- libopenmpi1.3_1.4.3-2.1ubuntu3_amd64.deb http://packages.ubuntu.com/ja/precise/amd64/libopenmpi1.3/download


このサイトからlibopenmpi1.3libboost-thread1.53.0の存在するリポジトリを探す。そして,以下のコマンドにより /etc/apt/sources.listの末尾リポジトリを追加して有効にする。
sudo sh -c "echo '
# old repository for OpenFOAM
deb http://cz.archive.ubuntu.com/ubuntu precise main universe
deb http://cz.archive.ubuntu.com/ubuntu saucy main universe
' >> /etc/apt/sources.list"
sudo apt-get update

これで準備が完了した。以下のコマンドでインストールを始める。
sudo aptitude install openfoam230 paraviewopenfoam410

apt-getではなくaptitudeを使うことに注意する。aptitudeだと自動的に依存関係をうまく解消するようにインストールプランを立ててくれる。apt-getだとうまくいかない。

openfoam230のインストール時に依存関係を確認してくるのでnを何回か押して以下のような依存関係が表示されたらyを入力してインストールした。ここの選択はいまいちよくわかっていない。
Install the following packages:
1) blcr-util [0.8.2-15ubuntu2 (precise)]
2) libopenmpi-dev [1.4.3-2.1ubuntu3 (precise)]
3) libopenmpi1.3 [1.4.3-2.1ubuntu3 (precise)]
4) libptscotch-5.1 [5.1.12b.dfsg-2 (saucy)]
5) libptscotch-dev [5.1.12b.dfsg-2 (saucy)]
6) libscotch-5.1 [5.1.12b.dfsg-2 (saucy)]
7) libscotch-dev [5.1.12b.dfsg-2 (saucy)]
8) openmpi-bin [1.4.3-2.1ubuntu3 (precise)]
9) openmpi-checkpoint [1.4.3-2.1ubuntu3 (precise)]
10) openmpi-common [1.4.3-2.1ubuntu3 (precise)]

Keep the following packages at their current version:
11) libopenmpi1.6 [Not Installed]

Leave the following dependencies unresolved:
  1. blcr-util recommends blcr-dkms


これで以下のように/optディレクトリにOpenFOAM2.3.0Paraview 4.1.0がインストールされた。
ls /opt
openfoam230/ paraviewopenfoam410/


後は公式のガイドにあるように以下を.bashrc記入にしてOpenFOAMの変数設定を行っておく。
## OpenFOAM
export FOAM_INST_DIR=/opt/
source $FOAM_INST_DIR/openfoam230/etc/bashrc


なお私の環境ではターミナルを再起動すると以下のエラーが表示された。
gcc: error: unrecognized command line option ‘--showme:link’


これはmpiccが原因。ローカル環境にMPICHmpiccが入っていたのが原因の模様。OpenMPIMPICHmpiccという名前が競合していたようだ。MPICHmpiccをパスから除外したら解決した。
参考:--showme errors -- CFD Online Discussion Forums http://www.cfd-online.com/Forums/openfoam-installation/97581-showme-errors.html


最後に以下のようにしてチュートリアルを実行して動作を確認する。
mkdir -p ~/run/OpenFOAM/
cp -r $FOAM_TUTORIALS !$
cd ~/run/OpenFOAM/tutorials/incompressible/icoFoam/cavity
blockMesh
icoFoam
paraFoam


これでOpenFOAM2.3.0Paraview4.1.0がインストールできた。ここからOpenFOAMの入出力などを勉強していこう。

2014-07-20

GnuCash:予定取引による定期入出金の登録

給料や家賃,公共料金のように定期的に発生する入出金を自動的に処理したいと思った。調べていると予定取引というのから設定できそうだった。やり方をメモする。

アクション -> 予定取引 -> 予定取引エディター

新規作成ボタンをクリック

概要タブ
名前:家賃
☑自動的に作成する(このチェックはどちらでもよさそう)

頻度タブ。ここでは予定の頻度を設定する。以下のように設定した。
開始日:2014-07-01
25th
週末に重なった時:Use next weekday
以下のように入出金の項目を記入する。

以下のように登録される。

後は設定した日付になったら自動的に登録される。
これで周期的・定期的なお金の入出金を登録できた。家賃の他に公共料金や給料もこれで登録できるだろう。
この時点で普通の表計算ソフトでは面倒な該当日が週末の場合の処理を簡単にできた。これだけでもGnuCashを使う方が便利だと思う。他にも便利な機能がありそうなのでまた調べて行きたい。