Tibero DB 를 사용할 일이 있었는데, tbAdmin이 구려서 직접 연결해서 데이터를 가져와야할 일이 있었다.

심지어 마땅한 다른 언어를 사용할 수 없어서 Excel VBA로......


윈도우 기준으로 ODBC를 시스템에 등록하고, 해당 드라이브를 이용해서 연결하면 된다.


1. ODBC 등록

ODBC 설치법은 인터넷에 검색하면 많이 나오지만, 인스톨러를 사용해서 등록하라고 하는데,,, 왠지 마음에 안들어서 수동등록함.

우선 필요한 ODBC 파일은.. 검색하면 어디서 구할 수 있는지 잘 나온다. (tbAdmin 에는 없다., 서버를 소스코드(tar.gz)로 받았을 경우 client/win32/lib/libtbcli.dll, libtbcli.lib 에 있음)

.lib도 필요한지 아닌지 잘 모르겠지만 일단 이름이 같으니까 같이 챙겨서, 삭제되지 않을 적당한 곳에 잘 꽁쳐놓자.


이후 cmd를 관리자모드로 열어서 아래 명령어 입력. 드라이버 이름(Tibero 6)이나 경로는 필요에 따라 수정해주면 된다.

odbcconf /A {INSTALLDRIVER "Tibero6|driver=D:\odbc\libtbcli.dll"}
64bit 시스템이라면, 32bit 로 등록해야 한다.
%windir%\syswow64\odbcconf /A {INSTALLDRIVER "Tibero6|driver=D:\odbc\libtbcli.dll"}


2. Excel VBA 에서 연결

도구 - 참조 에서 Microsoft ActiveX Data Objects 6.0 Library 체크 후 확인한 후 아래 코드 참고해서 작성.

Driver={Tibero 6} 는 위에서 ODBC 등록시 사용한 드라이버 이름을 사용하면 된다.


Dim conn As New ADODB.Connection
conn.Open "Driver={Tibero6};Server=x.x.x.x;Port=xxxx;UID=user;Database=sid;Password=pwd;"

Dim rs as New ADODB.Recordset
rs.ActiveConnection = conn
rs.Open "SELECT * FROM table;"

Do Until (rs.EOF = True)
...
    rs.MoveNext
Loop

rs.Close


대충 이런식으로 사용.

이 후로는 다른 DB 사용할 때랑 비슷하다. 연결 문자열 정도만 참고하면 될 듯?

TLS 1.0 은 이제 보안 정책으로 사용이 금지되어 있다.

그래서 기술적으로는 구현이 되어있음에도 불구하고, 브라우저나 각종 라이브러리로 사용을 하려고 하면 오류가 난다.



크롬 기준 이러한 사이트에 접속하려고 하면


The connection to this site uses 

TLS 1.0 (an obsolete protocol), 

RSA (an obsolete key exchange),

3DES_EDE_CBC with HMAC-SHA1 (an obsolete cipher).


이런 메시지를 내면서 접속을 불허한다.




이런 사이트에 대해 Python 을 사용하여 요청을 보낼때 이를 굳이 우회하는 방법.


나의 경우 requests 라이브러리를 사용했는데, urllib3 라이브러리를 사용한다면 동일하다.

urllib3.util.ssl_.DEFAULT_CIPHERS 에 'DES-CBC3-SHA' 을 추가해주면 됨.

콜론으로 구분되기 때문에



urllib3.util.ssl_.DEFAULT_CIPHERS += ':DES-CBC3-SHA'


이렇게 작성해주면 된다.

(DES-CBC3-SHA 과 3DES_EDE_CBC 은 명명법만 다르지 같다고 한다.)


requests 라이브러리를 쓴다면

requests.packages.urllib3 로 임포트 되어 있으니 여기다 해줘도 됨(혹은 여기다가 해줘야만 할 수도?)



requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':DES-CBC3-SHA'


이래도 안되는 경우가 있는데, OpenSSL 문제인 것 같다.

안되는 시스템에서 

$ curl --sslv3 주소

을 해봤을 때,

curl: (4) OpenSSL was built without SSLv3 support

같은 오류가 나온다면 v3을 지원하는 버전으로 재컴파일 하거나 설치해주도록 하자.


Trivial

requests 기준으로 인증서 오류도 날테니 요청을 보낼때 verify=False 인자도 추가해주자.



그리고 이러면 또 warning 이 매번 출력되는데, 아래와 같은 방법으로 비활성화 할 수 있다.

똑같은 코드지만, 상황에 맞게 복붙해서 사용하자.


# urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# requests
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)


참고

https://stackoverflow.com/questions/50707974/force-tls-1-0-connection-with-requests?noredirect=1&lq=1

https://stackoverflow.com/questions/27981545/suppress-insecurerequestwarning-unverified-https-request-is-being-made-in-pytho

망할 MS는 unicode 를 기본지원하지는 못할망정 호환지원도 제대로 못한다.

 

utf-8 csv의 경우에, Excel 로 바로 열면 한글이 모두 깨져버리는데,

데이터 불러오기 등의 번거로운 방법을 통해 불러오더라도 깨지는 X같은 경우가 발생한다.

 

나도 웬만하면 cp949로 인코딩을 굳이 해줄텐데,, 웹에서 javascript 로 데이터를 생성하고 바로 내려받는지라,

어떻게 방법이 없이 MS에 대한 저주만 한가득 하고 있었는데....

 

-------------------------------------------

 

UTF-8 BOM 을 통해 (반틈만) 해결하였다.

 

방법은, 파일의 가장 앞에 \xef\xbb\xbf 혹은 \ufeff 을 넣어주면 된다.

이제 Excel 에서 바로 열어도 한글이 깨지지 않는다.

 

나의 경우엔

'data:application/csv;charset=utf-8,'+encodeURIComponent(csv)

'data:application/csv;charset=utf-8,\ufeff'+encodeURIComponent(csv)

이렇게 바꿔주었다.

 

다만, Excel 이 아닌 다른 프로그램으로 열거나 직접 csv파일을 읽어와서 작동시킬때 문제가 생길 수도 있는데....

이건 MS 를 욕하자.

 

-------------------------------------------

Python의 경우 파일을 쓸 때 인코딩을 utf-8-sig 로 지정하면 된다

open(filepath, 'w', encoding='utf-8-sig')

-------------------------------------------

 

MS 는 IE(+Edge)와 CP949(euc-kr)를 하루빨리 없애버렸으면 좋겠다.

 

 

참고

 

UTF-8 인코딩에서의 BOM(Byte Order Mark) 문제 :: wystan's tales

 

https://stackoverflow.com/questions/17879198/adding-utf-8-bom-to-string-blob

SMS API 를 연동하면서, 보낼 문자의 길이를 EUC-KR 인코딩에 맞게 카운트할 필요가 있었다.


단순히 EUC-KR 로 인코딩해서 카운트len(string.encode('euc-kr'))해도 되긴 하지만, "뷁" 같이 EUC-KR 테이블에 없는 문자는 ? 로 치환 후 계산이 필요했음.


즉, 내가 원하는건

1. EUC-KR 에 없는 문자는 ?로 치환하고

2. EUC-KR 인코딩에 맞게 글자수 카운트

를 Python 2.7 에서!


PHP 코드 및 원리는 http://dev.epiloum.net/293 여기에 나와있으며, CP949 / EUC-KR 차이 등에 대해 상세히 잘 설명되어 있다.



길이 자체는 위에 말한듯이 euc-kr 로 인코딩 후 카운트하면 되니 상관없고, 지원하지 않는 문자열을 ?로 만드는 과정이 필요.

utf-8 로 인코딩된 문자열이 입력으로 들어오는 기준으로 작성되었다.


대충 만든거니 대충보고 쓰자...


FUNC: convert_euc_kr

INPUT: content (utf-8)




기반 코드들을 Python 3 으로 마이그레이션함에 따라, 이 코드도 수정이 필요하였다.

에러가 나지 않게 타입(str, byte)부분만 바꿔줘서 제대로 작동이 되는지는 확인해보지 않았다.




리턴값은 여전히 utf-8 로 인코딩 되어 있으니, 길이를 구할때는 len(ncontent.encode('euc-kr')) 로 하면 됨.


끝.

맥에선 brew 로 잘 깔았던 것 같은데..

우분투에선 apt 로 받으니 버전이 낮다.


여튼 맥이고 우분투고 환경변수 설정 문제도 있으니 써둠.



Mac 일 경우

$ brew install go



Ubuntu 일 경우

1. https://golang.org/dl/ 에서 해당하는 파일을 다운로드

2. $ sudo tar -C /usr/local -xzf go*******.tar.gz

3. 환경변수 추가(/etc/.profile 혹은 ~/.profile)

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin


일단 이렇게까지 하면 설치 및 사용은 잘 된다.


GOPATH 설정

그런데 go get 등을 하려면 GOPATH 를 설정하라고 하면서 안됨.

찾아보니 그냥 다운받는 패키지를 저장하는 장소를 지정해달라는 것. 설치 디렉토리는 여러 이유로 안됨.(권한, 업데이트 등등)

나는 그냥 ~/golang/pkg 로 지정하였다.

export GOPATH=~/golang/pkg


이러면 go get 등도 잘 됨


go install 을 할 경우 $GOPATH/bin 에 생긴다.




참고:

http://munchpress.com/install-golang-1-5-on-ubuntu/

망할 윈도우... BMP 쓰기가 너무 싫어 몇시간을 삽질했다..


GDI+ 를 사용하므로 

gdiplus.lib 

를 프로젝트 속성 - Linker - Input - Additional Dependencies 에 넣어주고


#include <gdiplus.h>

using namespace Gdiplus;


를 코드 상단에 적어주자.





위 코드로 

HBITMAP hBitmap = LoadPNGToHBITMAP(MAKEINTRESOURCE(IDB_PNG));

와 같이 이미지를 불러온 후에


WM_PAINT 메세지에서 아래 더보기와 같이 그려주면 된다.

사이즈는 원래 구하는 코드가 있었는데, 난 필요없어서 제거함. 그정도는 구글링하자.(후에 내 자신을 원망하겠지..)




* VS 2015 에서 VS 2010 의 컴파일러를 사용하여, Win XP SP3 및 Win 7 SP1 에서의 작동을 확인하였다.


'개발개발 > 기타' 카테고리의 다른 글

Python euc-kr 인코딩 변환 및 길이 계산하기  (0) 2016.04.03
[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
python to exe  (2) 2015.02.25
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15




Tistory 에서 뭐가 바뀌었는지 모르겠지만,

최근에 Surrounded 스킨을 쓰는 블로그들이 하나같이 이렇게 변해버렸다..


귀찮아서 냅두고 있었는데, 생각이나서(시험기간이니) 수정해보았다.


관리 - HTML/CSS편집 메뉴에서 아래 style.css


사진과 같은 곳을 찾아, 드래그한

padding-right: 16px;

부분을

padding-right: 15px;

로 변경한다.


그러면 현재 내 블로그 상태처럼 정상으로 돌아옴.

'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
python to exe  (2) 2015.02.25
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15
XCode4 업데이트  (1) 2011.03.11

아무래도 python 으로 프로그램을 짜기가 쉽다.


라이브러리가 많기도 하고...

윈도우 프로그램 개발할 일이 있었는데, c++ 로 개발하긴 귀찮아서 파이썬을 택했다.

(그냥 c++ 할걸 하는 후회도 약간 있긴 하지만 여튼.)



GUI 제작은 wxPython 을 사용하였고..

맥에서 주로 테스트를 하다가 윈도에서 한번씩 확인해보는 방식으로 개발하였다.

뒤늦게 알았는데, sys.platform 값을 darwin /win32 로 분기해서 구분하면 좀 더 편함.



마지막으로 만든 파이썬 스크립트를 배포용으로 만들 필요가 있었는데 여기서 애를 먹었다.


우선 난 Python 2.7.


처음에 py2exe 를 시도하였으나 안됨.


그 다음으로 cx_Freeze 를 사용하였는데 만들어지긴 하나 라이브러리 파일들이 덕지덕지 튀어나온다.

패커? 같은걸로 해보려 했으나 뭔가 잘 못찾겠어서 패쓰.

아래 문서의 도움을 잘 받았당

http://stackoverflow.com/questions/20754180/cx-freeze-bundling-files



그래서 그 다음으로 선택한게 PyInstaller.

처음 설정하기가 뭔가 좀 애먹었긴 한데 잘 된다.


단지, onefile 옵션을 주면 실행할 때 리소스를 임시폴더에 푼 다음 실행을 하는 것 같다.

프로그램 상에서 리소스를 불러올 때 resource_path 를 따로 계산해줘야 함.

http://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile

이 글을 참고하자.


(PyInstaller 기준) icon 파일은 .spec 파일에 기술했을 경우에 알아서 포함한다.


* 그런데... PyInstaller 는 만들고 난 결과 파일이 있는 경로에 한글이 섞여있으면 에러가 난다....ㅂㄷㅂㄷ....

Python 으로 exe 만들기 뭔가 험난하네....ㅠㅠㅠ


'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15
XCode4 업데이트  (1) 2011.03.11

ARC 사용하는 프로젝트에서 특정 파일만 MRC 를 사용하기 위해서는

컴파일 옵션에 -fno-objc-arc 를 넣어주면 된다.


근데 xcode5 로 올리고 나니

Targets -> Build Phases 로 이동하면...



없다!!! 

컴파일러 옵션이 없고, 더블 클릭해도 안된다.


그래서 검색해보니,, 답은 황당하다..



오른쪽 탭을 없애든지 뭐 기타 방법으로 창을 길게 만들어주면 된다.

그럼 숨어있던 컴파일러 옵션이 나타난다.. ㅡ_ㅡ...


저기에 -fno-objc-arc 를 넣어주면 됨.

'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
python to exe  (2) 2015.02.25
XCode4 업데이트  (1) 2011.03.11
며칠전, XCode4 정식버젼이 맥용 앱스토어 버젼으로 나왔다.
개발자 인증(유료)를 한 사람은 개발자 센터에서 무료로 다운이 가능하고, 그 외 사용자에게는
$5에 배포되고 있다.. 이전에 무료인 것에 비하면 아쉽지만, 개발툴 치고는 싼편!

내 맥에서 인터페이스 빌더오류로 난리 났었기에 그냥 아무 생각없이 바로 구매하였다..

맥용 앱스토어에 가면 볼수 있다. 가격은 위에서 말했듯이 $4.99 (평가 왜저래;;)


다운 완료시 애플리 케이션 폴더에 위와 같이 인스톨 프로그램이 설치되며, 실행할 경우 기본 버젼과 마찬가지로
/Developer 에 설치를 시작한다. XCode3 이 설치되어 있을 경우 기본 버젼은 Developer-old 로 이름 변경 후 설치가 진행된다
상당히 오래 걸렸던듯...


메인화면은 디자인의 변경 외엔 눈에 띄는게 없다! ㅋ



상단 부분이 통합되었다는 느낌이다. 특히 인터페이스 빌더와 info.plist 파일...
전체적인 디자인과 몇몇 메뉴가 이동하다 보니 xcode3에도 적응이 안되던 나에겐 너무나 헷갈린다;;;;



그리고 좀 편해졌다고 느껴진게 뭔가 기존 xcode와 organizer 가 서로 연동.. 되는게 많아 진것 같다
원랜 window메뉴에 숨어있다 보니 organizer 처음에 개발자 등록할때만 쓰고 있는지도 모르는 사람도 있었는데..
이젠 그런일 없으려나..?


잠깐 사용해보면서 불편한 점으로는 코드에서의 에러를 실시간으로 계속 스캐닝 하던데, 그래서 상당히 귀찮아 졌다..
코드 작성중엔 다음줄에 계속 에러로 뜨니 상당히 거슬리고, 변수 선언시에도 계속 오류를 뿜어내고 있으니
뭔가 계속 신경쓰인다;; 그냥 기존처럼 빌드 하면서 에러 체크하는게 더 좋았던 듯;;;(나 같으면 에러 체크 용으로 커맨드+B 사용..ㅋㅋ)

Unit Test 란 뭔가 이상한 것도 추가됬는데 뭔지 모르겠으니 패쓰;;


메이저 업데이트이긴 하나, 내부적으로 크게 바뀐건 없는 듯 하다... 기존 Mobile Substrate Extension 사용법이나,
XCode Code Sign Pass 모두 4버젼에서 사용 가능하다고 한다.(아직 사용은 못해봤다..ㅎㅎ)



아직 제대로 사용은 못해봤지만, 친해지도록 노력 해봐야지;;

'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
python to exe  (2) 2015.02.25
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15

+ Recent posts