블로그 이미지
랜달프

calendar

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

Notice

    2020. 9. 11. 22:53 Programming/기타

    KISA WHOIS의 OpenAPI를 이용하기 위해는 Key를 발급 받아야 한다.

    아래 WHOIS OpenAPI Key 발급 사이트에 접속하여 발급 받을 이메일과 사용 목적 등을 입력하고

    발급 신청 버튼을 누르면 이메일로 Key가 발송되며, 이메일로 받은 Key를 등록 페이지에서 등록하면

    발급 받은 Key로 WHOIS OpenAPI를 사용할 수 있다.

    https://whois.kisa.or.kr/kor/openkey/keyCre.do

     

    KISA 후이즈검색 whois.kisa.or.kr

    한국인터넷진흥원 인터넷주소자원 검색(후이즈검색) 서비스 입니다.

    xn--c79as89aj0e29b77z.xn--3e0b707e

     

     

     

     

    posted by 랜달프
    2019. 2. 7. 22:37 Programming/Python

    Python으로도 GUI 프로그래밍이 가능하다.

    Tkinter, PyQT, PySide, wxPython 등을 이용할 수 있다.

    이중 라이센스 문제가 가장 적은 PySide를 사용해 보고자 한다.

    물론 다른것들도 라이센스 규약만 잘 따른다면 이용하는데 문제는 없다.


    PySide는 Python에서 Qt프레임워크를 사용할 수 있도록 하는 바인딩 프로젝트로

    라이센스 문제가 있다면 PySide를 사용하는 것이 좋다.


    우선 pip를 이용하거나 pycharm에서 패키지 설치를 통해 PySide를 설치한다.

    >pip install PySide2

    또는

    >pip install --index-url=http://download.qt.io/snapshots/ci/pyside/5.12/latest pyside2 --trusted-host download.qt.io


    아래 예제 코드를 작성하여 실행하여 보자.

    import sys
    from PySide2.QtWidgets import QApplication, QLabel
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        label = QLabel("Hello World")
        label.resize(400, 400)
        label.show()
        sys.exit(app.exec_())
    


    Windows, Linux, MacOS 에서 동일하게 사용할 수 있는 장점이 있다

    Windows와 MacOS에서 동일한 결과를 얻은 것을 확인할 수 있다.


    Windows 실행화면


    Mac OS 실행화면



    posted by 랜달프
    2019. 2. 7. 22:11 Programming/Python

    Python 패키지를 이용하기 위해서는 기본적으로 PIP를 이용하면 된다.

    일반적으로 

    > pip install 패키지명

    위와 같은 방법으로 패키지를 설치하게 된다.


    그럼 PyCharm에서 패키지를 이용하기 위해서는 어떻게 해야할까

    아래 화면과 같이 패키지를 설치할 수 있는 기능을 제공한다.


    File -> Setting을 선택한다


    Project -> Project Interpreter를 선택하여 우측에 + 버튼을 눌러준다


    원하는 패키지를 검색, 선택하여 Install Package를 눌러 설치하면 된다.



    posted by 랜달프
    2019. 1. 28. 14:49 Programming/Python

    한국인터넷진흥원(KISA)에서는 

    IP에 대한 할당 정보 검색 서비스를 제공한다. 

    (http://kisa.whois.or.kr)


    참고로 IP조회라고 하면 실제 가입자를 알아낼 수 있는 것으로 

    착각하기 쉬우나 대부분 ISP 업체까지만 확인된다. 

    자세한 내용은 아래 링크의 IP 주소 추적에 관한 오해를 참고하도록 하자 

    https://whois.kisa.or.kr/kor/whois/ipTrace.jsp


    한두개의 IP에 대해서는 위 사이트에서 쉽게 조회가 가능하다.


    하지만 수많은 IP에 대해 조회가 필요할 때

    일일이 사이트에서 조회하기 힘들기 때문에

    KISA에서는 WHOIS OPEN API를 제공한다


    KISA WHOIS OPEN API를 Python으로 이용하는 방법을 알아보고자 한다.


    1. Key 발급 받기

    https://whois.kisa.or.kr/kor/whois/openAPI_KeyCre.jsp


    위 링크에서 Key를 발급 받을 수 있다. 

    Key를 발급 받을 E-mail과 사용목적을 기재하면 

    E-mail로 Key를 받을 수 있다.

    Key 인증 방법도 E-mail에 안내되어있다.


    2. WHOIS OPEN API 사용법

    WHOIS OPEN API는 HTTP 요청에 대한 응답으로 처리된다

    기본적인 질의문은 다음과 같다

    http://whois.kisa.or.kr/openapi/whois.jsp?query=IP주소&key=발급받은KEY값&answer=[xml,json]


    위처럼 응답은 xml과 json 형태로 응답 받을 수 있다.

    자세한 내용은 아래 링크의 사용안내서를 참고하자

    http://whois.kisa.or.kr/kor/whois/helper.jsp


    3. Python 코드 작성

    import urllib.request
    
    ip = '조회할 IP'
    whois_key = '발급 받은 key'
    
    query = "http://whois.kisa.or.kr/openapi/whois.jsp?query=" + ip + "&key="+ whois_key + "&answer=json";
    request = urllib.request.urlopen(query).read().decode("utf-8")
    
    print(request)
    


    HTTP 질의문을 위 처럼 만들어 주고 

    urlopen을 이용하여 HTTP 요청을 하여보면

    아래와 같은 결과를 얻을 수 있다.

    아래 결과는 JSON 형태이므로 적절히 파싱해서 사용하면 된다.


    {"whois":{"query":"119.xxx.xxx.xxx","queryType":"IPv4","registry":"KRNIC","countryCode":"KR","korean":{"ISP":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/11","servName":"KORNET","orgName":"주식회사 케이티","orgID":"ORG1600","addr":"경기도 성남시 분당구 불정로 90","zipCode":"13606","regDate":"20080226"},"techContact":{"name":"IP주소 담당자","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}},"user":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/24","netType":"CUSTOMER","orgName":"(주) 케이티","orgID":"ORG841145","addr":"서울특별시 도봉구 창동","zipCode":"132-040","regDate":"20150317"},"techContact":{"name":"IP주소 담당자","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}}},"english":{"ISP":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/11","servName":"KORNET","orgName":"Korea Telecom","orgID":"ORG1600","addr":"Gyeonggi-do Bundang-gu, Seongnam-si Buljeong-ro 90","zipCode":"13606","regDate":"20080226"},"techContact":{"name":"IP Manager","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}},"user":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/24","netType":"CUSTOMER","orgName":"KT","orgID":"ORG841145","addr":"Chang-Dong Dobong-Gu Seoulteukbyeol-Si","zipCode":"132-040","regDate":"20150317"},"techContact":{"name":"IP Manager","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}}}}}

    posted by 랜달프
    2019. 1. 25. 01:07 Programming/Python

    Python에서 zipfile 모듈을 이용하여 쉽게 압축을 풀 수 있다

    Python으로 압축 풀기 정말이지 너무나도 간단하지 않은가

    아래 예시 코드를 보면 ZipFile을 열어서 extractall() 함수를 호출하면 압축을 푼다.

    물론 여러 기능들이 있지만 우선 이것부터 해보기로 하자.

    임의의 압축파일을 하나 만들어 테스트 해본 결과, 아주 잘 된다.

    import zipfile
    
    try:
        with zipfile.ZipFile("압축파일.zip") as zf:
            zf.extractall()
            print("uncompress success")
    
    except:
        print("uncompress fail")
    


    posted by 랜달프
    2019. 1. 24. 02:21 Programming/Python
    최근 프로그래밍 언어로 각광 받는 Python을 시작해보자.

    근래에 필요한 툴이 필요해 이것저것 알아보던 중 Python이 핫하다.

    어떤 프로그래밍 언어로 개발을 하던지 

    Edit 프로그램을 이용해서 개발할 수도 있다.

    하지만 개발의 효율성을 위해 IDE(통합개발환경) 툴을 찾아보던 중

    PyCharm 이라는 IDE를 이용하여 Python 개발을 많이 하는듯 하기에

    PyCharm 을 설치하여 Python 개발을 하려고 한다.

    현재 Windows 10을 기반으로 진행할 예정이나, 

    macOS까지 확장을 염두해두고 있다.

    PyCharm은 Windows 뿐만 아니라 macOS와 Linux까지 지원을 하기에

    향후 크로스플랫폼 개발까지도 용이할 듯 하다.


    [ Python 이란 무엇인가? ]

    1991년에 발표된 인터프리터 방식의 프로그래밍 언어로 네덜란드 개발자 귀도 반 로섬이 심심해서(?) 개발한 고급 프로그래밍 언어이다.

    다양한 플랫폼을 지원하고 많은 라이브러리를 지원하기에 
    쉽고 빠른 개발이 가능하다.


    Python 을 설치해보자 ]

    파이썬은 https://www.python.org에서 다운 받을 수 있다.

    가장 최근(2018. 12. 24.) Release 된 버전은 Python 3.7.2 이다.

    원하는 것으로 다운로드 하도록 한다.


    Add Python 3.7 to PATH을 선택하여 준다.

    파이썬 설치 경로는 OS 기본 경로로 지정해 주는 것인데,

    선택해주는 것이 편리하다.


    파이썬 설치가 완료되었다!


    [ PyCharm을 설치 해보자 ]

    이제 PyCharm 을 설치해보자.
    PyCharm은 JetBrains에서 제공하고 있기에 
    JetBrains 홈페이지(https://www.jetbrains.com)에서
     다운로드(링크) 할 수 있다.

    Community 버전(무료버전)을 다운 받아 설치하도록 한다.


    현재 기준으로 2018. 3. 3. 버전이 다운로드 된다.

    (pycharm-community-2018.3.3.exe)


    참고로 PyCharm은 JAVA가 설치되어있어야 하므로

    JAVA가 설치되어 있지 않으면

    Download and install JRE x86 by JetBrains을 선택하여 준다.



    여기까지 하면 PyCharm 설치가 완료 되었다!



    [ Hello World를 만나자 ]

    프로그래밍을 접하던 옛 추억을 살려 

    Python으로 "Hello World!"를 출력해보자


    설치한 PyCharm을 실행시켜 프로젝트를 만들자.


    프로젝트 이름을 설정하자


    이제 프로젝트가 생성되었다.


    좌측 화면에서 프로젝트 이름에 우클릭을 하면 메뉴가 나온다.

    New -> Python File을 선택


    파일 이름(Hello World)을 설정하고 OK를 누르면 소스 파일이 생성된다.


    이제 Hello World를 만나보자

    print("Hello World")

    위와 같이 작성하고 초록색 세모 버튼(RUN)을 누르면

    드디어 Hello World를 만났다

    posted by 랜달프
    wxString path( wxT("C:\\Documents and Settings\\전민수\\바탕 화면\\새 폴더\\테스트 (1).txt") );
     SHFILEOPSTRUCT FileOp;
     ZeroMemory(&FileOp, sizeof(SHFILEOPSTRUCT));
     FileOp.hwnd = (HWND)frame->GetHWND();
     FileOp.wFunc = FO_DELETE;
     FileOp.pFrom = path.c_str();//"C:\\Documents and Settings\\전민수\\바탕 화면\\새 폴더\\테스트.txt";    
     FileOp.lpszProgressTitle = L"제목";                 
     FileOp.fFlags = FOF_NOCONFIRMATION|FOF_ALLOWUNDO ;   
     SHFileOperation(&FileOp);  
    posted by 랜달프
    2009. 5. 29. 13:32 Programming/C programming
    class CSingleton
    {
    public:
    	CSingleton();
    	static CSingleton* GetInstance();
    private:
    	static CSingleton* m_instance;
    
    };
    
    CSingleton* CSingleton::m_instance = 0;
    
    CSingleton::CSingleton()
    {
    
    }
    CSingleton::GetInstance()
    {
    
    	if( 0 == m_instance )
    	{
    		m_instance = new CSingleton;
    	}
    
    	return m_instance;
    
    }
    
    posted by 랜달프
    2009. 5. 27. 13:52 Programming/Linux Programming

    VI 명령어
    ========= 명령모드 ==========================================

    화면을 이동하는 법

    h : 앞으로 이동
    l : 뒤로 이동
    k : 위로 이동
    j : 아래로 이동

    방향키 자체는 vi자체에서 지원하는 키가 아니라 텔넷프로그램(새롬데이터맨)이 지원해주는 가짜 키임을 유의.

    화면단위로 이동하는 법

    Ctrl + f(Forward) : 한페이지 앞으로(아래로)
    Ctrl + b(Backward) : 한페이지 뒤로(위로)
    Ctrl + u(Up) : 1/2페이지 위로 이동
    Ctrl + d(Down) : 1/2페이지 아래로 이동

    PageUp키나 Pagedown키를 눌러 이동하면 안됨

    행내에서의 이동

    Shift + 4(== $ ) : 행의 맨뒤로
    Shift + 6(== ^ ) : 행의 맨앞으로

    HOME키나 END키를 사용해선 안됨

    특정행으로 자유롭게 이동

    1 + Shift + g( == 1 + G ) : 파일의 처음(1행)으로 이동하기
    Shift + g( == G ) : 파일의 마지막행으로 이동하기
    특정숫자 + Shift + g( == ? + G ) : 특정라인으로 이동하기

    삭제 기능

    x : 한글자 지우기(윈도우의 Delete키 기능)
    X : 한글자 지우기(윈도우의 Backspace키 기능)
    dd : 한줄지우기
    특정숫자 + dd : 여러개의 라인 지우기
    D : 현재라인 현재행의 뒷부분 모두 지우기(하나의 행)

    Copy & Paste 기능

    yy : 하나의 행 복사하기
    특정숫자 + yy : 여러개의 행 복사하기
    p : 붙이기
    Shift + j(== J ) : 윗줄의 맨뒤에 아랫줄 갖다가 붙이기(커서의 위치는 윗줄에 있어야 함)

    검색하고 치환하는 기능

    /찾는문자열
    - 파일내에서 찾는 문자열을 찾아 커서가 이동한다.(아래방향으로)
    ?찾는문자열
    - 파일내에서 찾는 문자열을 찾아 커서가 이동한다.(위로 향하여)
    n
    - "/찾는문자열"을 입력후 다음찾기할때(아래방향)
    N
    - "/찾는문자열"을 입력후 다음찾기할때(위방향)

    :s/찾는문자열/치환문자열
    - 현재 커서가 놓여 있는 행에서 첫번째로 검색된 특정문자열 바꾸기:1,10s/찾는문자열/치환문자열
    - 1행부터 10행사이에 걸쳐 첫번째로 검색된 특정문자열 바꾸기
    :%s/찾는문자열/치환문자열
    - 모든행에 걸쳐 첫번째로 검색된 특정문자열을 바꾸기

    치환문에서 /g의 차이

    예)
    drwxrwxrwt 7 sys sys 363 12월25일 02:41 tmp/

    실행문)
    :s/sys/root
    :s/sys/root/g

    실행결과)
    drwxrwxrwt 7 root sys 363 12월25일 02:41 tmp/
    drwxrwxrwt 7 root root 363 12월25일 02:41 tmp/

    ========= 명령모드 ==========================================

    명령모드에서 벗어나 편집모드로 진입하기(입력모드)

    i : 커서가 놓여 있는 위치의 문자를 밀어내고 삽입된다.
    a : 커서가 놓여 있는 위치의 문자뒤에 삽입된다.
    o (소문자 o) : 현재행의 아래행을 밀어내고 입력모드로 전환된다.
    O (대문자 O) : 현재행을 한줄 아래로 밀어내고 입력모드로 전환된다.

    입력모드 와 삽입모드를 습관적으로 변환하기

    입력모드 : ESC - 명령모드(이동,삭제,검색,치환,저장,종료,열기)
    명령모드 : i,a,o,O - 삽입모드(입력)

    vi 방식의 종료와 저장, 새이름으로 저장

    :q - 저장하지 않고 vi 종료하기
    :q! - 강제 종료
    :w - 현재내용을 저장
    :w! - 읽기전용인 파일을 수정후 강제로 저장할때
    :wq - 저장하고 종료
    :wq! - 읽기전용인 파일을 수정후 강제로 저장하고 종료하기
    :w 새파일명 - 새이름으로 저장

    vi 환경설정

    :set number : 행번호 보이게
    :set nonumber : 행번호 안보이게
    :set autoindent : 들여쓰기 설정
    :set noautoindent : 들여쓰기 제거
    :set list : 문단,조판부호 보기
    :set nolist : 문단,조판부호 안보이게
    :set window=30 : 한 화면당 행의 갯수 30개로 지정
    :set ignorecase : 검색시 대소문자 구별 제거
    :set noignorecase : 검색시 대소문자 구별
    :set all : 현재 설정된 vi 모든 설정값 보기

    출처 : http://yokyun.tistory.com/93

    posted by 랜달프


    ATL 콘트롤 클래스의 이름을 TestCtl 로 설정했다고 가정하자.


    1. PersistPropertyBagImpl 과 ObjectSafetyImpl 을 상속받는다.
    ObjectSafetyImple 은 보안경고창이 뜨는걸 막는데 쓰인다.
    ActiveX 클래스의 상속리스트에 다음을 추가한다.


    class ATL_NO_VTABLE CTestCtl :
    ....... (생략) .......
    public IPersistPropertyBagImpl<CTESTCTL>,
    public IObjectSafetyImpl<CTESTCTL, INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACESAFE_FOR_UNTRUSTED_CALLER>

    2. COM맵에 상속받은 클래스의 엔트리 포인트를 추가한다.

    BEGIN_COM_MAP(CTestCtl)
    ....... (생략) ......
    COM_INTERFACE_ENTRY(IPersistPropertyBag)
    COM_INTERFACE_ENTRY(IObjectSafety)
    END_COM_MAP()

    3. param 으로 설정할 변수를 다룰 프로퍼티를 추가한다.
    클래스 뷰에 보면 ITestCtl 이라는 인터페이스가 보인다.
    여기에서 속성을 추가해 준다. 중요한것은 반드시 put/get을
    동시에 추가해야 한다는 점이다. UserCode 라는 프로퍼티를
    추가하면 idl 파일에 프로퍼티가 생성될것이다.

    4. 생성된 프로퍼티의 id 값으로 PROT_MAP에 프로퍼티 엔트리
    포인터를 추가해준다.

    BEGIN_PROP_MAP(CEchatRecorder)
    PROP_ENTRY("UserCode", 1, CLSID_TestCtl )
    END_PROP_MAP()

    note.
    param 태그로 넘길 프로퍼티값을 초기화 해야될 필요가 있다면
    생성자에서 초기값을 설정해야한다. 다른곳에서 초기화를 하면
    param 에서 넘어온값을 덮어버린다.

    출처 (작성자)   이노릭스(김춘구)

    posted by 랜달프
    prev 1 2 3 4 5 next