2016년 3월 21일 월요일

파이썬의 라이브러리 NumPy + SciPy _____ 4

==========================================================
이 포스팅은 쓸모 없어진 포스팅입니다.
(NumPy + SciPy ____ 4 ~ NumPy + SciPy ____ 8)
해당 문제점은 Scipy 패키지를 빌드했던 툴(아마도 MS Visual Studio 201x)이 Windows XP를 지원하지 않아서 발생한 것으로 추측하고 있습니다.
이후의 포스팅에서 이 시행착오를 정리할 계획입니다. (아마도 NumPy + SciPy ____ 9)
==========================================================

배포판마저 실패하게 되자 뭔가 근본적인 문제가 있지 않나 생각하게 되었다.

이미 굉장히 많은 사람들이 사용하고 있는 패키지인데, 여러 소스를 통해 받아 보아도 동일하게 문제가 발생하고 있다면, 내가 아주 기본적인 무언가를 빼먹었거나 아니면 누구나 안되는 걸 가지고 골머리를 썪이고 있는게 아닐까?

보통은 혼자서 끄적여 보고, 시행착오도 거치고 난 후에 결론이 나오면 포스팅을 하곤 하는데, 이젠 귀차니즘 때문인지 두번 반복하는게 싫어졌고, 그래서 거의 직접 하면서 중간 중간 포스팅을 하고 있다.
그 때문인지 자꾸 옆으로 새거나 아무 쓸모 없는 내용들도 포함이 되고 있다.


배포판의 실패로 이번에는 scipy.org를 다시 살펴 보다가 등록된 문제점이 있는지 확인 해 보았다.



저기에서 ScyPy 항목으로 들어가서


너무 많길래 scipy.special로 검색해 보니, 비슷한 문제점이 등록되어 있다.

https://github.com/scipy/scipy/issues/5570

읽어보니 문제는 나와 동일한 상황.
이 사람도 크리스토프 골케의 버전을 받아서 사용했다고 한다.

여기에 누군가 댓글을 달았는데, MS의 런타임 라이브러리 문제같다면서 받아서 설치해보라고 한다.(아마도 MSVCRTxx.DLL 이런걸 말하는 듯)
그런데 문제점을 올린 사람이 이미 다 설치되어 있는 상황이라고 했으니 이 문제는 아닌 듯.

여기에 관리자가 이건 NumPy나 SciPy의 문제가 아니라 Third Party에서 배포한 버전에서 발생한 문제라면서 문제점을 Close 시켜 버렸다.


이게 직접적인 도움은 되지 않았지만, 암튼 같은 문제를 겪고 있는 사람이 있으며, 사용 환경에 따라 발생할 수 있는 문제라는 걸 알게 되었다.

먼저 _ufuncs.pyd에 대해 좀 더 살펴 보기로 했다.

이 파일을 에디터로 읽으면 바이너리 파일이라 알아 볼 수 없게 나온다.


하지만 맨 앞의 MZ는 MS의 실행파일에 붙는 일종의 표식이다.

이건 _ufuncs.pyd가 DLL일 수 있다는 의미.

그래서 몇가지 툴로 이 파일의 정체를 분석을 시도해 보다가 올리 디버거(OllyDbg)에서 불러들이는 과정에 이상한 메시지를 보게 되었다.


libifcoremd.dll을 찾을 수 없다?

저게 대체 뭔데?

다시 구글 검색.
https://www.google.co.kr/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=libifcoremd.dll



검색 결과 중 몇개를 찾아보니 Intel의 Fortran Comiler에서 사용하는 DLL이라는 정보.

처음엔 웬 Fortran? 이랬는데 생각해보니 과학 기술용 패키지를 빌드하는데 포트란을 사용했을지도 모르겠다는 생각이 들었다.


에라 모르겠다 하는 심정으로 Intel 사이트에서 Fortran용 실행 라이브러리를 받았다.
https://software.intel.com/en-us/articles/redistributable-libraries-of-the-intel-c-and-fortran-compiler-for-windows


이걸 설치하려다가.....정말 무슨 귀신이 씌운건지... 우연히 살펴보게 된 NumPy의 디렉토리.
NumPy/core 폴더에 이런 파일들이 있다.


중간즈음에 libxxxxx.dll들이 눈에 뜨인다.

이 폴더에 들어있는 모든 DLL 들을 확인해 보니 모두 Intel에서 만든 것이고, 이 DLL들을 모두 SciPy/special 폴더에 복사해 넣으면 O.K.

혹은 PATH에 있는 경로에 추가해도 될 거 같은데....개인적으로는 좀 찝찝하다.

=========================================================
이젠 지긋지긋해져서 그냥 마무리 하고 싶은데,

그래도 궁금한건 궁금한거니까...추가.

몇가지 더 확인을 해 보니, SciPy의 모듈 여러가지에서 에러가 발생하고 있다.

대부분은 동일한 문제로 _ufuncs를 로드하지 못해서 발생하는 것이다.

그렇다면 위에서 찾은 dll들을 따로 따로 복사할 수 없으니 한군데에 모아두고 사용하고 싶어진다.
그래서 MS-Windows에서 DLL을 탐색하는 범위를 찾아 보니 다음과 같았다.
  1. 현재 프로세스의 실행 모듈이 있는 디렉터리
  2. 현재 디렉터리
  3. Windows 시스템 디렉터리. GetSystemDirectory 함수가 이 디렉터리의 경로를 검색합니다.
  4. Windows 디렉터리. GetWindowsDirectory 함수가 이 디렉터리의 경로를 검색합니다.
  5. PATH 환경 변수에 나열된 디렉터리

그런데, python 디렉토리에 넣어두어도, 그 python 디렉토리를 PATH에 넣어두어도 문제가 발생한다.

심지어는 Windows\System32 디렉토리에 넣어도 안된다....ㅠ.ㅠ

대체 이건 무슨 조화인가?
=========================================================

2016년 3월 19일 토요일

파이썬의 라이브러리 NumPy + SciPy _____ 3

이도 저도 안되니 결국은 과학기술용 파이썬 배포판을 사용해 보기로 했다.

과학기술용 파이썬 배포판들


위의 링크들을 대충 살펴보고 가장 기대치가 낮은 것부터 시도해 보기로 한다.

왜 나는 항상 이런식일까?

처음에 가장 좋은 것을 선택하면, 한번에 성공하고, 시간도 절약되고, 얼마나 좋은가?

그런데 왜? 가장 허접해 보이는 걸 먼저 선택하고, 실망하고, 다음걸 선택하고.... 결국은 많은 시간과 노력을 소모하는 방법을 택하는 걸까?

가보지 않은 길을 만들지 않기 위해서?
최종 선택에 아무련 후회가 남지 않도록 하기 위해서?


아무튼....

첫번째 선택은 Pyzo.
http://www.pyzo.org/index.html


Pyzo는 Python3에 Conda라는 패키지 관리자와 iPython, 그리고 IEP라는 IDE를 포함하고 있다고 되어 있다.


Pyzo가 허접하다고 생각한 이유는 홈페이지의 모습도 그러하지만, 바로 저 배포 버전의 이름 때문이었다.

OS별, CPU별 구분이야 당연한 것이고, 그 외에는 달랑 2015a라는 것 하나 뿐이다.

하지만 그만큼 이 배포판은 제약이 적을거라는 생각도 할 수 있다.
왜냐하면 특정 패키지의 업그레이드를 각 사용자들이 자유로이 해야 할 테니까...

설치 방법을 보아도 그러함을 예상할 수 있는데, exe 파일의 installer도 있지만, zip 파일을 받아서 원하는 폴더에 풀어서 사용하는 방법도 있다고 하니 말이다.

다운로드 받은 Win32용 인스톨러는 148MB, Win32용 Zip파일은 213MB이다.


먼저 Zip 파일을 압축 풀면 대략 다음과 같이 나온다.


특별한 지시사항도 없다.
README를 읽어봐도 이상한 imageio에 관한 설명 뿐이다.

그래서 먼저 pyzo를 cmd에서 실행해 보았다.



그러자 위와 같은 화면이 나오는데, 이건 IDE라던 IEP로 보인다.

실행 중인 프로세스를 확인해 보니 다음과 같이 나온다.


이게 IEP가 아닌 Pyzo와 python 인터프리터가 실행 중.

어째서 IEP라는 IDE의 이름을 Pyzo라고 만든건지....


그래서 다음은 Pyzo_activate.exe를 실행.


몇개 묻고 끝.

환경 변수에 추가된것도 없음.

레지스트리 검색해보니 다음과 같은 것이 추가 되었음.(pyzo2015a로 검색)


Trolltech라는 회사/제품인데 이건 pyzo만 쓰는게 아니라, calibre라는 eBook 프로그램도 함께 사용중인 제품으로 보임.


그리고 iPython-qtconsole 실행.
실행 하고 시험삼아 문제가 되었던 SciPy를 import해 보았다.


이건 뭐지....역시나 같은 에러 메시지.

배포판에서도 문제가 있다는 말인가?


==========================================================
첫번째 포스팅의 마지막에 추가한 것과 마찬가지로, Pyzo에 포함된 Scipy 역시 Windows XP를 지원한지 않는 것으로 보인다.
Pyzo 사이트에서는 이에 대해 공식적으로 언급한 부분이 없는 듯이 보인다.
==========================================================

2016년 3월 17일 목요일

MAME에 관한 궁금증 ____ 0

MAME를 이용해 게임을 즐기려다 보면 은근히 혼란스러운 부분들이 있는데,
원하는 게임이 제대로 실행되지 않는 경우가 있다는 것이다.

그저 아직 에뮬레이션의 개발이
완료되지 않았으니 좀 더 버전이 올라가서 지원되기를 기다려야 하는 것이 아니라,
동일한 게임 롬을 가지고도 A라는 컴퓨터에 설치된 MAME로는 실행이 되는데, B라는 컴퓨터에 설치된 MAME로는 실행이 되지 않는 경우가 있다는 것이다.

단지 버전 차이가 아니겠냐고 반문할 수도 있겠지만, 절대 그렇지 않다.
심지어는 낮은 버전의 MAME에서는 실행이 되는데, 최신 버전의 MAME에서는 실행이 되지 않는 경우도 있으니 정말 괴이하기 짝이 없다.


아주 오래전에 MAME UI32라는 프로그램을 사용하기 시작했다.
이 프로그램은 MAME의 0.143u9이라는 버전에 front-end를 추가해서 하나로 만든 버전이었다.
릴리즈 시기는 2011년 10월 27일.

MAME UI32

이 프로그램의 장점은 사용하기 쉽다는 점.
각종 설정도 간편하고, 게임들을 고르기도 쉽다.

단점은... 저 많은 게임의 목록을 다 읽어 들여야 하기 때문에 실행시 초반에 시간이 꽤 걸린다.
물론 옵션으로 디렉토리 검색을 하지 않도록 선택할 수도 있다.
하지만 롬파일의 개수가 어느 정도 이상 많아지면 그 목록을 단지 메모리에 읽어 들이고 화면에 표시하는 데에만도 시간이 적지 않게 걸린다.
그러다 보니 발생하는 문제가 있는데, 기존의 목록에 새로운 게임을 추가하게되면 이 목록을 새로 고치도록 해야 하는데, 그러면 디렉토리를 모두 다시 검색한다.....ㅠ.ㅠ

더욱더 치명적인 단점이 있으니....MAME 코어와 Front-end가 하나로 뭉쳐져 있다는 점이다.
따라서 계속 업데이트 되는 MAME를 따라가려면 이 Front-End의 제작자가 업데이트 해 주기를 기다려야 한다.
그리고 이 Front-End는 더 이상 업데이트가 되고 있지 않다.....ㅠ.ㅠ


이러한 단점들 때문에 어떻게 되는지도 모를 Front-End들은 과감히 버리기로 작정을 했고,
MAME 코어를 직접 다운 받아서 사용하게 되었다.

MAME 0.161

MAME 코어만을 사용하면 적쟎이 당황하게 된다.
시작때마다 랜덤하게 아무 게임들이 골라서 목록을 보여준다. 그리고 저게 다다.
저 아래로 더 있을거라는 생각은 하지 말자.
원하는 게임이 있다면 그 게임의 이름을 입력하면 맨 위에 표시가 되면서 그에 해당되는 게임들의 목록이 나타난다.

그리고 저기에 나오는 목록은 내가 가지고 있는 게임롬 내에서 검색한 게 아니다.
단지 MAME가 "지원"하는 게임들의 목록이다.
해당 게임에 커서를 옮겨서 엔터를 누르면, 그제서야 지정해 두었던 내 컴퓨터의 디렉토리에서 검색하기 시작한다.

물론 내가 가진 롬파일이 어느 디렉토리인지는 따로 설정해 주어야 한다.
전체화면으로 볼 것인지 윈도우로 볼 것인지, 가로세로 비율을 강제로 조절할지 원래대로 유지할지, 꽉차게 볼지 아닐지 등등을 모두 직접 설정해 줘야 한다.
mame.ini를 직접 편집해서...

하지만 시작은 아주 경쾌하다.
하드 디스크를 별로 긁어대지도 않고 순식간에 실행이 된다.

MAME 0.171
최근에 나온 MAME 0.171은 마치 심플한 Front-End를 내장한 것처럼 보인다.
좌측에서 MAME가 지원하는 전체 목록을 볼지, 현재 보유한 게임만을 볼지 등을 선택할 수도 있다.
게임의 목록을 모두 로드해야 하기에 이전 버전보다 시작하는 게 버거워졌다.

설정해야 하는 것들도 모두 여기에서 할 수 있다.


그리고 이렇게 사용하면서 맨 위에서 언급한, 정말 궁금한 문제들이 나타나기 시작했다.

비록 불완전한 에뮬레이팅이지만 MAME UI32에서는 Ray Storm, Street Fighter Ex, Radiant Silvergun이 실행이 된다.
하지만 MAME 0.161과 MAME 0.171에서는 이 게임들이 실행되지 않는다.

모든 MAME용 롬파일들은 하나의 디렉토리에 존재하고 있으며, 모든 버전의 MAME는 이 디렉토리를 사용하고 있는데도....


===============================

사실 MAME 0.171은 새로 다운로드 받았다.

위의 문제를 직접 확인해 보고 싶어서, 소스레벨의 디버깅을 해 보고 싶었고,
소스를 받으러 갔다가 새로운 버전이 있길래 받은 것이다.

바이너리 파일, 소스파일, 그리고 디버그 빌드를 한 바이너리 파일과 심볼 파일을 받았다.

그리고 소스 빌드를 하지 않고, 디버그 바이너리와 소스, 심볼 파일을 이용해 디버깅을 시도해 보았다.

하나도 안된다.

디버그 바이너리를 읽고는 디버그 정보를 찾을 수 없다고 하는 gdb.






심볼파일 패스를 지정했음에도 역시 심볼을 찾지 못하고 소스에 브레이크 포인트를 잡지 못하는 windbg

Windbg

exe를 불러오자 analyzing에 무지막지하게 버벅대던 Ollydbg,
급기야 중지하려고 해도 안되고 먹통이 되어버리더니 강제 종료시킬 수 밖에 없는 상황.

그리고 이 모든 상황을 더욱 짜증나게 만드는 프로그램들이 있었으니....

혹시라도 자기를 디버깅할까봐 지레 겁을 먹고 경고를 날리는 보안 프로그램.
INCA internet의 nossvc - nProtect Online Security Service와 Wizvera의 Delfino라는 프로그램.

Delfino와 nossvc

이 프로그램들의 삭제 방법부터 강구해 봐야겠다.

강제 종료도 되지 않으면서 디버깅 툴마저 작동하지 못하게 방해를 하다니....

이거야말로 악성 어플이 아닌가...

2016년 3월 16일 수요일

파이썬의 라이브러리 NumPy + SciPy _____ 2

앞서의 포스팅에서는 크리스토프 골케(?)라는 분이 미리 만들어 둔 NumPy와 SciPy 패키지의 인스톨 파일(whl)을 받아서 설치했는데,
무슨 이유에선지 예제 소스를 실행하는데 문제가 생겼다.
(SciPy/Special 모듈을 import하는 과정에서 에러 발생.)

에러 메시지를 이용해서 Python / SciPy / Google로 검색을 해 봤지만, 내 경우에 해당하는 것과 일치하는 검색 결과를 찾을 수는 없었다.


이 문제를 해결하는 가장 빠른 방법은...

과학 기술용 Python 배포판을 받아서 완전히 새로 설치해 주는 것.

하지만 이렇게 할 경우,
기존의 방법에서 문제가 발생한 원인을 알 수는 없으며,
새로운 패키지를 추가로 설치해야 하는 경우에 같은 종류의 문제가 다시 발생할 수 있으며,
그러면 역시 같은 어려움에 직면하여 같은 실수를 반복하게 될거라는....


일단 이번 포스팅에서는, 크리스토프 골케(?)의 패키지 설치파일에 문제가 있을 수 있다는 가정을 하고,
설치해 둔 NumPy와 SciPy를 제거한 후, 오리지널 파일을 이용해서 직접 설치해 보도록 할 것이다.

먼저 pip list로 설치된 패키지를 살펴보면,


NumPy 1.10.4와 SciPy 0.17.0이 설치되어 있음을 알 수 있다.


이제 pip uninstall scipy로 scipy를 제거한다.


제거할 파일의 목록을 보여주고 계속하겠냐고 묻는다.


y를 누르면 제거된다.


마찬가지 방법으로 NumPy도 제거


다시 pip list로 확인해 보면 NumPy와 SciPy가 제거된 것을 알 수 있다.



이제는 오리지널 NumPy와 SciPy를 받아보자.



이 링크에 보이는 numpy와 scipy를 클릭하면 다음과 같은 페이지가 나온다.

NumPy의 경우에는 파일의 목록이 보이는데, 최종 릴리즈 버전인 1.10.4의 zip 파일을 받았다.


SciPy의 경우에는 NumPy와는 다르게 엄청나게 긴 내용의 Release Note가 나온다.

이 Release Note의 마지막 부분에 가면 다운로드 받을 수 있는 파일들이 나오는데, 그 가운데 zip 파일을 받았다.



이제 다운로드 받은 NumPy와 SciPy의 압축을 풀고 안에 있는 INSTALL.txt를 읽어보고 따라 하면 된다.

NumPy와 SciPy의 INSTALL.txt를 읽어보면 공통적으로 초보자는 그냥 배포판을 받아서 사용할 것을 권장하고 있으며, C/C++ 컴파일러를 필요로 하고 있다.
SciPy의 경우에는 조금 더 복잡해서 필요로 하는 다른 패키지들이 꽤 되는 듯이 보였다.
Blas/Lapack이라는 것은 필수적이고 Sphinx와 Cython이라는 것도 경우에 따라서 필요하다고 한다.

Windows 환경에서 가장 딜레마가 되는 건 컴파일러인데, 여기에선 mingw나 MS Visual Studio를 사용해야 하는 것으로 보인다.

mingw가 gcc를 포팅한 것이지만, 어딘지 미심쩍어 보이기도 하는게 사실이다.
cygwin이나 DJGPP도 역시나 비슷비슷한 수준이 아닌가 싶기도 하고...

MS Compiler는 언제나 범용성에서는 2% 부족하게 느껴지기에.....


이 와중에 아까 사용한 pip의 패키지 제거 과정이 떠올랐다.

pip는 패키지를 다운로드, 설치, 업그레이드, 제거가 모두 가능하므로....

혹시나 하고 pip를 이용해서 직접 해 보았다.

pip install numpy
그냥 설치 완료....헐

그런데 다운로드 받은 파일의 이름을 보니 아까 크리스토프 골케(?)가 만든 파일과 이름이 조금 다르다.
크리스토프의 파일인 cp27-cp27m-win32....cp27m은 무슨 의미였던 걸까?

이어서 scipy도 시도.
pip install scipy

pip install scipy
NumPy와는 다르게 SciPy는 설치과정에서 에러를 뿌려댔다.

다운로드 받은 파일의 이름도 약간 미심쩍은게 cp27이나 win32와 같은 구분 요소가 없었다.
아마도 SciPy의 경우에는 시스템마다 개별적인 요소가 많아서 아예 소스로 다운 받아서 빌드해 나가는 것이 아닌가 싶다.

에러의 첫번째 부분에는 위에서 언급한 Blas/Lapack이 보인다.

    lapack_opt_info:
    openblas_lapack_info:
      NOT AVAILABLE

    lapack_mkl_info:
    mkl_info:
      NOT AVAILABLE
      NOT AVAILABLE

    atlas_3_10_threads_info:
      NOT AVAILABLE

    atlas_3_10_info:
      NOT AVAILABLE

    atlas_threads_info:
      NOT AVAILABLE

    atlas_info:
      NOT AVAILABLE

이 외에도 많은 라이브러리를 찾고 있는데, 이 모든 것이 필요한건지, 몇가지만 필요한건지도 모르겠다.

Blas/Lapack의 경우에는 Cygwin을 사용해야 하는 듯이 언급하고 있기도 하고....

제대로 한번 해결해 보겠다고 덤볐지만, 점점 산으로 가는 중인 듯...


일반적인 파이썬의 패키지는 pip install 로 설치하는 방법만 알면 될 듯 하고, 이 이상을 시도하는 것은 득보다 실이 많을 것 같아 포기. ㅠ.ㅠ

아마도 다음 포스팅은 과학 기술용 파이썬 배포판을 시도하는 것이 될 듯 하다.

파이썬의 라이브러리 NumPy + SciPy _____ 1

파이썬에는 유용한 라이브러리들이 많은 것으로 알고 있는데,

얼마전에 우연히 호기심이 발동한 NumPy와 SciPy를 사용하는 방법을 정리해 두고 싶었다.


이유는.....

자칫 잘못하면 미궁에 빠져서 시간을 낭비할 수도 있겠다 싶어서....


우선 사용환경은,

OS : MS-WindowsXP sp3
Python : 2.7.1 (이 버전이 적합하다는 의미가 아니라, 처음에 이 버전으로 시작했다는 뜻. 나중에 업그레이드 하게 된다.)


먼저 NumPy와 SciPy를 찾아보자.
왜 두개의 라이브러리가 종종 자주 언급되는지는 금방 알게 된다.
같은 곳에서 만들어서 배포하고 있기 때문...

http://www.scipy.org/




이제 좌측 상단의 Install을 클릭해서 들어가면,



Windows와 Mac 사용자들은 과학 기술용 Python 패키지를 통째로 받아서 설치하는게 젤 쉽다고 가르쳐준다.
몇개의 배포판들이 있으니 각 배포판의 특징을 보고 자신에게 적당한 것을 고르면 된다.

하지만, 난 이미 Python이 설치되어 있으니 이 방법은 패스.

설치에 관한 설명이 있는 이 페이지의 하단을 가면 이런 부분이 나온다.

필요한 패키지들별로 각각의 링크가 되어 있으니, 사용자가 자신의 구미에 맞게 원하는 것을 설치하라는 것.

그리고 마지막의 문구가 눈에 똭~ 들어 온다.

Windows용 : 크리스토프 골케(?)라는 사람이 Python용 패키지들을 미리 빌드해서 설치할 수 있게 제공한다는 것.


흠....아마도 Python용 패키지들은 그냥 다운로드 받아서 적당한 위치에 복사하는 게 아니라 특별한 설치 과정이 필요한가 보다.

혹시라도 컴파일이 필요하다고 하면 뭘 싸야할지도 고민이니까 이걸 가져다 쓰자....라고 생각....


해당 사이트는 http://www.lfd.uci.edu/~gohlke/pythonlibs/

전혀 꾸밈이 없는 페이지.....이런 거 오래 못가던데....



패키지가 너무 많은 관계로 반드시 Ctrl-F를 이용해서 찾아야 한다.

그리고 모든 패키지의 나열을 한 페이지에서 하고 있기 때문에 브라우저의 부하가 심하다.

성능이 좀 떨어지는 컴퓨터에서는 부담을 느낄 수 밖에 없는 상황이다.



먼저 NumPy의 경우엔, MKL(Math Kernel Library)와 vanilla 빌드의 두가지가 있는데, 설명을 읽어 보니 MKL.
Python 2.x(cp27)에 Win32(win32) 환경이니 맨 위의 것을 다운로드 받는다.


SciPy의 경우에도 cp27과 win32인 맨 위의 것을 다운로드 받는다.
SciPy를 사용하려면 NumPy가 있어야 한다고 되어 있다.


그런데 다운로드 받은 패키지의 확장자가 whl임을 알 수 있는데,
이걸 설치하려면 pip이라는 것이 필요하다고 되어 있다.


그런데 pip은 Python 2.7.9 이상에 포함되어 있다고....ㅠ.ㅠ


별 수 없이 Python 업데이트 감행.

현재 최신 버전은 Python 2.7.11이고 기존 버전을 지우지 않고 설치하면 기존 버전에 Overwrite한다.


이제 [Python 설치 디렉토리]/Script/pip.exe가 있으므로 pip install [whl파일]을 실행하면 된다.....였는데...

pip의 버전이 낮아서 설치가 안 됨.

다행히 바로 pip을 업그레이드 하는 명령을 알려 준다.
(지금은 까먹었다. python -m pip install pip --upgrade 이게 맞는지 긴가민가 알쏭달쏭)


그렇게하고 나서 NumPy와 SciPy 설치

(pip가 이미 Python의 폴더를 알고 있으므로 별도로 설치할 폴더를 지정해주고 그럴 필요는 없다.)

그렇게 우여 곡절 끝에 다 설치가 되었다.


설치된 NumPy와 SciPy는 [Python 설치 디렉토리]/Lib/site-packages/에 존재하고 있으니 궁금하면 살펴 보길.


이제 scipy의 홈페이지에서 Getting Started 페이지를 가서 예제 프로그램을 저장하고 실행해 보자.
http://www.scipy.org/getting-started.html




헉...에러....

여기에서부터 본격적인 고난의 시작이다.

난 이 문제를 풀기 위해 고생을 좀 하고 있다.

먼저....파이썬의 저 난삽한 에러 메시지를 보는 법부터...

파이썬의 메시지는 처리한 순서대로 나온다. (most recent call last)

그러니까

1) example.py의 9번째 줄에 있는
   from scipy import special, optimize
  를 처리하기 위해서
2) [Python 설치 디렉토리]/Lib/site-packages/scipy/special/__init__.py를 읽어 와서 처리하던 중,
3) 627번째 줄에 있는
   from ._ufuncs import *
  를 처리하려고 했는데,
4) 여기에서 에러가 발생. 에러의 원인은
  Import Error : DLL load failed: 지정된 프로시져를 찾을 수 없습니다.


그러면 실제 저 모듈이 존재하는 걸까?


__init__.py도 존재하고 _ufuncs.pyd도 존재한다.


그러면 에러가 발생한 소스는?
__init__.py

에러메시지 그대로다.

아직은 python에 대해 완전히 초보와 마찬가지라 대체 무엇이 문제인지 감을 잡지도 못하겠다.

*.py가 아닌 *.pyd는 무슨 파일일까?
*.py가 아닌 *.pyd를 import 할 수 있는 걸까?
에러메시지의 DLL이라는 건 또 무슨 뜻일까?


====================================================
참고 삼아서, 아주 구닥다리 컴에서 Ubuntu Linux 10.04를 사용 중이다.
이제는 더 이상 지원을 해 주지도 않는 버전이라 패키지들의 업데이트 불가능한 상황.
확인해 보니 여기에 Python 2.6.5와 NumPy 1.3.0, SciPy 0.7.0이 설치되어 있었다.

간단한 예제 프로그램은 문제 없이 돌아가고 있는 상황.

그래서 위에서 문제가된 부분이 어떻게 되어 있는지 확인 해 보았다.


버전이 낮아서 그런지, 문제가 되었던 _ufuncs.pyd나 비슷한 이름의 파일은 보이지 않는다.

또한 __init__.py에서도 _ufuncs를 import하지도 않는다.
==========================================================


==========================================================
import error가 발생한 원인은, 크리스토프 골케의 바이너리가 MS-Windows XP를 지원하지 않기 때문인 것으로 보인다.

Windows XP및 WINE과는 호환성 없음
아직까지도 MS-WIndows XP를 사용하고 있었고, 그 이후의 버전은 사용해 본 경험이 없어서 몰랐는데, 마이크로소프트사가 Visual Studio의 어떤 버전부터 Windows XP와의 호환성을 선택사항으로 바꾼 것을 알게 되었다.

특별히 관심을 가지지 않은 오픈소스 혹은 프리웨어 개발자들은 이 사실을 모르고, 새로운 Visual Studio로 빌드한 바이너리를 배포했고, 이런 바이너리들은 Windows XP에서는 실행되지 않게 되었다.(빌드시에 옵션을 선택해주면 실행이 가능한 것으로 알고 있지만, 디폴트 옵션이 아니라고 들었다.)

어쨌든 이 포스팅이 8회까지 진행된 후에서야 이런 결론을 내리게 되어 매우 허탈하지만, 애초에 저 문구를 보지 못했던 내 자신을 탓할 수 밖에 없지 않겠는가.
- 2016년 11월 13일
==========================================================

2016년 3월 14일 월요일

[알파고] 인공지능과의 조우

2016년 3월 9일,
구글의 자회사인 딥마인드가 개발한 인공지능 시스템인 알파고와 프로 바둑 기사인 이세돌 9단의 대국이 시작되었다.

이 경기는 구글 딥마인드 챌린지 매치(Google DeepMind Challenge Match)라는 이름으로 개최되었으며 총 5국의 대전을 펼칠 예정이다.

애당초 이세돌 9단은 5:0 혹은 4:1의 일방적인 승리를 자신했는데, 모든 사람들의 예상을 뒤엎고 초반 3국을 모두 알파고가 승리하였다.

이 글을 쓰고 있는 3월 15일 새벽 현재는 4국까지 진행되었으며, 다행히도 이세돌 9단이 네번째 경기를 이겨서 1:3인 상황으로 마지막 한 경기만을 남겨 두었다.


이 과정은 거의 모든 인류에게 충격을 주었음이 확실한데, 팔순을 넘긴 부친께서도 방송을 보시고 걱정을 하셨더랬으니....

그리고 그걸 보고 있자니 인간들이 받았을 공포와 두려움, 그리고 한번의 승리에 대해 환호하는 모습에서 비쳐지는 초라한 안도감에, 만감이 교차하고 온갖 생각들이 머리 속을 흔들어 놓았다.


아주 많은 사람들이, 그 보다 더 다양한 상상과 우려와 희망을 얘기하고 있는데,
나 또한 여기에 지금까지의 내 생각을 한번 끄적여 보고 싶다.



경기에 대한 예고가 있었을 시점부터 내가 예상했던 한가지.
만약에라도 이세돌이 알파고에게 패배한다면(이제 현실이 되었다), 사람들은 이 사실을 애써 무시하려 할 것이다.
그래봐야 단지 좀 복잡한 '게임'일 뿐 아니냐고....
성능 좋은 기계와 효율적인 알고리즘으로 언젠가는 정복될 수 있었던 복잡한 계산이었을 뿐이라고...

알파고가 이세돌을 이긴 순간, 나는 혼란에 빠졌다.
이세돌을 이긴 것이 알파고인가, 알파고를 개발한 딥마인드의 개발자들인가?

그리고 이 질문은 또 하나의 공포를 불러냈다.
알파고를 개발한 딥마인드의 개발자들은, 알파고가 둔 바둑의 각 수에 대해 설명할 수 있을까? 알파고가 내린 결정을 미리 예측할 수 있었을까?
설명할 수 없는 결정을 내린 것은 과연 알파고의 버그일까?
인공지능의 이해할 수 없는 결정에 인간이 따라야 하는 그런 암울한 순간이 오게 되는 건 아닐까?

이대로 가게 되면 미래에는,
과연 '인공지능'일 필요가 있을까? 인간을 닮으려는 목표로 시작되었지만, 결국에는 인간스러워야 하는 것은 단지 제약일 뿐이고, 다시 인간다워지는 것을 벗어난 '궁극의 지능'이 탄생하는 것은 아닐까?

대국을 진행하는 화면을 보면서, 한편으로는 여러가지 의심도 들었다.
과연 알파고는 여러대의 컴퓨터가 연결된 일종의 서버팜일까? 혹시 거기엔 바둑 고수들 여러명이 모여 있는건 아닐까? 그리고 구글이나 딥마인드가 원했던 것은 알파고와 같은 뛰어난 시스템이 아니라, 그런 시스템이 등장했을 때, 사람들의 반응을 알고 싶었던 건 아닐까?

그리고 무엇보다도 허무하게 만드는 것이 있으니,
지난 수천년간 그 많은 사람들이, 그 많은 시간들을 써가며 골몰하고 온갖 묘수를 짜냈던 그 노력들이 무슨 의미가 있는것일까?
그리고 생산성과는 아무 관련이 없는 인간의 감각적인 측면에 호소하는 많은 일들 - 스포츠, 오락, 예술, 영화, 문학 - 등등은 이제 시간만 갉아 먹는 백해 무익한 것들로 전락할 것인가?

2016년 3월 1일 화요일

[자바스크립트] 이벤트 퍼즐 게임의 샘플 코드

자바스크립트는 제대로는 물론이고 대강도 공부해 본 적이 없는 언어지만,
간혹 특정 홈페이지의 소스코드를 들여다 볼라치면,
이제는 html보다 자바스크립트가 차지하는 비중이 월등히 높아진 까닭에 어쩔 수 없이 읽어라도 볼 수 밖에 없는 언어가 되었다.

여러가지로 궁금한 점들도 있고 공부해 보고 싶기도 하지만, 대부분 그 때 뿐이라 그냥 지나치곤 하는데....

최근에 모 회사에서 퍼즐 게임이벤트를 열었는데, 이것이 자바스크립트로 구현되어 있음을 알게 되었고, 그 소스코드를 보게 되었다.
이 코드를 통해서 차근차근 공부해 본다면 실력 향상에 큰 도움이 되지 않을까 해서....


먼저 해당 이벤트 페이지는,
http://www.nongshimi.com/event/2016/02_bulbimpibim/bulbimpibim_event?




위 이벤트 페이지의 소스를 보면, 537 line에 자바스크립트 파일이 지정되어 있음을 볼 수 있다.



해당 자바스크립트 파일은 다음과 같이 시작한다.



맨 처음의 주석으로 미루어 보아, Open Source인 것으로 보인다.

직접 게임을 해 보면서 소스를 공부한다면 좋은 참고자료가 되지 않을까 싶어 여기에 기록을 해 둔다.