개발일지 151218

지그비 설정 초기화.
지그비 하드웨어는 Xbee Series 2이며, 모든 설정은 X-CTU로 설정하였다.
각 지그비의 펌웨어는 다음과 같다.

Coordinator: Znet 2.5 Coordinator API
Router/End: Znet 2.5 Router/End API

공통적인 설정은 다음과 같다.
Bandwidth: 9600
bit: 8
parity: None
stop bit: 1
flow control: None

항후 개발을 위해 통신 모드는 모두 API로 설정하였다.

[다음 개발 계획]
제일 먼저 멀티탭을 개발한다.
기능적 요구사항은 다음과 같다:
- 물리 버튼으로 제어할 수 있어야 한다.
- 물리 버튼을 허가/금지할 수 있어야 한다.
- 제어 결과를 실시간으로 확인할 수 있어야 한다.
  만약 딜레이를 허용해야한다면, 10초 이내로 확인할 수 있어야 한다.
- 예약할 수 있어야 한다.
  예약은 분/시/일/주 단위로 할 수 있어야 한다.
- 멀티탭별로 고유 이름을 붙일 수 있어야 한다.
  고유 이름은 한 명의 사용자에 한해서 고유하다.
- 4구 멀티탭으로 제작한다.

비기능적 요구사항은 다음과 같다:
- MALM을 통해서 조작한다.
- MALM 웹사이트 상에서 조작한다.
- 지그비 통신으로 제어할 수 없는 기능은 회로로 제어한다.(ex: gate, diode, capacitor, resistor)
- AES 보안을 사용한다.

install python 3 & pip

Synology NAS에 설치할 수 있는 Python3 배포처는 대표적으로 두 개가 있습니다.

하나는 Synology에서 제공하는 python 3, 그리고 다른 하나는 Synocommunity에서 제공하는 python3가 있습니다.

뭐든 상관 없지 않을까 생각합니다만, 그래도 공식 배포처부터 써봐야하지 않을까 싶어서 설치 해봤습니다.

순서
python 3 설치 - pip 설치 - pip 실행 예제 (Django 설치)


1. python 설치

아시는 분은 아시겠지만 저 화면은 이미 설치되었기 때문에 '설치됨'이라고 표시된 것이며, 설치되지 않은 패키지는 그냥 '설치'라고 쓰여져 있습니다.

원클릭으로 설치되기 때문에 신경 안쓰셔도 될 것 같습니다.


2. pip 설치
일단 pip설치 전에 python이 설치되었나 확인부터 하겠습니다.
>python



그냥 python (=python 2.x)이라면 보다시피 putty 접속 후 python만 입력해도 버전이 나옵니다만 지금은 py3를 설치할 계획이므로 다음과 같이 확인합니다.
>python3


이제 본격적으로 pip를 설치해보겠습니다.

마침 포럼에 누군가 pip 설치 스크립트를 올려놨네요.

pip 코드

클릭하면 코드만 나옵니다. 복사하셔서 'get-pip.py'로 저장합니다.

그리고 이 파일을 NAS로 복사합니다.

어디든 좋으나 putty나 ssh로 접속했을 때 접근하기 편한 위치가 좋습니다.


이제 'get-pip.py'를 실행시켜보겠습니다.

그리고 putty나 ssh에서 실행해줍니다. 1분 이내로 설치됩니다.

>python3 get-pip.py


pip 뿐만 아니라 같은 수준의 필수 라이브러리인 setuptools와 wheel까지 설치되었습니다.


3. 실행 예제

예시로 Django를 설치해보겠습니다.

>python3 -m pip install Django


물론 다음과 같은 명령어도 가능합니다만, pip를 bash에 등록시켜야 합니다.

>pip install Django


여담

python3와 pip의 경로는 다음과 같습니다.
python3: /@appstore/py3k
pip: /@appstore/py3k/usr/local/lib/python3.4/site-packages/pip



참고자료

pip 코드: http://forum.synology.com/enu/viewtopic.php?f=90&t=59837
python 모듈의 '-m' option:
https://docs.python.org/2/library/optparse.html#generating-help

Gmail + NAS + roundcube IMAP 및 SMTP 설정

Gmail의 메일들을 Thunderbird로 NAS에 설치되어있는 roundcube 개인 이멜로 옮겨보도록 하겠습니다.

glossary
- gmail : google의 메일 서비스
- thunderbird: 메일을 관리 및 송수신할 수 있는 PC application. 많은 분들이 메일은 인터넷으로만 관리할 수 있다고 생각하십니다만, 과거에는 이러한 메일 프로그램이 있어야만 보내고 받을 수 있었습니다.
- roundcube: synology nas에 설치할 수 있는 메일 서버 프로그램. 이를 사용하기 위해선 패키지 센터에서 'Mail Server'를 설치한 후 'Mail Station'을 설치하면 사용할 수 있습니다.


순서
Gmail 설정 -> Thunderbird 설치 -> NAS Mail Server 설정 -> roundcube 설정 -> 공유기 설정 -> 옮기기


1. Gmail 설정

Gmail 설정에서 '전달 및 POP3/IMAP 을 살펴보겠습니다. 이 계정은 메일을 수신하면 자동으로 제 NAS 메일로 전달하는데, 수신되면 자동으로 전달되는 방식입니다. 한가지 특이한 점은 프로그램이 전달해주기 때문에 사용자가 직접 전달해줄 때(새로운 메일에 전달할 메일이 포함된 형태) 와는 다르게 받은 메일 그대로 전달됩니다. 이건 중요한게 아니니 넘어가고, 중요한 건 IMAP 엑세스 설정입니다. 다른거 다 내버려 두고 그냥 'IMAP 사용'만 체크해두시면 끝입니다.


2. Thunderbird 설치
생략하겠습니다. 누르면 될 것 같은 버튼 누르다보면 알아서 설치 됩니다. 


3. NAS의 Mail Server 설정

'SMTP 인증 활성화'와 '호스트 이름'만 제대로 입력하면 됩니다. 호스트 이름은 NAS의 DDNS 주소입니다. 보통 '호스트이름.synology.me'형식입니다. SMTL-SSL이나 TLS따윈 해도 별 의미가 없습니다. 왜냐고요? Thunderbird에서 STARTTLS으로만 인식하더라고요.



다음으로 IMAP/POP3 설정입니다.


IMAP과 POP3모두 외부 프로그램에서 해당 메일 계정을 읽고 쓸 수 있는 권한 규격입니다. 이 규격이 수신과 관련된 규격인데, 보통 IMAP을 쓰면 됩니다. POP3와의 차이점은 하나입니다. 지워서 지워지느냐, 지워도 안 지워지느냐. IMAP은 원격으로 메일 계정에 접근하기 때문에 IMAP으로 연결된 계정의 메일을 프로그램에서 삭제하면 삭제됩니다. 하지만 POP3는 수신된 메일을 복사하여 보관하기 때문에 삭제해도 삭제되지 않습니다. 
뭔소린지 모르겠죠? 그냥 IMAP쓰세염 저는 실패했습니다 Gmail쪽에서 에러나서


4. roundcube 설정


roundcube로 로그인 한 뒤 [설정]-[SMTP 서버 설정]으로 접근합니다. 여기에서 'SMTP 서버'항목에 아까 메일 서버에서 적어둔 호스트 이름으로 바꾸면 됩니다. 

그리고 [Admin 설정]-[기본 SMTP 서버 설정]으로 접근합니다.


여기서 SMTP서버와 메일 도메인을 손봅니다. 메일 도메인은 호스트 이름 그대로 쓰면 됩니다.


5. 공유기 설정

공유기는 대한민국 대표 공유기 IPTIME 되시겠습니다. 전 안타깝게도 이걸로 충분할 수준의 느린 회선을 이용하기 때문에 더 좋은 공유기를 가져야할 필요성을 못 느끼고 있습니다.



공유기에 로그인 한 후 [고급 설정]-[NAT/라우터 관리]-[포트포워드 설정]에서 위의 세 개의 규칙을 입력해주시면 됩니다. 참고로 아이피는 NAS의 IP, 포트번호 25는 SMTP587은 SMTP-TLS, 465는 SMTP-SSL, 143은 IMAP입니다. 특히 imap의 경우 gmail의 IMAP 포트번호는 993이라서 혼동될 수 있으니 주의하세요.

6. Thunderbird 설정

이제 썬더버드에 NAS 메일을 연결시켜보겠습니다. 

그냥 연결할라치면 안 될 겁니다. 바로 [고급]을 열어서 포트번호, SSL, 인증 방법을 수동으로 입한 뒤 [다시 테스트]를 눌러 위에 나타나있는 '다음 계정 설정이 지정된 서버를 검사하여 결과를 찾았습니다' 라는 메시지를 받으셔야 합니다. 마지막으로 [완료]버튼을 누르면 연동은 성공입니다.



아래는 연동 결과입니다.




7. 복사하기


위의 이미지는 제가 전체 드래그한 후 우클릭 우클릭해서 어디로 옮길 지까지 결정하였음을 나타냅니다. gmail에서 nas 메일의 temp로 옮기겠단 뜻이죠. 누르면 실제로 옮겨집니다.


36개의 11번가 관련 메일이 gmail에서 nas 메일로 옮겨졌습니다.

[CPON] 클러스터링 문제

아직까지 구체적으로 이해하진 못하지만 한 번 정리해보겠습니다.

CPON에서 성능을 높이기 위한 여러가지 방법이 있겠습니다만, 여러 Classifier로 테스트해봐도 성능 향상율이 별 반 다를 바가 없다면 데이터가 이상한 지 의심하게 됩니다. 아무래도 테스트 상황에서는 샘플이 부적절할 수도 있고, 실제로 bias가 높을 수도 있겠지요. 이럴 때에는 '클러스터링 방법을 바꿔볼까...'라고 생각할 때도 있습니다. 하지만 대부분의 경우에서 무의미하거나 그냥 deep learning하는 게 낫습니다. 좋은 클러스터링이란 목표가 CPON과 충돌하기 때문입니다.

우선, 좋은 클러스터링은 non-linear한 data distribution을 최대한 오차 없이 나누는 것이 목표입니다. 그렇기 때문에 클러스터는 복잡해지고 느려지는데, 정작 성능은 별반 차이가 없습니다. 경계선 주위에 분포한 데이터들은 정말 적은 차이로 인해 잘못 분류되기 십상이기 때문이죠. 데이터의 분류 기준(feature)이 거리-대표적으로 SVM과 kNN-라면 대체로 효과가 없습니다.

그런데 CPON은 SVM과 다르게 class가 맞을 확률인 p-value를 기준으로 분류합니다. 물론 CPON도 거리를 기준으로 분류합니다만, 여기서 한걸음 더 나아가, 거리에 따른 분류 확률을 계산합니다. 이 때 학습 단계에서 인식해둔 데이터의 분포를 바탕으로 '클래스의 데이터 분포 상에서 거리차에 따른 분류 확률'을 계산합니다. 이를 통해 통계적으로 분류할 수 있게 됩니다.

다만 이 때에도 어려운 점이 있습니다. 데이터가 극단적으로 편향되면 확률이 마치 boolean값처럼 0/1로 떨어집니다. 이런 경우는 CPON이 kNN이랑 동일하게 작동합니다. 그러므로 CPON이 제대로된 성능을 내려면 분류 기준을 바꿔서, 데이터의 분포가 어느정도 Gaussian에 가깝도록 만들어줘야 합니다. 그래야 신뢰성 높은 샘플 분포를 얻을 수 있고, 이를 통해 p-value가 올바르게 작동할 수 있습니다.

결국 CPON의 성능 향상을 위해선 좋은 클러스터링보다는 분류 기준을 어떻게 바꾸느냐에 달려있습니다.

이제 여기서 CPON에 적합한 클러스터링을 찾느냐, 아니면 적합한 분류 기준을 찾느냐의 문제로 나눠지지 않을 까 생각합니다. 현재는 적합한 분류 기준을 찾는 방향으로 연구하고 있습니다만, 이는 데이터에 따라 제각각이라서 좀 그렇네요.

15/11/08: 초안 작성