하루에 딱 세 가지 해내기

이건 꽤 훌륭해 보인다.

—————————————————————————

내가 가진 것을 포함해 세상에 존재하는 모든 생산성 관련 앱들을 다운로드하더라도 3의 원칙만큼 해야 할 일에 전념하도록 하는 프로그램은 찾을 수 없을 것이다. 원칙은 정말 단순하다.

1. 매일 하루를 시작할 때 그 날이 저무는 시점으로 머릿속의 시간을 빠르게 돌려 자신에게 질문한다. 하루가 다 지나갈 때 성취하고 싶은 세 가지 일이 무엇인가. 그러고는 결정한 내용을 적어둔다.

2. 주간 단위로도 매주 초에 같은 원칙을 적용한다.

이렇게 결정한 세 가지 일이 그날 하루, 또 한 주의 핵심이 된다. 이게 전부다.

마이어에게 왜 하필이면 매일 그리고 매주 목표를 세 가지만 선택하는가를 물었다. 한두 가지일 수도 있고, 혹은 네다섯 가지를 정할 수도 있지 않은가. 그의 답변이 기막혔다. “내 매니저가 한 주 동안 우리 팀이 무엇을 달성했는가를 물을 때 10장짜리 목록을 원하지 않더군요. 가장 괄목할 만한 세 가지 결과를 요구했어요. 그래서 그냥 3의 원칙에 주목하게 됐죠”

이후 마이어는 자신의 팀원들에게 하루 동안 무엇에 주력했는가를 물었을 때, 그 역시 세 가지 이상의 결과물, 즉 가장 의미 있는 세 가지 일 외에 더 많은 것을 듣고 싶어 하지 않는다는 사실을 알게 됐다. “나도 마찬가지예요. 세 가지가 따로 적어두거나 확인할 필요 없이 유념하기에 매우 쉽더군요. 세 가지 결과물 정도는 길 가다가도 줄줄 말할 수 있어요. 그때그때 우선순위를 매기고 일을 순조롭게 진행하는 데 이 방법이 결정적인 효과를 냈죠.”

세 가지는 아무렇게나 집어 든 숫자로 보일 수도 있지만 수행하고자 하는 중대한 업무를 포괄할 만큼 충분히 많으면서, 중요한 사안에 생각을 집중할 수 있을 만큼 충분히 적은 수다. 세 가지는 일을 보다 슬기롭게 해내는 데도 도움이 된다. 성취하고자 하는 일을 결정함으로써 결과적으로 하지 않을 일을 결정하게 되기 때문이다. 또 3의 법칙은 얼마나 많은 일을 해치우는가를 강조하는 것이 아니라 원하는 목표를 달성하는가에 중점을 두기 때문에 생산성의 원리와도 훌륭하게 접목돼 있다.

3의 원칙이 실행활에 제대로 통하는 이유는 또 있다. 제아무리 최선의 주의를 기울인다고 해도 비상 상황이 닥치게 마련이고, 더욱 다급히 처리해야 할 일이 밀려들면 비명이 터져 나올 수 밖에 없다. 세 가지 목표를 설정하는 것은 이런 와중에 등대가 되어줄 것이다. 처리하고 싶었던 10장짜리 업무 목록과 씨름하다 결국 아무것도 해내지 못한 채 좌절감에 빠지는 상황과 정면으로 대조된다.

앞으로 중요성이 떨어지는 일을 피하고 영향력이 낮은 업무를 줄이는 한편, 주위 잡음을 최소화할 수 있는 방법을 깊이 다루겠지만, 먼저 하루, 그리고 한 주 동안 집중할 일을 세 가지로 압축하면, 모든 일이 엉망이 되는 상황에서도 집중력을 유지할 수 있고, 오히려 더 많은 것을 성취할 수 있을 것이다. 그런 의미에서 마이어의 말은 매우 적절하다.

“단순함으로 인해 복잡함을 보다 쉽게 다루고 쇄신하고 전개할 수 있다.”

<그들이 어떻게 해내는지 나는 안다> 크리스 베일리 지음, RHK, p.55-61

[Eclipse] Source code Navigation 단축키

Eclipse는 내부적으로 Indexer가 돌아서 이를 이용해 찾고 싶은 File, Funtion decalaration/definition, symbol 등을 찾을 수 있다. 내가 자주 쓰는 단축키는 다음과 같다.

  • F3: Funtion declaratiin/definition. 함수 선언이나, 함수 정의로 이동하고 싶을 때 사용한다.
  • Alt + ‘<-‘: 이전 코드. 이전에 보던 부분으로 돌아갈 때 사용한다.
  • Ctrl + Shift + ‘R’: File name 찾아서 열기. 파일 이름을 알 때, 혹은 앞 몇글자만 기억날 때, 찾아서 연다.
  • Ctrl + Shift + ‘G’: Workspace에서 Reference 찾기. 함수 호출되는 부분을 찾고 싶을 때 사용한다.
  • Ctrl + ‘H’: Search. 주로 File Search를 이용한다. Scope을 셋팅해서 쓰는 것도 좋다.
  • Ctrl + Alt + ‘G’: Workspace에서 Text 찾기. Ctrl + ‘H’ 대신 사용하기도 한다.
  • Ctrl + ‘O’: Quick Outline. 주로 함수를 찾아 이동할 때 사용한다.

워드프레스로 블로그 이전

티스토리에서 워드프레스로 블로그를 이전했다. 태터툴즈, 텍스트큐브를 거쳐 티스토리까지 참 애용했었지만, 여러 이유 중 역시 가장 큰 이유는, 백업 기능을 없앤 것이다. 설치형 블로그를 쓰는 이들을 이해하지 못하는 처사가 아닐 수 없다. 안타까운 일이다.

도메인을 그대로 쓸까 고민하다, 새로 만들어서 일단 이전하는 것으로 결정. 마지막 백업 시점 이후로 썼던 글들도 있어, 이 역시 옮겨 왔다. 자세한 이전 절차는 따로 포스팅하겠다.

쓰고 싶은 게 많았지만 이전하고 쓰려고 놔뒀었는데 과연 내가 잊지 않고 쓰게 될지? 새 집은 내가 책임져야 해서 약간 불안한 감도 있다. 밤톨이가 코드만 뽑으면 접속 불가 ㅋ

블로그 주소는 blog.dasomoli.org에서 wp.dasomoli.org로 됐다. 이전 주소로 접속하면 이리로 넘어온다. 위키 같은 다른 서비스도 돌릴까 해서 Apache2의 VirtualHost 기능을 이용했다. 이것 역시 따로.

라즈베리 파이3 얘기도 쓰고 싶은게 많다.

재밌다.

HTML 자동 이동 – meta refresh

<html>

<head>

<meta http-equiv=”refresh” content=”0; url=./index.php”>

</head>

<body onload=”javascript:window.location=’./index.php'”>

Please follow <a href=”index.php”>this link</a>

</body>

</html>

참고: https://en.m.wikipedia.org/wiki/Meta_refresh

git worktree

git worktree add <path> <branch>

하나의 git repository로 체크 아웃을 한군데 하는게 아니라 여러군데에 하고 싶을 때 쓴다. 브랜치를 아예 물리적으로 다른 경로로 나누어서 작업하고 싶을 때라던지 용도는 매우 다양하다.

curl 사용법

curl 잘쓰면 엄청 편하다.
* HTTP 전송 과정에 대한 상세 정보. curl이 하는 모든 일을 debugdump.txt에 저장한다.
curl –trace-ascii debugdump.txt http://blog.dasomoli.org/
* 일반적인 http 요청(GET method)
curl http://blog.dasomoli.org/
* HTTP authentication
curl -u <id>:<password> http://blog.dasomoli.org/
* POST method 요청
curl -X POST -d”<data>” http://blog.dasomoli.org:80/post/
다음과 같은 form이 있다면,
<form method=”POST” action=”dasomoli.cgi”>
<input type=text name=”id”>
<input type=submit name=press value=” OK “>
</form>
다음과 같이 전송 가능((hidden type도 그냥 쓰면 됨)
curl –data “id=dasomoli&press=%20OK%20”  http://blog.dasomoli.org/dasomoli.cgi
–data-urlencode를 쓰면 %20같이 쓰지 않고, 아래처럼도 가능하다고 한다.
curl –data-urlencode “name=JeongSeok Yang” http://blog.dasomoli.org/dasomoli.cgi
* POST로 파일 보내기
curl -X POST -d@<filename> http://blog.dasomoli.org/post/
* PUT method
curl –upload-file uploadfile http://blog.dasomoli.org/receiveput.cgi
* JSON 전송
curl -X POST http://blog.dasomoli.org/json/ -d@dasomoli.json -H “Content-Type: application/json”
* 쿠키 쓰기
curl -b cookie.txt -c cookie.txt http://blog.dasomoli.org/

 

 

[Security] TLS-PSK

일단 기본 개념부터.

PSK는 Pre-Shared Key의 줄임말로, 보안이 필요한 통신을 하는 양자 간에 미리 공유된 symmetric 키를 말한다.

TLS는 Transport Layer Security의 줄임말로, SSL이 표준화되면서 쓰이는 이름이다.

TLS-PSK는 PSK를 이용해서 TLS연결을 맺는 것으로 RFC 4279에 문서화되어 있다.

RFC 4279의 내용을 살펴보자.

      Client                                               Server
      ------                                               ------

      ClientHello                  -------->
                                                      ServerHello
                                                    (Certificate)
                                               ServerKeyExchange*
                                             (CertificateRequest)
                                   <--------      ServerHelloDone
      (Certificate)
      ClientKeyExchange
      (CertificateVerify)
      ChangeCipherSpec
      Finished                     -------->
                                                 ChangeCipherSpec
                                   <--------             Finished
      Application Data             <------->     Application Data

위 그림이 TLS handshake과정을 나타낸다.

1. 클라이언트는 ClientHello 메시지에 TLS Version과 하나 이상의 cipher-suite을 실어 보낸다.

2. 서버는 ServerHello 메시지에 사용할 TLS Version과 사용할 cipher-suite를 실어 보낸다. ServerKeyExchange 메시지로 클라이언트가 어떤 PSK를 사용할 지, PSK identity hint를 함께 보낸다. ServerHelloDone도 보낸다.

3. 클라이언트는 ServerKeyExchange에 포함된 PSK identity hint로 사용할 PSK를 고른다. 고른 PSK의 PSK identity를 ClientKeyExchange 메시지에 실어 보낸다. Premaster secret은 PSK가 N octets라면, uint16 타입의 N, N개의 0 octets, 두번째 uint16타입의 N, 그리고 PSK N octets.

OpenSSL에서는 Client 쪽에서는 PSK callback을 SSL_CTX_set_psk_client_callback()이나 SSL_set_psk_client_callback()을 통해 설정하도록 되어있는데, 이 callback을 Server로부터 받은 PSK Identity Hint를 읽어 valid한지를 check하고, 해당 hint에 맞는 PSK를 psk에, PSK identity를 identity argument에 채워주는 역할을 한다. callback은 psk의 length를 return해야 한다. 0이나 그 이하는 error를 나타낸다.

Server쪽에서는 SSL_CTX_use_psk_identity_hint()나 SSL_use_psk_identity_hint()를 통해서 사용할 PSK Identity Hint를 Setting하고, SSL_CTX_set_psk_server_callback()나 SSL_set_psk_server_callback()을 통해 callback을 셋팅한다. 이 callback은 PSK identity가 valid한지를 체크하고, PSK identity가 있다면, pre-shared key를 psk argument에 채우고, PSK의 길이를 return한다.

 

* 참고

RFC 4279 – PSK Ciphersuites for TLS(https://tools.ietf.org/html/rfc4279)

TLS: https://en.wikipedia.org/wiki/Transport_Layer_Security, https://namu.wiki/w/TLS

TLS-PSK: https://en.wikipedia.org/wiki/TLS-PSK

OpenSSL

SSL_CTX_set_psk_client_callback: https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_set_psk_client_callback.html

SSL_CTX_use_psk_identity_hint: https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_use_psk_identity_hint.html

[git] origin/HEAD 를 바꾸고 싶을 때?

clone 해온 remote 브랜치의 HEAD를 변경하고 싶을 때,
예를 들면, remote 브랜치 일부만 남기고 싶을 때, HEAD가 지울 브랜치를 가리킬 경우,
다음과 같이 하여 remote의 HEAD(즉, origin/HEAD)를 바꿀 수 있다.
git remote set-head origin <remote branch name>