C/C++을 실습할 수 있는 도구는 매우 종류가 다양한데 유료인 것도 있고 무료로 사용할 수 있는 것들도 많이 있다. 본 교재에서는 무료로 사용할 수 있는 것들 중 “CodeLite” 이라는 오픈소스(open source) IDE를 사용하도록 하겠다. CodeLite은 무료로 사용할 수 있다는 장점과 윈도우즈와 OS X 뿐만 아니라 리눅스에서도 동일한 환경으로 사용 가능하다. 그리고 C/C++ 언어오에 PHP로도 개발할 수 있으므로 C언어에 어느 정도 익숙해진 후 C++로 넘어갈 때에도 동일한 환경에서 같이 실습할 수 있다는 장점도 가지고 있다. 따라서 학생들이 C/C++언어 실습을 하기에 유용한 툴이라고 개인적으로 생각되어 본 포스트에서는 이것의 간략한 사용법에 대해서 설명하도록 하겠다.

 설치 프로그램은 홈페이지(www.codelite.org)에서 다운로드받을 수 있으며 검색엔진에서 ‘codelite’라고 검색하면 쉽게 찾아갈 수 있다.

[그림 1] codelite IDE의 외형

 codelite를 설치한 후 C/C++프로그램을 작성하는 방법을 간략히 소개하면 다음과 같다. 먼저 File>New>Project 를 선택한다. 그러면 새로운 프로젝트를 생성할 수 있는 대화상자가 나타난다. '프로젝트(project)'라는 것은 하나의 C/C++ 프로그램이 여러 개의 파일들로 분산되어 있는 경우에 그 파일들을 하나로 묶어서 관리하는 단위를 나타낸다. 프로그램이 길어질 때는 하나의 화일에 모든 소스코드를 담는 것이 아니라 여러 개의 화일에 분산시켜서 관리하는 것이 일반적인데 이는 여러 명이 하나의 프로그램을 작성할 때 효율적이기도 하다.


[그림 2] 새로운 프록젝트를 생성하는 메뉴

이 [그림 2]와 같이 File>New>New Project 메뉴를 선택하거나 시작화면에서 New Projcet 항목을 선택하면 새로운 프로젝트를 생성할 수 있다.

 이후에 이 창에서 C 언어의 경우  'Simple executable (gcc)' 항목을 선택한 후 (C++은 'Simple executable (g++)') 프로젝트 이름을 기입하면 Project path에 지정된 폴더 하위에 입력한 프로젝트 이름으로 새로운 폴더가 생성되고 이후에 모든 파일들은 그 폴더 안에서 생성되고 관리된다.

[그림 3] 생성할 프로젝트의 종류를 선택하는 창


[그림 4] 프로젝트으 이름과 경로를 선택하는 창

[그림 5] 새로운 프로젝트가 만들어진 후 자동으로 생성된 프로그램


생성된 프로젝트의 src폴더에 보면 main()함수가 포함된 화일명이 main.c로 자동으로 만들어진다.지정한다. 이제 단축키 [ctrl]+[f5]를 누르면 프로젝트가 컴파일 된 후 실행이 되고 콘솔창에서 그 결과를 확인할 수 있다.

 자동으로 생성되는 프로그램(C/C++의 경우)은 다음과 같다. C 프로그램은 src폴더 밑에 main.c 파일에, C++의 경우 main.cpp 파일이 생성된다.


#include <stdio.h>
int main(int argc, char **argv)
{
   printf("hello world\n");
   return 0;
}


다른 부분은 나중에 이해하더라도 일단 printf()함수는 표준 출력(standard output)으로 입력된 문자열을 내보내는 기능을 수행한다는 것은 알아두자. 일단 현 단계에서 표준 출력은 디스플레이 장치(모니터)라고 이해하여도 된다. 이 프로그램을 실행하면 “hello world”라는 문자열이 화면에 표시될 것이다. 이것을 바꿔서 자신의 영문 이름이 화면에 표시되도록 해보자.



Posted by 살레시오
,

1장 마이크로프로세서 개요
    1.1 마이크로프로세서란 개요
    1.2 마이크로프로세서 분류
    1.3 디지털 시스템의 메모리 분류 
    1.4 마이크로컨트롤러의 I/O 장치들
    1.5 디지털 신호를 표시하기 위한 2진수와 16진수

2장 AVR 개요
    2.1 AVR 마이크로컨트롤러 개요
    2.2 ATmega8(A) 소개
    2.3 ATmega8(A)의 세부적인 특징
    2.4 ATmega8(A)의 메모리 구조
    2.5 락 비트(lock bit)와 퓨즈 바이트(fuse byte)
    2.6 전원과 리셋(reset) 회로
    2.7 클럭 소스 (clock source)
    2.8 개발 환경 : atmel studio 소개
    2.9 오픈소스 다운로더 USBasp / USBaspLoaser
    2.A AVR툴체인의 자료형
    2.B AVR의 플래시롬에 데이터 읽고 쓰기
    2.C AVR의 EEPROM에 데이터 읽고 쓰기
    2.B 기본적인 라이브러리 함수 요약

3장 포트(port)를 이용한 기초 실험
    3.1 포트 개요
    3.2 LED를 이용한 포트 실험 (Part 1)
    3.3 헤더 파일 "Am8USBasp.h"의 구조
    3.3 
LED를 이용한 포트 실험 (Part 2)
    3.5 7세그먼트를 이용한 포트실험 (Part 1)
    3.6 
7세그먼트를 이용한 포트실험 (Part 2)

4장 인터럽트(interrupt)
    4.1 인터럽트 개요
    4.2 인터럽트 프로그래밍
    4.3 외부 인터럽트 설정
    4.4 외부 인터럽트와 스위치 실험 1
    4.5

5장 타이머/카운터
    5.1 타이머/카운터 개요와 T/C0 소개
    5.3 T/C0 의 레지스터와 프리스케일러
    5.3 T/C0를 이용한 실험

    5.4 T/C2 (8비트 타이머/카운터) 개요 및 기능
    5.5 T/C2의 레지스터와 프리스케일러
    5.6 T/C2의 정상 모드와 CTC 모드
    5.7 T/C2의 PWM 모드

    5.8 TC1 (16비트 타이머/카운터) 개요 및 기능
    5.9

6장 아날로그-디지털 변환(ADC)
    6.1 ADC 개요
    6.2 ADC 관련 레지스터들
    6.3 ADC 수행 절차
    6.4 CdS 광센서를 이용한 실습 예제
    6.5

'주제별 글목록' 카테고리의 다른 글

심파이(sympy) 강좌 목록  (0) 2015.06.03
파이썬(python) 기초 강좌 목록  (1) 2015.05.23
아두이노 강좌 목차  (3) 2015.05.17
리눅스(Linux) 강좌 목차  (2) 2015.05.16
C++ 강의 글 목록 (목차)  (2) 2015.04.21
Posted by 살레시오
,

1장 개요

    1.1 운영체제(OS) 개요

    1.2 유닉스(UNIX) 소개

    1.3 자유 소프트웨어 재단(FSF) 설립

    1.4 리눅스(Linux) 소개


2장 리눅스 쉘 명령어

    2.1 리눅스 커널(kernel)과 쉘(shell)

    2.2 리눅스 파일 시스템

    2.3 리눅스 터미널(terminal) 입력 기본

    2.4 pwd / ls 명령

    2.5 cd 명령

    2.6 mkdir / rm / rmdir 명령

    2.7 cp / mv 명령

    2.8 파일의 내용을 보여주는 명령어

    2.9 alias / unalias 명령

    2.10 기타 명령어들

    2.11 입출력 재지정 (redirection)

    2.12 nano 텍스트 에디터

'주제별 글목록' 카테고리의 다른 글

심파이(sympy) 강좌 목록  (0) 2015.06.03
파이썬(python) 기초 강좌 목록  (1) 2015.05.23
아두이노 강좌 목차  (3) 2015.05.17
ATmega8(A) 강좌 목록  (1) 2015.05.16
C++ 강의 글 목록 (목차)  (2) 2015.04.21
Posted by 살레시오
,

 심파이(sympy)의 행렬 객체는  Matrix이다. 이 Matrix 객체를 생성할 때는 리스트를 넘겨주면 된다. 넘겨준 리스트의 각 요소는 행렬의 행이 된다. 기본적인 사용 예는 다음과 같다.


>>> Matrix([[1,0],[0,1]]) #[1,0]이 1행, [0,1]이 2행이 된다.
>>> Matrix([[11, 22, 33]]) # 리스트의 첫 번째 요소인 [11,22,33]이 1행이 된다.
>>> Matrix([11, 22, 33]) # 11이 1행, 22가 2행, 33이 3행이 된다.


다른 방법으로 행의 개수와 열의 개수를 명시적으로 지정해 주는 방법이 있다.


>>> A = Matrix(2, 3, [1,2,3,4,5,6])
⎡1  2  3⎤
⎣4  5  6⎦

>>> B = Matrix(4, 4, range(16))
⎡0   1   2   3 ⎤
⎢4   5   6   7 ⎥
⎢8   9   10  11⎥
⎣12  13  14  15⎦


행 요소와 열 요소의 관계를 파이썬 함수로 작성하여 이것을 사용할 수도 있다.


>>> def f(i,j):
 if i==j : return 1
 else : return 0

>>> Matrix(4,4,f)
⎡1  0  0  0⎤
⎢0  1  0  0⎥
⎢0  0  1  0⎥
⎣0  0  0  1⎦


명시적 함수뿐만 아니라 익명 함수도 사용할 수도 있다.


>>> Matrix(3, 4, lambda i,j:1-(i+j)%2)
⎡1  0  1  0⎤
⎢0  1  0  1⎥
⎣1  0  1  0⎦


특수한 행렬을 생성하는 함수도 있다. eye() 함수는 항등 행렬을 생성하며, zeros() 는 영행렬을 그리고 ones()는 일행렬을 만들어 준다.


>>> eye(4)
>>> zeros(2)
>>> ones(3)
>>> ones(1,3)


대각행렬을 생성하는 diag() 함수도 있다. 스칼라나 행렬을 인수로 주면 그것들로 대각행렬을 생성한다.


>>> diag(1,2,3)
>>> diag(-1, ones(2,2), Matrix([5,7,6]))


스칼라는 1x1 행렬로 간주되며 주어진 행렬들을 대각 위치에 놓는다.


 난수 행렬을 발생시킬 수도 있으며 randMatrix() 함수를 이용한다.


>>> randMatrix(4) # 4x4 행렬 생성
>>> randMatrix(3,4) # 3x4 행렬 생성
>>> randMatrix(5, symmetric = True) # 5x5의 대칭행렬 생성


이 행렬의 요소는 100이하의 양의 정수로 채워진다.


[표 1] 행렬 객체의 생성 용례들

용법

내용

Martix(list)

Matrix([list1, list2,...])

Matrix(r, c, seq)

Matrix(r, c, func)

열벡터 생성

행렬 생성

seq를 이용하여 r x c 행렬 생성

함수를 이용하여 r x c 행렬 생성

eye(n)

n x n 단위행렬

zeros(n)

zeros(r, c)

n x n 영행렬

r x c 영행렬

ones(n)

ones(r, c)

n x n 일행렬

r x c 일행렬

diag(arg1, arg2, ...)

args 요소들의 단위행렬 생성

randMatrix(n)

randMatrix(r, c)

n x n 난수행렬 (대칭행렬은 symmetric=True 옵션을 지정)

r x c 난수행렬


 한 가지 주지할 사항은 Matrix 객체는 mutable 하다는 것이다. 따라서 immutability 가 필요한 곳(예를 들어 딕셔너리의 키)에는 사용할 수 없다. immutable행렬이 필요하다면 ImmutableMatrix 를 이용하면 된다.




Posted by 살레시오
,

  무료로 사용할 수 있는 C언어 개발 환경은 그 종류가 많이 있다. 아래 영상에서 소개할 이 ‘Pelles C' 프로그램은 윈도우용으로 개발된 프로그램으로서 C 컴파일러가 포함된 IDE이다. 사용법이 간단해서 초보자들이 C언어 실습을 하기에 편리하고 적당한 툴이라고 개인적으로 생각된다.

  이 프로그램은 PC상에서 C언어를 실습하기에 적절하고 용량도 10M바이트 내외로 작은 편이다. 설치 프로그램은 홈페이지에서 다운로드받을 수 있으며 검색엔진에서 ‘pelles c’라고 검색하면 쉽게 찾아들어갈 수 있다.




  C 프로그램을 작성하는 방법을 간략히 소개하면 다음과 같다. 먼저 File>New>Project 를 선택한다. 그러면 새로운 프로젝트를 생성할 수 있는 대화상자가 나타난다. '프로젝트(project)'라는 것은 하나의 C프로그램이 여러 개의 파일들로 분산되어 있는 경우에 그 파일들을 하나로 묶어서 관리하는 단위를 나타낸다. 프로그램이 길어질 때는 하나의 화일에 모든 소스코드를 담는 것이 아니라 여러개의 화일에 분산시켜서 관리하는 것이 일반적인데 이는 여러 명이 하나의 프로그램을 작성할 때 효율적이기도 하다.


  이 창에서 'Win32 Console Program'항목을 선택한 후 프로젝트 이름을 기입하면 Location에 지정된 폴더 하위에 입력한 프로젝트 이름으로 새로운 폴더가 생성되고 이후에 모든 파일들은 그 폴더 안에서 생성되고 관리된다.


  이제 File>New>Source Code 메뉴를 선택하거나 [Ctrl]+[N]을 누르면 프로그램을 입력할 창이 생성된다. 프로그램을 입력한 후 File>Save혹은 [Ctrl]+[S]를 눌러 저장하려고 하면 현재 프로그램을 프로젝트에 추가시킬 것인가를 묻는 대화창이 뜬다. 예(Y)버튼을 누르면 프로젝트에 새로운 파일이 생성된다.


  이 프로그램의 장점은 C언어를 실습하는데 무료로 간편하게 사용할 수 있다는 점이다. C언어를 실습하는데 굳이 비주얼스튜디오나 이클립스를 사용할 필요가 없다. 단점은 딱 C언어 정도만 실습해 볼수 있고 C++은 불가능하다는 점이다.

[#00088]


Posted by 살레시오
,

  라즈베리파이(RPi)에서 수치 해석툴을 적용하려고 scilab 과 octave의 장점을 검색해 보았더니 둘 다 장점이 비슷한 것 같다. 어떤 논문에서는 octave를 최고로 언급하기도 한다.


"요약하면, Octave가 가장 지속 가능한 Matlab의 대안이라고 결론을 내렸다. 그 이유는 테스트 결과 (문법적인 측면에서) Matlab과 완전히 호환되며 성능 또한 상당히 좋기 때문이다"


"In summary, we conclude that Octave is the best viable alternative to Matlab because it was not only fully compatible (in terms of syntax) with Matlab in our tests, but it also performed very well."



 그런데 수치해석 툭들을 검색 하는 중에 의외의 대안이 눈에 띄었다. 바로


  • python + numpi / scipy + matplotlib


이다. 어떤 교수가 이렇게 언급해 놓았다.


Francesca Mazzia · Università degli Studi di Bari Aldo Moro


"내 수업(이탈리아 Bari 대학교)에서  Octave, Scilab, R 을 모두 사용해 보았다지만 지금은 파이썬의 넘파이(numpy)와 사이파이(scipy)를 사용한다. 과학 계산에서 pythonxy(윈도우)와 spyder(리눅스)는 훌륭한 통합개발환경이다. 나는 내 포트란 90 코드와의 인터페이스를 개바랬는데 Matlab보다 훨씬 더 쉬었다. 아직도 연구를 위해서 Matlab을 사용하기는 하지만 파이썬은 훌륭한 대안이다. 내 학생들도 좋아한다..." 2013년 1월 31일


"I used in my courses (University of Bari, Italy), Octave, Scilab and R, but now I'm using Python, with numpy and scipy. Pythonxy in Windows and spyder for Linux are good ide for scientific computing. I developed some Python interface for my FORTRAN 90 codes and was easier than in matlab. I still use Matlab for research, but I think Python is a good alternative, my students like it ...." Jan 31, 2013


  이후에 관심이 생겨서 더 조사해 보았는데 python이 과학계산 분야에서 의외로 광범위하게 사용되고 있음을 알게 되었다. Matlab은 앞으로는 어떻게 될 지 모르겠지만(뭐 윈도우도 무료가 되느니 마느니 하는 시대인데) 아직은 고가라 학부 수업에서 사용하기에는 부적합하다.


 개인적으로 scilab은 익히는데 상당히 시간이 많이 걸렸다. (한마디로 제대로 사용하려면 어렵다.) 하지만 python은 그 특유의 쉽고 간결한 문법과 많은 리소스들, 다양한 모듈들로 인해서 훨씬 익히기가 용이했다.


  단적인 예를 들어서 아두이노로 시리얼 통신을 하는 프로그램(모터의 지령지를 준다든가 센서값을 읽어들인다든가 하는 일들을 하기 위해서)을 작성하기 위해서는 시리얼통신을 수행하는 모듈이 있어야되는데 scilab은 마땅한게 없다. (matlab도 어렵기는 마찬가지임.) 하지만 파이썬은 잘 동작하는 모듈이 있어서 바로 사용하는데 아무런 문제가 없었다. 이 정도로 막강하다. 더군다나 numpy같은 수치해석 모듈과 scipy 같은 과학계산 모듈을 모두 무료로 아무 제한 없이 사용할 수 있으니 더 이상 큰 장점이 없다.


  만약 수치해석 툴이 필요하다면 파이썬을 공부해 볼 것을 강력히 추천한다.

[#00089]


Posted by 살레시오
,

 심파이(sympy)에서 미리 정의된 상수들은 다음과 같은 것들이 있다.


[표 1] 심파이의 기정의된 상수들

sympy 상수
의미
I, 1j, 1J
허수. (예를 들어 3+4j 는 3+4*I 와 같이 입력해야 한다.)
pi
원주율(3.141592..)
E
자연상수(2.718281..)
nan
not a number
oo
(positive) infinity
zoo
complex infinity


허수로 I를 이용할 때는 허수부와 I 사이에 반드시 곱기호를 넣어 주어야 한다.


>>> abs(1+2*I)
sqrt(5)


무리수의 근사값을 알고 싶다면 evalf() 멤버함수를 이용하면 된다.


>>> pi.evalf()
3.14159265358979

>>> E.evalf()
2.71828182845905




Posted by 살레시오
,

 심파이에서 대수 기호를 사용하기 위해서는 symbols() 함수를 사용하면 된다.


>>> a = symbols(‘a’)


여기서 대입 연산자(=) 왼쪽의 변수명과 symbols()로 생성되어 표기되는 대수기호는 같은 것으로 하는 것이 좋다. (즉 a=symbols(‘b’) 는 바람직하지 않다.)


다음 예와 같이 여러 대수 기호들을 한꺼번에 생성할 수도 있다.


>>> x = symbols(‘x:5’) # x0, x1, x2, x3, x4 를 튜플로 생성
>>> y = symbols(‘y1:11’) # y1, y1, ..., y10 을 튜플로 생성


대수 기호의 종류를 지정할 수도 있다.


>>> a = symbols(‘a’, integer = True) #정수
>>> b = symbols(‘b’, real = True) #실수
>>> c = symbols(‘c’, complex = True) #복소수
>>> d = symbols(‘d’, positive = True) #양수로 정의
>>> f, g, h = symbols(‘f g h’, cls=Function) #함수 기호로 정의


 아래 심파이 라이브 웹페이지를 처음 접속하면 x, y, z, t 는 대수 기호로, k, m, n은 정수 대수 기호로, f, g, h는 함수 기호로 사용할 수 있도록 미리 symbols()함수로 생성된다는 것을 알 수 있다.


[그림 1] live,sympy.org 접속시 실행되는 명령들


따라서 기정의된 대수기호를 이용하여 바로 명령을 입력할 수 있다.



Posted by 살레시오
,

 심파이에서는 변수를 대수 기호로 사용하려면 반드시 symbols()함수를 써서 지정해 주어야 한다. 만약 x, y, z를 대수 기호로 사용하겠다면 다음과 같이 하면 된다.


>>> x = symbols(‘x’)
>>> y,z=symbols(‘y z’)


아래부터는 live.sympy.org 에서 직접 확인해 볼 수 있다.


[그림 1] live.sympy.org 접속화면

대수 방정식

 이것을 이용하여 수식 x+2y 를 입력해 보자.


>>> expr = x+2*y
x+2*y


여기서 x, y는 마치 파이썬의 변수처럼 사용되었지만 내부적으로는 대수기호로 지정되어 있는 상태이다.


>>> expr+1
x + 2*y + 1

>>> x*expr
x*(x + 2*y)

>>> expr2 = expand(x*expr)
x**2 + 2*x*y

>>> factor(expr2)
x*(x + 2*y)


이와 같이 expand() 함수를 이용하여 수식을 전개할 수 있고 factor()함수로 인수분해를 할 수 있다.


 분수식을 통분하거나 분리할때는 together() 함수와 apart()함수를 이용한다.


>>> a, b, c, d = symbols('a b c d')

>>> together(a/b + c/d)
(a*d + b*c)/(b*d)

>>> apart( (a**2+a+4)/(a+2) )
a - 1 + 6/(a + 2)


 대수 방정식을 풀기 위해서는 solve()함수를 이용하면 된다.


>>> solve(x**2-2,x)
[-sqrt(2), sqrt(2)]


미분

 이제 함수 sin(x)ex 를 미분해 보자. 미분은 diff() 함수를 이용하면 된다.


>>> diff(exp(x)*sin(x),x)
exp(x)*sin(x) + exp(x)*cos(x)


적분

 함수 exsin(x) + excos(x)의 부정적분을 계산해 보자. integrate()함수를 이용하면 된다.


>>> integrate(exp(x)*sin(x)+exp(x)*cos(x),x)
exp(x)*sin(x)


정적분을 구하려면 integrate()함수의 두 번째 인수에 범위를 지정해 주면 된다. sympy에서 무한대는 oo (소문자 o 두 개) 기호를 사용한다.


>>> integrate(sin(x**2),(x,-oo, oo))
sqrt(2)*sqrt(pi)/2


극한

 극한값을 구하려면 limit()함수를 이용하면 된다.


>>> limit(sin(x)/x,x,0)
1


미분방정식

 심파이를 이용하면 미분 방정식도 풀 수 있다.


>>> t=symbols('t')
>>> y=Function('y')
>>> dsolve( Eq(y(t).diff(t,t)-y(t), exp(t)), y(t))
y(t) == C2*exp(-t) + (C1 + t/2)*exp(t)


선형대수

 선형대수도 가능하다. 예를 들어 행렬


[ 1 2 ]

[ 3 4 ]


의 고유값을 구하려면 다음과 같이 하면 된다.


>>> A = Matrix([[1,2],[2,2]])
>>> A.eigenvals()
{-sqrt(17)/2 + 3/2: 1, 3/2 + sqrt(17)/2: 1}


 이와 같이 sympy를 이용하면 다양한 대수식을 표현하거나 방정식을 풀 수 있다.




Posted by 살레시오
,

 컴퓨터는 원래 수치 계산(numerical calcuation)을 빠르고 정확하게 수행할 목적으로 개발되었다. 수치 계산과는 다르게 기호식 계산(symbolic calculation)은 대수 기호가 들어간 수식을 다루는 것으로서 유한수로 정확히 표현되지 못하는 무리수를 기호로 표현하거나 또는 대수 기호가 포함된 방정식 등을 다루는 것이다. 사람이 이러한 개념을 사용하기는 어렵지 않으나 컴퓨터가 이러한 일을 하는 것은 전통적인 수치 계산 알고리듬보다 훨씬 더 어려운 일이다.


 예를 들어서 sin(x)/x의 x에 대한 미분을 구하려고 한다면 다음과 같이 간단하게 구할 수 있다.(다음은 live.sympy.org에서 수행한 것임)


 다른 예로 exp(x)*sin(x)의 정적분을 구하려고 한다면 이것 역시 심파이로 간단하게 수행할 수 있다. (손계산을 하려면 부분적분 공식을 적용해야 한다.) 다음은 winpython 의 ipython쉘에서 수행한 결과이다.



 이것은 기호식 계산의 한 가지 예일 뿐이고 실제로는 이것보다 훨씬 더 복잡한 수식과 문제들을 다룰 수 있다.


 이러한 시스템은 보통 CAS (Computer Algebra System)으로 불리며 심파이도 CAS 중 하나이다. CAS의 잘 알려진 다른 예로 Mathematica (상용 프로그램), Maxima, Sage  등이 있다. 심파이의 가장 큰 장점은 무료로 제한 없이 사용할 수 있는 오픈소스 모듈이라는 점이며 순수한 파이썬으로 만들어져 파이썬에 익숙하다면 배우는데 많은 시간이 걸리지 않는다.


 심파이(sympy)는 기호식 계산을 수행하기 위한 파이썬 모듈이며 현재(2015년 5월) 버전은 0.7.6 으로 활발하게 개발이 진행되고 있으며 많은 사용자들이 있다,




Posted by 살레시오
,