2014년 9월 17일 수요일

[미완] Code::Blocks에 GTK+ 설정

[미완] 코드블럭에 GTK+ 설정

코드블럭도 처음이고 GTK+도 처음이라
"Hello World!"에러를 노가다로 잡아서 설정법을 알아냈다.

환경
Windows 7 SP1 64bit(밑에 주소는 64bit용임)
Code::Blocks 13.12 다운 및 설치
(http://www.codeblocks.org/downloads/26)
GTK+ 3.6.4 다운 및 압축해제(나는 C드라이브에 해제)
(http://www.gtk.org/download/win64.php)

준비끝 이제 설정
1. Code::Blocks 실행 > File > New > Project... > Console application로 프로젝트 생성

2. main.cpp에서 GTK+기본("Hello World!") 입력
#include <gtk/gtk.h>

int main (int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *label;

    gtk_init(&argc, &argv);

    /* Create the main, top level window */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /* Give it the title */
    gtk_window_set_title(GTK_WINDOW(window), "Hello, world!");

    /* Center the window */
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    /* Set the window's default size */
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);

    /*
    ** Map the destroy signal of the window to gtk_main_quit;
    ** When the window is about to be destroyed, we get a notification and
    ** stop the main GTK+ loop by returning 0
    */
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    /*
    ** Assign the variable "label" to a new GTK label,
    ** with the text "Hello, world!"
    */
    label = gtk_label_new("Hello, world!");

    /* Plot the label onto the main window */
    gtk_container_add(GTK_CONTAINER(window), label);

    /* Make sure that everything, window and label, are visible */
    gtk_widget_show_all(window);

    /*
    ** Start the main loop, and do nothing (block) until
    ** the application is closed
    */
    gtk_main();

    return 0;
}
컴파일 하면 에러발생

3. include 
위 메뉴에서 Settings > Compiler > Search directories탭 > Complier 탭에 include 폴더 추가
C:\gtk+-bundle_3.6.4-20130921_win32\include\gtk-3.0
C:\gtk+-bundle_3.6.4-20130921_win32\include\glib-2.0
C:\gtk+-bundle_3.6.4-20130921_win32\lib\glib-2.0\include -> lib에 있음
C:\gtk+-bundle_3.6.4-20130921_win32\include\cairo
C:\gtk+-bundle_3.6.4-20130921_win32\include\gdk-pixbuf-2.0
C:\gtk+-bundle_3.6.4-20130921_win32\include\atk-1.0
C:\gtk+-bundle_3.6.4-20130921_win32\include\pango-1.0

4. lib
위 메뉴에서 Settings > Compiler > Search directories탭 > Linker에 lib 폴더 추가
C:\gtk+-bundle_3.6.4-20130921_win32\lib

5. link livraries 추가
위 메뉴에서 Settings > Compiler > Linker settings 탭에서 
lib 폴더(C:\gtk+-bundle_3.6.4-20130921_win32\lib)에 있는 .a파일(33개) Add
6. dll 복사
bin폴더(C:\gtk+-bundle_3.6.4-20130921_win32\bin)에 있는 dll 33개를
Code::Blocks 프로젝트 파일이 있는 폴더에 복사
7 실행

GTK+ 공부할려고 하는데 자료가 많이 없다; 이 기본창 출력 설정하는데도 하루를 보넨것 같다;; 그냥 QT 공부할까...

프로젝트 파일 -> 그렇게 의미는 없다 설정이 중요하기 때문에
https://drive.google.com/file/d/0B1lR2TK2hWZeUUNyUVpMODlGM2s/edit?usp=sharing

2014년 9월 16일 화요일

[미완] [Win32/MFC] CxImage

CxImage 설정

오픈소스로 zlib라이센스로 상용으로 써도 상관이 없다.

이미지 출력 라이브러리다.

홈페이지(http://www.xdp.it/cximage/)에서 cximage701_full 다운
소스포지에 가면(http://sourceforge.net/projects/cximage/) Cximage702_full가 있다.
701은 VS2005 702는 VS2010을 지원한다.

압축해제후 CxImgLib.sin 실행
CxImage, jpeg, png, zlib 프로젝트 설정을 변경 해야 한다.
1. 구성 속성 > 일반 > MFC사용 -> 표준 Windows라이브러리 사용

2. 구성 속성 > C/C++ > 코드 생성 > 런타임 멤버 맞춤 Debug(Unicode Debug)는 다중 쓰레드 디버그(/MTd), Release(Unicode Release)는 다중 쓰레드(/MT)

소스 수정
CxImage 프로젝트의 ximacfg.h을 열고 원하는 formats의 define값을 1로 변경
나는 BMP, GIF, JPG, PNG, ICO 5개의 이미지만 쓰기때문에 이것만 1이고 나머지는 0으로 셋팅

프로젝트에서 CxImage, jpeg, png, zlib 4개 프로젝트만 컴파일한다.
jpeg와 png프로젝트는 format값을 1로 해서 해야하고
zlib프로젝트는 png프로젝트가 zlib를 사용하기때문에 png format지원시 꼭 zlib프로젝트도 해야한다.

컴파일 후 각 프로젝트의 생성폴더에 가보면 lib파일이 있다.

그리고 cxImage의 헤더파일이 필요하다.
cximage701_full\CxImage\ 폴더에 가서 헤더파일 25개를 복사하면 된다.

이렇게 4개의 lib파일과 25개의 헤더파일면 준비 끝
나는 밑에 이미지처럼 CxImage폴더를 만들고 그 안에 include에 헤더파일 25개를 넣고
lib폴더에 각 컴파일별로 lib파일을 넣어놓았다.


실제사용 예
win32로 기본창 출력 프로그램을 만들고 나서
아까 만든 CxImage폴더를 테스트 프로젝트에 복사후(나는 .sln이 있는 폴더에 복사를 했다.)
1. include 추가
속성 > C/C++ > 일반 > 추가 포함 디렉터리 -> ..\Cximage\include

2. lib 추가
속성 > 링커 > 입력 > 추가 종속성 ->
..\CxImage\Lib\Unicode_Debug\CxImage.lib
..\CxImage\Lib\Unicode_Debug\Jpeg.lib
..\CxImage\Lib\Unicode_Debug\png.lib
..\CxImage\Lib\Unicode_Debug\zlib.lib

설정은 다 끝났다.
소스에서는 ximage.h 헤더파일 추가 후
CxImage를 생성해서 사용하면 된다.

CxImage 사용법은 CxImage 문서나 인터넷을 참조하면 되고
(나도 출력만 암)

현재 테스트 프로젝트 컴파일시
1>LINK : warning LNK4098: 'LIBCMT' defaultlib가 다른 라이브러리와 충돌합니다. /NODEFAULTLIB:library를 사용하십시오
Warning가 발생중;;

나는 BMP, JPG, PNG만 출력하면 되기때문에 이 3개의 포맷만 설정했지만 자신이 필요한 포맷을 설정하면 된다.
그리고 dll도 만들려고 했는데 에러가 나와서 dll은 포기 (담에 시간될때 해봐야 겠다.)

테스트 파일 첨부합니다.밑에 주소(구글드라이브) 클릭설정을 모르겠네;;
그리고 구글아이디도 필요하네.. 다른 방법을 생각해봐야겠다.(일단 업)
구글은 압축이 깨져서 다음에 업로드 함
http://cfile211.uf.daum.net/attach/2170674A559A0450252A13

* 나는 이미지처리는 CxImage만 있으면 될 줄 알았는데
libjpeg가 있다.
libjpeg  > libjpeg 6b-SIMD > libjpeg-turbo 파생이 되었는데
CxImage는 libjpeg 6b를 사용중이라고 한다. (현재는 8b이상 나왔다고 함)
속도가 느리다고 함 libjpeg-turbo는 속도가 빠르고 크롬에서 사용한다고 한다.
그래서 담에 .jpg는 libjpeg-turbo를 쓰고 나머지는 CxImage로 쓰는게 좋을 듯

2014년 9월 15일 월요일

[미완] [C/C++] STL 종류

STL 종류

이번에 STL을 심도있게 공부를 해 볼려고 구글에서 STL를 쳤는데...
나는 STL은 컴파일러가 지원하주는 건줄  알았는데 별도로 존재를 한다.(몰랐네;;)

--- STL 종류별
SGI STL: SGI사가 만든 STL로 2000년 6월 8일에 v3.3이 마지막으로 릴리즈 되었다.
(https://www.sgi.com/tech/stl)

STLport: SGI STL을 여러 플랫폼에 맞게 사용할 수 있게 포팅해 놓은 STL이다. 입출력같은 경우는 시스템에 종속적이다. 그래서 STLPort가 나왔다.
오픈소스이고 상업적으로 사용해도 제한이 없다.
(http://www.stlport.org)

Dinkumware STL: 상용 STL로 최신 STL을 가장 잘 적용(성능과 별개)한다 부터 size()가 느리다, std::string는 사용하면 안된다등등 많은 논쟁이 있다.

GNU libstdc++: GNU에서 만든 STL(한글자료가 거의 없어서...;)

--- 컴파일별
MS 컴파일: Dinkumware STL을 사용중이고 VS6.0은 C++ 표준이 나오기 전에 나와서 VS 6.0에서는 내장 STL(Dinkumware)을 사용하면 안되고 STLport를 사용해야 하고 이때 많은 사람들의 신뢰를 잃었다.
그래서 일까 그 이후 많이 안정화가 되어서 이제는 굳이 외부 STL을 쓸 필요가 없다고 얘기하는 사람과 안좋다고 얘기하는 등등 의견이 나뉜다.

GCC: 초기에 SGI STL을 사용하다가 이제는 GNU libstdc++를 사용한다.

볼랜드 C++: 6부터 로그웨이브의 라이브러리를 버리고 STLport사용

--- 주의할 점
내가 성능쪽 개선이나 그쪽 전문가가 아니라 어떤 STL을 써야 한다고 딱 얘기는 못하겠지만 STL를 쓸때 한가지 STL만 사용해야 한다.

2014년 9월 5일 금요일

[미완] 주식 이익금 계산 오류

주식은 매수할때 매수값의 증권사 수수료(키움기준0.015%)가 붙고
주식을 매도할때는 매도값의 증권사 수수료 + 세금(0.3%)가 붙는다.

예를 들면 100,000원짜리 주식을 매수하면 수수료로 15원을 낸다.
반대로 100,000원에 주식을 매도하면 세금+수수료인 315원을 낸다.

얼마 이익(%)이면 수수료를 제하고 이익일까가 궁금해졌다.

당연히 이익이 0.34%가 나면 그때부터 이익이다.
예) 100,000원에 주식을 매수하면 수수료로 15원
0.34% 이익이 난 100,340원에 매도를 하면 수수료와 세금을 포함해서 316.071원
이익금은 340원인데 각종 수수료 및 세금의 합계는 331.071원(15원+316.071원)이다.
즉 8.929원(0.008%) 이익이다.

증권사마다 수수료가 다르다.
그래서 증권사 수수료가 얼마일때 수익률이 몇%이면 수익구간인지를 공식으로 구현할려고 한다.

---
증권사 수수료: X
수익율: Y
주식가격: a
세금: b 일때

이익금 = a * Y
매수시 세금 = a * X
매도시 세금 = (원금+이익금)*(세금+수수료) = [a+(a*Y)] * (b+X)

최종계산은
이익금 - 매수시 세금 - 매도시 세금 = 0인 경우를 찾으면 된다.
(a*Y) - (a*X) - { [a+(a*Y)] * (b+X) } = 0
주식가격 a=1입력 우리는 %를 구하는것이니
(Y) - (X) - { [1+(Y)] * (b+X) } = 0
세금 B=0.3%임
(Y) - (X) - { [1+(Y)] * (0.3+X) } = 0
정리 시작
Y - X - [ (1+Y)*0.3X ]= 0
Y - X - [ 0.3X + 0.3XY ] = 0
Y - X - 0.3X - 0.3XY = 0
Y - 1.3X - 0.3XY = 0
Y - 0.3XY - 1.3X = 0
(1 - 0.3X)Y - 1.3X = 0
(1 - 0.3X)Y = 1.3X
Y = 1.3X/1-0.3X

키움기준 X=0.015 대입
Y = (1.3*0.015)/(1 - 0.3*0.015)
Y = 0.0195 / 1 - 0.0045
Y = 0.0195/ 0.9955
Y = 0.019......

대략 0.34가 나와야 하는데 나의 계산은 어디서 잘못 된것인가;;

2014년 8월 29일 금요일

[미완] GPL, LGPL, BSD 소스공개

* 이글은 라이센스 전문가가 아닌 제가 개인적으로 보기위해서 쓴글입니다.
틀린부분도 있을수 있습니다.

GNU GPL(General Public License)
가장 오픈소스 정신을 가지고 있는 라이센스 같다.
GPL 코드를 사용해서 프로그램을 개발하면
유료로 팔든 공짜로 배포를 하든 상관 없고 소스는 공개해라
그리고 GPL코드를 사용한 코드는 역시 GPL이되고
이 코드를 쓴 다른 코드도 역시 GPL이 된다.
(점점 코드를 공개한 프로그램이 늘어나면서 GPL이 늘어나게 할려는 전략?)

GNU LGPL(Lesser General Public License)
GPL의 소스공개 정책이 오히려 부담이 되어서 GPL 코드를 사용 꺼리는 현상이 나온다.
그래서 LGPL이 나왔다.
LGPL 코드를 수정하지 않고 동적 라이브러리로 사용하면 소스공개 의무가 없다.
(LGPL 코드를 정적으로 사용하면 연결부분만 공개해야 하는걸로 안다->정확한것은 아님)

BSD(Berkeley Software Distribution)
대인배 라이센스로 BSD소스를 수정하든 상업적으로 쓰든 말든 소스공개 의무가 없다.

가장 궁금했던 소스공개 부분만 정리를 하면
GPL: 소스공개
LGPL: 동적으로 사용시 소스공개 의무없음
BSD: 소스공개 의무없음(BSD 소스를 수정해도)

2014년 8월 28일 목요일

[미완] [영드] 셜록

셜록
시즌 3까지 시청

시즌을 거듭할수록 재미가 있다.

스피드하고 감각적인 편집으로 재미있다.


한시즌에 3개 에피소드가 있고
한 에피소드는 1시간 반이다.

3개의 에피소드중 가운데(E02)는 간단한 에피소드다.

2014년 8월 26일 화요일

[미완] QT GTK+ WxWidgets

[미완] QT GTK+ WxWidgets

*밑에 내용은 비전문가가 쓴 개인적은 생각입니다.

저는 윈도우즈 프로그래머(Win32, MFC)로서 요즘 크로스 플랫폼에 관심이 생겨서
다음에 크로스 플랫폼을 할때 뭘할까 해서 조사한 내용입니다.
(직접 크로스플랫폼을 써보지 못해서 추측일뿐임)

조사결과 QT, GTK+, WxWidgets 3가지가 주로 나왔다.

1. QT
C++이고 이게 대세 갔다.
아무래도 상용이다보니 좋을 수 밖에
그리고 단점으로 여겨졌던 상용도 LGPL 라이센스를 획득해서 이제는 무료로 사용할 수 있다.
단점은 요즘 이게 너무 커(방대해)졌다고 한다.

2. GTK+
C언어이고 김프 개발을 위해서 만든 것이다.
초기에 사람들이 QT와 GTK+가 많이 비교되고 어떻것을 선택할까 고민들을 많이 했다.
GTK+를 선택한 이유는 무료이다. 하지만 이 무료라는 장점도 QT가 LGPL를 획득하면서...
그리고 C언어로 개발된 프로그램도 많다. (로우레벨딴이나 옛날에 개발된 프로그램등등)
이런 프로그램들은 GTK+.
단점은 개인의 차이겠지만 C언어다 보니 QT가 더 쓰기 좋다는 의견이 있다.

3. WxWidgets
C++이고 사용자가 늘어나고 있는 것 같다.
대표적인 적용 프로그램으로는 FileZilla와 Code::Blocks등이 있다.
단점: 자료는 많지가 않다.

그리고 개발IED는 써보지는 않았지만 코드블럭(Code::Blocks)을 사용해 볼 생각이다.
가장 큰 장점은 윈도우즈와 리눅스에서 소스 공유가 가능하다고 한다.
(제가 직접 공유는 해보지 않았음 ->인터넷글을 보왔음)