어제부터 혹시 지도를 직접 만들 수 있는 파이썬 서버 시스템이 없을까 하고 찾다가 TileStache(https://github.com/TileStache/TileStache) 라는 파이썬 라이브러리를 찾았다. 기본적으로 openstreetmap 을 이용하는 것 같고, 여기에다 geojson 데이터를 이용해서 추가 적인 layer 를 이용해서 맵을 만들 수 있었다. 다만 윈도우즈에서는 라이브러리에서 geojson 파일을 제대로 인식하지 못해 라이브러리 자체를 좀 수정해 줘야 하는 문제가 있긴 한다. 어째든 인터넷에서 찾을 수 있는 geojson 우리나라 맵(https://github.com/southkorea/southkorea-maps/tree/master/kostat/2013/json) 파일을 브라우저에 볼 수 있는데 속도가 좀 많이 느리다. 제대로된 시스템을 사용하려면 cache 시스템이 되어야 하고, DB 연동도 좀 필요할 것 같다. 

그리고 당연하지만 지도 데이터도 있어야 한다. 다행이 요즘 정부기간에서 많은 데이터를 공개하고 있어 쓸만한 데이터를 찾을 수 있다.
아래 사이트에서 쓸만한 데이터를 구할 수 있다. 

http://www.juso.go.kr/addrlink/addressBuildDevNew.do?menu=bsin (사이트내 다른 곳에서 꽤 많은 데이터를 제공한다. )

우선 서버 전에 QGIS 에 대해서 공부가 필요하다. 다운 받은 파일은 QGIS에서 실제 어떤 모양인지 확인 할 수 있다.

정리되는 데로 공유하도록 하겠다. 

 요즘은 회사에서 flask + jinja2 를 사용하고 있다. 내가 fullstack 개발자처럼 일하다보니 프론트엔드도 같이 해야 하는데 그러다보니 더 싶게 일 할 수 있는 방법은 없는지 고민하게 된다. 그러다 vue.js 에 관심을 갖게 되었다. react.js 는 뭔가 시작하기 무거운 느낌이 있었는데 vue.js 는 시작해 볼 수 있겠다는 생각이 들었다. backend 를 파이썬으로 하고 frontend 를 vue 같은 자바스크립트 프레임워크로 하면 문제가 SEO를 위한 server side rendering 을 지원할 방법이 없다는 것이다.  둘 다 node 계열이면 문제가 없는데 이렇게 섞어 쓰면 조금은 문제가 생긴다.  

 그래서 python 으로는 vue.js 를 서버사이드로 완전한 HTML 을 뽑아낼 수 없는지 찾고 있는데, 방법이 없다. 그러다 jinja2 extension 을 만들면 가능하지 않을까 하는 헛된 생각을 하고 있다. 원할 때, HTML 을 완전히 flask + jinja2 의 도움으로 뽑을 수 있고, 또 client side rendering 이 필요할 때는 vue.js 의 도움으로 Client Side Rendering 을 할 수도 있지 않을까 하는 안좋은(이 안좋다는 말의 의미는 내가 또 나 혼자 해서는 실현 가능성 없는 생각이라는 의미가 포함되어 있다.) 생각을 하고 있다. 

  jinja2 가 단순히 변수를 변경해 가면서 html 을 렌더링 하는 줄 알았는데 내부적으로 dom 을 파싱해 가면서 분석하면서 동작하고 있었다. 이 dom 파싱을 이용할 수 있는 방법이 jinja2 extension 을 만드는 방법이다. (여기에 대해서 더 알고 싶다면 https://github.com/mitsuhiko/jinja2-htmlcompress 코드를 분석해 보기 바란다.)

또, 이렇게 쓸데없는 생각을 하고 있다. 그런데 이렇게 생각하면 몇 년 지나면 프로젝트가 생기더라. 누가 좀 만들어 주었으면 좋겠다. 

 한 때, 게임을 개발하고 싶어서 여러 리소스를 찾은 적이 있었다. 라이센스 적으로 문제 없는 이미지, 사운드, 음악 이런 것들을 찾아 보았다. 이미지는 정말 안돼면 Gimp 나 inkspace 를 통해 어떻게든 시간을 들여서 만들고 사운드는 정 안돼면 여러 사운드를 직접 녹음하는 방법도 생각할 수 있을 것 같은데, 음악은 정말 어떻게든 만들 수 있는 방법이 없었다. 생각할 수 있는 방법은 고전 클래식 음악을 이용하는 정도 였다. (그래도 요즘은 뒤져보면 라이센스 적으로 문제 없는 음악들이 늘어 난 것 같다. ) 

 이런 고민을 한 때 하다가 자동 작곡에 대한 글을 보았다.( https://github.com/jamong/music-rnn ).  Deep 러닝에 관심이 생기다 보니 한 번시도해 보았다. 



아래 세팅은 Windows 10을 기준이다. 


▣ Theano설치

◎ TDM-GCC 설치

- 윈도우즈에서 gcc 환경을 구축하기 위해 사용하는 mingw 가 그냥 mingw 와 mingw w64 버전이 있다. 더 자세히 알아보면 둘은 같은 구현이 아니다. 각기 다른 구현체이다. (더 자세한 것은 http://klutzy.nanabi.org/blog/2015/03/05/mingw/ 에서 확인 할 것)
- TDM-GCC는 Mingw API 를 이용해 32bit 바이너리와 64bit 바이너리를 제공한다. (https://stackoverflow.com/questions/21980774/what-is-the-difference-between-orwells-mingw-and-tdm-dev-c-versions/22185860 )

◎Ⅰ. http://www.lfd.uci.edu/~gohlke/pythonlibs/  를 통한 설치

◎Ⅱ. 직접 컴파일

○ 우선 TDM-GCC 설치
○ https://github.com/Theano/Theano  에서 zip 파일 다운로드
 ( 바로 install 은 pip install git+git://github.com/Theano/Theano.git --upgrade  이지만 실제 동작시 에러발생)
         (참고 http://skyer9.tistory.com/7 , 원 출처 : http://funmv2013.blogspot.kr/2016/03/windows-keras.html )


◎ 설치 후 THEANO_FLAGS 환경 변수 설정

○ 탐색기에서 주소창에  %USERPROFILE% 로 이동하면 자동으로 해당 유저의 프로필 설정 디렉토리로
  이동함
.theanorc 파일을 생성 후


[global]

floatX = float32

device = gpu


[nvcc]

compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin


 처럼 생성한다. (nvcc 는 CUDA Toolkit 이다. )
   http://ankivil.com/installing-keras-theano-and-dependencies-on-windows-10/


▣ numpy

http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy에서 다운 받아 설치한다.
  ( 그냥 pip install 로 하면 ImportError: cannot import name NUMPY_MKL 에러 발생함)



▣ Keras

◎ pip install git+git://github.com/fchollet/keras.git

◎ 파이썬 실행시 import keras 시 No module named tensorflow 에러 발생시
   keras 의 backend로  theano 설정이 안된 것이므로 설정이 필요함  

○ 탐색기에서 주소창에  %USERPROFILE% 로 이동하면 자동으로 해당 유저의 프로필 설정 디렉토리로
  이동함
○ 해당 폴더에서 .keras 폴더 생성(콘솔 창에  해당 디렉토리 이동후 md   .keras   라고 한다.)  후
 keras.json 파일 생성( 경우에 따라서는 이미 생성되어 있을 수도 있다. )


{

   "floatx": "float32",

   "epsilon": 1e-07,

   "image_dim_ordering": "th",

   "backend": "theano"

}


== 원본은 아래와 같이 생겼다.  tensorflow 로 돌아갈 때는 아래 것을 복원한다. ==

{

   "image_dim_ordering": "tf",

   "epsilon": 1e-07,

   "floatx": "float32",

   "backend": "tensorflow"

}






http://ankivil.com/installing-keras-theano-and-dependencies-on-windows-10/



▣ UnRoll

◎ pip install ez_setup (설치시 ez_setup 필요)

◎ pip install UnRoll

◎ 자동으로 music21 설치됨





실제 소스를 돌리는 경우 train_piano.py  파일을 좀 수정해야 한다. 코드에 .strftime("%Y.%m.%d.%H:%M:%S"))  이런 표현이 있는데, 이게 윈도우즈에서 

파일생성시 :  가 드라이브 구분자로 사용되므로 : (콜론)을 제거해야 한다. 





== 결론 ==

이것으로 실제 작곡이 가능한지는 잘모르겠다.  아래 결과 파일이다.


rnn_lstm_pred_midi_20170226T232412.zip



GPU 이용 안하면 엄청 느리다. 아직 내부 모델 분석은 못했다. 이제 막 공부를 시작해서..