금요일, 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

월요일, 2월 18, 2019

[일상다반사] 새 책 출간 소식: 블록체인 기업으로 가는 길

블록체인 관련해서 이해도 많고 오해도 많은 상황이다. yes24에서 '블록체인'이라는 키워드로 검색하면 100권이 넘는(전자책 제외) 목록이 나오는데, 특성을 보면 현재까지 나온 책들은 대충 다음 범주 중 하나에 속할 것이다.

  • 블록체인 역사와 개념과 의의를 소개하는 책
  • 블록체인 구현 원리를 설명한 책
  • 블록체인 운영과 프로그래밍 방법을 설명하는 책
  • 암호화폐 투자(응?) 기법
  • 블록체인 산업계 동향을 개괄적으로 정리한 책

이런 상황에서 또 다른 블록체인 책을 낸다면 과연 어디를 공략해야 할지 고민이 많았다. 하지만 블록체인을 구체적으로 사업과 연결해서 어떻게 활용할지에 대한 책은 (놀랍게도!) 찾아보기 어렵다는 사실을 알게 되었다. 지금까지 정리된 산업계 동향이라고 해봐야 대기업에서 개념증명을 위한 여러 가지 시도를 단편적으로 다루고 있기에 처음부터 끝까지 사업적인 관점에서 블록체인을 바라보는 책을 내면 어떨까?

기존에 어느 누구도 시도하지 않은 방식이므로 참고할만한 내용도 없어 여러 날 고민한 끝에 이번에 독창적으로 새롭게 만든 책을 독자 여러분들께 선보이게 되었다. 바로 <블록체인 기업으로 가는 길: 가상의 기업 사례 회고를 통한 블록체인의 비즈니스 도입과 기술 전략>! 부제목이 잘 나타내듯이 이 책은 주식회사 '나눔'이라는 가상의 회사가 블록체인 기술을 사업과 접목시켜 나가는 이야기를 담고 있다. 블록체인을 도입해 성공을 거두려면 기술, 사업, 투자라는 삼박자가 맞아 떨어져야 하므로 어떤 식으로 각 부문을 공략하고 최종적으로는 매끈하게 통합해야할지 펼쳐야 하는 전략이 상당히 중요하다. 이 책에서는 블록체인 탐구에서 시작해서 사업 기획을 거쳐 사업 계획서(또는 백서)를 작성하고 투자를 받고 계속해서 사업을 진행하는 전 주기(full lifecycle)를 이야기로 풀어서 알기 쉽게 설명하기 때문에 기존에 딱딱한 블록체인 서적과는 상당히 색다른 느낌이 올 것이다.

그렇다면 쉽게 읽히기 위해 전문성을 포기하고 상상속에서 해매고 다니도록 내버려 뒀을까? 소설은 허구이지만 이야기를 뒷받침하는 개연성이 튼튼해야 한다. 따라서 블록체인과 인공지능 컨설팅을 위해 결성된 전문 그룹인 피치파이브 팀원들의 전문성과 업계 경험을 최대한 녹여넣어서 현실성을 거울처럼 반영하는 가상의 세상을 만들었다. 따라서, 이 책을 읽는 독자분들께는 재미와 지식이라는 두 마리 토끼를 한 번에 잡을 수 있는 계기가 되면 좋겠다. 아직 블록체인이 오버엔지니어링된 개념 또는 기술인지 아니면 기업이 활용할 도구 상자에 들어갈 하나의 도구인지는 결판나지 않은 상태인데 어느 쪽에 더 많이 베팅할지 알기 위해서도 이 책 내용이 궁금하지 않는가?

관심있는 분들께: 인터넷 교보문고Yes24를 비롯한 여러 온라인 서점에서 절찬 예약 판매 중이다.

EOB

토요일, 2월 16, 2019

[B급 프로그래머] 다음 자바스크립트 코드에서 오류는?

요즘 어쩌다보니 React.js 공부를 (반강제적으로?) 하게 되어서 자바스크립트를 다시 복습하고 있는데 Can You Find The Bug in This Code?라는 글이 재미있어 독자 여러분들께 소개하고자 한다. 다음 코드에서 이상한 부분을 찾을 수 있겠는가?

직접 입력한 다음에 실행해봐도 되지만, 여러분들의 수고를 들기 위해 개발자 도구의 콘솔에 출력된 결과를 보여드리면 다음과 같다.

Uncaught TypeError: (intermediate value)(...) is not a function

hello와 world!가 각각 찍혀야 하는데 이상한 오류 메시지만 나온다. 도대체 무슨 일이 생긴 것일까? 잠시 생각해봤는데 감이 오지를 않아서 본문 내용도 읽어보고 추가 자료도 검색한 결과 자바스크립트는 보면 볼수록 난감한 물건(응?)이라는 생각이 들고 말았다. 혹시 문제를 풀지 못한 독자분들을 위해 힌트 1번 나간다.

힌트 1번: 7.9 Automatic Semicolon Insertion

ECMA 표준 규약에서 뭔가 중요한 힌트를 주고 있는데, 자동화된 부분이 반대로 개발자를 힘들게 만드는 사례로 봐도 무방하다.

여전히 문제를 풀지 못한 독자분들을 위해 힌트 2번 나간다.

이렇게 놓고 보니 뭔가 의도하지 않은 부분이 보이는가? 주범은 세미콜론(;)이다. 앞서 언급한 7.9 섹션을 보면 알겠지만 함수 호출과 관련해서는 자동으로 세미콜론을 넣어주지 않기 때문에 예상치 못한 문제가 발생하게 된 것이다. 이제 어디를 수정하면 될지 알겠는가? 정답을 보자.

오늘의 교훈: 자동화된 기능을 너무 믿지 말고 세미콜론을 붙이자.

EOB

목요일, 2월 14, 2019

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

(오늘의 짤방: Books Smell Good via @PhilosophyMttrs)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: 글쓰기의 중요성(한글 자막)
EOB