http://supercoding.tistory.com/3에 나와있는 내용을 초금 수정 한 버전..


#include "stdafx.h"
#include <windows.h>
#include <vector>

template <typename T>
class Array2D
{
public:
    Array2D(const unsigned int maxSizeX
, const unsigned int maxSizeY
, std::vector<T>& dataArray)
        : m_isInit(false)
        , m_dataArray(dataArray)
        , m_maxSizeX(maxSizeX)
        , m_maxSizeY(maxSizeY)
    {
        if (m_dataArray.size() == (m_maxSizeX * m_maxSizeY))
            m_isInit = true;
    }

    ~Array2D()
    {
        m_isInit = false;
    }

    // 제대로 세팅 되었는지 여부
    bool IsInit() { return m_isInit; }

    const int GetMaxSizeX() { return m_maxSizeX; }
    const int GetMaxSizeY() { return m_maxSizeY; }

    T& operator()(const unsigned int x, const unsigned int y)
    {
        return m_dataArray.at((y * m_maxSizeX) + x);
    }
    const T& operator()(const unsigned int x, const unsigned int y) const
    {
        return m_dataArray.at((y * m_maxSizeX) + x);
    }

private:
    bool m_isInit;

    const unsigned int m_maxSizeX;
    const unsigned int m_maxSizeY;

    std::vector<T>& m_dataArray;

};

int _tmain(int argc, _TCHAR* argv[])
{
    // 3*3 2차원 배열에 들어가는 개수 9개 세팅 (초기화)
    std::vector<BYTE> array;
    for (int i = 0; i < 9; i++)
        array.push_back(0);

    // 2차원 배열 사용...
    Array2D<BYTE> temp(3, 3, array);

    try
    {
        // 좌표 시작값은 0부터 시작
        temp(1, 1) = 1;
    }
    catch (std::exception e)
    {
        // 좌표가 오버 하면 에러 나오겠죠...
        printf("%s", e.what());
        return -1;
    }

    // 출력용
    for (int x = 0; x < temp.GetMaxSizeX(); x++)
    {
        for (int y = 0; y < temp.GetMaxSizeY(); y++)
        {
            printf("%d ", temp(x, y));
        }
        printf("\n");
    }

    return 0;
}



by 널부러 2018. 10. 19. 15:46
  DWORD prevMode = 0;
  HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
  GetConsoleMode(handle, &prevMode);
  SetConsoleMode(handle, prevMode & ~ENABLE_QUICK_EDIT_MODE);

이상 끝~


by 널부러 2018. 9. 4. 15:04
자동 패킷 생성 스크립트로 json을 이용 하여 개발중인데..

json 키값이 잘못 되면 생성 할때 어느줄에서 에러나는지 만들었지만...

스크립트 생성전에 뭔가 체크 할께 없을까 했는데..

vs에서 json 파일 열면 스키마를 세팅 해서 규격에 맞게 작성 할수 있는 기능이 있더라구요..


사용법은 위 동영상을 보면 될꺼 같네요..


하지만 저걸로 끝이면 뭐 정리를 할 필요가 없었겠죠...


{
"title": "value",
"list" : [
{
"name" : "test",
"values" : [
{
"value1": 100,
"value2": 200
},
{
"value1": 300,
"value2": 400
}
]
}
]
}


간단하게 위와 같이 list array에 values array 가 들어있는 구조 임다..


https://www.liquid-technologies.com/online-json-to-schema-converter


위 주소로 json을 가지고 가면 아래와 같이 머싯게 뽑아주긴 합니다.


{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"list": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"values": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"value1": {
"type": "integer"
},
"value2": {
"type": "integer"
}
},
"required": [
"value1",
"value2"
]
},
{
"type": "object",
"properties": {
"value1": {
"type": "integer"
},
"value2": {
"type": "integer"
}
},
"required": [
"value1",
"value2"
]
}
]
}
},
"required": [
"name",
"values"
]
}
]
}
},
"required": [
"title",
"list"
]
}


하지만 여기 함정이 있더군요..

위 사이트는 고정 적인 값만 체크 하게 되는 문제가 있더라구요

예를 들면 list array에 object를 추가 하면 두번째 부터는 자동으로 값이 안튀어나오는...


그래서 최소한 구조만 넣고 다시 뽑아야 합니다.

그리고 "items" 부분에 있는 대괄호를 ([]) 제거 해줘야 합니다.

대괄호가 있으니 1개만 인식 하는 문제가 있습니다..


{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"values": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value1": {
"type": "integer"
},
"value2": {
"type": "integer"
}
},
"required": [
"value1",
"value2"
]
}
}
},
"required": [
"name",
"values"
]
}
}
},
"required": [
"title",
"list"
]


위에는 최소한의 값만 세팅해서 뽑고 items에 있는 대괄호를 수동 제거 한 상태

(하지만 테스트는 안해봤다는거...)


위 파일 저장 하고 동영상에 나온데로 하면 ctrl + 스페이스 누르면 각 상황에 맞는 key값이 나오는것을

확인 할 수 있습니다.


흠... 그리고 또 하나의 팁을 드리자면..


"description": key 값을 추가하면 각 키의 설명을 달수 있습니다..

그거 달아두면 뭐 팝업으로 설명 나오니...


더 자세한건 인터넷에 많으니 구글에게 물어보시면 됩니다..



by 널부러 2018. 7. 21. 00:01

SetErrorMode(SEM_NOGPFAULTERRORBOX);


사용하면 됨

옵션값은 아래와 같이 같고 더 있을꺼 같지만...


- SEM_FAILCRITICALERRORS
    심각한 에러 메세지 박스를 보이지 않는다.
    하지만, 호출 프로세서로 에러 통지
        
- SEM_NOALIGNMENTFAULTEXCEPT
    64비트 윈도우에서만 유효하다!
    자동으로 메모리 정렬 오류를 수정한다
    이때 값이 수정된 후, 그 값을 초기화 하는 것은 무시

- SEM_NOGPFAULTERRORBOX
    에러 메세지를 보여주지 않는다.

- SEM_NOOPENFILEERRORBOX
    파일 검색 실패시 메세지 박스를 보여주지 않는다.
    하지만, 호출 프로세서로 에러 통지


출처 : http://www.nakupenda.co.kr/board/view.php?id=development&page=3&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=asc&no=18&PHPSESSID=206c0327bfb48f62679c9b92a095a3c8

by 널부러 2017. 12. 27. 14:45

멘티스 비트나미꺼 설치하면 mysql 아파치 안깔아도 되서 그걸로 세팅 추천


설정 관련 한건 config_inc.php 에서 추가 해서 수정 하면


// 시간 관련 - 한국하면 이걸로
$g_default_timezone = 'Asia/Seoul';

// 언어 설정 - 영문 나오면 아래와 같이
$g_default_language = 'korean';

// 우편 발송 세팅
$g_phpMailer_method     = PHPMAILER_METHOD_SMTP;
$g_smtp_host            = 'smtp.gmail.com';
$g_smtp_username        = '메일주소';
$g_smtp_password        = '암호';
$g_smtp_connection_mode = 'tls';
$g_smtp_port            = 587;

// 로그 찾을떄
$g_log_level = LOG_EMAIL | LOG_EMAIL_RECIPIENT;

위와 같이 세팅 하고 메일 안보내지면 위에 로그를 넣어서 꼭 확인 해볼것

로그가 깨져서 보일경우 언어를 영문으로 바꿔서 봐야함.

connet 실패면  아래와 같은 상황일꺼임
거지같은거 하나 smtp 가 openssl 접속할때 키값이 필요한게 기본 세팅인듯
키값 거지같으니 안쓴다고 처리를 해줘야함.

email_api.php 까보면 send 처리 전에 아래 코드를 넣어서 처리 하게 바꾸자

$t_mail->smtpConnect([
            'ssl' => [
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
            ]
        ]);

by 널부러 2017. 12. 14. 13:27

난수 검색하다 정리 잘된 사이트가 있어서..


http://blog.naver.com/PostView.nhn?blogId=drvoss&logNo=220340760979


흠.. 이중에서 난수 빈도를 설정 해서 쓰는 게 있는데 std::discrete_distribution


흠... 이거 잘쓰면 괜찮은거 같더라능...


적절하게 분포 해주는 거보면 흠...


나중에 랜덤 관련해서 잘 써먹어 보면 될듯요...




by 널부러 2016. 12. 19. 16:41

Ado 버전 히스토리

https://msdn.microsoft.com/ko-kr/library/ms676506(v=vs.85).aspx


ado 참고

http://www.viper.pe.kr/wiki2/wiki.php/ADO%20Programming%20with%20Visual%20Cpp

by 널부러 2016. 11. 21. 16:57

google breakpad 제대로 사용 할려면 덤프난거 서버로 보내는거 까지 해야하는데..


그냥 로컬 쪽에서만 처리하는것만 설명...


breakpad 사용할려면 3개의 라이브러리 필요


exception_handler

crash_generation_client

common


위 3개는 breakpad VS 프로젝트 생성하면 있는 것들임..


라이브러리파일은 알아서 링크를...


간단 코드는 아래와 같이..




일단 테스트 한 봐로는 덤프 못잡는 경우가 많은거 같음...


파일명은 자체 세팅 하다 보니 변경 하는데 애로사항이 꽃피는 경우가...


생각보단 불편한거 같음...


윈도우 환경에서는 BugTrap이 좀더 쓰기 편한거 같은데...



by 널부러 2016. 9. 27. 15:53

구글링하면서 나온것들은 다 옛날꺼라 다시 정리 해봅니다..


breakpad 소스 받을려면 구글링 해서는 svn 링크로 나오는데 이제 그거 구글에서 안쓰는거 같아요..

(언제부터인지는 모르겠지만..)


이젠 git으로 받아야하는거 같더라구요...


https://chromium.googlesource.com/breakpad/breakpad/


위 링크로 가면 git 주소 나오니 그걸 받으시면 됩니다...


breakpad 소스 받아보면 VS 솔루션 파일이 없어요...


솔루션 파일을 만드어 주는 gyp 를 이용해서 만들어야하는데...


breakpad 소스 경로 위치가 breakpad\src\client\windows 에 가보면  breakpad_client.gyp 파일이 있어요...


그런데 gyp 파일을 읽어서 바꿔 주는게 breakpad에는 없어요


https://chromium.googlesource.com/external/gyp/


위 주소로 가서 받으셔야 합니다.


gyp 받으면 gyp.bat 파일로 breakpad_client.gyp 이용하면 vs 솔루션 파일이 나오는데


이 gyp가 python을 쓰네요... 뭐 python이 최신이면 다 되는거 같지만..


저는 아래 주소에서 python을 받아서 썼심다..


https://chromium.googlesource.com/chromium/deps/python_26/


python을 받았으면 PATH를 설정 해줘야하는데 안에 setup_env.bat을 이용 하면 되는거 같습니다.


그리고 이제 gyp.bat breakpad_client.gyp 실행 하면 vs 솔루션 파일이 만들어집니다.


물론 두 파일 경로도 다 적어 줘야겠죠.


그런데 에러가 난다면 --no-circular-check 옵션을 추가적으로 주시고 실행 하면 되용


그럼 솔루션 파일이 나올것입니다...


참고로 솔루션 파일안에 보면  유닛테스트 프로젝트 코드도 들어있어서 다른 라이브러리가 추가적으로 필요합니다.

(딱히 필요 없을테니 과감히 삭제를...)


그리고 컴파일 해보면 C2220 에러가 난다면

아래 경고 번호가 있을꺼에요..

그 번호를


프로젝트 속성 -> C/C++ -> 고급 -> 특정 경고 사용 안 함 에 추가 해주시면


정상적인 컴파일이 될것입니다...











by 널부러 2016. 9. 21. 14:55

memory allocator 관련해서 tcmalloc 쓸려다 이것을 추천받아 올려봄..


인텔에서 만든거라 함... 다른 기능들도 여러게 있음...


리눅스 맥 다 지원해주는듯...


다운로드 주소는 : https://www.threadingbuildingblocks.org/


라이센스가 GNU GPLv2 가 있음...


무료로 쓸려면 dll 가저다 써야 할꺼임...


사용법과 설명은 아래 잘 나와있음..




GPLv2 a


by 널부러 2016. 4. 19. 13:24
| 1 2 3 |