Matlab은 수치해석 분야에서 독보적인 응용프로그램이지만 고가의 상용프로그램이라 학생들이 사용하기에는 무리가 있다.  하지만 똑같은 문법을 가지고 프로그램을 개발할 수 있는 대안이 있으니 바로 GNU Octave 이다.


  GNU Octave 3.8버전에 GUI 가 포함되었다! 그 동안 외부 그룹에서 octave 의 GUI를 개발하다가 중지되고 했던 것들이 몇 가지 있었는데 쓸만한 게 없었다. (특히나 윈도 환경에서는 더욱 그랬다.) 그런데 퍼스트 그룹에서 이것을 지원하기 시작했다는 것이 고무적이다. 아직 불안정한 알파 버전이고 4.0에 정식 버전이 포함될거라고는 하지만 획기적인 도약인 것 같다.



현재(2015년 4월)에는 3.8.2가 최신 버전으로 포함된 GUI는 아직도 알파버전이다. 4.0부터는 정식으로 채용될 거라니 기대가 된다.


Posted by 살레시오
,

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



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




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

[#00087]

Posted by 살레시오
,

  사람의 뇌에는 약 1조개의 뉴런(neuron, 신경세포)가 있으며 20세를 넘으면 신경세포가 하루에 10만개씩 죽어간다. 신체도 노화되어간다. 하지만 뇌의 기능은 다른 신체부위와는 다르게 20세 이후에도 향상시킬 수 있다고 한다. 하나의 뉴런에는 약 1000여개의 시냅스(synapse, 뉴런간 연결통로)가 나오는데 이 시냅스를 타고 정보가 뉴런과 뉴런사이를 오갈 수 있다. 뉴런은 줄어 들지만 뉴런과 뉴런을 연결하는 시냅스망(신경망)은 20세 이후에도 좋은 습관으로 더 확장될 수 있다.



  손에는 상당히 많은 감각 기관이 집중되어 있으며 섬세하게 움직이도록 하는 가느다란 관절들이 팔, 손목, 손가락에 매우 많다. 이것들은 모두 대뇌의 윗쪽 부분(두정엽)에 연결되어 있다. 따라서 손을 자극하면 뇌가 활성화되게 되어 있다.


  특히나 전에 경험한 적이 없는 새로운 일, 창조적인 일을 할 때 뇌는 활성화되게 된다. 단순히 만들어진 문서를 보고 키보드를 두드린다고 해서 뇌가 자극을 받지는 않는다. 즉 뇌는 '새로운 경험'에  활성화된다는 것이다. 피카소와 같은 화가들은 92세까지 살았고 노년에도 왕성한 작품활동을 했다. 손을 섬세하게 사용해야하는 사람들은 화가, 도예가, 서도가 등은 노년에도 건장한 사람들이 많다고 한다. 따라서 건강한 정신을 유지하고 싶다면 그림, 악기 연주나 요리 등 손을 섬세하게 움직이면서 감각이나 사고도 작용하게 하는 활동에 관심을 기울이는 것이 좋다.



 또한 오른손과 마찬가지로 왼손도 의식적으로 사용하는 것이 좌우 뇌의 균형적인 발전에 도움이 된다고 한다. 왼손은 우뇌와 오른손은 좌뇌와 연결이 되어 있다. 잘 쓰는 손만을 자꾸 사용하면 한 쪽 뇌에만 자극이 가기 때문이다. 나도 오른손잡이이지만 몇 년 전부터 컴퓨터의 마우스를 왼손으로 옮겨서 사용해 보았다. 처음에는 부자연스럽지만 몇 개월 지나고 나니 오른손처럼 익숙하게 사용하게 되었다. 이제는 밥먹을 때도 양손을 의도적으로 사용한다. 이처럼 조그만 습관부터 교정해 나가면 이게 쌓여서 나중에 효과를 발휘하게 될 것이다.


  뜻이 있다면 미루지 말고 당장이라도 악기 하나에 도전해 보자. 요리를 안 하던 사람은 요리에도 도전해 보자. 가족들에게 사랑받고 덤으로 뇌의 기능도 활성화되어서 더 건강한 삶을 살아갈 수 있을 것이다.

[#00086]


'취미 > 건강' 카테고리의 다른 글

변비를 예방하는 방법  (0) 2015.04.22
Posted by 살레시오
,

아래 코드를 템플릿 편집모드에서 ]]<\b:skin> 바로 앞에 복사해 넣는다.


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

.code {

background:#f5f8fa;

background-repeat:no-repeat;

border: solid #5C7B90;

border-width: 1px 1px 1px 20px;

color: #000000;

font: 13px 'Courier New', Courier, monospace;

line-height: 16px;

margin: 10px 0 10px 10px;

max-height: 200px;

min-height: 16px;

overflow: auto;

padding: 10px 10px 10px; width: 90%;

}


.code:hover {

background: #FAFAFA;

background-repeat:no-repeat;

}

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


이제 html 편집모드에서 아래와 같이 입력하면


<div class="code">

프로그램

</div>


코드박스가 생겨난다.


main(){

printf

}

[#00006]


Posted by 살레시오
,

블로거에서 포스트의 폰트를 조절하려면 [레이아웃]에 들어가면 [템플릿 디자이너]로 갈 수 있는 링크가 있다. 여기서



  •  템플릿디자이너>고급>페이지텍스트



로 찾아 들어간다.



여기에서 글꼴을 선택할 수 있다.


줄간격을 조절하려면 [템플릿편집모드]에서 다음과 같은 부분을 찾는다.


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

.post-body {

  font-size: 12pt;

  line-height: 1.8;       // 줄간격

  position: relative;

}

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


여기에서 숫자를 조절하면 된다. 1.0이면 줄과 줄사이가 딱 붙게 되고 2.0이면 줄과 줄 사이에 한 줄 공백이 들어간다.

[#00004]

Posted by 살레시오
,

산술 연산자로 다음과 같은 것들이 있다.


연산자

기능

용례

+

덧셈


-

뺄셈


*

곱셈


/

나눗셈

결과는 실수형이다. (2.x에서는 int / int의 결과는 int)

//

자리내림 나눗셈

피연산자가 모두 정수인 경우 나눗셈의 결과 소수점 아래는 버리고 정수만 취한다.

둘 중 하나라도 실수라면 / 연산자와 동일함.

**

거듭제곱

2**10, (1+2j)**20

%

나머지

3%4, -10%3, 12.345%0.4


  나눗셈의 경우 ver 2.x에서는 정수형끼리의 나눗셈은 결과도 정수형이 된다. 다음 결과를 확인해 보라.


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

>>> 4/5

>>> a, b=11,5 #a에 11, b에 5를 대입한다.

>>> b/a

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


하지만 3.x버전에서는 나눗셈의 결과는 무조건 실수로 된다.


■ 2.x버전에서는 정수간 나눗셈의 결과는 정수였다. 즉 1/2는 0, 2/3은 1이다. 하지만 3.x버전에서는 정수간 나눗셈의 결과는 나누어 떨어지는 경우라도 무조건 실수형이 된다. 즉, 1/2는 0.2, 6/3은 2.0이 된다.


  연산자 //는 두 피연산자가 모두 정수일 경우 결과값이 실수이면 소수점 아래는 버린다.


······································································································································

>>> 9//2 # 결과는 4 (정수)

>>> 9//2.0 # 결과는 4.5(실수)

······································································································································


  연산자 %는 나눗셈 수행 후 정수몫을 구하고 난 나머지를 구하는 연산자이다. 다음을 확인해보라.


······································································································································

>>> 3%2

>>> 11.5 % 0.2

······································································································································


연산자 **는 거듭제곱 연산자이다. 다음 연산의 결과값들을 예상해 보자.


······································································································································

>>> 2**10

>>> a, c = 3, 4+5j #변수 a와 c를 차례로 초기화시킨다.

>>> c**a

······································································································································


  복소수의 거듭제곱도 (4+5j)*(4+5j)*(4+5j) 의 결과값을 보여준다. 파이썬에서는 복소수에 대한 산술 연산도 기본적으로 지원하므로 쉽게 수행할 수 있음을 알 수 있다.

#00003


Posted by 살레시오
,

  프로그램은 결국 데이터를 처리하는 일을 주로 하게 된다. 여기에서는 파이썬의 내장 자료형에 대해서 알아보자. 가장 중요하고 사용 빈도가 높은 파이썬 자료형은 다음과 같은 것들이 있다.


  • 숫자 : 정수, 실수, 복소수로 나뉜다. 
  • 문자열 
  • 리스트(list) 
  • 튜플(tuple) 
  • 딕셔너리(dictionary) 
  • 집합(set)


  변수명, 함수명, 클래스명 등으로 쓸 수 있는 식별자를 만드는 방법은 다른 언어들과 거의 동일하다. 사용되는 문자들은 다음과 같다.


  • 영문자 대소문자 (a,b … z A B … Z)
  • 숫자 (0 1 … 9)
  • 언더바(_)


이러한 문자들을 조합하되 숫자로 시작하면 안된다. 그리고 대소문자를 다른 문자로 구별한다. 그리고 python3에서는 유니코드 문자를 식별자로 사용할 수 있다. 즉, 한글로도 변수명을 지을 수 있지만 권장되지는 않는다.

#00001


Posted by 살레시오
,

  파이썬에서 사용자 폴더를 검색 경로에 추가시키기 위해서는 다음과 같이 sys 모듈의 path 리스트에 이 경로를 추가해 주면 된다.

---------------------------------------------------------------------------
>>> import sys
>>> sys.path.append('d:/mydir') # 윈도는 'd:\\mydir'
---------------------------------------------------------------------------

그러면 만약 다음과 같이 모듈을 import 할 때

---------------------------------------------------------------------------
>>> import mymod
---------------------------------------------------------------------------


사용자 폴더 안에서도 mymod.py 파일이 있는지 검색해 보게 된다.

  그런데 검색 경로 안에 어떤 폴더가 있고 그 폴더 안에 __init__.py 파일이 있다면 이것은 그 폴더가 파이썬 모듈이라는 것을 표시하는 역할을 한다. 예를 들어 다음과 같이 spam폴더 안에 파일이 두 개가 있다고 가정하자.


    d:/ mydir / spam /__init__.py # 이 파일이 spam 폴더를 파이썬모듈로 만든다.
    d:/ mydir /spam / module.py

그리고 d:/mydir 이 경로로 잡혀있다고 가정한다. 그렇다면 spam 폴더는 파이썬 모듈로 간주되고 module.py는 하위모듈로 취급된다. 그래서 module.py 모듈파일을 다음과 같이 불러올 수 있다.

---------------------------------------------------------------------------
>>> import spam.module
---------------------------------------------------------------------------

또는 

---------------------------------------------------------------------------
>>> from spam import module
---------------------------------------------------------------------------

즉, spam폴더 안에 __init__.py 파일이 있다면 spam 폴더는 모듈로 간주되고 module.py 는 서브모듈이 된다. 만약 __init__.py 파일을 지운다면 파이썬은 spam 폴더를 모듈로 취급하지 않으므로 module.py 도 더이상 서브모듈로 간주되지 않는다. 따라서 위의 명령어는 오류를 발생시킬 것이다.

이 __init__.py 은 그냥 빈 파일일 수도 있지만, 객체를 정의하거나 서브패키지의 특정 부분만을 선택하여 내보내거나 하는 코드를 가질 수도 있다. 만약 __init__.py 안의 내용을 접근하려면 다음과 같이 하면 된다. 

---------------------------------------------------------------------------
>>> import spam
---------------------------------------------------------------------------

이렇게 하면 __init__.py 안에 정의된 객체들이 spam 모듈로 올라오게 된다. 주의할 점은 이렇게 spam 모듈을 임포트한다고 해서 module.py 가 자동으로 하위모듈로 임포트되는 것은 아니라는 것이다. spam이 임포트될 때 module 도 임포트되려면 __init__.py 안에 다음과 같이 명시해 주어야 한다.

---------------------------------------------------------------------------
# __init__.py 화일의 내용
from . import module
---------------------------------------------------------------------------

이렇게 하면 spam.module 로 접근할 수 있다.

[#00085]

Posted by 살레시오
,

  파이썬의 numpy, scipy, 심지어 sympy 까지 있는데 MATLAB의 control system toolbox 같은 것은 없나.. 하고 생각했었는데 있었다. 사용자 매뉴얼을 아래에 링크하였다.

python control system library User's manual


이 모듈은 winPython 에서 기본적으로 설치되어 있지 않다. 하지만 윈파이썬의 콘솔창(Tools > Open command prompt) 에서 다음과 같이 명령을 내리면 자동으로 인스톨된다.

------------------------------------------------------------------------
> pip install control
------------------------------------------------------------------------

이 라이브러리는 기본적인 선형제어 시스템에 관련된 함수들과 클래스가 정의되어 있고 MATLAB control toolbox 와 이름체계가 비슷한 것 같다.

이제 simulink 같은 툴만 나오면 되는 건가.. 갈수록 파이썬에 놀라는 중이다.

[#00084]

Posted by 살레시오
,

  넘파이의 ndarray 객체는 리스트와 달리 브로드캐스트(broadcast)라 불리는 특성이 있는데 이는 리스트(list)객체와 확연히 구별이 되는 기능이다. 예를 들어서 다음과 같이 숫자로만 이루어진 중첩 리스트 la 를 고려해 보자.


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

>>> la = [ [1,2], [3,4] ]

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


이 리스트는 요소가 모두 숫자이지만 la+2, la/4 와 같은 연산은 지원하지 않는다. 모든 요소에 2를 더하려면 for 반복문을 사용해야만 한다. 그리고 la*2는 파이썬 문법상 전혀 다른 동작을 수행한다. 즉, 리스트 사이의 사칙연산은 수학 연산과는 전혀 관계가 없는 것이다.


  이에 반해서 ndarray는 요소간 연산이 기본적으로 가능하며 같은 크기의 객체간 산술연산은 요소끼리 행해져서 그 결과가 산출된다. 예를 들어서 다음과 같은 두 개의 ndarray 를 고려하자.


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

>>> a = np.array( la )

>>> b = np.array([[1j,2j],[3j,4j]])

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


이렇게 생성된 a와 b에 대해서는 a+1, a*3, a-b 와 같은 사칙 연산이 정의되며 각각의 요소에 대해서 연산이 수행된다. 배열간 곱셈의 경우는 행렬곱셈과는 상관이 없는 연산이므로 이것과 헷갈리면 안된다. 여기서의 곱셈은 요소간 곱셈이다. 이러한 ndarray 의 기능을 broadcast라고 한다.


  그럼 크기가 다른 객체간 연산은 어떨까? 먼저 한 쪽이 배열이고 다른 쪽이 스칼라라면 그 스칼라는 다른 배열의 크기로 확장된 후 각각의 요소에 더해진다.


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

>>> np.arange(5) + 2 # [0, 1, 2, 3, 4] + [2, 2, 2, 2, 2] 와 같다

array([2, 3, 4, 5, 6])

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


이 예를 보면 1x5 크기의 배열과 2라는 스칼라의 합이다. 2라는 스칼라는 모든 요소가 2인 1x5의 배열로 확장된 후 각 요소간 더해진다. 행렬의 경우도 마찬가지이다.


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

>>> a=np.arange(1,10).reshape(3,3) # [0,1,2, ... ,9] 배열은 3x3로 재배열한다.

>>> a**2

array([[ 1, 4, 9],

[16, 25, 36],

[49, 64, 81]])

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


크기가 다른 행렬 간에는 산술연산이 일반적으로 불가하다. 즉, 다음과 같은 행렬 a, b 간의 산술연산은 불가능하다.


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

>>> a=np.arange(1,10).reshape(3,3)

>>> b=np.array([[1,2],[3,4]])

>>> a+b # 에러 발생

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


하지만 가능한 경우가 있으니 다음의 세 가지 경우이다.


  • mxn 행렬과 mx1 벡터 간의 연산
  • m x n 행렬과 1xn 벡터 간의 연산
  • 또한 mx1 벡터와 1xn 벡터간의 연산.


이 세가지 경우는 한 쪽의 크기가 다른 쪽의 크기로 확장된 후 요소간 연산을 수행하게 된다. (다음 그림 참조)


[#00083]

Posted by 살레시오
,