Category Archives: Uncategorized

Rounding Half to Even

반올림을 할 때의 문제는 0.5 입니다. 0.5를 제외하고는 절반은 작은 수, 절반은 큰수로 가죠. 예를들어 round(0.3)=0 이고 round(0.6)=1입니다. [0, 1] 사이의 수에 반올림을 하면 소수점 이하가 0.5인 경우를 제외하고는 round()를 하고나면 절반은 0, 절반은 1이되어 기대값이 0.5가 됩니다. 문제는 0.5인데, 통상 우리가 아는 반올림은 round(0.5)=1입니다. 이 방법을 Round Half Up이라고 합니다. 이 방법의 문제점은 대칭적이지 […]

모든 문제를 내가 해결할 필요는 없다

프로그래머는 버그가 발생하면 그 원인을 찾고 해결하는데 익숙합니다. 무언가 잘 동작되지 않으면 원인을 찾는데 그치지 않고 문제를 직접해결하게 되기도합니다. 그런데 회사에서 일을 할 때는 모든 문제를 꼭 내가 해결할 필요가 없다는 말을 적고 싶습니다. 해당 컴포넌트를 담당하는 사람이 있다면 그 사람에게 버그 리포팅을 할 수도 있을 것이고, 뭐가 잘못된건지조차 알 수 없다면 담당자에게 문의를 할 […]

AMP (Accelerated Mobile Pages)

https://www.ampproject.org/ 성능을 우선한 설계와 캐싱으로 모바일 페이지 로딩 속도를 향상시키는 open source initiative. 이를 사용중인 회사에는 Google, LinkedIn, Twitter등이 있습니다.

TeraSort on Hadoop

아파치 하둡에서 예~전에 했던 테라소트에 대한 페이퍼가 TeraByte Sort on Apache Hadoop에 있습니다. 입력 데이터가 상당히 흥미로운데 대회 홈페이지의 입력 데이터 FAQ를 보면 JouleSort의 경우 key가 10바이트이고 key의 각 자리는 95개의 value에 대응된다고 합니다. 따라서 key가 같다고 value가 같지는 않지만 key 순으로 정렬하면 value도 정렬됩니다. 그래서 http://www.slideshare.net/mobile/tungld/terasort에 있는 것처럼 키값을 여러개의 범위로 나누고 각 범위를 reducer에 […]

Rvalue reference와 함수의 반환값

C++에서 const Klass&반환값 형태의 단점들을 쓴지도 시간이 많이 지났네요. C++11에서는 많은 것이 바뀌었습니다. 대표적인 것이 rvalue reference로 대표되는 Move semantics입니다. Move는 RVO(return value optimization)가 동작할 수 없을 때 객체의 복사비용을 줄이는 목적으로 사용됩니다. Move는 객체를 “복사”하는 대신 객체가 내부에 가진 포인터만 가져옵니다. 그런이유로 속도가 매우 빠릅니다. 이 글에서는 rvalue reference와 관련해 함수의 리턴 타입과 적절한 […]

if else 대신 빠른 return의 코딩 스타일

회사에서 코드 리뷰를 하다가 알게된 if-else 대신 빨리 return하는 코딩 스타일인데 접해보지 않은 분들도 계실것같아 올려봅니다. stack overflow에도 Programming style: should you return early if a guard condition is not satisfied?란 제목으로 글이 올라와 있기도 하고 effective go에도 간단히 언급되어 있는 스타일입니다. stackoverflow에 있는 질문을 옮겨보자면 다음 두가지 코딩 스타일 중 어느것이 나은가라는 것입니다. 1. […]

Sorting two arrays at once in Python

If two arrays should be sorted with the same criteria, use zip.

Linux Kernel 3.9 에서의 SO_REUSEPORT

http://freeprogrammersblog.vhex.net/post/linux-39-introdued-new-way-of-writing-socket-servers/2 https://lwn.net/Articles/542629/ SO_REUSE_PORT를 사용해서 소켓을 만드는 프로세스를 여러개 띄우면 부모 process 역할은 커널이 알아서 한다. 이 때 어떤 child process가 요청을 처리할지도 공평하게 분배해서 workload의 분산이 잘 이루어짐. 이 방식이 정말 사용하기 쉬운게, 자식 프로세스는 필요하면 그냥 더 띄우기만 하면 되기 때문. 더구나 이건 pre-fork model이므로 접속이 있을때마다 자식 process를 띄우는 것에 비해 프로세스의 수나 […]

HTTPS상의 압축에 따른 취약점 공격: CRIME과 BREACH

제가 SSL/TLS는 잘 몰라서 틀린점이 있을 수 있습니다. 그리고 편의를 위해 개략적으로만 설명합니다. CRIME의 기본 아이디어는 다음과 같습니다.. (편의를 위해 공격자: attacker, 악의적인 사이트: evil.com, 피해자: victim, 공격대상 사이트: target.com 의 용어를 사용) TLS상에 주고받는 데이터를 해독할 수는 없지만 주고받는 데이터의 크기는 알 수 있다고 가정. attacker가 사용자가 대상 사이트에 전송하는 데이터에 임의의 값을 삽입할 […]

더 빠른 모바일 사이트를 위한 구글의 가이드라인

https://developers.google.com/speed/docs/insights/mobile DNS Lookup, TCP Connection, HTTP Request/Response에 600ms 가 소요되므로 1초안에 페이지를 로딩하려면 400ms안에 (서버/클라이언트) 렌더링이 끝나야함. 특히 다음에 유의: 1) 서버측 렌더링은 200ms 안에 종료할 것. 2) 리다이렉트는 최소화할 것 3) TCP Slowstart로 인해 congestion window가 커지기 전까지 총 10개의 TCP Packet(14KB)를 주고 받으므로 이 안에 ATF(above the fold)의 렌더링을 끝낼 것. 4) ATF에서 […]