Category Archives: Programming

DailyExpenses v0.9

DailyExpenses v0.9 [Link]

커플 가계부 앱이다. 사실 아내하고 둘만 쓰려고 만든건데, 그래도 한번 세상에 나오면 (개인적으로는) 의미있을 것 같아서 앱스토어에 등록했다.

시중의 가계부앱들은 너무 복잡하고, 무겁고.

‘뱅크샐러드’라는 앱은 공인인증서를 이용해서 모든 카드와 계좌까지 연동해주는 어마어마한 기능을 갖추어서 함께 쓰고있지만, 그래도 가계부라는 것은 그때그때 손을 하나씩 입력하는 정성(?)이 필요할 것 같았다. 무엇보다도 곧 외국으로 가면 인터넷이 연결이 안될 상황이 많으니, 내부적으로 기록하고 필요시에만 인터넷을 통한 동기화를 가능하도록 하는게 가장 중요했다. (다만 맨처음 구동시엔 인터넷 연결이 필요한데, 이메일 등록기능 때문에 약간 역설적인 상황이 되어버렸다)

개발기간에 한달 정도, 앱 심사에만 또 거의 한달이 소요되었는데, 생각보다 기간이 오래 걸린 것은 ‘동기화’ 기능 때문이었다. 백엔드에서 sql문이 오타라도 하나 생기면 그 원인 찾는게 너무 힘들었다. 앱 심사는 또 어찌나 까다로워졌는지, 아마 다시는 앱 같은거 안만드는게 속편하다 싶을 정도.

동기화된 자료를 엑셀로 출력하는 기능을 만들어야 버전이 1.0이 될 듯 하나, 언제 그 작업을 시작할지는 요원하다.

애플의 정책 때문에 아이폰 개발자 이름이 그냥 노출되어 버렸다. 내가 어렸을 때 부모님이 영어를 잘 모르실때, 발음만 신경쓰시고 내 영어이름을 만들어주셨다. 그런데 유난히도, 저 컨퍼런스 때라든지 영어이름을 보고 ‘왜 영어이름을 이렇게 만들었냐’ 라고 재미?있어하는 사람들은 정작 다 한국사람들이고, 외국애들은 전혀 신경조차 쓰지 않아,(게다가 ‘ㅓ’ 발음을 정확하게 해주니까) 그냥 또 그러려니 하며 쓰고 있다.

서버 호스팅 설정 #1

그간 항상 개인 서버에 대한 갈증 같은 것이 있었던 찰나에, 마지막 프로젝트를 진행했던 웹호스팅업체의 불성실함과 비전문성에 짜증이나 아예 서버 호스팅을 진행하기로 결정.

검색 끝에 https://www.iwinv.kr/server/server.html 업체에 가입해서 일단 월 2000원짜리 서버를 세팅해보기로 했다. 이하는 그에 대한 세팅 일지.

웹서버 세팅 : https://blog.lael.be/post/73

틈틈히 해줄일 : apt-get update, apt-get upgrade

<사용자 추가 및 세팅>

#adduser myuser1
#su -l myuser1
#mkdir www
#exit

conf 파일 설정 https://blog.lael.be/demo-generator/apache/my-example-site.com.php

#vi /etc/apache2/sites-available/mydomain.conf
#a2ensite mydomain
#service apache2 reload

다음에 mysql setting 으로 마무리

 

Postfix로 SMTP 보내기 설명

[메일서버] Postfix, Dovecot, SSL/TLS 인증

 

<계속 추가>

nVidia Deep Learning Institute 참가 후기

외부 진료 자문 일정에 잠깐 여유 시간이 되어 참가해본 nVidia Deep Learning Institue (http://www.nvidia.com/content/apac/event/kr/nvidia-deep-learning-institute-march/)

(사진 출처 : http://biztribune.co.kr/n_news/news/view.html?no=17005)

구글링을 했는데 마땅한 후기들이 없어 참여할지 말지 고민했는데, 3월 세션의 주제가 Medical image segmentation 이었기에(이런 최근 핫한 이슈를 놓칠 수는 없지) 잘 모르는 상태에서 그냥 등록.

당일에 듣기로는 일주일만에 등록이 마감되었다고 한다.

교육 방식은 어떠한 이론의 강의도 아니고, 스스로 코딩을 해보는 방식도 아니고, 이미 jupyter로 만들어진 소스들을 하나하나 실행해가면서 그 결과를 확인해보는 것이다. 첫번째 session은 DIGITS이라는 nVidia의 프레임웍을 이용하고, 두번째 session은 Python(Tensorflow), 세번째는 R을 이용한다. DIGITS은 사전 준비 튜토리얼을 보고 대충 익혔고, 나머지 두 언어는 알고 있어서 이해에는 크게 무리가 없었다.

결과적으로 얘기하자면, 나한테는 정말 좋은 시간이었지만 조금은 애매한  level의 교육이라고 할 수 있는데, 왜냐면 이 세션을 통과하는 큰 줄기가 바로 convolution neural network 이기 때문에, 이 부분에 대한 기본적인 이해가 없느면 이미 만들어진 소스를 그냥 따라 가는 것에 불과하기 때문이다. 그리고 (개인적인 생각으로는) neural network은 각 node의 변화를 하나하나 직관적으로 이해할 수 없어서 결국 cross_entropy의 감소 및 우리가 측정하고자 하는 value의 증가, 감소로만 그 efficacy를 증명할 수 가 있기 때문에, 초보자들한테는 이걸 들어도 무슨 이야기인지 알기 어려운 느낌이었다.  김성훈 교수님의 강의(http://hunkim.github.io/ml/)가 정말 어마어마하게 쉽게 설명하고 있는 것이구나 하고 다시 느낄 수 있었다. 다행히 강좌를 RNN까지 들어놨기에 비교적 쉽게 이해할 수 있었다. 게다가 deconvulotion에 대한 개념적인 이해도 같이 해볼 수 있었다.

반면에 CNN, RNN(보니까 4월 세션은 이쪽이 주 일듯 하다)을 능수능란하게 구현할 수 있는 고급자한테는 더욱 필요가 없는 시간일 듯 하다. 다만 한가지 그래도 얻을 수 있다면 바로 이 인증서,

이름은 삭제해두었다.

이렇게 대충, 나는 Medical Image Segmentation에 대한 Deep learning 인증서(? – 정확히 말하자면 교육 참가 인증서)를 하나 갖게 되었다.

연좌셨던 nVidia 과장님께 다행히 쉬는 시간에 질문을 통해 많은 의문을 해소했으나, 여전히 잘 이해가 안가서 나중에 찾아볼 내용들.

#1. 표본이 적은 dataset에서 학습이 충분히 이루어지지 않는 단점을 해결하기 위해 fine tuning된 pre-trained model을 이용하여 학습을 시행하는데, 분명 이미 수차례의 epoch을 돌려서 구성된 각 노드의 값들이 추가되는 학습에 의해 크게 변화하는지?

– 이것에 대해 연좌분은 그래서 너무 layer들이 너무 많아질(deep?) 경우 overfitting이 발생하므로 ‘적절히’ 구성되어야 한다고…이 적절함을 어떻게 찾을 수 있을지가 하나의 삽질 같이 느껴진다. (마치 이건 생물학자들이 약간의 변수를 조절하고 Western blot을 돌리고, 바꾸고  다시 돌려보고 좌절하는 것과 같은 것이 아닐까?…)

#2. FCN(fully connected network) 이라는 것을 사용하는데, 원래 이미지같은 자료는 그 노드의 갯수가 너무 많이지기 때문에 FCN이 좋지 않다고 알고있다.(사실 이 말도 내가 잘못 알는 것인지도 모른다) 그런데 예제는 다 FCN으로 구성된 내용이었다. GPU를 믿고 그렇게 한것인지..

 

[C#/Kinect SDK2] 중간상황(2017.3.20)

  1. 향후 진행을 위해 Depth Window로 이용.
  2. 예제를 백분 이용하여 매번 frame이 올때마다 배경은 reload되는 방식으로, 좌표나 점들의 표시는 객체를 미리 생성해두고, 그 객체의 좌표를 그때그때 옮기는 방식으로 했다.
  3. HDFace의 좌표를 정확히 얻고자 센서에 가까이 가면 손 좌표가 잘 인식되지 않는 느낌이다. 좌측손의 빨간점이 자꾸 튄다.
  4. 얼굴을 기준으로 상자 3개를 이용해 버튼을 만들고, 좌측 손이 다가가면 파랗게 변하게 했다. 다음번엔 저 상태에서 주먹을 쥐면 녹색으로 변하면서 Click과 같은 event를 발생시키고자 한다.

 

[C#/Kinect SDK 2] 진행상황 정리

얼굴은 자진 모자이크.

참고사이트

  1. http://kinect.github.io/tutorial/lab01/index.html
  2. http://pterneas.com/2015/06/06/kinect-hd-face/
  3. https://writeablebitmapex.codeplex.com/

#1. HDFace 그리기(2)는 Depth window를 사용하기 때문에 발생한 좌표의 괴리. 이것을 해결하기위해 CoordinateMapper를 이용한다.

#2. 문제였던 것이 전송된 frame을 바로  WPF에서 image 객체에 쏴주면서 rectangle을 그리다 보면 지속적인 깜박임이 발생.

이를 해결하기 위해 전송된 frame을 Bitmap으로 변환하는 방식으로(1) Bitmap에 직접 도형을 그려줌. 이를 위해 사용한 것이 WriteableBitmapEx Library(3).

#3. 신기하게도 배경화면을 image의 source를 Bitmap으로 하고, HDFace는 canvas에서 그려주는 방식으로 하고 있다. 그래서 그런것인지 HDFace 그림이 전혀 끊기지 않고 부드럽게 움직인다. 배경만 Bitmap으로 해줘도 이런 문제를 해결할 수 있는 것인지 궁금하다. 테스트는 추후에.