내가 학부생이었던 90년대에만 해도 DC모터를 제어하는 간단한 실험을 하려면 마이크로프로세서나 DSP부터 먼저 공부해야 했었는데 요즘 나오는 마이컴 보드들을 보면 그런 산을 피해가게끔 해 준다는 생각이 든다. 기초적인 전기회로 지식과 간단한 프로그래밍만으로(궂이 C/C++ 도 필요 없고 python(라즈베리파이) 이나 Java Script(비글본블랙) 같은 언어도 사용 가능하다.) 예전에는 무척이나 어려운 실험이 간단하게 가능하다는게 참 신기하다.


  한편으로는 이러한 환경이 비전공자들을 많이 끌어들일 것이고 더 많은 아이디어가 실제로 구현될 것이다. 참 고무적이고도 즐거운 일이다. 필자도 라즈베리파이를 접해 보고 이전부터 막연히 구상해 왔던 물건을 틈틈이 만들기 시작했는데 전에는 무척이나 어렵게 구현해야 했던 것이 의외로 쉽게 해결되서 상당히 놀란 적이 있다.


그림: 왼쪽부터 아두이노 우노 R3, 아두이노 Due, 라즈베리파이, 비글본 블랙


  특히 아두이노의 경우 하드웨어 제어보드 중에서 거의 표준과 같은 (적어도 비전공자들에게는) 위치를 차지하고 있다는 사실을 알게 되었다. 아두이노 자체도 많이 쓰이고 있고 거기서 파생된 보드들과 (오픈소스이므로 이것을 수정한 수많은 변종 보드들이 존재한다) 또한 연결해서 사용할 수 있는 센서보드(쉴드) 등이 셀 수 없이 다양하다. AVR로 회로를 어떻게 설계해야하는지, avrstudio를 어떻게 사용해야 하는지 굳이 알지 못하더라도 적당한 보드와 필요한 입력장치 및 센서보드를 선택해서 다양한 응용제품(제어기나 로봇 같은 것들)을 쉽게 만들 수 있는 것이다. 


  비교적 높은 컴퓨팅 능력을 요하는 분야에도 사용할 수 있는 옵션이 속속 등장하고 있는 추세이다. 심지어 50달러 내외의 리눅스를 OS로 사용하는 보드들도 많다. 라즈베리파이, 비글본(블랙), 마스보드, 큐티보드 등등이다.


  결국 중요한 것은 사용자의 프로그래밍 능력이라는 결론이 나온다. 프로그래밍이 가능하다면 이러한 보드들을 이용해서 (3D프린팅도 중요한 역할을 하는 것 같음) 원하는 동작을 수행하는 물리적인 제품을 손쉽게 만들 수 있는 시대가 온 것이다.

[#00073]


Posted by 살레시오
,

  라즈베리파이를 사용하기 위해서는 HDD대신 사용되는 SD카드에 OS를 미리 인스톨하거나 또는 인스톨할 수 있는 파일들을 미리 복사해 놓아야 한다.


  이를 위해서는 용량이 4GB 이상인 SD카드가 필요하다. SD카드를 선택할 때 한 가지 알아둘 것은 class 에 따라서 읽고 쓰는 속도가 다르므로 가능한 속도가 빠른 SD카드가 더 유리하다는 것이다. 보통 class 10 이 가장 빠른 속도를 가지며 이 클래스가 낮아지면 더 느려지고 가격도 조금 저렴해 진다. (Minibian 을 사용하면 2G SD카드에도 들어간다. 대신에 최소한의 OS만 들어있기 때문에 모든 프로그램을 직접 설치해 주어야 하는 불편함이 있다.)


  노트북에는 SD카드 홀더가 있는 경우가 많고 없다면 별도의 SD카드 리더기를 이용해야 한다. 먼저 포멧을 해야 하는데 SDFormatter 라는 유틸리티를 사용한다. 이것을 실행한 후 다음과 같이 Option>Format Size Adjustment 옵션을 반드시 'ON'으로 설정한 후 포맷을 한다.




그 다음 http://www.raspberrypi.org/downloads 에서 다운 받은 NOOBS_v1_x_x.zip 파일의 압축을 해제한 다음 그 것을 통째로 SD카드의 루트 디렉토리에 복사하면 된다. 이것을 라즈베리파이에 끼운 후 전원을 인가하면 여러가지 OS중에서 택일하여 운영체제를 인스톨할 수 있다.

[#00074]


Posted by 살레시오
,

 아두이노를 사용해서 프로토타잎을 만들어 실험을 하다 보면 빵판에 와이어링(wiring)을 하게 되어 있는데 회로가 조금만 복잡해져도 선이 얽히게 되어 무척이나 불편하다. 처음에는 간단한 방법으로 시제품을 만들 수 있다는 점이 신기하고 편리하게 생각되지만 이게 반복되다 보면 무척이나 번거로운 작업이 되어 버린다.


와이어링 미로 (wiring maze)


이런 단점과 학습의 편이성을 높이기 위한 방편으로 seeed 라는 회사에서 판매하고 있는 grove 시스템이라는 것이 있다. 이 모듈들은 주변 기기와의 인터페이스를 3핀이나 4핀으로 통일하는 시도를 하고 있다.

Newbundle1.jpg

상단 중앙에 있는 것이 아두이노 그로브 쉴드이고 이것을 아두이노에 끼우면 3핀이나 4핀 인터페이스로 되어 있는 모듈들을 쉽게 연결할 수 있다. 자세히 보면 모두 4핀으로만 구성된 것을 알 수 있다. 모듈은 디지털핀, 아날로그핀. 혹은 I2C, 시리얼 통신으로 제어할 수 있다. 모듈의 종류도 100가지가 넘어서 웬만한 기초적인 장치들은 다 갖추어져 있는 것 같다. 버튼이나 LED모듈과 같이 간단한 것은 디지털핀 하나와 매핑이 되어 있지만 LCD모듈과 같은 것은 시리얼통신으로 연결하여 제공되는라이브러리를 이용하여 간편하게 제어하는 식이다. 이것을 이용하면 물론 자작하는 재미는 줄어들겠지만 지저분한 점퍼선으로부터 벗어날 수 있다.


 라즈베리파이의 GPIO핀에 연결해서 사용할 수 있는 GrovePi 라는 것도 있다. GrovePi는 이러한 grove 모듈들을 라즈베리파이에서 연결해 제어할 수 있도록 하는 인터페이스 보드이다.



가장 큰 장점은 파이에서 파이썬 스크립트로 간편하게 모듈들을 제어할 수 있다는 점이다. 아마도 파이와 GrovePi 간에 I2C 통신이나 시리얼 통신으로 제어 신호를 주고 받는 식으로 되어있지 않을까 짐직이 든다.




Posted by 살레시오
,

  한정된 자원의 라즈베리파이를 조금이라도 괘적하게 사용하기 위해서 화면을 저해상도로 변경해보고자 한다. 


먼저 터미널에서 다음과 같이 설정 파일을 연다.


sudo nano /boot/config.txt 


이 화일 안에서 코멘트(#) 처리된 것들 중에서 다음 항목들을 활성화 시킨다.


hdmi_force_hotplug = 1

hdmi_group = 2

hdmi_mode = N # 여기서 해상도를 설정한다

hdmi_drive = 1 


위의 명령들 중에서 원하는 해상도에 맞추어 N값을 설정해 준 후 저장하고 빠져나와서 재부팅해주면 된다. 예를 들어 'hdmi_mode = 16' 이라고 쓰면 1024x768@60Hz 로 해상도가 조절된다. (아래 목록표 참조.)


자세한 설정값은 http://elinux.org/RPi_config.txt 에 있다.


hdmi_group=2 (DMT) 인 경우:

주의 :최대 해상도는 1920x1200 @60 Hz (reduced blanking) 이다.

hdmi_mode=1    640x350    85 Hz
hdmi_mode=2    640x400    85 Hz
hdmi_mode=3    720x400    85 Hz
hdmi_mode=4    640x480    60 Hz
hdmi_mode=5    640x480    72 Hz
hdmi_mode=6    640x480    75 Hz
hdmi_mode=7    640x480    85 Hz
hdmi_mode=8    800x600    56 Hz
hdmi_mode=9    800x600    60 Hz
hdmi_mode=10   800x600    72 Hz
hdmi_mode=11   800x600    75 Hz
hdmi_mode=12   800x600    85 Hz
hdmi_mode=13   800x600   120 Hz
hdmi_mode=14   848x480    60 Hz
hdmi_mode=15   1024x768   43 Hz  DO NOT USE
hdmi_mode=16   1024x768   60 Hz
hdmi_mode=17   1024x768   70 Hz
hdmi_mode=18   1024x768   75 Hz
hdmi_mode=19   1024x768   85 Hz
hdmi_mode=20   1024x768  120 Hz
hdmi_mode=21   1152x864   75 Hz
hdmi_mode=22   1280x768          Reduced blanking
hdmi_mode=23   1280x768   60 Hz
hdmi_mode=24   1280x768   75 Hz
hdmi_mode=25   1280x768   85 Hz
hdmi_mode=26   1280x768  120 Hz  Reduced blanking
hdmi_mode=27   1280x800          Reduced blanking
hdmi_mode=28   1280x800   60 Hz  
hdmi_mode=29   1280x800   75 Hz  
hdmi_mode=30   1280x800   85 Hz  
hdmi_mode=31   1280x800  120 Hz  Reduced blanking
hdmi_mode=32   1280x960   60 Hz  
hdmi_mode=33   1280x960   85 Hz  
hdmi_mode=34   1280x960  120 Hz  Reduced blanking
hdmi_mode=35   1280x1024  60 Hz  
hdmi_mode=36   1280x1024  75 Hz  
hdmi_mode=37   1280x1024  85 Hz  
hdmi_mode=38   1280x1024 120 Hz  Reduced blanking
hdmi_mode=39   1360x768   60 Hz  
hdmi_mode=40   1360x768  120 Hz  Reduced blanking
hdmi_mode=41   1400x1050         Reduced blanking
hdmi_mode=42   1400x1050  60 Hz  
hdmi_mode=43   1400x1050  75 Hz  
hdmi_mode=44   1400x1050  85 Hz  
hdmi_mode=45   1400x1050 120 Hz  Reduced blanking
hdmi_mode=46   1440x900          Reduced blanking
hdmi_mode=47   1440x900   60 Hz  
hdmi_mode=48   1440x900   75 Hz  
hdmi_mode=49   1440x900   85 Hz  
hdmi_mode=50   1440x900  120 Hz  Reduced blanking
hdmi_mode=51   1600x1200  60 Hz  
hdmi_mode=52   1600x1200  65 Hz  
hdmi_mode=53   1600x1200  70 Hz  
hdmi_mode=54   1600x1200  75 Hz  
hdmi_mode=55   1600x1200  85 Hz  
hdmi_mode=56   1600x1200 120 Hz  Reduced blanking
hdmi_mode=57   1680x1050         Reduced blanking
hdmi_mode=58   1680x1050  60 Hz  
hdmi_mode=59   1680x1050  75 Hz  
hdmi_mode=60   1680x1050  85 Hz  
hdmi_mode=61   1680x1050 120 Hz  Reduced blanking
hdmi_mode=62   1792x1344  60 Hz  
hdmi_mode=63   1792x1344  75 Hz  
hdmi_mode=64   1792x1344 120 Hz  Reduced blanking
hdmi_mode=65   1856x1392  60 Hz  
hdmi_mode=66   1856x1392  75 Hz  
hdmi_mode=67   1856x1392 120 Hz  Reduced blanking
hdmi_mode=68   1920x1200         Reduced blanking
hdmi_mode=69   1920x1200  60 Hz  
hdmi_mode=70   1920x1200  75 Hz  
hdmi_mode=71   1920x1200  85 Hz  
hdmi_mode=72   1920x1200 120 Hz  Reduced blanking
hdmi_mode=73   1920x1440  60 Hz  
hdmi_mode=74   1920x1440  75 Hz  
hdmi_mode=75   1920x1440 120 Hz  Reduced blanking
hdmi_mode=76   2560x1600         Reduced blanking
hdmi_mode=77   2560x1600  60 Hz  
hdmi_mode=78   2560x1600  75 Hz  
hdmi_mode=79   2560x1600  85 Hz  
hdmi_mode=80   2560x1600 120 Hz  Reduced blanking
hdmi_mode=81   1366x768   60 Hz  
hdmi_mode=82   1080p      60 Hz  
hdmi_mode=83   1600x900          Reduced blanking
hdmi_mode=84   2048x1152         Reduced blanking
hdmi_mode=85   720p       60 Hz  
hdmi_mode=86   1366x768          Reduced blanking

[#00076]

Posted by 살레시오
,

아두이노 수업에서 실습용으로 사용할 로봇으로 makeblock 의 robot kit v2 을 선택해서 두 학기동안 운영해 보았다. 여기서 그 후기를 간단히 기록하고자 한다.


무환궤도 방식으로 조립한 로봇


  장점부터 설명하면 프레임이 깔금하게 마감되어 있고 바퀴로봇과 무한궤도 방식의 로봇 둘다 만들 수 있다는 점이다. 레고의 치수에 맞추어진 깔끔한 알루미늄 기구부가 일단 인상적이다. 표면 처리도 잘 되어있고 무엇보다 원하는 형태로 자유자재로 결합되도록 설계가 되어있다. 조립 난이도도 그리 높지 않다. 모터 드라이브가 내장된 커스텀 아두이노 보드를 제어기로 사용하므로 아두이노 IDE를 사용하여 제어 프로그램을 작성할 수 있다. 아두이노 라이브러리도 제공한다. 적외선 리모콘 세트와 초음파 센서도 포함되어 있다.



전용 제어기


  단점은 전용 제어보드의 인터페이스가 특이해서 뭔가를 더 붙여서 확장하는 것이 불가능하다는 것이다. 그리고 전용 라이브러리도 제공되는 기능 외에 더 추가한다든가 하는 것이 힘들다. 모터와 전선의 연결부가 헐거워서 빠지기 쉬워서 결국 납땜을 하였다. 무환궤도도 그냥 일자철심을 끼워서 연결하는 방식인데 로봇이 가다가 이게 잘 빠진다.


  그래서 실수업에서는 전용 제어기를 빼고 아두이노 우노와 모터쉴드(R3)를 조합하여 모터를 구동하는 식으로 진행하였다. 이 로봇에 포함된 모터가 6V/2A 의 모터라 BA6208이나 LM1630 같은 IC등은 구동 전류를 충분히 내지 못해서 모터의 토크가 약해진다. 모터 한 개당 BA6208 두 개를 병렬로 연결하여 제어해 보았으나 크게 성능이 향상되지는 않았다.


  개인적인 결론은 혼자서 가지고 놀기에는 적당하지만 아두이노 수업 교재용으로는 적절하지 않다는 생각이다.

[#00077]


Posted by 살레시오
,

  이전 포스트에서 말한 바와 같이 일반적인 아두이노 우노와 모터쉴드(R3)를 사용하여 모터를 구동해 보기로 하였다. 이 로봇에 포함된 모터가 6V/2A 의 모터라 BA6208이나 LM1630 같은 IC등은 구동 전류를 충분히 내지 못해서 모터의 토크가 약해진다. 모터 한 개당 BA6208 두 개를 병렬로 연결하여 제어해 보았으나 크게 성능이 향상되지는 않았다. 모터쉴드에 대한 설명은 아래 포스트를 참조하면 된다.


    - 아두이노 모터 쉴드 R3


다음 사진은 모터 쉴드에 DC모터 전원선을 연결한 것이다. 밑에 아두이노 우노가 있고 모터 쉴드를 얹어서 모터에 연결하였고 전원은 1.5V AA건전지 6개(9V)를 사용한다.



첫 번째 실험으로 2초 동안 전진하고 2초 동안 후진하기를 무한 반복하는 간단한 예제이다. 프로그램 소스는 다음과 같다. 실험할 때 한가지 주의할 점은 반드시 외부전원(건전지나 변압기)를 보드에 연결하여야 한다는 것이다 USB만으로 모터를 구동시키려다가 PC보드가 손상될 수도 있다.




소스 코드:

───────────────────────────────

    #define PWM_RIGHT 3

    #define DIR_RIGHT 12

    #define BRAKE_RIGHT 9

    #define PWM_LEFT 11

    #define DIR_LEFT 13

    #define BRAKE_LEFT 8


    void setup() {

        pinMode(PWM_LEFT, OUTPUT);

        pinMode(DIR_LEFT, OUTPUT);

        pinMode(BRAKE_LEFT, OUTPUT);

        pinMode(PWM_RIGHT, OUTPUT);

        pinMode(DIR_RIGHT, OUTPUT);

        pinMode(BRAKE_RIGHT, OUTPUT);

        analogWrite(PWM_LEFT,0);

        analogWrite(PWM_RIGHT,0);

    }


    void loop() {

        digitalWrite(DIR_LEFT, LOW);

        digitalWrite(DIR_RIGHT,LOW);

        analogWrite(PWM_LEFT, 255);

        analogWrite(PWM_RIGHT, 255);

        delay(2000);


        digitalWrite(DIR_LEFT, HIGH);

        digitalWrite(DIR_RIGHT, HIGH);

        analogWrite(PWM_LEFT, 255);

        analogWrite(PWM_RIGHT, 255);

        delay(2000);

    }

───────────────────────────────

[#00079]


Posted by 살레시오
,

  최고의 모바일 슈팅 게임으로 추천하고 싶은 게임이 바로 스카이포스 2014 이다. 아이폰과 안드로이드용으로 모두 출시 되어 있다. 3d 슈팅게임 이지만 시점은 고정되어 있고 강제 스크롤 방식의 슈팅게임이다.



  일단 HD 그래픽이 뛰어나다. 기체와 배경 뿐만이 아니고 폭발 효과라던지 거대 보스들의 그래픽이 모두 3D로 모델링되어 있으며 굉장히 품질이 높다. 태블릿으로 즐길 경우 무기는 주무기와 사이드 무기를 각각 업그레이드 할 수 있으며 10여개의 스테이지가 마련되어 있으며 최종 보스를 파괴하면 나타나는스테이지도 있다. 각 스테이지마다 3개의 난이도를 진행할 수 있으며 또한 달성할 목표가 몇 개씩 지정되어 있어서 질리지 않고 반복 플레이를 할 수 있다.





빠르게 업그레이트를 하려면 현금 아이템을 구입해야 하지만 그렇지 않고도 오랫동안 재미있게 즐길 수 있는 F2P 슈팅 게임이다.

[#00087]

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 살레시오
,

 파이썬에 대해서 웹서핑을 하다가 파이썬으로 과학 계산을 하는 분야에 대한 좋은 발표 형식의 글이 있어서 번역해 보았다. 단순히 파이썬을 쉽고 배우기 쉬운 범용 프로그래밍 언어라고만 알고 있다면 흥미로운 주제글일 것이다.(원문)


 과학 계산에 사용되는 툴(소프트웨어)와 작업 흐름. 왜 파이썬인가?


1. 과학자(공학자도 포함)의 요구

  • (모의실험, 실제 실험 제어에서 얻어진) 데이터 취득

  • 데이터의 조작, 가공

  • (작업 결과의 이해를 돕기 위한) 시각화

  • 보고서, 출판, 발표물 제작등의 의사소통 결과물들


2, 조금 더 구체적인 요구사항들 (역자 주: 원필자가 다분히 파이썬을 의식하고 나열한 것 같음.)


  • 고전적인 수치 해석 방법이나 기본적인 기능에 대한 풍부한 라이브러리: 그래프를 그리거나 푸리에변환이나 보간법 알고리듬 같은 것을 다시 직접 짤 필요가 없다. 바퀴를 다시 발명할 필요가 없듯이.

  • 배우기 쉬워야 한다 : 전산이나 컴퓨터 과학을 전공하지 않은 사람이라도 몇 분안에 그래프를 그리거나 신호를 필터링하거나 푸리에 변환 결과를 볼 수 있어야 한다.

  • 동 료, 학생, 고객와 의사소통이 쉬워야 한다. 즉 범용성이 확보되어야 한다. (역자 주:내가 작성한 코드를 그들도 알고 있거나 단기간에 배워서 쓸 수 있어야 한다.) 프로그래밍 언어 자체가 가능하면 적은 문법 기호와 불필요한 루틴을 가지지 말아야 한다. 그래서 코드를 읽어나가는데 수학적/과학적인 부분에 집중할 수 있어야 한다.

  • 신속하게 실행 가능해야 하며 기왕이면 고속으로 동작해야 한다. (...)

  • 가능하다면 거의 모든 경우에 있어서 단일 환경/단일 언어를 사용해야 한다. 문제가 달라질 때 새로운 언어나 툴을 다시 익혀야 한다면 곤란한다.


현존하는 해결책들 (프로그램들) : 과학자들은 어떤 툴로 작업하는가?


1. 컴파일러 언어: C, C++, Fortran, 등등

  • 장점

    • 컴파일러가 최적화되어 있으며 매우 빠르다. 계산량이 매우 많을 때 이러한 언어들의 성능을 능가하는 대안이 없음.

    • 고도로 최적화된 과학 라이브러리 (역자 주:주로 행렬연산 등 수치해석에 사용되는) 가 존재함. 예를 들어서 BLAS 등

  • 단점

    • 사용하기 매우 어렵다. (역자 주: 이게 가장 큰 장애물임. C/C++를 웬만큼 안다고 해도 이러한 라이브러를 익숙하게 사용하기는 어려움) 특히나 전산 전공이 아닌 사람들에게는 이러한 언어들로는 답이 없음.

 

2. 상용 스크립팅 언어 : 매트랩(Matlab), 매쓰매티카(mathematica), 매이플(maple) 등

  • 장점

    • 다양한 영역의 수많은 알고리듬을 구현한 풍부한 라이브러리. 보통 이런 라이브러리는 컴파일되어 있기 때문에 실행속도도 빠르다.

    • 잘 갖춰진 개발환경 : 잘 정리된 도움말, 편리한 IDE 등등

    • 상업적인 지원이 가능함.

  • 단점

    • 기본적인 언어가 다소 부실하다.(역자 주: 문법 자체가 잘 정돈되어 있지 않음에도 불구하고 하위 호환서을 유지하기 위해서 개선이 되지 않고 있음.)

    • 비싸다. (역자 주: 가장 큰 단점임. 특히 학생들에게)


3. 대안 스크립팅 언어들 : Scilab, Octave, R, Igor, IDL, etc.


  • 장점

    • 오픈소스, 대부분 무료이거나 matlab보다는 저가임.(역자주: Igor와 IDL이 상용프로그램임. Igor는 그래픽 성능이 뛰어나며 IDL은 천문학과 의학 영상 분야에서 많이 사용된다고 함.)

    • 어떤 기능은 매우 특화되어 있음 : 예를 들어서 R의 통계분석, Igor의 그래프 기능 등. (역자 주 : Scilab은 제어분야와 수치해석에, Octave는 matlab과 거의 유사한 문법을 가지는 특징이 있다.)

  • 단점

    • matlab 보다는 (당연히) 라이브러리가 빈약함. 사용되는 언어 자체도 크게 발전적이지 않음.

    • 어 떤 소프트웨어는 한 분야에만 사용 가능함 : 예를 들어서 gnuplot 이나 xmgrace 는 매우 강력한 기능을 가졌지만 그래프 기능으로만 한정되어 있다. (역자 주: 많은 오픈소스 수치 해석 프로그램이 gnuplot 을 채용하지만 scilab은 matlab과 유사한 독자적인 그래프 기능을 가지고 있다.)


4. 파이썬(python)의 경우는 어떠한가?

  • 일반적인 특성

    • 파이썬은 일반적이고 현대적인 컴퓨팅 언어.

    • 표준 라이브러리 모듈

    • 파이썬으로 작성된 많은 수의 특화된 모듈이나 어플리케이션 : 웹 분야 등등 그리고 과학 계산 분야

    • 개발 도구들 (자동 시험, 문서 생성기)Python language: data types (string, int), flow control, data collections (lists, dictionaries), patterns, etc.

  • 장점

    • (matlab보다는 부족하지만) 매우 풍부한 과학 계산 라이브러리들

    • 잘 고안된 언어, 가독성이 뛰어나고 구조화가 잘 되어 있어서 "생각한 대로 코딩"할 수 있다.

    • 과학 계산 이외 영역에도 다양한 라이브러리가 있다. : 웹서버 관리, 시리얼포트 접근 등등

    • 무료이고 오픈소스 언어이다. 광범위하게 사용되고 활발한 사용자그룹들이 있다.

  • 단점

    • (matlab에 비하면) 다소 불편한 개발 환경.

    • 좀 더 세분화된 전문 영역에서는 필요한 알고리듬이 없을 수도 있다.


과학 계산에 사용되는 파이썬의 라이브러리들(building blocks)


 matlab, scilab, R 등과 달리 파이썬은 과학 계산 전용으로 미리 묶여진 모듈들이 없다.(역자 주 : 현재는  python(x,y) 나 winPython 등 과학계산 전용 패키지가 배포되고 있음. )  아래에 과학 계산에 사용되는 기본적인 모듈(라이브러리)을 나열하였다.




Posted by 살레시오
,