Post by Category

.NET (3) C (1) C++ (22) Cloud (1) Network (2) Node.js (3) Visual Studio (5) etc (5) threading (1) 모임 (2) 번역 (6)

.NET (3)

.NET Core 2.0 봄에 출시 예정

January 18, 2017

원문 2017년 봄에 출시 예정. .NET Core 플랫폼에 있어서 큰 변화가 있는 버전이다. 버전 2이 되는 것으로 .NET Core 능력을 크게 확대하기 때문이다. .NET Standard의 버전이 2.0 이된다. .NET Standard 2.0 에서는 2배 가까운 AP...

C# - 꼬리 재귀 최적화

April 19, 2017

// 꼬리 재귀가 아니다 long SumNormal(long n) { if (n <= 0) return 0; return SumNormal(n - 1) + n; } // 꼬리 재귀 long SumTailCall(long n) { return SumTai...

NLog - 동적으로 로그 파일 이름 설정하기

April 26, 2017

NLog는 동적으로 파일 이름을 설정할 수 있는 기능이 있다. 아래의 방법은 커스텀 플레이스 홀더를 설정하고, 그 플레이스 홀더에 임의의 텍스트를 설정하는 방법으로 파일 이름을 변경한다. NLog.config <?xml version="1.0" encoding="utf-8...

C (1)

C99의 sizeof와 가변길이 배열

April 12, 2017

C99 에서는 배열의 사이즈 지정에 변수를 사용할 수 있다. void test1( int n ) { int fixed_array[10]; int varlen_array[n]; printf( "sizeof(fixed_array)==%ld\n", sizeof(fixed_...

C++ (22)

Boost.Asio 공부하기

March 17, 2017

나는 2007년부터 Boost.Asio를 온라인 게임 서버 개발에 처음 사용하였다(업무에 사용하는 것을 말한다.그전에 공부는 했었다) 당시 주위의 게임 개발자를 통해서 생각외로 사용하는 곳이 꽤 있었다. 이 후 한국 및 해외의 유명 회사들도 C++ 네트워크 프로그래밍에 사용하고 ...

C++11 - _Pragma 전처리 연산자

December 22, 2016

개요 C99 에서 도입된 전처리 연산자 이다. _Pragma 연산자는 매크로에서 처리 계 정의 기능을 사용하기위한 기능이다. 처리 계 정의 기능을 사용하기 위해 기존에는 #pragma 지시자를 사용하여 왔지만 이 기능은 매크로 내에서는 사용할 수 없다. #pragma 지시자를 매...

C++11 - alignas

April 1, 2017

개요 alignas()은 컴파일러에 대한 변수를 메모리 상의 특정 위치에 배치(배열) 하도록 요구하는 키워드이다. 예를 들면 4바이트 경계 위치에 배치할 경우 변수는 4의 배수 주소로 배치되고, 8바이트 경계 위치에 배치할 경우 변수는 8의 배수 주소로 배치된다. 문법 alig...

C++11 - alignof

April 1, 2017

개요 alignof()는 지정한 타입이 메모리의 어느 위치에 배치될지를(배치) 얻는 연산자이다. sizeof()와는 다르고 alignof()는 변수에는 사용할 수 없다. 예를 들면 타입 int가 4바이트 경계 위치로 배치되는 시스템이라면 alignof(int)은 4를 반환한다. ...

C++11 - boost::shared_ptr 에서 std::shared_ptr로 변환 하는 가장 간단한 방법

March 8, 2017

#include <iostream> // std::shared_ptr #include <memory> // boost::shared_ptr #include <boost/shared_ptr.hpp> auto main() -> int { ...

C++11 - long long 타입

December 26, 2016

개요 C99 호환을 위해 long long 정수 타입이 추가 되었다. long long 과 unsigned long long 타입은 64비트 이상의 값을 표현할 수 있는 것을 보증한다. long long 타입의 최대 값 매크로는 LLONG_MAX 이다. long long을 뜻하는...

C++11 - noexcept

February 27, 2017

noexcept 키워드 목적. 1) throw 키워드에 의한 예외 사양 대체. 함수가 어떤 예외를 던질 가능성이 있는지를 열거하는 것이 아니라 예외를 던질 가능성이 있는지 없는지만 지정한다. 예외를 던질 가능성이 있는 함수에는 noexcept(false)을 지정하고, 예외를 던질...

C++11 - std::get_time

February 6, 2017

개요 » get_time(tmb, fmt) 식을 사용하여 현재 입력 스트림에서 전달 받은 로컬 시간 값을 변환 형식 문자열에 맞추어 tm 오브젝트로 변환한다. 문법 template< class CharT > /*unspecified*/ get_time( s...

C++11 - std::put_time

February 3, 2017

개요 날짜 서식을 출력한다. 문법 template <class CharT> unspecified put_time(const struct tm* tmb, const CharT* fmt); tmb 은 유효한 tm 타입 오브젝트를 가리키는 포인터 f...

C++11 - type_info와 type_index

March 23, 2017

C++에서는 RTTI(Run Time Type Infomation/Identification)라고 불리는 기능이 있다. ( 타 언어의 리플렉션과 좀 비슷한데 기능은 훨씬 떨어짐 ^^;) std::type_info는 타입 정보를 표현하는 클래스이다. type_info 객체는 type...

C++11 - 문자열 리터럴과 wide 문자열 리터럴 결합

January 23, 2017

C99 호환을 위해서 만들어진 기능으로 문자열 리터럴과 wide 문자열 리터럴을 결합하면 wide 문자열로 결합한다. 문자열 리터럴인란 멀티바이트 문자열을 뜻하고, wide 문자열 리터럴은 유니코드 문자열을 뜻한다. C++11 이전에는 문자열 리터럴과 wide 문자열 리터럴 결합에...

C++11 - 블럭 범위를 가진 static 변수 초기화는 스레드 세이프 하다

February 14, 2017

개요 static 변수의 초기화가 완료할 때까지 다른 스레드는 초기화 처리 앞에서 대기한다. class singleton { public: static singleton& get_instance() { static singleton instance; // ...

C++11 - 생성자 상속(inheriting constructors)

January 9, 2017

개요 부모 클래스에서 정의한 생성자들을 자식 클래스에서 그대로 사용할 수 있는 편의 기능이다. 문법 자식 클래스에서 using 키워드를 사용하여 부모 클래스 이름과 부모 클래스의 생성자 이름을 :: 구분으로 호출한다. 자식 클래스는 복수의 부모 클래스를 상속한 경우에도...

C++11 - 예외 지정

March 2, 2017

C ++에서는 함수에 예외 지정이라는 것을 작성할 수 있다. 이것은 C++98에서 부터 있는 기능으로 throw (T1, T2, …)라는 문법으로 함수가 밖으로 던지는 예외를 지정하는 기능이다. // C++98/03 void f() throw( int, double ); ...

C++11 - 인라인 이름 공간(inline namespace)

January 2, 2017

개요 이름 공간 내에 있는 기능을 투과해서 접근할 수 있는 기능이다. 즉 이름 공간(my_namespace) 안에 또 다른 이름 공간(features)을 inline로 선언하고 있으면 features에 정의된 기능을 my_namespace를 통해서 접근 할 수 있다. #incl...

C++11 - 최근접 짝수 반올림 std::nearbyint

January 12, 2017

개요 실수를 정수로 변환할 때 ceil()로 소수점 올림하거나, floor()로 소수점 버림을 한다. nearbyint는 정수로 변환할 실수의 가장 가까운 짝수로 올림 혹은 버림을 한다. 이러한 방식을 “bankers’rounding” 이라고 부른다 문법 cmath ...

C++14 - recursive_(timed_)mutex의 재귀 lock 상한 수

April 7, 2017

C++11 표준 라이브러리의 recursive_mutex, recursive_timed_mutex 클래스는 동일 스레드에서의 재귀 lock 획득 횟수의 상한은 미정의로(unspecified) 되어 있다. 단 상한 회수를 넘는 try_lock 조작은 실패하고, lock 조작은 예외를...

C++14 - shared_(timed_)mutex가 지원하는 Reader 스레드 수

April 10, 2017

C++14 표준 라이브러리의 shared_timed_mutex 클래스는 적어도 10000 스레드 이상의 Reader 스레드에서의 공유 lock(shared lock) 동시 획득을 지원한다. 또 동시 획득 가능한 공유 lock 수 상한을 넘은 경우도 공유 lock을 획득 할 수 있을...

std::codecvt_utf8로 wstring을 utf-8 문자열로 변환 하기

April 4, 2017

std::wstring을 utf-8 문자열로 변환 하는 방법은 아래와 같다. std::wstring wStr = L"우하하"; std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Conv; auto ...

tm 에서 time_t로 UTC로 변환 하는 함수

March 10, 2017

헤더 파일 time.h 혹은 헤더 파일 ctime 에서 time_t와 tm 구조체와의 변환을 하는 함수를 정리했다.   time_t→ tm 구조체 tm 구조체 → time_t 현지 시각 ...

멤버 변수에 대한 포인터를 이용하여 타입의 특성을 판정

April 21, 2017

멤버 변수에 대한 포인터라는 것은 우선, 예로서 단순히 정수를 래핑 한 클래스를 보자 class int_wrapper { public: int data; int_wrapper(int data) : data(data) {} }; 위 코드에서 int_wrapper::da...

클래스 멤버 함수 포인터 배열 사용하기

December 16, 2016

함수 포인터 관련 검색을 하면 C 버전이 많이 나오고, 배열 타입을 사용하는 경우는 별로 없어서 공유한다. (사실 최신 C++에서는 std::function을 사용하면 되기 때문에 이걸 사용하지 않아도 된다) 선언 bool(TEST::*m_pFunc[4])(const int, ...

Cloud (1)

Google Cloud Platform의 15개 서비스를 영구 무료 한도를 제공

March 17, 2017

구글은 2017년 3월 10일 Google Cloud Next 17의 3일째 기조 강연에서 15개 서비스의 영구 무료 쿼터를 발표. 영구 무료 한도 대상 서비스 이름과 월 제한은 다음과 같다(제품에 따라서는 아래 외에도 제한이 있다). Google Cloud Engine(...

Network (2)

NHN Next 게임서버 수업 실습용 채팅서버 소스 코드

April 17, 2017

NHN Next의 2016 ~ 2017년 게임서버 과정 수업에서 실습으로 만드는 채팅 서버 코드이다. Github Windows 플랫폼만 지원(Linux 지원 어렵지 않음) 64 비트 지원 C++ 로 구현 Visual Studio 2017 select 기반.동...

잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback

February 19, 2017

C++ Korea와 함께하는 제3회 마이크로소프트 멜팅팟 세미나 에서 ‘잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback’ 라는 이름으로 했던 내 강연의 자료이다. 슬라이드쉐어 github github에는 문서와 예제 코드도 같이 ...

Node.js (3)

Debugging Node.js Performance Issues in Production

March 25, 2017

아래 강연의 내용의 일부를 정리 Debugging Node.js Performance Issues in Production 느리게 되는 이유 single thread CPU intensive code Slow I/O Event Loop saturation R...

Node 7.6 에서 async/await를 기본으로 지원

March 13, 2017

Node.js 7.6 이 출시 되었다. async/await 지원이 기본적으로 유효하게 되어 낮은 메모리 디바이스에서의 성능이 개선되었다. Node 7.6의 async/await 지원은 Chromium의 JavaScript 엔진인 V8를 버전 5.5로 업데이트한 데 따른 것이다....

네이티브 모듈의 ABI 호환성 문제 대처

April 5, 2017

2017년 3월 13일(미국)에 열렸던 ‘Node.js VM Summit’ 에서 Node의 네이티브 모듈의 ABI 호환성 문제에 대해서 회의를 하였다. 회의 동영상 Node의 네이티브 모듈 문제 Node의 네이티브 모듈은 C/C++로 만들었고 V8과 NAN API(Applicat...

Visual Studio (5)

VS2017 에 포함되어 있는 C++ 컴파일러 버전 매크로

March 20, 2017

VS2017 에 포함되어 있는 C++ 컴파일러의 버전 매크로는 _MSC_VER 1910 참고로 VS 2015는 1900. MSVC 런타임은 2015와 바이너리 호환. 그리고 VS 2017를 설치할 때 옵션 선택에 의해 VS 2015.3의 MSVC도 별도 추가할 수 ...

Visual Studio - cpplint 사용하기

March 28, 2017

cpplint ? cpplint는 python으로 만든 C++ 소스 코드가 Google C++Style Guide를 지키고 있는지 검사하는 툴이다. cpplint 설치 python 2.7에서 pip로 설치한다. Visual Studio에 외부 툴로 cppl...

Visual Studio - 자주 사용하는 단축키

March 30, 2017

문자 검색/치환 Ctrl+F: 문자 검색 Ctrl+H:문자의 치환 직사각형 선택 Alt 키를 누른 상태에서 마우스로 원하는 직사각형 모양의 범위를 만든다. 자동 인덴트(indent) Ctrl+K, Ctrl+D: 파일 전체의 인덴트 조정 Ctrl+K, Ctrl...

Visual Studio - 툴 박스에 코드 보관하기

April 14, 2017

VS의 툴박스에 특정 코드를 보관하고, 이 코드를 선택하여 코딩 시 삽입할 수 있다. 툴박스에 보관하기 바라는 코드를 마우스로 선택 후 툴박스로 드래그 한다. 위에서 드래그한 코드가 툴박스에 들어가 있는 것을 볼 수 있다. 추가한 코드를 마우스 오른쪽 클릭하면 삭제, 수정 ...

Visual Studio 제거하기

March 15, 2017

MS가 만든 Visual Studio Uninstaller를 사용하여 제거하는 것이 좋다. 설치 파일은 아래 링크에서 얻을 수 있다. 다운로드 사용법 다운로드 -> 압축 해제 -> Setup.ForcedUninstall.exe 실행 -> 질문에 Y 답변 콘솔 ...

etc (5)

GitHub Awards

January 31, 2017

개요 Github 계정을 갖고 있다면 “GitHub Awards” 라는 Web 서비스를 사용할 수 있다. 자신의 레포지토리에 붙여진 “스타”의 수를 기준으로 전 세계 GitHub 사용자 중 자신의 “랭킹 순위”를 알 수 있다. http://github-awards.com...

Microsoft MVP가 되었습니다

April 3, 2017

Microsoft MVP 몇 년 전에 2009,2010,2011년 3년 연속으로 Visual C++ 부분 MVP로 선정된 적이 있습니다. 그러나 2012년부터는 MVP 신청을 하지 않았습니다. 이유는 당시에는 MVP 자격 조건이 MS 제품만을 다루고, MS가 운영하는 포럼에 답...

본인이 집필한 C++ 책 리스트

February 2, 2017

본인이 집필한 C++ 책 리스트. 모두 e-Book 이다. eBook 모던 C++ : C++14의 핵심 기능을 중심으로 (한빛미디어) 2015.03.31 eBook 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까...

이 블로그의 rss 피드 주소

December 15, 2016

나처럼 Feedly 서비스를 사용 중이라면 피드 추가에 이 블로그 url을 입력하면 된다. 이 블로그 주소로 rss 리더에 등록 되지 않는다면 아래의 주소를 사용해 보기 바란다. https://jacking75.github.io/feed.xml

티스토리 블로그에서 이사

December 14, 2016

네이버 블로그 -> 티스토리 블로그를 걸쳐서 이번에는 깃허브로 왔다. 티스토리에 있는 블로그 주소는 http://jacking.tistory.com/ 이다.

threading (1)

병렬프로그래밍 - SMP(Symmetrical Multi Processing) 와 AMP(Asymmetrical multi processing)

April 24, 2017

참고 http://monoist.atmarkit.co.jp/mn/articles/0812/18/news123_2.html

모임 (2)

2017년 03월 ‘온라인 서버 제작자 모임’ 정기 세미나

March 26, 2017

한국 MS의 멜팅팟 프로그램 지원을 받고 온라인 서버 제작자 모임 에서 3월 정기 모임을 합니다. 날짜: 3월 30일 (목) 19시 30분 ~ 21시 30분 장소: 토즈 강남점 내용 최흥배: 해외 강연 해설 ‘여기까지 할수 있다! Visual Studio 2015-...

2017년 04월 ‘온라인 서버 제작자 모임’ 정기 세미나

April 20, 2017

한국 MS의 멜팅팟 프로그램 지원을 받고 ‘온라인 서버 제작자 모임’에서 4월 정기 모임을 합니다. 날짜: 4월 26일(수요일) 19시 30분 ~ 21시 30분 장소: 토즈 강남점 내용 Visual Studio 2017 Linux development with C++ (최...

번역 (6)

(일본)임베디드 개발자가에 인기 있는 언어와 OS

February 7, 2017

일본의 ‘fabcross for 엔지니어’ 라는 곳에서 제조업에서 임베디드 관련 프로그래밍을 하는 엔지니어를 대상으로 한 설문 조사에서 업무에서 자주 사용하는 언어는 C (36 %) C++ (32.5 %), Java (23.5 %), Visual Basic (21...

Amazon S3의 대규모 장애는 인위적 실수가 원인

March 6, 2017

미국 Amazon.com의 클라우드 사업 Amazon Web Services(AWS)는 “Amazon Simple Storage Service(S3)”서비스에서 발생한 대규모 장애에 관한 조사 보고를 현지 시간 2017년 3월 2일 공개하면서 인위적 실수가 원인이었음을 밝혔다. ...

Google에서 3DCG를 위한 압축 라이브러리 「Draco」를 GitHub에 공개

February 8, 2017

https://github.com/google/draco Chrome Media팀이 개발한 압축 라이브러리로 ZIP 형식보다 효율적으로 데이터 압축을 실행할 수 있는 오픈 소스이다. 압축한 Mesh 파일의 크기 100MB 일 때 ZIP으로는 30MB 이지만, Draco에서는 10...

여성 게이머가 가장 좋아하는 장르

February 10, 2017

해외 컨설팅 기업 Quantic Foundry는 27만명 이상의 세계 게이머를 대상으로 조사 하여 “여성 게이머들이 좋아하는 게임 장르” 라는 리서치 결과를 보고했다. Quantic Foundry의 보고에 따르면 27만명 이상의 샘플 중 여성 게이머는 18.5% 정도이고, 조사 ...

초보 프로그래머를 위한 9가지 조언

March 8, 2017

항상 하나의 일에 집중한다 나는 새로운 것을 배울 때는 언제든지 할 일을 분해하고 임한다. 프로그래밍을 할 때 작업에 따라서는 복잡하게 구조화하여 생각하는 것이 있을 것이다. 1개의 태스크를 소화하기 위해서도 다양한 방법이 있고 선택하는 것만으로 방황한다. 다만 무엇...

함수의 적절한 길이는? 마틴 파울러씨는 길이보다 의도와 구현 분리 그리고 좋은 함수 이름이 중요하다고 지적

February 22, 2017

FunctionLength 내 경력에서 함수의 길이는 어느 정도여야지? 라는 논란을 자주 들었다. 이것은 더 중요한 물음으로 대체할 수 있다. 그것은 어느 정도 길이의 코드가 되면 그것을 함수로 삼아야 하느냐는 것이다. 몇 가지 가이드 라인에서는 한 화면에 잡히지 않는다면, 이...