MacOSXにxlispstatをインストールする

簡単にインストールできるはずが,意外なところでつまづいたのでメモ

---------------------------------
##セットアップ方法
#1 とりあえずxlispstatのダウンロード
とりあえずxlispstatのソースファイルをダウンロードする
ここからダウンロードできるはず.

#2 とりあえずインストールしてみる
tarコマンドで解凍してセオリー通り

tar -zxvf xlispstat-3-52-20.tar.gz
cd xlispstat-3-52-20
./configure
make
sudo make install

に持って行きたいところだけど,makeの段階で
lowess.c:15: error: static declaration of 'fmax' follows non-static declaration
make: *** [lowess.o] Error 1
とエラーが出てコケてしまう.
どうもlowess.cが悪さをしているみたい.

#3 lowess.cの修正
そこでlowess.cの修正が必要なわけだけど,色々調べてみると7行目の
#ifdef MACINTOSH
が原因らしい.
そこでその部分を
#ifdef __APPLE__
に書き換えて,もう一度

./configure
make
sudo make install

をかけたところ上手くインストールできた.
---------------------------------

とりあえずこれでxlispstatのインストールは完了.
ちなみにグラフの描写とかをする場合は,X11上でxlispstatを起動しないと上手くいかないので注意が必要.



Rからxlispstatを呼び出すRXLispのセットアップ方法

少々…というか正攻法でいくとかなり面倒くさかったのでメモ

#参考URL:

1.R Special Interest Group on Macintosh Development and Porting, both for MacOS 8.6 - 9.x and MacOS X : RXLisp

2.The RXLisp package



#注意


もしかしたらxlispstatがインストール済みじゃないと動かないかもしれないので,まだインストールしていない人は,別の記事に書いてある「MacOSXにxlispstatをインストールする」を参考にしてインストールした後で,コッチの作業をやってもらえると安心かも


---------------------------------

##セットアップ方法

#1 RXLispをセットアップする.


正攻法でセットアップしてみようとしたけど,色々とエラーが出るのでギブアップ.

参考URL1.にあるシェルスクリプトを実行したところ上手くいったので,こちらの方法をとった方が正解かも.

ただそのシェルスクリプトは,幾つか妙なところで改行が加わってしまっているので(恐らくメーリングリストの内容だから,強制改行が加わっているのかも),そこを修正する必要有り.

いちおう修正済みのやつを作っておいたので,それをダウンロードして実行すればセットアップできるはず.

修正済みシェルスクリプトファイル setup_rxlisp.sh

上のシェルスクリプトファイルをダウンロードしたら以下のコマンドを実行.

cd /hoge(シェルスクリプトファイルをダウンロードしたディレクトリ)
sudo sh setup_xlisp_rxlisp.sh



#2 ファイルの修正

#1で基本的なセットアップは終わっているけど,R内でLibraryをロードしてサンプルコマンドを実行しようとすると,

; loading "/Library/Frameworks/R.framework/Versions/2.5/Resources/library/RXLisp/xlisp/ObjectManager.lsp"

error: unbound function - DEF

error: can't load file - "/Library/Frameworks/R.framework/Versions/2.5/Resources/library/RXLisp/xlisp/ObjectManager.lsp"

というエラーが出る.

どうやら

/Library/Frameworks/R.framework/Versions/2.5/Resources/library/RXLisp/xlisp/ObjectManager.lsp

というファイルが悪さをしているようなので,それを修正してみる.

エラーメッセージに

error: unbound function - DEF

と書いてあるので,恐らくはdefunと書くべき所をdefと書いてしまっているのだろう.
でもxlispstatはdefでも出来たはずなんだけど…おかしいなぁ.

違和感を感じつつObjectManager.lspのファイルを覗いてみると,

(def ReferenceManager (createReferenceManager))

という記述を発見.

そこで

(defun ReferenceManager (createReferenceManager))

という風に修正して,もう一度ロードをしてみると上手くいく.

---------------------------------

コレでR上でxlispstatが呼び出せるようになった.

実際にサンプルを動かしてみたけど,上手くいっているようなので安心.

##追記(重要)
上記の方法を使うだけだと,幾つかのコマンド("histogram"とか)が実行できないという問題が発生してしまう.
どうやらxlispstatの基礎的なコマンドを読み込んでくれていないらしい.
ココを参考に変えてみる.
まず,xlispstatのxlisp.wksを/Library/Frameworks/R.framework/Resources/library/RXLisp/xlisp/以下にコピーする.

cp /usr/local/lib/xlispstat/xlisp.wks /Library/Frameworks/R.framework/Resources/library/RXLisp/xlisp/

これが終わったらR上でLibraryをロードして,以下のコマンドを実行する.

library(RXLisp)
.XLispInit(c("xlisp",paste("-w",system.file("xlisp","xlisp.wks",package="RXLisp"),sep='')))

これでエラーメッセージも返してこないし,"histogram"とかのコマンドも使えるようになった.

ちなみにいちいち上のコマンドでやるのが面倒くさい場合は

.XLispInitArgs = c("xlisp",paste("-w",system.file("xlisp","xlisp.wks",package="RXLisp"),sep=''))

で従来通りの.XLispInit()コマンドで作業できるようになる見たい.

とりあえずこれでRXLispはきちんと動くようになった模様.
めでたしめでたし.



OSXのzshで日本語入出力を行う.

試行錯誤を行った結果,ようやく出来たのでメモ.
色々と設定を変えたりしてみたけど,結局はzshのバージョンに問題があったらしい.
OSXのデフォルトのzshのバージョンは4.2で,日本語入力は4.3以降で対応しているみたい.

というかばっちり方法を載せてくれているありがたいサイトがありました.

#参考サイト
Mac OSX x zsh で日本語表示 & 入力 - Hasta Pronto.org

---------------------------------
##セットアップ方法
#1 zshをインストールしよう.

curlでやっても通らなかった(ちなみにOSXではデフォルトでwgetは入っていない)ので,結局は直にダウンロードしてきました.
SourceForgeのzshのページからzsh-devダウンロードできます.
ちなみに2007/9/1現在の最新バージョンは4.3.4
zsh-4.3.4.tar.gzをダウンロードしたら,ダウンロードディレクトリに移動して,./configureでいつもの流れ.
今回は/usr/local/bin/にインストール.

tar xzvf zsh-4.3.4.tar.gz
cd zsh-4.3.2
./Util/preconfig   
./configure --enable-multibyte --enable-locale
make
sudo make install

これで/usr/local/bin/以下にzshの最新版がインストールされる.

#2 Terminal.appの設定をしよう.
Terminal.appの設定はターミナルメニューにある「ウィンドウ設定」から行う.
ウィンドウ設定を選択したら,以下の作業を実行.
・「エミュレーション」選択.「非ASCII文字をエスケープする」のチェックボックスを外す.
・「ディスプレイ」を選択.「日本語や中国語などにワイドグリフを使用する」と「ワイドグリフは2桁とカウントする」にチェックを入れる.

#3 .inputrcのセッティングをしよう.
ホームディレクトリに.inputrcというファイル名で以下の設定を記述.

set convert-meta off
set meta-flag on
set output-meta on

---------------------------------
多分コレでzshで日本語の表示と入力が出来るはず.



J言語でCやFortranのプログラムを読み込む



JでCやFortranのプログラムを呼び込む方法のメモ
基本的なやり方は両方とも同じ.でもFortranで呼び込んで計算する時に少し工夫が必要.
まだ幾つか謎な部分があるけど,とりあえずこの方法で殆ど動く.

とりあえず和差積商を求めるプログラムで呼び込んでみる

calc.c
calc.f

###用意するもの
FortranやCのソースファイル
RのR CMD SHLIBコマンドが実行できる環境

Jでドメインエラーが起きてもめげない根性

###実行方法
+++++++++++++++++++++++++++++++++++++
###Cの場合

##Cのソースファイルから共有ライブラリ.soを作る

cd /hogehoge/calc.c   
#ターミナルを起動して対象のフォルダへ移動

R CMD SHLIB calc.c    #共有ライブラリ.soの作成

これでcalc.soというファイルが作成される.

##Jで呼び込んで計算する
#スクリプトのロード

load 'dll'

#.soファイルの場所(フルパス)と関数名,変数を指定する.

u1 =: '/hogehoge/calc.so calc n *d *d *d *d *d *d'   
今回の場合は

.soファイルの名前 calc.so

関数名 void calc{}

変数 double *m, double *n, double *a, double *b, double *c, double *d

なので,*d *d *d *d *d *dのような状態になる.
変数はint型ならiなどに変わる.
nは何を意味しているんだろう.

#値の入力

u2=:(<,1.0),(<,2.0),(<,0.0),(<,0.0),(<,0.0),(<,0.0)
とりあえず1と2の和差積商を求める.
答えになるところの変数の値は0.0を入れておく.
いまいち分からないけど,「,」がネックになっているみたい.

#出力
u1 cd u2
と入力すると
+-+-+-+-+--+-+---+
|0|1|2|3|_1|2|0.5|
+-+-+-+-+--+-+---+
となり答えが出る.


+++++++++++++++++++++++++++++++++++++

###Fortranの場合
##Fortranのソースファイルから共有ライブラリ.soを作る

cd /hogehoge/calc.f   
#ターミナルを起動して対象のフォルダへ移動

R CMD SHLIB calc.f    #共有ライブラリ.soの作成

これでcalc.soというファイルが作成される.

##Jで呼び込んで計算する
#スクリプトのロード

load 'dll'

#.soファイルの場所(フルパス)と関数名,変数を指定する.

u1 =: '/hogehoge/calc.so calc_ n *d *d *d *d *d *d'   
今回の場合は

.soファイルの名前 calc.so

関数名 subroutine calc

変数 real*8 a,b,c,d,e,f
Fortranの場合は.soファイルの場所(フルパス)と関数名,変数を指定する時に,プログラムで設定した関数名の後に_をつけないと読み込んでくれない.

たとえばcalc.fでは関数名にcalcという名前をつけているけど,Jで呼び出すときはcalc_にしないと読み込んでくれないみたい.

#値の入力

u2=:(<,1.0),(<,2.0),(<,0.0),(<,0.0),(<,0.0),(<,0.0)
これに関してはCの場合と同様

#出力
u1 cd u2
と入力すると
+-+-+-+-+--+-+---+
|0|1|2|3|_1|2|0.5|
+-+-+-+-+--+-+---+
となり答えが出る.



J言語でPGMファイルを読み込む

JでPGMファイルを読み込む方法のメモ
ふつうに数値を読み込んで行列化するだけでは表示されないので困っていたら,先生が表示可能にできるプログラムを組んでくださりました.
Macでも表示可能.

##実行方法
#スクリプトのロード
load 'files misc'
load'~addons/media/image3/view_m.ijs'



#ファイル読み込み(実行するとファイル選択ウィンドウが立ち上がる)
im=:fread fselect''

#PGMファイルを表示できるように変換するためのプログラム
    crlfdel=: 3 : 0
u=.(y ~: CR) # y
' ' ((u=LF)#i.$u)}u
)

genpgm=: 3 : 0
u=.(0 1){y
if. ('P2'-:u)=1 do. w=.LF=y
   w=.+/\w
   u=.3}.y
   while.'#'=0{u do. w=.LF=u
     w=.+/\w
     w=.0<w
     u=.}.w#u
   end.
   w=.LF=u
   w=.+/\w
   w=.0=w
   n1n2=.".v=.w#u
   u=.(#v)}.u
   u=.4}.u
   u=.crlfdel u
   u=.".u
   out=.(|.n1n2)$u
else. out=.y
end.
out
)

#読み込んだPGMファイルを変換する
im=:genpgm im

#変換したPGMファイルを表示する
view_image BW256;im


PythonからJ言語の結果を呼ぶ

PythonからJの結果を呼ぶためのコマンド
Macの方で実行すると変な結果が帰ってくるので,とりあえずWindows限定.

##実行方法
#モジュールのインポート
>>> import os

#Jの結果を呼ぶ
>>> return_code = os.system ('/hogehoge/jconsole') #Jのjconsoleがある場所をフルパスで指定

#とりあえず計算させてみる
    exit +/i.6     #0から5までを足してみる.複数行にわたる場合は,最後のコマンドの前にexitを書く.

#結果を表示
>>> return_code
15

JからRも呼べるので,PythonからJを呼んで,そこからまたRを呼ぶというアレげなことを考えてしまったり.
できるのか今度やってみよう.



J言語でテキストファイルを扱う

テキストファイルをJで読み込んで,データとして扱う方法のメモ

##実行方法
#スクリプトのロード
load 'files'         #これがないとfselectが実行できない
load 'misc'        #これがないとchopが実行できない

#ファイル読み込み(実行するとファイル選択ウィンドウが立ち上がる)
rawdata =: 'm' fread fselect''



#データ表示
rawdata
alpha   beta
1       2
3       4
5       6
7       8
9       10

#TABを区切り情報に変える
data=: TAB chop "1 rawdata

#データ表示
data
+-----+--------+
|alpha|beta    |
+-----+--------+
|1    |2       |
+-----+--------+
|3    |4       |
+-----+--------+
|5    |6       |
+-----+--------+
|7    |8       |
+-----+--------+
|9    |10      |
+-----+--------+

#dataからヘッダを切り取る
hdr=: {. data

#dataからデータを切り取り,数値情報として扱う
val=: 0 ".&> }. data

#データ表示
hdr
+-----+----+
|alpha|beta|
+-----+----+

#データ表示
val
1  2
3  4
5  6
7  8
9 10


J言語でのデータ編集&保存

J言語でのデータ編集&保存をする方法のメモ

##実行方法
#スクリプトのロード
load 'files'         #これがないとfwritesが実行できない
load 'misc'        #これがないとchopが実行できない

#行列から一列目を取り去る方法
hoge2 =: }."1 hoge
#行列から最後の一列目を取り去る方法
hoge2 =: }:"1 hoge

#行列から一行目を取り去る方法
hoge2 =: }."2 hoge
#行列から最後の一行目を取り去る方法
hoge2 =: }:"2 hoge

#boxから数値に直す方法
hoge2 =: ".&> hoge

#テキストデータなどからTABや,やスペースを取り去る方法
hoge2=: TAB chop "1 hoge
hoge2=: ',' chop "1 hoge
hoge2=: chop "1 hoge    #デフォルトではスペースを取り去る

#制作したデータをセーブする方法
hoge fwrites 'hogehoge'
これでユーザーディレクトリ以下に保存される



J言語でムービーファイルを扱う

Jでムービーファイルを扱う方法のメモ





##実行方法
#参考WebSite
http://ww2.lafayette.edu/~reiterc/j/image3help/movie3.html

#注意
ムービーファイルに特殊なコーデック(H.264とか)が入っていたり,色データが特殊だったりする場合はエラーが出て読み込めない
対処法としてはQuickTimeProなどを用いて読み込めるデータに変換するなどの方法がある
お奨めの変換設定としては
+++++++++++++++
データ形式:QuickTimeムービー(*.mov)
サウンド:なし
ビデオ…
圧縮:PNG
色の深さ:約1670万色
+++++++++++++++
で読み込めるはず.対応する圧縮形式などは上記のWebSiteを参照のこと

#addonsのロード(image3が必要なので,事前にダウンロードしておく)
load'~addons/media/image3/movie3.ijs'
#ムービーファイルの読み込み
all_frames=.qt_get_all_frames '/hogehoge/hoge.mov'
#スクリプトファイルの読み込み
require'~addons/media/image3/view_m.ijs'

#動画情報の表示
$all_frames
26 400 400 3

意味としては
26フレーム・動画サイズ(400*400)・1670万色(RGB)
な感じだと思う

#第一フレームの表示
view_image 0{all_frames

#第二フレームの表示
view_image 1{all_frames

#動画情報の表示
qt_track_info '/hogehoge/hoge.mov'
400 400 3 26

#フレーム数の表示
mov_l '/hogehoge/hoge.mov'

#動画サイズの表示
mov_wh '/hogehoge/hoge.mov'
400 400

trackの概念がよく分からないけど,多分DVDのチャプターみたいなイメージなのだろうか?
数秒のデータならそれなりに扱えるけど,フレームごとに色情報見てるみたいだから,数分~数時間だとデータ量が多くなるだろうし…
数分おきにtrackに分けて,何トラックの何フレーム目を表示みたいな感じかな?



J言語のAddon

J言語のaddonであるimage3というのをインストール(といっても解凍したのを移動させるだけだけど)してみたけど,なぜかfile name error: scriptと出て利用できない.
J Wikiのimage3の項を読んでみると,"The code will likely fail in J6."と最新版のJには対応していない旨のメッセージが.
でも先生のIntelMacでは普通に使えてるので,なんのこっちゃと思って聞いてみると,ココで最新版に対応したものをダウンロードできるらしい.
確かにここからダウンロードしたimage3を入れてみたら問題なく動作しました.

で,実際にimage使ってみた感想としては,Rに比べてグラフィックの処理が無茶苦茶早い.
一瞬で画像が表示されました.
というかRが遅すぎるってのもあるんですけどね.
これは使えそうです.

やっぱり一番の難関はあの難解な演算子か…



J言語

つーてもJavaではなくてAPL系の言語なわけですが,さっぱり訳が分からない.

APL以上に難解になっている気がする.

とりあえずIntelMac版が出たみたいなのでインストール方法をメモメモ

##インストール方法

#1

JsoftwareのページのStableの所からIntelMac版のJをダウンロードする.

安定版の最新バージョンはj601c

#2

ダウンロードしたtar.gz形式のファイルを

tar -xzf hogehoge/j601c_darwin_intel.tar.gz

として解凍する.

#3

解凍したフォルダをHomeディレクトリに移して

cd ~/j601

#4

sudo mv ./libj601.dylib /usr/lib/.

(.がなくても大丈夫な模様)

としてdylibファイルを移動する

これでインストールは完了

あとはJのアイコンをクリックすれば起動するはず.