레이블이 SAGE인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SAGE인 게시물을 표시합니다. 모든 게시물 표시

2015년 10월 13일 화요일

Wiki and Jupyter

Wiki and Jupyter

위키

  • 여러가지 위키를 상당기간 검토하거나 사용해 봤다.
  • 미디어위키. 일단 가장 표준적인 시스템이라는 점에서 보증할 수 있고, 기능이 풍부하며, 확장성 역시 좋다. 그러나 미디어위키 문법은 아주 지저분하고, APM 시스템 기반이라 포터블 하지는 못하다.
  • 깃허브 골룸. DB 의존적이지 않은 대신 Git을 통해 버전관리가 이루어진다. 어차피 DB가 필요한 만큼의 대규모 위키를 운영할 것도 아니므로 이것은 전혀 문제되지 않는다. 또 깃허브 향 마크다운 문법 역시 매력적이다. 설치 방법도 크게 까다롭지는 않다. 그럼에도 불구하고 뭔가 부족하다는 느낌이 든다. 하지만 기본 개념 자체는 아주 좋다.
  • 징고(Jingo). 골룸 비스무레한 것을 node.js와 자바스크립트로 만들어 놓은 것이다. 역시 상당히 좋지만 아직 완성도가 너무 낮다. 겨우 구색만 갖춘 느낌. 그러나 역시 node.js 기반의 소프트웨어는 항상 나를 기쁘게 한다.
  • 티들리위키. 단순무식한게 아주 좋고, 달랑 하나의 파일만으로 포터블성이 극대화된게 아주 천재적이다. 다만 기본 UI가 위키라기 보다는 블로그에 가깝다. 아쉬운 점은, 티들리위키 문법을 사용하고 싶지는 않기 때문에 마크다운 플러그인을 넣어 봤는데 지나치게 허접하다는 점이다.
  • 기타 서비스형 위키로, Torchpad를 사용하고 있는데... 골룸처럼 깃허브향 마크다운 문법 기반이라 너무 좋고, 필요한 확장이 모두 기본적으로 셋팅되어 있을 뿐만 아니라, 그림 삽입 같은 것은 그냥 마우스 드래그만 해 주면 자동적으로 업로드 및 태깅이 되기 때문에 너무 편하다. 단점은 한글 입력시 끝글자가 사라져 버리는 버그가 있고, 깃허브 연동 기능이 아직 제공되지 않는다. 그리고 커뮤니티가 거의 죽어있는 것을 봐서는 곧 망할 것 같은 느낌이 들어 불안하다. 서비스형 위키는 아무래도 내가 통제할 수 없다는 점 때문에 심리적인 불안감을 떨치기 어렵다.

Jupyter

  • 그런데, iPython notebook 즉 Jupyter를 보면, 기본적으로 훌륭하게 마크다운 문법이 지원되는 점을 볼 수 있다.
  • 게다가 한큐에 서버 셋팅까지 되고...
  • 각종 언어 커널만 심어주면 인라인으로 코딩 및 결과까지 보여준다.
  • 그리고 이 모든 걸 전부 다 .ipynb 파일 하나에 싹 다 저장할 수 있다.
  • 게다가 온라인, 오프라인 어느쪽으로든 이건 .html로 렌더링을 쉽게 해 줄 수 있다.
  • 심지어 깃허브에서는 직접 렌더링해서 볼 수 있다.
  • 아무튼 킹왕짱이다.

아이디어

  • 아이디어는 간단하다.
  • Jupyter를 뜯어고쳐서(?) 골룸 위키 처럼 만들어보면 어떨까?
  • 즉 위키 문서 파일 역할을 .ipynb 파일이 하도록 시스템을 구성해 주고, Jupyter 프론트엔드 쪽에 문서 검색기능 같은 추가 요소를 더 주는 것이다.
  • 그리고 화면 좌측에 트리 같은걸 자동 생성해서 브라우징 할 수 있도록 해 주면 더 좋겠다.
  • 그리고 열람 모드에서는 Jekill 같은 느낌으로 그냥 열람만 할 수 있도록 하고, 편집 모드에서는 Jupyter 네이티브로 편집 가능하도록 해 준다.
  • 그러면 코딩과 문서의 환상적인 조합이 이루어질 뿐만 아니라, 퍼블리싱까지 되는 셈이다.

2015년 4월 14일 화요일

리드스크류를 돌리는 모터에 필요한 토크를 계산하는 SageMath 스크립트

리드스크류를 돌리는 모터에 필요한 토크를 계산하는 SageMath 스크립트


위 그림과 같은 경우를 상정한 것이다.
모터가 받는 부하는
(1)스크류 자체에서 발생하는 손실에 의한 것
(2) 질량체가 바닥면과 마찰할 때 발생하는 손실에 의한 것
(3) 인위적으로 축 방향으로 외력을 주는 것

이상 3가지 경우가 고려되어 있다.
마찰계수 등을 조절하면서
변화 양상을 한 눈에 파악하기 위해 작성된 스크립트이다.


이곳에도 올려 두었다.






#########################################
# How much Lead Screw Torque V04 (English)
# 20150415 DH,Kim
# dymaxion.kim@gmail.com
#########################################

html('<center> <img src="http://ed.co.kr/images/ci.gif"> <br>')
html('<center> <font size=2> <b>20150415 by DH,Kim</b> </font> <br>')
html('<center> <font size=5> <b>How much Lead Screw Torque? V04 (English)</b> </font> <br><br>')

@interact
def GearParameter(
    Fi = slider(0,50,0.1,10.0,'Axial Force on Screw Nut [kgf]'),
    us = slider(0,0.5,0.01,0.1,'Friction Factor on Screw Nut'),
    W = slider(0,10,0.01,0.1,'Mass on Screw [kgf]'),
    uw = slider(0,0.5,0.01,0.1,'Friction Factor between Mass and Ground'),
    D = slider(0.1,10,0.1,3.5,'Pitch Diameter of Screw [mm]'),
    P = slider(0.1,5,0.1,0.7,'Pitch of Screw [mm]')
    ):

    ### Physical Constant
    g = 9806.65 # Gravity Acceleration [mm/s^2]

    ### Axial Force
    F = 50 # Max Axial Force on Screw Nut in [kgf]
    F_total = F + uw*W # Total Axial Force [kgf]
    Fi_total = Fi + uw*W # Total Axial Force [kgf]

    ### Screw (ref : http://www.engineersedge.com/hardware/metric-external-thread-sizes1.htm )
    R = D*pi # Lead of Screw [mm]
    alpha = atan(P/R)  # Lead Angle of Screw [Rad]
    nu = (1-us*tan(alpha))/(1+us/tan(alpha)) # Efficiency of Screw

    ### Torque in [kgf.cm]
    T = F_total*R/(2*pi*nu)  # Torque in [kgf.mm]
    T = T*0.1  # Torque in [kgf.cm]
    Ti = Fi_total*R/(2*pi*nu)  # Torque in [kgf.mm]
    Ti = Ti*0.1  # Torque in [kgf.cm]
    
    t = var('t')
    DATA = parametric_plot( (t/1000,(0.1*(t+uw*W)*R/(2*pi*nu))/1000), (t,0,int(F_total)*1000), axes_labels=['Total Axial Force\n$[kgf]$','Screw Torque\n$[kgf.cm]$'])
    DATA += line([(Fi_total,0), (Fi_total,Ti)], color='red')
    DATA += line([(0,Ti), (Fi_total,Ti)], color='red')
    DATA += point((Fi_total,Ti), color='green', size=100)
    Ti = float(Ti)
    html(r'<center>$Given\ Total\ Axial\ Force = %s [kgf]$<br>'%latex(Fi_total))
    html(r'<center>$Required\ Screw\ Torque = %s [kgf.cm]$'%latex(Ti))
    show(DATA, figsize=7, aspect_ratio='automatic', gridlines='automatic')
    





2014년 11월 13일 목요일

INVOLUTE GEAR V0.44 in SageMath

INVOLUTE GEAR V0.44 in SageMath



파라미터 입력을 슬라이드로 쉽게 할 수 있도록 수정한 버전.




Google Blogger에 Sage Cell 연결하기

Google Blogger에 Sage Cell 연결하기


우선 <head>...</head> 안에 다음 구문을 삽입해 준다.



<script src="https://sagecell.sagemath.org/static/jquery.min.js"></script>
<script src="https://sagecell.sagemath.org/static/embedded_sagecell.js"></script>
<script>$(function () {
    // Make the div with id 'mycell' a Sage cell
    sagecell.makeSagecell({inputLocation:  '#mycell',
                           template:       sagecell.templates.minimal,
                           evalButtonText: 'Activate'});
    // Make *any* div with class 'compute' a Sage cell
    sagecell.makeSagecell({inputLocation: 'div.compute',
                           evalButtonText: 'Evaluate'});
    });
</script>



그리고 본문 글을 쓸 때 아래와 같은 형식을 취해 준다.



<div class="compute"><script type="text/x-sage">
    Sage 코드 삽입
</script></div>



이런 식으로 아래와 같은 코드를 삽입해 본다.
$y=sin(x)$ 형태의 Implicit Function Plot 명령이다.


<div class="compute"><script type="text/x-sage">
    plot(sin(x), (x, 0, 2*pi), figsize=5, aspect_ratio=1)
</script></div>



그럼 아래와 같은 결과를 얻을 수 있다.

Evaluate 버튼을 눌러보면 연산이 수행되어 결과가 그려진다.

이번에는 하트 한 번 그려보자.


이렇게 그린 다음 이렇게 써먹는다.



2014년 10월 22일 수요일

INVOLUTE GEAR V0.43 in SageMath


INVOLUTE GEAR  V0.43 in SageMath





SageMath를 이용하여 간단한 기어 프로파일을 작도할 수 있는 도구를 만들었다.
SageMathCloud 서비스를 이용하여 나오는 그림을 *.svg파일로 저장한 후
이것을 Adobe Illustrator 또는 Inkscape를 이용하여 *.dxf 파일로 바꿔 저장한 후
2D CAD 소프트웨어로 읽어들이고 나서
적절히 스케일 조정 및 편집해 주면 원하는 기어를 얻을 수 있다.
위의 Sage Cell 서버를 임베드한 것은 PNG 파일로 나오기 때문에 벡터데이타를 그대로 얻기는 힘들다.

*SageMathCloud에 공유된 스크립트 링크 --> SVG 파일을 얻을 수 있다.


SageMathCloud에서 스크립트 실행 모습


Inkscape로 *.svg 파일을 읽어들인 모습


 DraftSight로 *.dxf 파일을 읽어들인 모습


DraftSight에서 적절히 편집하여 기어를 완성한 모습




더이상의 자세한 설명은 생략한다.



2014년 4월 3일 목요일

Auto-start with Sage Notebook



* 참조
http://whatwant.tistory.com/497
https://groups.google.com/forum/#!topic/sage-notebook/ZckZXywGB-k
http://www.sagemath.org/download-linux.html

* 환경
Ubuntu Server 12.04
Sage 6.1.1 (깔린 장소는 /usr/lib/sagemath/ )

* 과정 설명
Sage Notebook이 설치된 서버컴퓨터를 껐다 켰을 때 마다 자동으로 Sage Notebook 서버가 실행되도록 스크립트화 한다.
옛날 DOS의 Autoexec.bat 파일에 해당된다고 할 수 있는 것이 /etc/rc.local 파일이다.
따라서 이 파일을 편집해서 Sage Notebook의 실행 쉘스크립트 명령어가 실행되도록 하면 된다.
Sage Notebook의 실행 쉘스크립트 명령어는 역시 편집기로 적절하게 작성해 둔다.


1.  /etc/rc.local  파일 편집

이 스크립트는 각 멀티유저의 실행레벨의 제일 마지막에 실행된다.
실행이 성공하면 제일 마지막의 "exit 0"에 의해 0 값을 내놓고, 실행 실패할 경우에는 다른 값을 내 놓는다.
또한 실행 실패할 경우에는 첫째줄의 "#!/bin/sh -e"의 -e 옵션에 의해서 중간에 멈추거나 하지 않고 그냥 이 스크립트는 강제로 종료된다.  실행에 실패하더라도 일단 다음 과정으로 넘어가서 부팅이 완료되도록 하기 위해서이다.
본 스크립트가 실행 가능하도록 하기 위해서는 실행 비트들(execution bits)을 변경해 주면 된다.
본 스크립트는 우분투를 막 설치한 직후의 원래 디폴트 상태로는 아무 명령도 없으므로 아무것도 하지 않는다.
따라서 아래와 같이 이런 식으로 써서 내용을 변경해 준다.

#!/bin/sh -e
/home/share/powertrain/sage/start-sage.sh
exit 0


2. /home/share/powertrain/sage/start-sage.sh 파일 편집

이제 설정한 쉘스크립트를 새로 생성해서 편집한다.

#!/bin/sh
su -c 'nohup /usr/lib/sagemath/sage -c "notebook(secure=true,interface=\"\", port=443, timeout=36000, server_pool=[\"sagecalc@localhost\"], accounts=True)" 2> /home/share/powertrain/sage/log/log2.txt > /home/share/powertrain/sage/log/log1.txt &'


"su -c"는 루트 권한으로 다음에 이어지는 단따옴표 안의 명령어를 실행하라는 뜻이다.
"nohup 명령어 &" 구문은 백그라운드로 실행하되 백그라운드 상태에서 멈추지 않고 계속 명령어로 실행된 프로그램이 구동되도록 해 주는 것이다.
"sage -c"는 sage 프로그램을 실행하되 다음에 이어지는 겹따옴표 안의 명령어를 실행하라는 뜻이다.
"notebook(~)" 함수명령어 괄호 안의 옵션들의 뜻은 다음과 같다.

secure=true 옵션은 OpenSSL https 프로토콜로 웹서비스가 이루어진다.
interface='' 옵션은 localhost이외에도 모든 네트워크 인터페이스로 연결할 수 있게 한다.  즉 외부로 서비스할 때 이렇게 해 줘야 한다.
port=8888 옵션은 기본 포트인 8080을 다른 서비스가 점유하고 있을 때 빈 포트를 써준다.
timeout=36000 옵션은 아이들 상태로 방치된 워크시트 세션이 정해준 시간(초)이 지나면 자동으로 종료되도록 한다.  사용자가 로그아웃 하지 않거나 기타등등의 이유로 방치된 워크시트가 있을 경우 자동적으로 정리해 주는 역할을 한다.
server_pool=["sage1@localhost"] 옵션은 워크시트 프로세스가 각각의 사용자마다 따로 실행되도록 특정해 준다.  (참고로 따옴표 앞에 \를 붙인 이유는 스트링으로 취급하기 위해서이다.)
accounts=True 옵션은 세이지 웹사이트 서비스에서 자신이 스스로 자신의 아이디를 만들 수 있도록 메뉴를 제공해 준다.

2> /home/share/powertrain/sage/log/log2.txt  > /home/share/powertrain/sage/log/log1.txt
구문은 리디렉션을 이용해서 로그파일을 만들어주는 것이다.


* 방화벽 관련 참조
http://kimsee.tistory.com/66






2012년 12월 12일 수요일

매쓰매티카 대체품 - SAGE 깔아서 써보기 (초보자용)

매쓰매티카 대체품 - SAGE 깔아서 써보기 (초보자용)(원래글 : http://www.ubuntu.or.kr/viewtopic.php?f=25&t=23406 )


매틀랩 대체품으로 쓸만한 걸로는 Octave 같은게 전통적으로 있는데
매쓰매티카에 대응할 만한 것으로는 확실히 Sage를 말할 수 있을 것 같아요.

뭐 요즘은 매틀랩이든 매쓰매티카든 간에 어느정도는 다 서로 다 커버가 되지만...
(예를 들면 매틀랩에도 심볼릭 툴박스가 있으므로, 이것을 장착하면 심볼릭 계산이 됨)

아무튼 Sage는 '수학용'으로 처음부터 개발된 것이므로 
공학용 매틀랩 보다는 
수학용 매쓰매티카에 좀 더 잘 대응이 되는 오픈소스라고 할 수 있을 것 같아요.

사실 Sage를 굳이 내 컴퓨터에 깔아서 구동시키지 않아도,
웹서비스로 Sage 서비스를 하는 곳들이 있기 때문에
이곳에 접속해서 그냥 하면 되긴 합니다.

(1) http://sagenb.org : 공식 온라인 서비스
(2) http://sagenb.kaist.ac.kr : 카이스트에서 서비스 (댄 드레이크 교수가 운영)
(3) http://math1.skku.ac.kr : 성균관대 수학과에서 서비스 (공개 계정으로 로그인)
(4) http://math2.skku.ac.kr : 성균관대 수학과에서 서비스 (개인 계정 만들어서 로그인)

특히 성균관대 수학과에서 서비스해 주는 곳은, 한글화를 잘 해놓고 또 쉽게 따라배울 수 있는
강의와 동영상, 그리고 성균관대 학생들이 과제로 올린 풍부한 예제들을 많이 볼 수 있어서
정말 감사하더군요. 
주로 선형대수학을 중심으로 하는 듯 합니다.
Sage를 가지고 놀면서 선형대수학 공부도 하면 학습효과가 500% 향상될 것 같습니다.

무료로 제공해주는 이런 온라인 서비스만 가지고 놀아도 사실은 충분합니다.
내 컴퓨터에 굳이 Sage를 깔지 않아도 됩니다.
하지만 몇가지 이유로, 
직접 깔아서 내 컴퓨터에서 이걸 구동시켜서 사용하겠다고 하는 분이 있다면 
쉽게 깔아서 쓸 수도 있습니다.


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

이제부터 Sage를 Ubuntu 12.10 (정확히 말하면 민트 14 나디아)에 까는 과정과
간단히 구동시킨 사례를 보여드리고자 합니다.

일단 Sage를 깔아보니 몇가지 특징이 눈에 띕니다.



(1) 외부의 의존성이 없도록 전부 자체적으로 합쳐서 패키징을 해 놨습니다.
덕분에 용량이 수백MB 정도로 좀 덩치가 큽니다. 그 대신에, 의존성있는 라이브러리를 먼저 깔아주고 환경을 만들어주기 위해 삽질할 필요가 없습니다. 그냥 다운 받아서 원하는 장소에 압축 풀고 실행시키면 됩니다.

(2) 파이썬 기반으로 개발되었습니다.
때문에 Sage 문법은 파이썬 문법과 거의 유사하며, 심지어 파이썬을 그대로 Sage 안에서 돌려도 됩니다. 파이썬 중에서 iPython 쉘을 사용하여 그 위에서 올라타서 구동됩니다.
사실 파이썬도 매우 쉽지만, 그보다 더 쉽게 해 놨기 때문에 
파이썬 프로그래밍조차 부담을 느끼는 분이 있다면 Sage를 가지고 노시는게 더 좋을 듯 합니다.

(3) 기존의 라이브러리를 최대한 이용하여 만들어져 있습니다.
예를 들어 심볼릭 처리를 위해 Sympy 라이브러리를 이용하고 있습니다.
선형대수 계산을 위해 Scipy,Numpy 라이브러리를 사용하고 있습니다.
2D 플랏팅을 위해 MatPlotLib 라이브러리를 사용하고 있습니다.
3D 플랏팅을 위해 JMOL 이라는 Java 프로그램을 갖다 쓰고 있습니다.
헌데 이런 외부 패키지를 전부 자기 패키지 안에 싹 다 집어넣어 놨기 때문에, 
라이브러리 찾아 삼만리 안 해 줘도 됩니다.
심지어 파이썬 자체도 시스템의 것을 사용하지 않고, 자기 안에 집어 넣어 놓은 것을 씁니다.
때문에 버전 문제로 작동이 안되거나 하는 등의 문제로 골치아프지도 않습니다.

(4) 생각보다 엄청나게 강력합니다.
기존 라이브러리를 Sage 안에 집어넣은 규모가 굉장히 큽니다.
한 200가지 정도 되는 것 같아요.
때문에 필요한 기능은 왠만하면 이미 다 있다고 보시면 될 것 같습니다.

(5) 속도가 그렇게 느린 편은 아닙니다.
Sage 자체 벤치마킹 결과에 따르면, 매틀랩이나 매쓰메티카와 일부 항목에서 비슷하거나
대체로 좀 더 빠른 편입니다.


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


이제 까는 과정을 설명드려 보겠습니다.


(1) 공식 홈페이지 방문 http://sagemath.org

(2) 다운로드 페이지 들어감 http://sagemath.org/download-linux.html

(3) 적당한 서버를 골라서, 내 시스템에 맞는 버전을 골라서 다운로드 받습니다.
저는 카이스트 서버에서 
sage-5.4.1-linux-64bit-ubuntu_12.04.1_lts-x86_64-Linux.tar.lzma
이것을 다운로드 받았습니다.
압축파일 이름을 보면, 우분투 12.04 버전용이라고 되어 있지만
12.10 버전에서도 아무 문제 없습니다.
왠만한 것들은 전부 안에 집어넣어서 독립적으로 만들어놨기 때문에 
시스템 특성을 잘 안타는 것 같아요.

(4) 설치할 위치에 압축을 풉니다.
슈퍼유저 권한이 없으면 쓸 수 없는 시스템 영역의 디렉토리에 자리를 잡아도 되지만
제 경우에는 개인용 데스크탑이기 때문에 /home/kim 디렉토리 밑에 
Softwares 디렉토리를 만들고 거기에 풀어넣었습니다.
(kim은 사용자 계정의 홈 디렉토리)
슈퍼유저 권한이 없이, 사용자 권한만으로 Sage를 완전히 관리할 수 있도록 하기 위해서죠.
결과적으로 
/home/kim/Softwares/sage-5.4.1-linux-64bit-ubuntu_12.04.1_lts-x86_64-Linux
이런 디렉토리 안에 들어가 있게 되겠죠.
세이지 디렉토리 이름이 너무 지저분하다고 생각되면, 이름을 지금 미리 바꿔놓읍시다.

(5) 디렉토리 안에 들어가면 Makefile 도 보이는데, 컴파일할 필요가 없으므로 무시하고
그냥 바로 여기서 터미널 띄워서 ./sage 라고 쳐 주시면 준비과정을 혼자 좀 거친 다음에 
sage 콘솔 상태로 들어갑니다.
프롬프트로 sage: 라고 뜨므로, 여기서 sage 명령을 때려주고 하면 됩니다.

(6) 종료하려면 quit 명령을 타이핑 해 주면 됩니다.



이제 다 깔고 실행이 된 거죠.


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


그런데 덜렁 콘솔 상태에서 뭔가를 하려니까 너무 허접해 보인다 이런 느낌이 듭니다.
Sage를 웹 서비스해주는 곳들의 웹서버는 어떻게 만들었나 싶었는데
그것도 이미 다 설치되어 있으므로 그냥 웹서비스를 실행시키면 됩니다.

웹서비스를 실행시키려면

./sage -n

으로 -n 옵션을 줘서 실행시켜도 되고, 또는 

./sage 로 그냥 실행시킨 다음에 sage: 프롬프트 상태에서 notebook() 명령을 줘서 해도 됩니다.

그러면 파이썬으로 작성된 웹서버가 로컬로 구동이 되면서 자동으로 웹브라우저가 뜨고
Sage 노트북 페이지로 들어갑니다.
비번은 뭐 적당히...


요컨데, QT,GTK 같은 GUI 환경으로 애써 만들어봤자 쓸데 없으니 
처음부터 웹기반으로 사용자 인터페이스를 만들어놓은 건데, 현명한 것 같습니다.
서버 만들어서 여러 사람이 협업하기 좋게 해 주는 등의 
어려운 개발 부분들이 그냥 아주 쉽게 해결되쟎아요.

헌데, 제 경우에는 서버로 돌리는게 목적이 아니고 그냥 나혼자 쓰는게 목적이므로
웹서버를 구동해서 오랫동안 돌리는게 아니고, 쓸 때마다 잠깐 실행시켜서 놀다가
지겨우면 종료를 간편하게 시키는게 중요합니다.

웹서버 구동은 되는데 종료하는게 없으니 캐난감.
웹서버를 끝낼 때는 kill 명령으로 강제로 서비스를 죽여야 됩니다.

PID가 뭔지 알기 위해서

/home/kim/.sage/sage_notebook.sagenb/sagenb.pid

파일을 gedit로 열어보면 그 안에 PID가 적혀 있습니다.
(/home/kim/.sage 디렉토리는 보통 안보이기 때문에, 탐색기 메뉴에서 '보기'->'숨긴파일 보이기'를 체크해 주시면 됩니다.)

예를 들어 4782라고 되어 있으면, 터미널 하나 띄워서 kill 4782 라고 명령을 주면 되죠.

(sagenb.pid 파일은, 웹서버가 실행될 때만 생성되는 임시 파일이므로
웹서버를 kill 하고 나면 저절로 사라집니다.)


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


근데 매번 PID를 알아내서 kill 명령을 타이핑 해 주기 귀챦으므로,
gedit를 이용해서 스크립트 파일을 만들어서 그것을 이용하기로 하였습니다.

2가지를 만들었는데요.


(1) start-sage-server.sh

#!/bin/bash
/home/kim/Softwares/sage-5.4.1-linux-64bit-ubuntu_12.04.1_lts-x86_64-Linux/sage -n

이렇게 내용을 써 주고 저장한 다음에 파일 속성->권한->파일을 프로그램으로 실행 허용 권한을 줬습니다. 


(2) kill-sage-server.sh

#!/bin/bash
kill $(cat /home/kim/.sage/sage_notebook.sagenb/sagenb.pid)

이렇게 역시 내용을 써 주고 동일하게 해 주었습니다.


하나는 Sage 실행하는 거고, 또 하나는 종료하는 거고요.
좀 무식한 방법이긴 해도 유용한 것 같습니다.
이 파일을 아무데나 갖다 넣어두고 더블클릭만 해 주면 되니... 


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

아래 캡쳐 그림은 3가지 인데,

(1) 콘솔 상태에서 명령 2개 준 것
(2) 그 결과로 창이 하나 떠서 3D 플랏팅이 된 것
(3) 콘솔이 아닌 웹브라우저 상태에서 동일한 명령 2개를 준 것

(위) Sage 콘솔 상태





























(위) Sage 콘솔에서 plot3d 명령을 줬을 때 뜨는 3D 플랏 화면


(위) Sage Notebook 웹서버로 실행했을 때의 브라우저 화면











































여기서 사용된 명령은 2줄인데

var('x,y')
plot3d(sin(x)*cos(y),(x,-3,3),(y,-3,3))


var() 함수는 Sympy 라이브러리에서 가져온 심볼릭 함수입니다.
x,y라는 문자를 심볼로 취급하라는거죠.

plot 명령은 2D 그래프를 그리는 MatPlotLib 라이브러리에서 온 것이고
plot3d 명령은 3D 그래프를 좀 더 빵빵하게 하기 위해 JMOL 프로그램을 불러오도록 한 것 같습니다.

JMOL화면이 띄워진 상태에서 보니깐 이게 원래 분자구조를 보여주기 위한 목적으로 만들어진 모양인지
분자관련한 쓸데없는(?) 메뉴들이 들어가 있더군요. 그냥 무시하면 될 듯 하고...


플랏된 그림은 나름대로 봐줄만 합니다.
옵션을 더 주면 더 이쁘게 할 수도 있겠지만, 이건 아무 옵션 없이 간단히 띄운 것이므로
대충 이정도 그림이 나온다 하고 감을 잡으면 될 듯 합니다.

매쓰매티카에서 그린 것 보다 조금은 소박한(?) 느낌은 듭니다만 .. ㅋㅋ

아무튼 http://sagemath.org/ 여기랑 http://math1.skku.ac.kr/ 같은 곳들에서 제공해주는 튜토리얼을 따라하면서 재미있는 수학 놀이 해 보면 정말 재미있을 듯 합니다.

3차 4차 방정식의 근이 함수 하나로 똻!! 구해지고 
복잡한 수식을 심볼릭 기능으로 한 줄만에 간단히 정리해 버리고
소인수분해 자동으로 막 해주고
100x100 행렬 곱셈도 시켜보고요.

그러다가 좀 익숙해지면
http://mathnet.or.kr/new_sub05/sub05_03.php
여기서 소개되는 '유명한 곡선 목록'에 나오는 곡선 공식들을 하나씩 넣어서 그려보고
옵션 더 넣어서 이쁘게 치장도 해 보고...

그러다가 이제 정말 잘 하게 되면
실무적으로 마음대로 쓸 수 있게 되겠죠!

수학선생님이라면 학생들한테 이걸로 그래프 똻! 그려서 보여주면
학생들이 '오오오 우리 선생님 짱' 할 것이고

회사원이라면 시장조사 데이타를 이걸로 그래프 3차원으로 이쁘게 그려서 
똻! 내놓고 이리저리 돌려가면서 동적으로 프리젠테이션 하면 
중역 진급은 따논 당상

과학도, 엔지니어라면 이것의 효용성은 따로 설명 드릴 필요가 없을 듯 하고요.


찜찜하게 매틀랩, 매쓰메티카 불법 크랙해서 쓰지 말고
이걸로 하면 최소 10년 이상 안정적으로 유용하게 쓰일 수 있는 동반자가 될 것 같습니다.