토요일, 4월 13, 2019

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

(오늘의 짤방: 항상 인간 자체가 문제였다 via @if1live)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

금요일, 4월 12, 2019

[B급 프로그래머] 4월 1주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

<기계는 어떻게 생각하고 학습하는가>에 나온 인공지능의 발달사 via @syjkorea
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: 금융과 딥러닝 - 금융 영역에서의 딥러닝은 어떻게 다른가?
EOB

토요일, 4월 06, 2019

[B급 프로그래머] 프로그래밍의 황금율은?

Quora를 읽다보니 오늘은 What are the golden rules of programming?이라는 제목이 눈에 띄어 재미있는 대답을 독자 여러분들께 소개한다.

  • 남들이 읽기 쉽게 만들어라. 모두가 신경쓴다.
  • 필요 이상으로 복잡한 코드 트릭을 부리지 마라. 아무도 신경쓰지 않는다.
  • 문제의 100%를 이해하고, 문제의 90%를 풀기 위해 설계하라.
  • 마지막 20% 노력은 공학에 투입되는 비용의 90%를 차지한다.
  • 설계할 때, 3년에서 5년 동안 살아남게 만들어라. 그 이후에는 어떻게든 다시 작성해야 마땅하다.
  • 소프트웨어 공학은 프로세스다. 초기 요구사항에 너무 과적합하게 만들지 말고, 미래에 대응할 수 있게 유연하게 유지할 필요가 있다.
  • 먼저 해결하고, 다음으로 정리하면서 배워라. 그 다음으로 배운 내용을 활용해 설계의 깊이를 더하자.
  • CPU는 저렴하다. 최적화에 목숨걸지 마라.
  • 다른 사람들이 더 많이 할 수 있도록 초점을 맞춰라. 1시간 동안 작업한 결과로 사람들이 10시간 짜리 결과물을 만들어낼 수 있어야 마땅하다.

"과도한 엔지니어링을 피하고 다른 사람들과 협업할 수 있게 프로그램을 만들자" 정도로 요약할 수 있겠다. EOB

금요일, 3월 29, 2019

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

(오늘의 짤방: #deadlock via @navsis)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

토요일, 3월 23, 2019

[독서광] 코어 이더리움 프로그래밍

'코어 이더리움 프로그래밍' 책을 사놓고 틈틈히 읽긴 했지만 진도를 뽑지 못하다가 역시 뭔가 해야하는 상황이 되니까 빠르게 진도를 낼 수 있었다. 독자 여러분을 위해 독후감을 정리해보았다.

이 책은 크게 두 부분으로 나뉘어져 있다. 전반부는 블록체인 개괄과 이더리움 플랫폼 분석이며, 후반부는 이더리움 개발 환경 구축에 이은 스마트 컨트랙트 제작과 DApp 개발이다. 따라서 책의 예상 독자는 개발자라는 사실을 쉽게 예상할 수 있다. 이더리움 플랫폼 분석 부분은 아키텍처와 소스 코드 분석이 중간중간 나오므로 조금 복잡한 오픈소스 분석 경험이 있는 개발자에게 적당하다는 느낌이고, 스마트 컨트랙트 제작은 따라하기 식이므로 프로그래밍 경험이 있는 개발자라면 어렵지 않게 적응할 수 있게 되어 있다. 단순한 스마트 컨트랙트를 작성해서 구동한 다음에 점점 기능과 보안 요소를 추가하는 방식으로 되어 있으므로, 처음부터 어마무시한 스마트 컨트랙트 코드를 나열하는 시중에 흔한 튜토리얼이나 개발서에 비해서는 자습하기가 유리하다는 장점이 있다. 다른 장점으로 이 책에 나오는 아키텍처와 데이터 흐름을 표시하는 그림과 표가 참 좋다고 느껴지는데, 이더리움 프로그래밍 관련 참고 자료를 만들거나 발표 자료를 만드는 분들이라면 본전을 뽑고 남을 것이다.

하지만 솔리디티 버전이 0.4.18만 되어도 이 책 예제로 나오는 코드 컴파일이 제대로 되지 않으므로 프로그램을 수정 조금 신경을 써야 하며(본문에 0.4.16과 0.4.18이 혼재되어 있으므로 더욱 혼란스러울지도 모르겠다), EVM에 대한 설명이 부족해서 다른 글과 문서를 참고해야 하며, 솔리디티 문법에 대한 소개 부분도 간략하므로 다른 문서를 봐야 하며, ERC20 토큰 설명(ERC223을 다뤘으면 더욱 좋을뻔 했다)이 부족하다는 단점이 있긴 하다.

이더리움 연구회에서 만들어진 책이므로 다른 책과 비교해서 자료가 풍부하다. 이 책 내용을 토대로 만들어진 교안인 코어 이더리움, 예제로 배우는 스마트 컨트랙트 프로그래밍(PDF, 112페이지) 자료, DApp 실습, 실습을 위한 깃허브 페이지, <코어 이더리움 프로그래밍> 리포지토리를 참조하면 이 책에서 다루는 수준과 범위를 알 수 있으므로 책과 함께 참고하시면 좋겠다.

결론: 약간의 단점만 극복할 수 있으면 개발자에게 추천한다. 사소한 소망이긴 하지만... 출간된지 벌써 1년이 다 되어가므로, 업그레이드 된 2판이 나오기를 기대한다. ;)

EOB

월요일, 3월 18, 2019

[B급 프로그래머] 3월 2주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

시장조사기업 CIRP가 공개한 미국 내 스마트스피커 도입 대수가 17년 12월 3700만대, '18년 9월 5300만대, '18년 12월 6600만대로 증가 중. Amazon Echo 70%, Google Home 24%, Apple HomePod가 6% 순. 아마존의 힘.. via @ehddn1
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: 사이먼사이넥 왜 리더는 마지막에 먹는가 Simon Sinek Why Leaders Eat Last 1
EOB

토요일, 3월 16, 2019

[B급 프로그래머] (스택오버플로우) 구글이 JSON 응답에 while(1);을 붙여 보내는 이유는?

오늘도 자바스크립트 공부를 하다가 알게된 재미있는 사실을 하나 공유드린다. Why does Google prepend while(1); to their JSON responses?라는 글을 읽다 보니 다음과 같은 JSON 코드가 눈에 보였다.

잠깐 JSON 결과에 생뚱맞게 while(1);을 붙이는 이유를 생각해보자. 당장 떠오르는 대답은 eval()로 JSON 결과를 해석하는 과정에서 엉뚱한 문제가 생길 가능성이다. 하지만 다른 가능성은 없을까?

스택오버플로우 대답을 읽어보니 흥미로운 시나리오가 존재했다. 다들 잘 알고 계시겠지만, 기본적으로 CORS(Cross Origin Resource Sharing) 방어 덕분에 외부에서 가져온 리소스에서 내부 데이터에 접근할 방법은 없다. 하지만 JSON 컨텐츠를 요청하기 위해 script 태그를 사용할 때, 외부 공격자의 코드 내부에서 JSON을 자바스크립트처럼 실행할 수 있는 문제가 있다(ES5까지 지원하는 대다수 브라우저). 따라서, 공격자는 객체 생성 과정에서 사용될 배열이나 객체 생성자나 다른 메소드를 슬쩍 바꿔서 JSON으로 넘어오는 데이터를 가로채는 방법으로 손쉽게 중요한 정보를 얻을 수 있다. 일례로 JSON 데이터가 gmail에서 가져온 25개 이메일 정보라고 생각해보라!

자, 그러면 올바른 프로그래밍 기법은 무엇일까? 다음과 같은 세 가지 사항을 염두에 두기 바란다.

  • JSON이 결코 실행 가능한 형태가 되지 않게 만든다
  • JSON이 결코 유효한 자바스크립트가 되지 않게 만든다
  • 주의: 유효한 JSON이지만 유효하지 않은 자바스크립트가 되게 만든다(참고: AJAX Security Cheat Sheet)

결론: 열 명이 도둑 한 명 못 막는다는 말이 있듯이 보안은 늘 어렵다. 항상 주의에 주의를 거듭하자.

EOB

토요일, 3월 09, 2019

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

(오늘의 짤방: Library Unboxing via @ismonkeyuser)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: This bus is great for taking a trip around the local area https://redd.it/ay92gt via @gorey_software
EOB

토요일, 3월 02, 2019

[B급 프로그래머] (파이썬) 사용하지 않는 기능조차 여러분을 깨물 수 있다

지난번 자바스크립트 문제에 이어 오늘은 파이썬 공부를 하다가 찾은 재미있는 글이 있어 독자 여러분들께 소개한다. 먼저 다음 코드의 실행 결과는 무엇일까?

  1. 42를 출력
  2. SyntaxError 42행
  3. KeyError 3행

다행히 이번에는 바로 맞추긴 했는데, 이 문제를 풀려면 파이썬 3.6에 대해 조금 알고 있어야 하는 내용이 있다. 바로 '타입 힌트'다. 타입 힌트는 프로그래머들이 변수에 주석을 달아 IDE, 문서 생성기, 정적 분석기와 같은 도구가 활용하게 만드는 기능이다. 그렇다면 위 문제와 타입 힌트가 어떤 상관이 있을까?

타입 힌트를 달기 위해서는 "x: int"와 같은 형식을 따른다. 개발자가 x를 int라고 지정했으므로 타입 검사를 진행하는 정적 분석기가 상당히 정확하게 문제(예: x에 문자열을 대입하는 경우)를 찾아낼 수 있게 된다. 이제 "ages['John']: 42"에 주목하자. 파이썬은 ages['John']의 타입을 42로 정의한다. 타입이 42라고??? 말이 안 되지 않은가? 하지만 애노테이션 표현식에 따르면 대입 가능한 타겟이면 그냥 받아준다(헉!). 따라서 컴파일러는 아무 일도 하지 않고 넘어가버린다. 결국 ages 딕셔너리에는 'John'이라는 키에 대응하는 값이 없기 때문에 KeyError가 발생하게 된다.

수정 내역은 이미 아시겠지만, 그래도 완결성을 위해 실어놓았다.

보너스: 지금 이 모든 가정은 파이썬 3.6 이상을 가정한다. 만일 파이썬 2의 경우라면 어떻게 될까? 이미 답을 알고 계시겠지만 그래도 한 번 더 생각해보면 좋겠다.

EOB

토요일, 2월 23, 2019

[B급 프로그래머] 2월 4주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: 일주일이 지난 후 냐옹이는 돈을 받았어요. 하지만 냐옹이가 번 돈은 거의 다 카드 대금과 집세로 나갔어요. 통조림 한 통을 살 수 있는 돈만 겨우 남았어요. via @SXK35)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: The bitcoin price has gone down from $20,000 to $3,000 but miners still use more energy than the entire London area. via @martgnz and https://www.economist.com/graphic-detail/2019/02/07/will-bitcoins-price-crash-cut-into-its-energy-use

보너스 2: Waymo's self-driving car navigates a police controlled intersection

EOB

목요일, 2월 21, 2019

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

오늘의 짤방: 정말 정직한 개발자의 업데이트 내역 via @Aririkawaii
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB