방송통신대 강의를 듣다보니 wxMaxima라는 tool을 사용한다. Maxima라는 수식을 간단하게 풀어주거나 Graph를 그려주는 program의 wxWidget front-end. 예전에 써봤던 Mathematica의 open source version으로 추측된다. 이걸 macbook에 설치해보니 실행이 제대로 안된다. 그래서, 다른 front-end중에서 이전에 tensorflow때 써먹었던 jupyter가 있길래 여기에 붙여본다고 삽질. (기준은 mac OS X 10.13.6 High Sierra )
1. brew를 통해서 maxima를 설치한다.
brew install maxima
2. maxima를 실행한 다음에 다음 명령어가 먹으면, jupyter 설치(6번)로 들어간다.
f(x) := sin(x);
3. maxima 동작이 이상하면 이제 source build를 해야 한다. 먼저 sbcl이라는 lisp interpreter를 설치해야 한다.
brew install sbcl
4. 그리고, maxima source를 받아서 build. (mac은 platypus라는 것이 필요하다.)
git clone https://github.com/andrejv/maxima.git
brew install platypus
cd maxima
./bootstrap
make -f macosx/Makefile
5. 그러면 ~/Desktop/Maxima.app 이라는 directory가 생긴다. app을 실행할 것이 아니므로 적당한 곳은 옮기고, 그 안에 있는 실행 shell script을 실행가능한 path로 link 걸어놓는다. maxima를 실행시켜서 잘 동작하는 거 확인. 여기까지 안되면 그냥 windows binary 가져다가 사용할 것.
mv ~/Desktop/Maxima.app ~/Public
ln -s /Users/tolkien/Public/Maxima.app/Contents/Resources/maxima.sh ~/bin/maxima
6. jupyter를 설치해야 한다. 그리고, ~/.sbclrc를 생성해서 다음과 같은 내용을 추가해주자.
brew install python3 pip3
pip3 install jupyter
MacBook-Air:work tolkien$ cat ~/.sbclrc
(setf sb-impl::*default-external-format* :utf-8)
7. quicklisp이라는 것도 설치.
curl -O https://beta.quicklisp.org/quicklisp.lisp
sbcl --load quicklisp.lisp
- 여기부터는 lisp intepreter 명령임 -
(quicklisp-quickstart:install)
(ql:system-apropos "vecto")
(ql:quickload "vecto")
(ql:add-to-init-file)
(quit)
8. maxim-jupyter source를 download.
git clone https://github.com/robert-dodier/maxima-jupyter.git
cd maxima-jupytermkdir -p binary/binary-sbcl
maxima
- 여기부터 maxima 명령임 -
:lisp (load "load-maxima-jupyter.lisp")
:lisp (sb-ext:save-lisp-and-die #P"binary/binary-sbcl/maxima-jupyter-exec" :executable t :toplevel 'maxima-jupyter:kernel-start-exec)
10. 중간에 아래와 같은 message를 내면서 build 실패하면, lisp file을 patch해야 한다.
; /Users/tolkien/.cache/common-lisp/sbcl-1.4.16-macosx-x64/Users/tolkien/quicklisp/dists/quicklisp/software/pzmq-20171019-git/grovel__grovel /Users/tolkien/.cache/common-lisp/sbcl-1.4.16-macosx-x64/Users/tolkien/quicklisp/dists/quicklisp/software/pzmq-20171019-git/grovel__grovel.grovel-tmp.lisp
While evaluating the form starting at line 19, column 0
of Maxima encountered a Lisp error:
Couldn't execute "/Users/tolkien/.cache/common-lisp/sbcl-1.4.16-macosx-x64/Users/tolkien/quicklisp/dists/quicklisp/software/pzmq-20171019-git/grovel__grovel": Permission denied
Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.
#P"/Users/tolkien/work/maxima-jupyter/./load-maxima-jupyter.lisp":;
10.1 patch file.
--- /Users/john/tmp/grovel.lisp 2019-02-23 03:45:12.000000000 +0900
+++ /Users/john/quicklisp//dists/quicklisp/software/cffi_0.20.0/grovel/grovel.lisp 2019-02-23 03:45:04.000000000 +0900
@@ -243,6 +243,7 @@
(link-executable exe-file (list o-file)))
(error (e)
(grovel-error "~a" e)))
+ (apply 'invoke `(#+bsd ,@`("chmod" "755" ,exe-file)))
(invoke exe-file lisp-file)
lisp-file)))
11. 무사히 build가 끝나면 다음과 같은 실행파일을 볼 수 있을 것이다. (이제 다 왔다!)
MacBook-Air:maxima-jupyter tolkien$ ls -lh binary/binary-sbcl/
total 196736
-rwxr-xr-x 1 tolkien staff 84M 2 23 03:46 maxima-jupyter-exec*
12. 이제 jupyter에 maxim kernel을 추가.
python3 ./install-maxima-jupyter.py --exec=`pwd`/binary/binary-sbcl/maxima-jupyter-exec
또는, virtualenv 환경에서 jupyter를 실행한다면 아래처럼 설치위치를 지정해주어야 한다.
python3 ./install-maxima-jupyter.py --prefix=/Users/tolkien/tf --exec=`pwd`/binary/binary-sbcl/maxima-jupyter-exec
13. jupyter를 실행하고, New button을 눌러서 maxima kernel이 있는 것을 확인하면 된다.
jupyter-notebook
참고 site:
- http://maxima.sourceforge.net - maxima official site
- http://maxima-online.org - maxima web front-end
- https://github.com/andrejv/maxima - maxima GitHub mirror
- https://github.com/robert-dodier/maxima-jupyter - maxima-jupyter Github
- https://www.quicklisp.org/beta/ - quicklisp official site