나쁜 건 당연한게 아니다

The world will not be destroyed by those who do evil but by those who watch and do nothing. 세상은 악당들 때문에 망하는 게 아니라, 악한을 보고도 아무것도 하지 않는 자들 때문에 망한다. – Albert Einstein 이 말을 선거철에 쓰면 투표를 독려하는 것이고, 경찰서 앞에 붙어있으면 투철한 신고정신을 고취시키는 것이다. 책상 앞에 붙인다면 어떻게 될까. 나쁜 습관이나 언행, 과오를 그냥 보고 넘기면 내가 망한다. The life will not be destroyed by wrong things I did but by me who watch and do nothing afterward.

Gitlab merge request 옵션 기본으로 두기

Gitlab Community 에서 필요로 하는 기능인데, 이렇게 수동으로 할 수 있어서 간단히 남긴다. Gitlab 에 있는 merge request 에 보면 다음 옵션이 있는데, 전부 체크가 해제되어 있다. Merge Request 에 성공한 Source Branch 를 삭제 Merge Request 할 때 Commit 을 하나로 뭉쳐서 Merge (=Squash Merge) 이 체크박스를 개발자가 일일해 해 줘야 하는 문제가 있다. 그래서 어떤 개발자는 체크하는 것을 까먹었다가 master branch 의 commit tree 를 엉망으로 만들기도 한다.

무더운 낮과 밤

무더위가 찾아온 일상, 낮과 밤의 하늘은 여전히 아름답다.

고요한 마음에 조약돌 하나

고요한 호숫가에 조약돌을 던지면, 주위에서 파장이 일어나지만 이내 움직이지 않는 수심 속으로 들어간다. 작은 물웅덩이에 조약돌을 던지면, 존재를 잃어버릴 만큼 가지고 있던 흙탕물을 사방으로 튀겨낸다. 물웅덩이의 입장에서는 날아오는 돌의 의미를 알 수 없다. 자신의 존재가 부정당하기 직전인데 그럴 여유가 없을 것이다. 하지만 호수는 여유가 있다. 일단 의미를 파악하는데 약간의 시간이 걸리긴 하겠지만, 어느샌가 돌을 받아주고는 깊숙한 어딘가에 넣어둔다. 자신에게 잔소리하지 않았으면 하는 태도로 일관하는 사람이 있다. 필요한 커뮤니케이션도 잔소리로 받아서 문제다.

설명할 수 없으면, 아는 것이 아니다

다른 사람을 지적하기 위한 것이 아니라 그저 내가 답답해서 페북에도 두번이나 올렸던 건데, 아인슈타인이 이미 한 말이었다. 역시 범인인 내가 생각한건 누군가가 이미 생각한 것이리라. 쉽게 설명할 수 없으면, 아는 것이 아니다. (바리에이션으로는, 6살 꼬마에게 설명할 수 없으면 아는 것이 아니라고도 한다.) 이건 뭐죠? 라고 물어봤을 때 금방 생각나지 않으면서 ‘아, 이거 몇년 전에는 알았는데’ 라고 탄식하게 되는 상황을 종종 마주한다. 그러면 쿨하게 대답하는 것 말고는 다른 방도가 없다. **‘모릅니다’ 라고.

돌이킬 수 없는 약속

이 책은, 접근부터 굉장히 쉬웠다. 리디북스에서 무료 대여 기간이 있었고, 동시에 많은 북 큐레이션 페이지에서 이 줄거리를 카드 뉴스나 동영상으로 홍보했기 때문이다. 그리고 줄거리가 충분히 구미가 당길 만한 내용이었다. 과거를 버리고 평범한 삶을 살아가는 남자에게 들이닥친 불행한 과거로부터의 편지 한 통. 악한을 죽여달라는 그 때의 약속을 반드시 지켜달라는 내용이란다. 이 남자의 과거는? 편지의 발신인은? 궁금한 나머지 빠르게 읽어내려갔다. 줄거리 도입부는 주인공의 평범한 일상을 소개한다. 레스토랑과 바를 겸하는 식당의 공동 창업자이자 바텐더로, 사랑하는 아내와 초등학교를 다니는 귀여운 딸을 둔 가장으로.

중독적 습관

요즘 말하는 욜로(YOLO) 에 가까운 삶을 사는 친구가 있다. 일단 불안한 계약직인데다 계약 텀도 굉장히 짧은 직종에 근무한다. 그런데도 잘 놀러 다닌다. 너무나도. 그러면서 늘 걱정을 늘어놓는다. 좋은 남자 만나 결혼해야지, 정규직도 되면 좋겠지, 계속 놀러 다니고는 싶지… 이런, 쓰고 보니 이 친구는 욜로가 아니다. 내일 살 걱정을 하기는 하니까. 아무튼, 이 친구의 문제는 뭘까, 혹시 쾌락의 끝자락에서 내려오기 싫은 발버둥을 치는 것은 아닐까, 아니면 더 큰 것을 좆을 수 없는 공허함을 느낀 걸까.

암보스 (ambos)

두 여자가 서로 다른 방향을 보고 있지만, 그 얼굴 안에서는 마주보기도 하는 듯, 흑심을 품고 있는 듯한 이미지가 프랙탈처럼 나타나 있는 기괴한 표지에 담긴 내용은 대체 어떤 사연일까? 출판사 ‘황금가지'에서 만든 새로운 라인업 ‘수상한 서재’ 시리즈의 첫 작품인 김수안 작가의 암보스를 읽어봤다. 시간이 없어 서울-대구를 오가는 KTX 안에서 읽었는데, 다소 두꺼운 외형과는 달리 꽤나 빨리 따라갈 수 있었다. 암보스 (ambos) 는 스페인어로 ‘양쪽, 두 사람’ 이란 뜻이다. 두 여자가 주인공인 것을 표현하고자 했겠으나, 실제로 스페인어는 남성형/여성형 명사가 따로 존재한다.

Atomic Operation 으로 하는 동시성 제어

Test-And-Set (TAS) TAS 를 이용해서 간단한 동시성 제어를 할 수 있다. testAndSet 이라는 function 을 가지고 아래의 do...while 문을 쓰레드 A, B 에서 동시에 호출한다고 해 보자. 이 때 lock 은 같은 변수이다. 우선 TestAndSet() 은 다음과 같은 일을 한다. 말 그대로 ‘지금 값이 무엇인지 검사하고, 값을 바꾼다’ 는 것이다. lock의 현재 값을 저장해 둔다. lock의 값을 true 로 설정한다. 저장한 lock 의 값을 반환한다. 그럼 이걸로 어떻게 아래 block 의 critical section 에 대한 동시성 제어를 할 수 있을까?

Timsort

학부에서 알고리즘 수업을 들으면, 가장 빠른 정렬 알고리즘이 뭐냐는 질문에 쉽게 Quicksort 라고 답할 수 있겠다. 실제로 현업에서도 적용하기 가장 편하기 때문에 많이 차용되는 편이다. 그런데 모든 문제를 쉽게 풀 수 있는 은탄은 세상에 존재하지 않듯, Quicksort 역시 특정 케이스에서는 성능이 낮게 나오는 경우가 있다. 더 심각한(?) 것은, 이 특정 케이스가 현실에서는 꽤나 자주 발생한다는 것이다. 그 케이스란 바로 ‘거의 정렬된 데이터’ 이다. 거의 정렬된 데이터라면 pivoting – partitioning 을 반복할 필요도 없이 Bubble Sort 나, 심지어는 Insertion Sort 를 해도 된다.