사용법.. typedef 기존타입 명명할타입; typedef ConditionalProbabilityTable CPT; 이런식으로.. typedef int *pint; 는 pint라는 타입명을 선언, 내용은 int* int *pn; pint pn; 은 같은거.. 링크드리스트에서 자주 쓰던.. typedef struct _node *node; struct _node *varNode; node *varNode; 두개가 같은거.. 간만에 쓰려니 헷갈리는구만..
필요한건..노드..링크.. 노드에는 확률 테이블이 들어있고.. 부모노드에 따라 확률 테이블은 가변적으로 변한다.. 작동이 어떻게 돌아가는지는 나중에 생각하자.. 일단은 틀을 만들고 나중에 수정하지뭐.. 클래스는 Node, Link, ConditionalProbabilityTable 3개.. typedef로 ConditionalProbabilityTable을 CPT로 정의.. 클래스 관계는.. 노드 -> 링크 -> 노드 의 레퍼런스 참조..(NN) 나머지는 확률테이블이 있으니 ParentNodeList와 ChildNodeList로.. 노드는 여러개의 상태를.. 링크다수, 하나의 확률테이블을 가지고 있다. 일단 그런 관계만 설정하고.. Node는 AddLink(Node*), DelLink(Node*)이런것도..
특히 이런 다양한 상황이 있는 경우에는 하란대로 해도 안되더라-_-;; 실행하면 Stopping...이라고 나오면서 멈춘다..(대기상태로..) qmHandle이란 놈의 소스를 좀 뜯어보니까 Stop하고 프로세스가 멈출 때까지 기다리는 걸로 되어있는데, 프로세스가 전부 안꺼져서 계속 대기하고 있나보다... 일단 소스를 보니까 qmail이 꺼져 있어도 된다고 나와있길래 한번 대충 감으로 때려 맞춘 service 명령을 이용하여 service qmail stop 이라고 qmail 서비스를 멈추고 실행을 해보면 qmHandle에서 또 멈추게 하려고 한다.. 이전 구글에서 검색하다가 본 페이지가 생각났다... qmail-remote를 전부다 kill 시켜주면 되는 걸로 기억하고 있다.. 그래서 ps -ef | g..
qmHandle -D로 qmail 큐에 있는 내용들을 지울 수 있댄다... 근데 없다-_-;; ls */* | grep qm 으로 찾아봤는데 없다... (서버 관리 몇 일 만에 그래도 조금씩 명령어들의 활용법이 익숙해지고 있다..) qmail.kldp.org에서 qmhandle로 검색을 해보니... 스크립트라고?!+_+ 점점 어려운 걸로 가는구만~ ㅠ 이상한 스크립트 언어면 안되는데...ㅠ 사용법은... 큐가 줄어들지 않는 것은 대부분 스팸메일을 반송하는 경우인데..(없는 이메일주소이기 때문..) qmHandle 이라는 프로그램으로 일단.. 큐를 강제로 보내기 해보시기 바랍니다. 코드: [root@버럭 ~]# /var/qmail/bin/qmHandle -a아마 소용없겠지만요. ^^; qmHandle -l..
뭐, 프로세스를 쭉~ 나열해본 결과... [root@sclab log]# ps -ef | grep qmail | wc -l 89 [root@sclab log]# 흠... 꼴에 wc 명령어 써본다고 해봤다-_-;;ㅋㅋ 여러 가지 써봐야 익숙해지지~ㅋㅋ wc는 -l 을 붙이면 라인수를 세는거고.. -w인가 -c도 있는데 단어수와 캐릭터 수를 세는 명령어이다.. 자세하고 정확한 사용법은 man wc 나 wc --help 를 참고하자.. 프로세스가 89개나 떠있는걸 보면 확실히 뭔가 문제가 있기는 있는듯 하다... kldp에서 열심히 검색을 해보니.. http://qmail.kldp.org/phpbb/viewtopic.php?t=6101&highlight=qmail-qstat 이런 글을 발견+_+ 오호라~ 그럼..
발송이 안된댄다.... ls랑 cd 밖에 모르는 내가 무엇을 하리오-_-;; 에러 번호는 0x800CCC19...였다가 0x800CCC0E로 바뀌었다고 한다.. 모른다...-_- 아무것도 모른다-_-;; 일단 친숙한 네이버 지식군한테 에러 번호 물어보니... 중국어 페이지만 보여준다-_-;; 어쩔 수 없이 qmail.kldp.org를 뒤져보기로 마음 먹었다... 에러 번호를 검색해보니 역시 모르는 말들 뿐이다-_-;;어쩔까...그냥 무시하고 전에 서버 관리하던 형 올때까지 기다릴까-_-;; 그 형이 졸업하면 큰일나겠다~는 심정으로 좀 더 찾아봤다.. 그래서 알아낸건 qmail의 경로와 로그 파일의 위치-_- 그리고 더 알게 된거는 grep과 ps의 활용법... ps -ef를 하니깐 프로세스를 보여주더라-..
뭐, 일단 서버의 스펙부터 알아봐야겠지...이건 전에 서버 관리하던 형이 보내준 내용.. - 장비 사양 CPU: Xeon *2, RAM 1GB, HDD :1TB+80GB(SCSI) - 서비스 www(httpd+php+mysql), (웹서버) ftp(vsftp), (FTP 서버) mail(qmail), (메일 서버) ssh - 유사시 백업해야할 중요한 파일 및 디렉토리 (백업시에는 모든 서비스 종료하고 시행할 것) 웹페이지 : /var/www 디렉토리 아래의 모든 파일 사용자 홈디렉토리 : /home 디렉토리 아래의 모든 파일 (일부 예외 있음) DB 파일 : /var/lib/mysql 디렉토리 아래의 모든 파일 사용자암호파일 : /etc/passwd, /etc/shadow 메일서버관련 파일 : 메일 서버..
일단 기본 루틴에 대해서 살펴봤었다... 1. centroid를 계산하고(초기는 랜덤 등..) 2. 모든 데이터에 대해서 최소 거리의 centroid로 할당하고 3. 2번에서 더이상 변하는 데이터가 없을 경우 종료 간단하다.. 중요한 것이 centroid를 구하는 것, 최소 거리의 centroid를 구하는 것 정도일 것이다. 또 중요한 점이 있다면 벡터 공간상에서 가능할 것이라는 것, 1d의 스칼라 값 뿐만 아니라 2d의 벡터 값에서도 클러스터링을 지원해줄 수 있도록 좀 범용적으로 활용할 수 있도록 하면 좋을 것이다. 따라서, 초기 입력을 float*의 데이터를 받고, 클래스 내부에서는 vector형으로 다루기로 하자. 필요한 변수는 k개의 클러스터 : m_nK centroid의 정보 : vector m..
K-means algorithm K means 알고리즘에 대해서 이야기는 많이 들어왔는데, 그 돌아가는 방법에 대해서 알아보면 좋을 것 같다... 참고 자료는 위키피디아... http://en.wikipedia.org/wiki/K-means_algorithm - K-means algorithm은 k 파티션으로 클러스터링을 하는 것으로 expectation-maximization 알고리즘과 비슷하다고 한다. 왜냐하면 둘다 데이터의 안에 있는 중심을 찾으려고 하기 때문이라고 한다. Object attribute들이 벡터 공간을 형성한다고 가정하고 있고, 그 목적이 클러스터 내의 분산의 총합을 최소화하는 것이라고 한다. squared error function V 는 다음 식과 같은데, k 클러스터로 나누는 ..
이전에 동적인 그래프를 그렸으니 이번에는 정적인 그래프를 그려보자.. 동적인 그래프와 다른 점은 단지 데이터가 계속 추가되는 것이 아니라 한번 설저앟면 그대로 보여준다는 것.. 즉, AddData가 아니라 SetData정도가 되어서 데이터의 배열을 받고 출력하고, OnPaint에만 추가 시키면 되는 간단한 방식이 될 것이다. CGraph를 만들고 기존의 CAnimatedGraph의 내용들을 살펴하자... public: // 로그 데이터 배열 CArray m_arrLogData; public: // 그래프를 그릴 영역 RECT m_rectGraphArea; public: // x축 그리드 그릴 수 int m_nXGridNumber; public: // y축 그리드 그릴 수 int m_nYGridNumber..
이번에 하고자 하는 것은 ListControl에 특정한 칸을 더블 클릭하면 특정한 다이얼로그를 띄우는 것이다. 다이얼로그에는 이전에 만들었던 동적으로 그려지는 데이터이고.. 이 다이얼로그에도 따로 timer가 들어가서 센서 데이터를 가져와서 뿌려주는 역할을 할 것이다. ListControl의 property 창에서 메세지 명이 조금 독특하다.. HDN_ITEM_DBL_cLICK 메세지인줄 알았는데... 테스트해보니 이거는 리스트 컨트롤의 헤더에 해당하는 더블 클릭 이벤트를 캐치하는거고.. NM_DBL_CLICK 뭐 대충 이런 이름의 이벤트를 선택하면 된다.. 함수를 생성하면 다음과 같은 프로토 타입이 생긴다.. void CSensorMonitoringDlg::OnNMDblclkSensorlist(NMHD..
Ch3. Single-Layer perceptron 2/27 3.1 Introduction - NN이 형성되는 1943~1958에서는, 3명의 연구자들이 있었다. (1) McCulloch and Pitts(1943)은 NN을 computing machine으로 소개를 했다. - (2) Hebb(1949)은 1st rule for self-organized learning을 가정했다. - (3) Rosenblatt(1948)는 Perceptron을 learning with a teacher의 첫번째 모델로 제안했다. 3/27 - Perceptron은 NN의 가장 간단한 형태이다. linearly separable 패턴을 분류하는데 쓰인다. - 이것은 single neuron과 adjustable synap..
C언어 중 한 가지 재밌는 기능이 바로 이 가변 인자 함수이다. 처음에는 이러한 것에 대해서 전혀 의문을 품고 있지 않다가 나중에 한참 C를 배우다가 '어? 이거 어떻게 구현했지?' 라는 의문을 품게 되는 재미있는 요소이다. C언어를 처음으로 하게 되면 배우게 되는 구문.. void main() { printf("Hello World!"); } 뭐, 여기서는 그렇게 의문을 가지진 않을 것이다. 헬로월드는 뻔한 내용이기도 하니깐. 그런데 이것을 이렇게 바꿀 수도 있다.. void main() { printf("%s" , "Hello World!"); } 그래..여기까진 좋다 이거지...그런데 printf를 아무 생각없이 이렇게 쓰다가 문득 앞에 있는 format string("%s")이 %d, %c, %s..
일단 입력과 출력을 정의 하고... 목표 - 손으로 숫자 쓰는 것을 인식 입력(float[3] -> 좀더 유동적으로 하기 위해 vector로..) - 3축 가속도 : m_fAccX : m_fAccY : m_fAccZ 출력(int) : 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 = 각 숫자에 해당하는 리턴 값 : -1 = 맞는 것이 없다.. class DynamicTimeWarping 이고 멤버는 vector m_vecPatternSequence DTWElement는 증거변수가 변할 때는 대비해서 좀더 유동적으로 하기 위해서 하는 것이다. DTWElement에서는 기본적으로 있어야하는 것이 GetDistance(const DTWElement) //두개의 DTW간 거리를 구하는 함수..
Dynamic Time Warping.. 패턴 인식에서 이용되는 방법으로 시퀀스를 시간의 길이를 고려하지 않고 인식할 수 있는 방법이다. 말 그대로 Time을 Warping하기 때문에 특정한 동작을 느리게 하게 되면 시간을 느리게 변화시키는 방법이다. 위키피디아의 http://en.wikipedia.org/wiki/Dynamic_time_warping 에 간단한 내용과 구글에서 검색하면 여러 가지 자료들을 얻을 수 있다..그냥 DTW를 가장 잘 나타내고 그림 한장으로 이해할 수 있는 건 다음인거 같다.. 현재의 cost에 distance를 더해가며 오른쪽위의 끝까지 갈 수 있는지..그 여부를 찾는, 그 과정을 찾는 것이 DTW인 것이다. DTW는 위와 같은 matrix로 Dynamic programmin..
챕터 2의 두번째...43쪽이다 되네 ㅠㅠ 리뷰 시작! 1/43 2.9 Learning without a teacher - teacher가 없다는 것은 NN이 학습하는데 예제에 대한 label이 없다는 것이다. - 2가지 방법이 있다 : reinforcement learning이나 neurodynamic programming and unsupervised learning - (1) reinforcement learning : 입출력 매핑으로 환경과의 지속적인 상호작용을 통하는 learning으로 scalar index를 최소화 함으로써 성능을 개선하는 것 - Fig 2.7은 한가지 'critic' 이 'primary reinforcement signal'을 'heuristic reinforcement s..
chap2a.ppt 자료를 바탕으로 정리... 2장의 제목은 Learning process. 지금 알고 있는 수준은 그냥 에러율을 계속 웨이트에 더해서 바꾸는것 정도...그럼 이제부터 시작.. 2/38 2.1 Introduction - 뉴럴네트워크(이하 NN)의 중요한 속성이 환경에서 'learn'하고 성능을 'improve'하는 것 - NN은 환경과의 상호작용을 통해서 그 synaptic weight와 bias를 조절하는 것이 learn이다. - learn의 정의 : 환경의 자극요소들에 의해서 NN의 파라미터들이 적응되어가는 것. learning의 종류는 파라미터가 어떠한 방법으로 바꾸는지에 따라 정한다. 3/38 * 위의 정의는 다음을 의미한다. (1) NN은 환경에 의해 'stimulated'된다(..
이전에 DllMain이 왜 안되었을까...살펴보니 그이유가.. DllMain안에다가 전역변수를 그대로 카피n페이스트하다가 int g_nWindowSize = 10;을 그대로 복사해버렸던 것이다-_-;; DllMain은 제대로 되는건데 내 실수가 잠시 DllMain을 회피하게 만들었다;;그럼 초기화와 해제를 하기 위해 DllMain에 대해 한번 알아보자.. 먼저 MSDN에 있는 내용..이것만 읽어도 충분히 활용할 수 있다. DllMain The DllMain function is an optional entry point into a dynamic-link library (DLL). If the function is used, it is called by the system when processes an..
뭐, 대단한 거에 대한 생각은 아니고 그냥 어떻게 하면 좀 더 DLL을 편하게 쓸까... 이 고민을 조금 해봤다.. 일단 확장형DLL은 클래스가 지원이 되지만 일반 DLL은 안된다는 점에서 DLL내에서 값을 유지하려면 전역변수를 쓰는 고통을 남겨야할 듯 하다... 일단은 눈물을 머금고 전역변수를 쓰지만, 대안이 있을 듯 하다..나중에 찾아보자.. 뭐, 전역 변수도 될지는 아직 모르겠다...한번 테스트 해보자.. std::vector g_vecData; int g_nWindowSize; int g_nDataSize; extern "C" __declspec(dllexport) int AddDataToPreprocessor(float* inputData , int dataSize); int AddDataToP..
이번엔 명시적 호출을 해보자... 역시 위키피디아 페이지에 있는 내용 중... C and C++#include #include // DLL function signature typedef double (*importFunction)(double, double); int main(int argc, char **argv) { importFunction addNumbers; double result; // Load DLL file HINSTANCE hinstLib = LoadLibrary("Example.dll"); if (hinstLib == NULL) { printf("ERROR: unable to load DLL\n"); return 1; } // Get function pointer addNumbers..
이전에 개요에서 읽어보면 묵시적 링크와 명시적 링크가 되어있는데.. 나의 성격상 명시적 링크로 라이브러리를 제공해줘야 속시원하다-_- 여튼 LoadLibrary를 통해서 직접 해보록 해야겠다.. 테스트는 SensorMonitoring에서 하는 부분 중.. OnInitDialog에 때려 넣는 걸로 테스트 해보고자 한다.. 그럼 일단 다시 위키피디아 페이지에서 import하는 부분... C and C++ Make sure you include Example.lib file(assuming that Example.dll is generated) in the project (Add Existing Item option for Project!)before static linking. The file Example..
뭐부터 할까... dll을 만들기 전에 가장 막막했던게 수 많은 프로젝트 중에서 어떤걸 만들어야할까.. dll도 MFC dll activex dll 등 참 많기도 하다... 그런데 dll 생성하는건 프로젝트 설정에서도 해줄 수 있으니 고민하지 말고 디버깅하기 편한, 익숙한 win32 console application으로 만들자.. 그리고 일단 사용하려고하는 함수를 정의해야겠다.. 데이터 smoothing을 위한 함수... int Smoothing(float* inputData , int dataSize , float* &smoothingData , int& resultSize , int smoothingType) 로 일단 간단하게 정의해보자... 그럼 DLL로 만드는 소스 안에서는 어떻게 해야하나.....
여기저기서 활용할 수 있는 전처리 모듈을 만들어야한다길래 lib 을 할가 dll을 할까 하다가 이번 기회에 dll의 사용법을 익혀보고자~ dll을 해보기로 했다.. dll에 대한 개요는 간단하게 살펴 봤고 이제는 실제적으로 어떠한 식으로 만들 수 있는지 살펴봐야할 것이다.. 위키 피디아에 있는 내용들 만으로도 충분히 참고할만한것 같다.. http://en.wikipedia.org/wiki/Dynamic-link_library 그 외에는 LoadLibrary 라던가 함수 포인터 가져오는 부분은 차츰 알아가면 될 것 같다.
DLL용 함수 선언 __declspec(속성) 선언 이 키워드는 Microsoft의 Visual C++에서 함수나 변수의 선언에 별도의 정보를 제공하기 위해 사용하는 것이다. 다음과 같은 속성이 사용될 수 있다. thread: Thread Local Storage 데이터를 말하며, 이 지정자가 붙은 함수는 해당 스레드에서만 사용할 수 있다. naked: 함수에서 접두어 접미어를 생성하지 않는다. dllimport: DLL에 있는 데이터, 오브젝트, 함수를 임포트 한다. dllexport: DLL에 있는 데이터, 오브젝트, 함수를 익스포트 한다. 함수를 선언할 때 dllexport로 선언하면, DEF 파일의 Exports란에 이 함수를 명시하지 않아도 되며, __export 키워드를 대신한다. extern..
OnTimer는 WM_TIMER 이벤트가 발생할 경우 일반적으로 콜백되는 함수.. WM_TIME을 설정하는 방법은 리소스에서 다이얼로그의 속성 창에 보면 아래와 같이 메세지를 볼 수 있는 버튼을 클릭하면 여러 가지 윈도우 메세지(WM)을 볼 수 있다 그 중 WM_TIMER 를 보면 이미 OnTimer라는 함수가 설정 되어있다. 설정 안되어있다면 OnTimer가 없는 그 빈칸을 클릭하면 라고 셀렉트박스가 뜬다.. 그럼 이벤트 함수는 생성했는데 어떻게 써먹어야하나... SetTimer로 타이머를 설정하고, KillTimer로 타이머를 삭제하는 방식으로 하면 된다. SetTimer는 msdn을 참고하면 CWnd::SetTimer Installs a system timer. UINT_PTR SetTimer( U..
음...일단 초기화를 OnInitDialog함수에 대충 때려 넣고.. BOOL CSensorMonitoringDlg::OnInitDialog() { .... CAnimatedGraph* pGraph = new CAnimatedGraph(); pGraph->SetArea(300,200,500,400); pGraph->SetViewDataSize(100); pGraph->SetYMinMax(-10,10); this->m_arrpAnimatedGraph.Add(pGraph); return TRUE; } 타이머에서 값을 설정할 부분에 값을 추가하는 것 넣어주고.... 테스트용이니까 그냥 한개만 하기로 하자.. 나중에 여러개 하려면 데이터 index와 그래프 매핑변수를 하나 만들면 된다. Invalidate는 헤..
구현 뭐 어려운 건 없다... 데이터 추가해서 보여주는 사이즈랑 비교해서 있는지 없는지... 출력하는 것은 2번 글에서 사용한 한줄로 간단하게 끝낼수도 있고... 꾸미려고 한다면 더 많이 꾸며야겠지만.. 구현하면서 수정한 사항... - LogData는 많은 데이터를 가지고 있는건데 하나만 보여주면 되니까 float로 수정.. - X의 min max는 필요 없더만.. 삭제.. - Polyline의 두번째 인자는 '선'의 수이므로, size - 1 로 수정 뭐, 나중에 동시에 여러 개를 동적으로 보여주려면 다시 LogData로 수정하면 될듯.. 일단 동적 그래프부터 그리고 추가하도록 하자.. // 데이터를 추가하는 함수 int CAnimatedGraph::AddData(float data) { int nYW..
클래스 명..음..그냥.. class CAnimatedGraph 로 필요한 내용은 멤버.. 일단 일정 시간 동안의 데이터 값을 저장하고 있어야할 테고(LogData*) // 이것도 CArray로 처리해야겠다.. 위의 데이터를 정규화 시킨 (CPoint *) 데이터 몇개를 보여줄지 설정해야하고(nViewDataSize) 그릴 영역의 정보(RECT) Grid의 수(nXGridNumber , nYGridNumber) 최대 최소 값(fXMax , fXMin , fYMax , fYMin) 함수.. 데이터를 뒤에 추가 할 수 있어야할 테고(AddData) 데이터 몇개(GetDataSize) 그리기 함수(Draw(CDC*)) 영역 설정(SetArea(x,y,x',y')) 기본적인 기능의 구현은 은근히 간단하네...그..
MFC 그래픽에 손을 대본지 4년만이라 감이 잘 안 선다... 일단 해보려고 했던 것이 여러 개의 선을 이이서 하는 거였지.. //이을 점들.. float x[i],y[i] for(int loop = 0 ; loop < i - 1 ; loop++) { line(x[loop] , y[loop] , x[loop+1] , y[loop + 1]); } 뭐 이런식으로 하면 줄줄이 이어지긴 하니깐... 그런데 아침에 우연히 CDC::Polyline 이란게 눈에 들어왔다. 원래부터 꺽은선이 존재하는거였군! ㅠㅠ 뭐, 위의 단계를 몇 줄 줄이는 것 뿐이긴 하지만 나름 더 편하게 할 수 있을 것 같다.. 이놈에 대해서 살펴보면... msdn에서는 아래와 같이 정의하고 있지.. MFC Library Reference CD..
- Total
- Today
- Yesterday
- Javascript
- Android
- 안드로이드
- google app engine
- 팁
- HTML5
- 뽐뿌
- HTML5 튜토리얼
- Writing
- 샷
- 삼식이
- lecture
- gae
- php
- mini project
- ny-school
- 자바스크립트
- 강좌
- 사진
- java
- GX-10
- gre
- K100D
- 속깊은 자바스크립트 강좌
- 서울
- c++
- Python
- 탐론 17-50
- TIP
- 안드로이드 앱 개발 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |