토요일, 7월 31, 2021

[B급 프로그래머] 7월 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: Machine Learning will suffer via @towernter)
  1. 빅데이터/인공지능
  2. 읽을거리
보너스: Thinking Sparse and Dense
EOB

토요일, 7월 24, 2021

[B급 프로그래머] 7월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 프로그래밍 via @flaviocopes)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스 보너스: 주니어 개발자와 시니어 개발자의 차이는 무엇일까요 via @if1live
    EOB

수요일, 7월 21, 2021

[독서광] 하드씽

이번 주는 a16z 공동 창립자인 벤 호로위츠가 회사를 만들고 운영하면서 악전고투하면서 얻은 경험을 정리한 책인 하드씽 - 경영의 난제를 푸는 최선의 한 수을 소개드린다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 이 책을 소개하는 이유
  • 02:55 이 책의 목차
  • 03:44 이 책이 흥미로운 이유
  • 09:59 대상 독자
  • 10:44 결론과 마무리
EOB

토요일, 7월 17, 2021

[B급 프로그래머] 도커와 k8s 디버거

도커와 k8s 강의를 하면서, 개발자들이 가장 어려워하는 부분이 네트워크 동작 원리와 디버깅이라는 사실을 알게 되었다. 가상 머신인 경우에는 SSH로 접속해서 뭔가를 확인할 수 있는데, 컨테이너인 경우에는 격리된 프로세스 형태로 동작하다보니 들어가고 뭐고 할 수가 없다. 물론 bash와 디버깅(!) 용 유틸리티를 컨테이너 이미지 내부에 포함시켜 놓았으면 아쉬운데로 docker exec를 사용해 상태를 파악할 수 있지만 보안을 강화하고 컨테이너 크기를 줄일 목적으로 다이어트를 하기에 항상 이를 기대하기는 어렵다.

그래서 도커 디버거를 찾아봤는데... docker-debugKubectl-debug를 발견했다.

그 중에서도 도커 디버거를 잠깐 소개하자면, 동작 중인 도커 컨테이너에 대한 문제를 해결하기 위한 도구로서 디버깅 목적으로 새로운 컨테이너를 구동한다. 새로운 컨테이너는 목표 컨테이너의 pid, network, user, filesystem, ipc 네임스페이스에 접근하므로 양산 이미지를 건들이지 않고서도 디버깅이 가능하다는 좋은 특성이 있다. 설치는 다음처럼 무척 간단하다:

$ curl -Lo docker-debug \
https://github.com/zeromake/docker-debug/releases/download/0.7.3/docker-debug-linux-amd64
$ chmod +x ./docker-debug
$ sudo mv docker-debug /usr/local/bin/

실행도 무척 쉽다. 예를 들어 hello-dock 컨테이너를 디버깅 모드(응?)로 시작하려면 다음과 같이 하면 된다:

$ docker-debug hello-dock bash -l

그리고 나서 셸 프롬프트가 뜨면, 컨테이너 상에서 top, ps -ef, netstat -nplt와 같은 명령을 내릴 수 있다. 이 정도로 성이 안 찬다면... 다음 사례를 보면 놀랄 것이다:

$ docker-debug --image frapsoft/htop hello-dock htop

htop으로 컨테이너에서 사용 중인 각종 프로세스 상태를 모니터링 할 수 있다!

아무쪼록 도커 디버깅에 도움이 되길...

EOB

수요일, 7월 14, 2021

[독서광] 신호와 소음

이번 주는 빅데이터와 머신러닝/딥러닝 분석가/개발자를 위한 멋진 책인 신호와 소음 - 불확실성 시대, 미래를 포착하는 예측의 비밀을 소개드린다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 이 책을 소개하는 이유
  • 03:54 이 책의 목차
  • 05:16 이 책이 흥미로운 이유:
  • 11:57 대상 독자
  • 14:36 결론과 마무리
EOB

토요일, 7월 10, 2021

[B급 프로그래머] 7월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 내일 날짜를 구하는 함수 ㅋㅋ via @baejiun)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: UI is the bottle. UX is not having to think about the bottle. via @heyblake
EOB

목요일, 7월 08, 2021

[독서광] 레거시 코드 활용 전략

이번 주는 현업 개발자들의 필독서 중 하나인 레거시 코드 활용 전략(재출간판)을 소개드린다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 이 책을 소개하는 이유
  • 05:14 이 책의 목차
  • 07:24 이 책이 흥미로운 이유:
  • 11:29 대상 독자
  • 12:31 결론과 마무리
EOB

토요일, 7월 03, 2021

[B급 프로그래머] xneko를 파이게임으로 이식하면서... (결론: 수학의 중요성)

옛날 옛적에 매킨토시나 X윈도우를 사용하신 분들이라면 스크린세이버 중에서 네코를 기억하시는 분들이 많으실 것이다. 쥐나 새 모양의 커서를 귀여운 고양이 네코가 쫓아다니는 모습은 아직도 기억난다. 맥OS 7이 동작하던 매킨토시 IIci와 SunOS/솔라리스가 돌아가던 스팍스테이션 1도 갑자기 보고 싶어진다. 프로그램 실력이 점점 녹슬고 있어서 X 윈도우에서 동작하던 xneko를 파이썬으로 간단하게 이식해봤다. 파이게임을 사용하면 이미지를 서피스 형태로 만들어 비트블릿을 사용해 화면에 표시하거나 스프라이트(응?) 형태의 구현도 가능하며, 이벤트 처리도 손쉽기 때문에 고양이가 쥐를 쫓아가는 비즈니스(?) 로직만 잘 생각하면 어렵지 않게 구현할 수 있다.

X윈도우용 네코 코드인 BSD용 xneko을 참고해서 쥐를 추적하는 알고리즘을 구현했고, 원래 X윈도우용 네코는 XBM 형식의 이미지를 사용했기에 파이썬 파이게임에 맞는 PNG 형식의 애셋을 txneko에서 가져왔다.

고양이가 쥐를 추격하기 위해 피타고라스의 정리와 삼각함수를 떠올려야 했는데, 수십 년이 지나도 달달 외워 놓은 암기 학습의 위력(?) 덕분에 바로 이해가 가더라. 결론이 조금 이상하긴 하지만... 모두 수학 공부 열심히 하시길... ;) 참고로 고양이와 쥐 사이의 거리에 따라 이동해야 하는 변위를 구했다고 가정하면, 방향을 결정하는 핵심 알고리즘은 다음과 같다:

# 변위를 사용해 방향을 결정한다
X = dx
# 위로 올라가면 변위가 마이너스가 되므로(좌표계: (0,0)에서 (400, 300)) -1을 곱해서 부호를 바꾼다
Y = -1 * dy
# 삼각형 빗변 구하기(여기서도 피타고라스의 정리)
length = math.sqrt(X * X + Y * Y)
# 사인 정의에 따라 sin θ = 삼각형의 높이/삼각형 빗변 길이
sin_theta = Y / length

# 여기서 사용 중인 두 가지 상수: 각도 계산용
#  - sin_pi_per8_times3 = sin(π/8 * 3)
#  - sin_pi_per8 = sin(π/8)

if dx > 0: # 우측으로 움직이는 경우(X 변위가 +)
    # sin(π/8 * 3)보다 크면 위 방향으로 거의 수직
    if sin_theta > self.sin_pi_per8_times3:
        self.state = 'U'
    # sin(π/8)보다 크고 sin(π/8 * 3)보다 작으면 오른쪽 위로 이동
    elif sin_theta <= self.sin_pi_per8_times3 and sin_theta > self.sin_pi_per8:
        self.state = 'UR'
    # -sin(π/8)보다 크고 sin(π/8)보다 작으면 오른쪽으로 이동
    elif sin_theta <= self.sin_pi_per8 and sin_theta > -1 * self.sin_pi_per8:
        self.state = 'R'
    # -sin(π/8 * 3)보다 크고 -sin(π/8)보다 작으면 오른쪽 아래로 이동
    elif sin_theta <= -1 * self.sin_pi_per8 and sin_theta > -1 * self.sin_pi_per8_times3:
        self.state = 'DR'
    # -sin(π/8)보다 크면 아래 방향으로 거의 수직
    else:
        self.state = 'D'

EOB

목요일, 7월 01, 2021

[독서광] 나는 왜 내가 힘들까

이번 주는 살아가는 동안 고민이 많은 분들을 위해 나는 왜 내가 힘들까를 소개드린다.

방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 이 책을 소개하는 이유
  • 03:21 이 책의 목차
  • 05:16 이 책이 흥미로운 이유:
  • 10:51 대상 독자
  • 13:15 결론과 마무리
EOB