javascript ES6 정리

해당 글은 http://es6-features.org/#ExpressionBodies 에서 제가 자주사용하는것들을 정리한거입니다. Arrow 기존은 위와 같이 function을 정의 해야하지만 이제는 C#의 람다와 비슷하게 다음과 같이 정의할수 있습니다. 덕분에 foreach나 reduce함수를 다음과 같이 선언할수 있게 되었습니다. Extended Parameter Handling 다른언어에서는 매우 매우 정상이여야할 default인자가 들어갔으며 Spread Operator이라는 문법이 추가되어 가변인자를 손쉽게 받을수 있게 되었습니다. 확인해본결과 해당 하나하나 꺼내야하는 C언어와 달리 …a는 소개 더보기 javascript ES6 정리[…]

C# DUMP 분석하기

보통 컴퓨터로 덤프를 남긴다고 하면 바로 디버깅용을 위해 만든다고 합니다. C++일 경우에는 pdb흔히 말하는 심볼파일과 소스코드만 있으면 되는 반면 C#으로 덤프로 분석을하는 경우는 생각지도 못하는게 필요합니다. 이는 C#의 닷넷 라이브러리가 필요하게됩니다. 일단 설명보다 직접 해보면서 진행해보겠습니다. VC++을 C# console마법사로 프로젝트를 만든다음에 다음과 같은 코드를 쳐주시고 실행시켜주시기 바랍니다. 위 코드는 출력하고 입력을 받는 하나의 프로그램입니다. 일단 소개 더보기 C# DUMP 분석하기[…]

Visual Leak Detector을 이용한 메모리 누수 탐지법

C++을 하다보면 어쩔수 없이 생기는 것이 메모리누수입니다. 물론 최근에는 스마트포인터같은게 있다고 하지만 아직도 어쩔수없이 동적할당을 스마트포인터를 통해서 할당을 하지않습니다. 그러다보니 메모리누수는 당연시 여깁니다. 이를 방지하기 위해 C++ msdn에서도 메모리누수를 확인하는법에 관해 적혀있습니다. 하지만 이와 별개로 좀더 자세히 알고싶을때가 있습니다. 그래서 여러 메모리누수탐지 라이브러리가 있는데 대표적으로 Visual Leak Detector입니다. 해당 라이브러리는 사용법은 vld라는 헤더파일만 입력만 해주면됩니다. 소개 더보기 Visual Leak Detector을 이용한 메모리 누수 탐지법[…]

HTTPS 우회법 두가지 원리

정부가 SNI를 보고 HTTPS을 차단하는데 이를 막는 방법은 총 두가지가 존재합니다. 하나는 길길님이 ISP에서 첫번째 패킷만을 조사한다는 점을 이용하여 패킷을 둘로 나누어 버려 조사를 피하는 법입니다. 이 게 무슨말이냐면 client hello을 패킷안에는 SNI가 있어 이를 두개로 나누어 버리게되면 ISP(인터넷 제공자)에는 이를 탐자를 못하게됩니다. 코드를 짤수 있게지만 집안에 라우터의 기능을 이용해도 됩니다. 인터넷은 여러 라우터들을 거치게됩니다. 소개 더보기 HTTPS 우회법 두가지 원리[…]

condition_variable 조건변수 주의점

C++의 condition_variable을 보게되면 아래의 코드가 나오는데 매번 cv.wait가  신경이 쓰였다. 일단 아래의 코드를 보자 논리적으로 보면 cv.wait의 두번째 인자가 있는이유가 딱히 없다는걸 알수있다. 헌데 왜 이코드가 들어갈까 이는 해당문서를 자세히 보면 알수있다. 위에 잘보면 이는 spurious wekeup라는 문서가 있을것이다.  이게 위키피디아에도 있는데 해당 문서를 잘보면 모든 OS에서 발생한다고 한다. https://en.wikipedia.org/wiki/Spurious_wakeup  깨우지않았는에도 불구하고 스스로 깨어지는 문제라는 것이다. 소개 더보기 condition_variable 조건변수 주의점[…]

Redis 코드 삽질기(1)

이글은 redis 코드에 기여하기위해 간단한 리뷰이다.  시작시 initServer함수에서 코드의 일부분이다. 잘보면 ServerCron을 1초마다 실행시킨다.  해당 함수를 잘보면 서버가 동시접속과 리플리케이션 함수를 볼 수있게 구현이 된걸 볼수있다. ServerLog라는 함수가 있다. 이 함수는 redis의 자체적인 로그함수로 각각의 레벨이 존재한다.  이를 LL_NOTICE로 바꾸고 실행시켜보면 아래와 같이 출력된다. 참고로 listLength함수는 양방향 리스트 구조체의 길이를 구하는 매크로 함수인걸 확인할수있다. List 소개 더보기 Redis 코드 삽질기(1)[…]

알고리즘 배낭문제

가장 흔한 문제인 배낭문제는 다양한 문제 풀이법이 있습니다. 먼저 가장 쉽게 재귀로 풀어보겠습니다. 재귀는 내가 이재품을 살때와 안살때를 재귀함수로 구현해주면됩니다. 일단 간단하게 배낭크기를 10으로 잡고 5개의 물건이 있다고 보면됩니다. 간단한 코드는 위와같다. 하지만 위의 코드는 계산했음에도 불구하고 계산할려는 특징이 있어 메모리로 계산을 했는지 안했는지 추가해야합니다. 이를 가지치기라고 하는데 다음에 설명하고 메모리DP를 풀겠습니다. dp로 답을 구하는법은 소개 더보기 알고리즘 배낭문제[…]

스레드로 인한 메모리 시각화

스레드의 메모리영역의 읽기 쓰기 수정 같은 작업을 시각화 해주는 온라인 서비스를 발견하였습니다. 사이트는 http://svr-pes20-cppmem.cl.cam.ac.uk/cppmem/ 해당 프로그램은 모든 교차 실행을 판단하고 각 스레드를 시각해주는 역할을 합니다. 메모리 모델에 대해서는 다음의 링크를 참조해주시기 바랍니다. 해당툴로 스레드를 정의할려면 삼중 중괄호를 해주고 그안의 작업에 대해 정의를 할려면 괄호를 해주면됩니다. 일단 간단하게 두개의 스레드를 만들고 data race를 유발 시켜봅겠습니다. 다음은 아래의 소개 더보기 스레드로 인한 메모리 시각화[…]