月別アーカイブ: 2012年9月

AquaTermを使う

MacPortでaquaterm(GNUPLOTで使っています)をinstallします。

他の言語で使いやすい様にシンボリックリンクします。
/opt/local/include/aquaterm ->
/opt/local/Library/Frameworks/AquaTerm.framework/Versions/A/Headers/
/opt/local/lib/libaquaterm.1.1.1.dylib ->
/opt/local/Library/Frameworks/AquaTerm.framework/Versions/A/AquaTerm
/opt/local/lib/libaquaterm.dylib ->
/opt/local/Library/Frameworks/AquaTerm.framework/Versions/A/AquaTerm
libにリンクしている元は
[~/src/aquaterm]file /opt/local/Library/Frameworks/AquaTerm.framework/Versions/A/AquaTerm
/opt/local/Library/Frameworks/AquaTerm.framework/Versions/A/AquaTerm:
Mach-O dynamically linked shared library ppc
です。-I,-Lでパスと-laquatermで使えます。

/opt/local/share/AquaTerm/adapters/にサンプルプログラムがあります。
コピーしてコンパイルしてみます。
C言語
makeのみでOKです。
AquaTerm 1.0.0では、上記のリンクをしてHOME=/opt/localの指定が必要でしたが1.1.1ではしなくてOKでした。

FORTRAN
Makefileを修正します。(g95のみで使うならmake fc=g95でOKです。)
[aquaterm/adapters/fortran]diff /opt/local/share/AquaTerm/adapters/fortran/Makefile Makefile
31a32,38
> ##どちらかを有効にする
> fc=g95
> ##
> fc=gcc-mp-4.7
> LIBS=-lgfortran
> ##
>
60c67
< $(fc) -o demo $(FFLAGS) demo.f f2aquaterm.o $(FRAMEWORK_FLAGS) -framework AquaTerm

> $(fc) -o demo $(FFLAGS) demo.f f2aquaterm.o $(FRAMEWORK_FLAGS) -framework AquaTerm $(LIBS)
63c70
< $(fc) -o eventdemo1 $(FFLAGS) eventdemo1.f f2aquaterm.o $(FRAMEWORK_FLAGS) -framework AquaTerm

> $(fc) -o eventdemo1 $(FFLAGS) eventdemo1.f f2aquaterm.o $(FRAMEWORK_FLAGS) -framework AquaTerm $(LIBS)

PASCAL
フレームワークのパスが指定されていないのでMakefileを修正します。
[aquaterm/adapters/pascal]diff /opt/local/share/AquaTerm/adapters/pascal/Makefile Makefile
2c2
< PFLAGS=

> PFLAGS= -k-F/opt/local/Library/Frameworks/

これを使えばアルゴリズム事典のプログラムでGNUPLOTでグラフィック出力していたのが
直接使える様になるとおもいます。

Python
demo.pyのパス部分を下記に修正して、
objc.loadBundle(“AquaTerm”, globals(), bundle_path=’/opt/local/Library/Frameworks/AquaTerm.framework’)
/usr/bin/python demo.py
で表示されました。
MacPortのPythonだと
[aquaterm/adapters/python]python demo.py
Traceback (most recent call last):
File “demo.py”, line 1, in
import objc
ImportError: No module named objc
になってしまいした。
追記10/23
portでpy26-pyobjc-cocoaをinstallすることで、上記エラーは出なくなりAquaTermが起動しますがwindowが表示されません。

Ruby
とりあえず動きました。
/System/Library/Frameworks/RubyCocoa.framework/Resources/ruby/osx/objc/oc_import.rb
FRAMEWORK_PATHS = [
‘/System/Library/Frameworks’,
‘/Library/Frameworks’
]
にパスを追加するか
cd /Library/Frameworks/
sudo ln -s /opt/local/Library/Frameworks/AquaTerm.framework AquaTerm.framework
シンボリックリンクを作成
demo_bridgesupport.rbがエラーになるので、pythonのdemo.pyをまねて、
[aquaterm/adapters/ruby]cat demo.rb
require ‘osx/cocoa’
include OSX
OSX.require_framework ‘AquaTerm’

adapter = AQTAdapter.alloc().init()
adapter.openPlotWithIndex_(1)
adapter.setPlotTitle_(“Testview”)
adapter.setPlotSize_(NSMakeSize(620,420))
adapter.addLabel_atPoint_angle_align_(“Hello from ruby”, NSMakePoint(200,200), 0.0, 1)
adapter.renderPlot()
を作成して
[aquaterm/adapters/ruby]/usr/bin/ruby demo.rb
で表示出来ました。pythonと同様MacPortでinstallしたものでは、エラーが表示されます。
追記10/23
portでrb-cocoaをinstallすることで、上記エラーは出なくなり正常に表示されました。

Perl
READMEに有る様に
perl Makefile.PL
make
sudo make install
して、HOW_TO_USEのAN EXAMPLE PERL SCRIPT:をコピーしてdemo.plを作成します。
[aquaterm/adapters/perl]which perl
/opt/local/bin/perl
を確認して、demo,plの1行目を書き換えて
chmod +x demo.pl
./demo.pl
で実行できました。

Lisp
1.cl-aqt.asdを/opt/local/lib/sbcl/site-systems/にコピー
2.cl-aqt.lispのパスを変更
(let ((aqt-lib-name (find-foreign-library “libaquaterm” (list “/opt/local/lib/” “/sw/lib/”))))
3.uffiのインストール
(require ‘asdf)
(require ‘asdf-install)
(asdf-install:install :uffi)
ここまで準備して
sbcl –script cl-aqt.lisp
でも
(compile-file “./cl-aqt.lisp”)
でも
The name “UFFI” does not designate any package.
になってしまいます。
3のインストールで
CL-USER> (asdf-install:install :uffi)
Install where?
1) System-wide install:
System in /opt/local/lib/sbcl/site-systems/
Files in /opt/local/lib/sbcl/site/
2) Personal installation:
System in /Users/isomura/.sbcl/systems/
Files in /Users/isomura/.sbcl/site/
–>
1、2両方試したけど駄目でした。
上記パスにはファイルは存在しています。
動いたら追記します。
追記 11/16
cl-aqt.lispの最初に
(require ‘uffi)
を追加して、最後に
(test-aqt)
を追加します。
sbclを起動して
(load “cl-aqt.lisp”)
で表示されました。

OpenCVでQtを有効にビルド

Qtを有効にしてOpenCVをビルドすると


になります。
下の白い部分はステータスバーで画像には出ていませんがRGBの値が表示されて邪魔です。

CV_GUI_EXPANDED = 0x00000000, //status bar and tool bar
CV_GUI_NORMAL = 0x00000010, //old fashious way
で定義されているので、デフォルトでstatus bar and tool barが有効にになっています。
そこで
cvNamedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE | CV_GUI_NORMAL);
に変更すると


になります。

fpcで多倍長計算

アルゴリズム事典の多倍長計算を試してみました。
procedureのみなので実行出来る様に
program tabai;
{$INCLUDE CHAP04.PRG}
begin
ComputeE;
ComputePi;
end.
を作成してコンパイルしました。
警告はでましたがコンパイルできました。
実行するとeは求まりますがpiは、
被除数が大きすぎます
と連続で表示されてしまいます。
結局
const N = 400;
に変更することでpiも求まりました。
実行結果

Pi * 100 ^ 400 = 314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631846

fpcでファイル入出力

ネットでPascalのファイル入出のサンプルプログらをfpcでコンパイルするとエラーになりました。
reset(readOnly, readFileName);
rewrite(writeOnly, writeFileName);
の部分でエラーになります。SPARCompiler用のソースでfpcでは
Assign(readOnly, readFileName);
reset(readOnly);

Assign(writeOnly, writeFileName);
rewrite(writeOnly);
に修正して動きました。

Free Pascal

Free PascalのサイトからPPC Mac用をダウンロードしてインストールしました。
SoftwareTechnology12 コンピータアルゴリズム事典のソーコードが
algo_pas.lzhで公開されているのでそのソースを使います。(c言語版と同じところにあります)
解凍して
nkf -Lu -w
で文字コードと改行コード変更します。
残念なことに章毎で1ファイルになっているので、
program 名前
処理
end.
の部分毎に切り分けてそれぞれ別ファイルにします。
後は
fpc ファイル名
で実行出来るファイルができます。
[~/src/PASCAL/algo_pas]fpc Water.pas
Free Pascal Compiler version 2.6.0 [2011/12/22] for powerpc
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Darwin for PowerPC
Compiling Water.pas
Assembling (pipe) Water.s
Linking Water
32 lines compiled, 3.3 sec

第10章グラフィックは、出力処理が必要になるので共通部分を別ファイルににして
インクルードするようにしました。
使う側
program CCurve(Plotter);
{$INCLUDE plot.pas}
 略

共通ファイル(plot.pas)
CHAP10.PRGから
(***** 線分を描く *****)
 略
(***** 円を描く *****)
 略
(***** プロッタのシミュレーション *****)
 略
を切り出してさらに出力用に
(***** Dot *******)
procedure Dot(X, Y: integer);
begin
(* [x,y]にドットを書く*)
end;
を追加する事でコンパイル出来る様になりました。
実際に出力するにはDotの中身を作成する必要があります。
c言語版のようにGNUPLOTを使うのが簡単そうです。