- 개발/관리도구
- Announcing Lucet: Fastly’s native WebAssembly compiler and runtime
- Go 2018 Survey Results
- Translate your Go program into multiple languages.
- Simplicity, Please - A Manifesto for Software Development
- Docker tips and tricks for your Go projects
- “작업 관리에서 투표, 근태 관리까지” 팀 협업에 유용한 슬랙 봇 8종
- New – Advanced Request Routing for AWS Application Load Balancers
- STORING UTC IS NOT A SILVER BULLET
- 많은 양의 개체들을 시각화하는 방법, 그리고 전국의 모든 건물
- Standardizing WASI: A system interface to run WebAssembly outside the web: 그림 훌륭함
- 기술 블로그 생존 전략 - 구글 시대의 글쓰기
- To. 지식 공유를 시작하려는 개발자에게 From. 당신의 든든한 서포터 Developer Relations팀 드림
- 글쓰는 개발자 모임, 글또
- Python in Visual Studio Code – February 2019 Release
- "기존 타입 체커보다 5배 빨라"··· MS, 파이썬용 '파이라이트' 공개
- 미래의 자바와 JVM, ”GPU와 컨테이너 정조준”
- Debugging what you deploy in Go 1.12
- kroki - Convert plain text diagrams to images !
- 소프트웨어, 실무형 인재의 신화
- 사용자 경험(UX)의 힘, 카카오뱅크 모바일앱
- Connection Pool Analysis
- Get first-hand advice from seasoned experts to become a kick-ass engineering manager
- WHAT IS CITRIX DOING WITH XENSERVER.ORG AND WHY
- 오픈 컴퓨트 프로젝트와 애저 클라우드 : 하드웨어와 소프트웨어의 만남
- PRINCE OF PERSIA CODE REVIEW: PART 1 (INTRODUCTION)
- Untrusted – a user JavaScript adventure game
- TypeScript for Enterprise Developers
- Digging into RISC-V and how I learn new things
- fyne - Cross platform GUI in Go based on Material Design
- 문서화에 대해 아무도 말해주지 않는 것들(개발 문서 관련 글)
- Python for Reverse Engineering 1: ELF Binaries
- Endlessh: an SSH Tarpit
- Maybe You Don't Need Kubernetes
- 도커 컴포즈를 활용하여 완벽한 개발 환경 구성하기
- 컴파일러 프레임워크 'LLVM 8' 발표··· 웹어셈블리 코드 생성 기능 기본 적용
- React Router v5
- How I'm able to take notes in mathematics lectures using LaTeX and Vim
- Can I use _______________________________________ ?
- Idiomatic Go Resources
- 개발 미션과 함께 읽는 클린 코드
- Using Go Modules
- Gall's law
- Terminal latency
- AN EXCLUSIVE LOOK AT AN ORIGINAL IPHONE PROTOTYPE
- When pigs fly: optimising bytecode interpreters
- My Alpine Desktop - Setting Up a Software Development Environment on Alpine Linux
- Examples of Golang compared to Node.js for learning
- Three Things I Wish I Knew When I Started Designing Languages
- Open Source Doesn’t Make Money Because It Isn’t Designed To Make Money
- PuTTY in your hands: SSH client gets patched after RSA key exchange memory vuln spotted
- Java 12 Released with Experimental Switch Expressions and Shenandoah GC
- A Future Without Webpack
- JDK 12 General-Availability Release
- How to take back control of /etc/resolv.conf on Linux
- Continuous Unix commit history from 1970 until today
- Dozens of minimal operating systems to learn x86 system programming.
- 데이터 엔지니어링 관련 소프트웨어 장애 대응 사례
- Capture a Network Trace without installing anything (& capture a network trace of a reboot)
- CRLF injection is possible if the attacker controls a url parameter, as demonstrated by the first argument to urllib.request.urlopen with \r\n followed by an HTTP header or a Redis command.
- Monsters in the Middleboxes: Introducing Two New Tools for Detecting HTTPS Interception
- How we do Vue: one year later - How we, at GitLab, write VueJS, one year later.
- Change default network name (ens33) to old “eth0” on Ubuntu 18.04 / Ubuntu 16.04
- Vim anti-patterns
- The Untold History of Arduino
- Dr. Alan Kay on the Meaning of “Object-Oriented Programming”
- 모든 파이썬 프로그래머를 위한 20가지 실용적인 파이썬 라이브러리
- Why operators are useful
- Using the iPad Pro as my development machine
- Facebook announces next-generation Open Rack frame
- How Designers Engineer Luck Into Video Games
- Building a 'Homebrew' Video Game Console
- Draw Class Diagram
- [B급 프로그래머] (스택오버플로우) 구글이 JSON 응답에 while(1);을 붙여 보내는 이유는?(본인이 쓴 글)
- This document will provide a starting point for AJAX security
- XXH3 - a new speed-optimized hash algorithm
- How I learn any front-end framework
- The State of Caching in Go
- Write yourself a Git!
- Effective Kotlin
- 최신 브라우저의 내부 살펴보기 1 - CPU, GPU, 메모리 그리고 다중 프로세스 아키텍처
- 모질라, 최대 2.5Gb 파일까지 공유 서비스 '센드' 공개
- When "Zoë" !== "Zoë". Or why you need to normalize Unicode strings
- Give Me Back My Monolith
- linux-insides - A book-in-progress about the linux kernel and its insides.
- 어려운 기술 면접을 변명함
- Nuget Gallery - System.CommandLine.Experimental
- An Introduction To WebBluetooth
- Photopea - Online Image Editor
- Mixing WebGL and HTML, Both Rendered Out in React
- DTrace on Windows
- 소프트웨어 엔지니어가 되는 법
- lgtm - Making code better. Together.
- 스크롤과 관련된 CSS 속성 3가지 - 자바스크립트 없어도 가능한 스크롤 기능
- Deprecation Notice: MIT and BSD
- The Return of the VT100
- Winding down my Debian involvement
- Using Let's Encrypt for Internal Servers
- 글로벌 칼럼 | "NIST 지침과는 무관한" 최고의 비밀번호 조언
- 능력 있는 개발자는 어떻게 알아볼 수 있나? by 황준식님
- Cheat sheet: Python 3.7 for beginners
- The open source self-hosted web archive. Takes browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...
- Hennig: "Things are clearly not working the way they used to"
- Gotify - A self-hosted push notification service.
- The Development of the C Language*
- An OSI layer model for the 21st century
- How I'm still not using GUIs in 2019: A guide to the terminal
- How to pass a programming interview
- 고성능 서버/데이터베이스
- 네트워크 문제로 인한 데이터센터 가동 정지 증가 중
- '멀티 클라우드가 대세다' CIO 트렌드 2019
- 초당 천만개의 패킷을 버리는 방법
- Amazon Aurora: design considerations for high throughput cloud-native relational databases
- postgresqltuner - Simple script to analyse your PostgreSQL database configuration, and give tuning advice
- New – Open Distro for Elasticsearch by Amazon
- NGINX to Join F5: Proud to Finish One Chapter and Excited to Start the Next
- 최신 네트워크 로드 밸런싱 및 프록시 소개
금요일, 3월 29, 2019
[B급 프로그래머] 3월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
토요일, 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주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)
- 빅데이터/인공지능
- Summary of test model results for the images classification
- 주문부터 포장까지 7분..롯데슈퍼, 스마트 물류센터 ‘오토프레시’ 개장
- '키오스크' 대여료 한 달 20만원…취약계층 삼킨다 [밀착취재]
- Explaining data science, AI, ML and deep learning to management — a presentation and a script — Part 1 of 3
- Facebook announces next-generation Open Rack frame
- libfacedetection - An open source library for face detection in images. The face detection speed can reach 1500FPS.
- Residual Networks and Advanced Architectures
- 사다리 게임, 절대 걸리지 않는 법
- 2019 TensorFlow Dev Summit 요약
- Introducing TensorFlow Federated
- An All-Neural On-Device Speech Recognizer
- 아시아나항공, AI 챗봇으로 항공권 결제까지 가능해
- A quantum experiment suggests there’s no such thing as objective reality
- "마케터의 AI 활용··· 문제는 창의력이다" IDC 게리 머레이
- 마이크로소프트 워드에서 바로 텍스트를 번역하는 방법
- 엔비디아, 69억 달러에 멜라녹스 인수…데이터센터 시장 입지 강화
- The Math That Tells Cells What They Are
- Apple acquires Laserlike, an ML startup that might make Siri smarter
- Arrow of time and its reversal on IBM quantum computer
- Physicists reverse time using quantum computer
- IBM didn’t inform people when it used their Flickr photos for facial recognition training
- Hardware for Deep Learning. Part 3: GPU
- Sleep is a brain-repair mechanism, new study proves
- Dive into Deep Learning - An interactive deep learning book with code, math, and discussions
- Google’s new voice recognition system works instantly and offline (if you have a Pixel)
- 아이들도 하는 머신러닝 같이 해봐요!
- Beware the data science pin factory: The power of the full-stack data science generalist and the perils of division of labor through function
- Neuroscience Readies for a Showdown Over Consciousness Ideas
- Neuroscientists can read brain activity to predict decisions 11 seconds before people act
- 스티븐 울프램: 만물 이론을 찾는 계산
- 14억 총감시 CCTV, 중국 '감시재벌' 만들었다
- Eigenvectors
- Why Model Explainability is The Next Data Science Superpower
- Best Deep Learning Courses: Updated for 2019
- DeepFashion2 Dataset
- Say “Hello” to Google Coral
- The Burden of Choice - Recommendations, Subversion, and Algorithmic Culture
- The Wolfram Neural Net Repository is a public resource that hosts an expanding collection of trained and untrained neural network models, suitable for immediate evaluation, training, visualization, transfer learning and more.
- 최첨단 인공지능 솔루션들 : (1) 구글 BERT, 인간보다 언어를 더 잘 이해하는 AI 모델
- Is it a Duck or a Rabbit? For Google Cloud Vision, it depends how the image is rotated.
- Coral - Build intelligent ideas with our platform for local AI by Google
- Transform ML models into a native code (Java, C, Python, etc.) with zero dependencies
- Introducing TensorFlow Datasets
- XKCD-style plots in Matplotlib
- ARM processors like the A12X Bionic are nearing performance parity with high-end desktop processors, but the old truth of x86 superiority still lives strong.
- TensorFlow Extended (TFX) is an end-to-end platform for deploying production ML pipelines
- [광군제 미리보기] 알리바바, AI 투입해 만든 광고 배너 무려 `4억개`
- Google open-sources GPipe, a library for efficiently training large deep neural networks
- Python library for building highly effective data science workflows
- Understanding Convolutions
- Best Deep Learning Books: Updated for 2019
- Normal Distribution
- Microsoft Excel will now let you snap a picture of a spreadsheet and import it
- 페덱스, 올 여름부터 자율배송로봇으로 물건배송
- Machine learning can boost the value of wind energy
- immersive linear algebra - The world's first linear algebra book with fully interactive figures.
- Shakespeare RNN
- Amazon Personalize - Amazon.com에서 사용하는 것과 동일한 기술에 기반한 실시간 맞춤화 및 추천
- Google's new AI grammar checker is now live in Google Docs
- 김진철의 How-to-Big Data | 빅데이터 조직과 시스템 (5)
- Foundations of Data Science
- 7 Practical Facts about the Human Brain I wish Everyone Knew
- 애플 자동차 프로젝트에 대해 알게 된 20가지 사실들
- Google Translate is a manifestation of Wittgenstein’s theory of language
- 인간-AI 토론 배틀 승자가 밝힌 'IBM 프로젝트 디베이터의 한계'
- 데이터 과학자가 클라우드로 가야하는 이유 5가지
- It’s the End of the Gene As We Know It
- 암호화폐/블록체인
- Learn Solidity — The Ethereum smart contract programming language
- Ethereum Virtual Machine (EVM) Awesome List
- 복잡하고 비싼 데이터베이스라고?··· 블록체인과 데이터베이스의 결정적 차이
- 국제 금융 네트워크에 꾸준히 침투하는 블록체인
- 체인파트너스 리서치, “글로벌 ICT기업이 블록체인 대중화 이끌 것”
- Understanding the Stellar Consensus Protocol
- Researchers find trapdoor in SwissVote election system
- “이젠 긁는 대신 찍는 시대” 페이 날개달고, 신용카드 고개숙여
- PayPal now lets US users instantly transfer funds to bank accounts in seconds
- Ethereum EVM illustrated(PDF)
- Cryptographic coin flipping, now in Keybase
- The Sharing Economy Was Always a Scam
- "올해 블록체인 시장 89% 성장··· 금융·IT 서비스가 고성장 견인"
- Worldwide Blockchain Spending Forecast to Reach $2.9 Billion in 2019, According to New IDC Spending Guide
- A generalised solution to distributed consensus
- "USB부터 스마트폰까지"..암호화폐, 이젠 지갑 전쟁
- 더 나은 보안을 위해 "신뢰 위기에 대비하라
- Facebook and Telegram Are Hoping to Succeed Where Bitcoin Failed
- 블록체인 엔지니어 수요 '고공행진'
- The Token Handbook
- BITCOIN SV SECURITY AUDIT HELPS RESOLVE MULTIPLE VULNERABILITIES ACROSS DIFFERENT BITCOIN BLOCKCHAINS
- Quadriga Crypto Mystery Deepens With ‘Cold Wallets’ Found Empty
- 이더리움 콘스탄티노플 업그레이드 성공..."2.0 향해 순항중"
- (이더리움) 자주 쓰이는 패턴 - 컨트랙트에서의 출금
- 읽을거리
- BOEING PLANS TO FIX THE 737 MAX JET WITH A SOFTWARE UPDATE
- Shifts in How Couples Meet, Online Takes the Top
- Where on Google Earth is Carmen Sandiego?: 어릴 때는 그렇게 어렵던 게임인데, 지금 하니까 한 방에 쫓아가서 해결...
- What Happens in an Internet Minute in 2019?
- 철저하게 계산된 MS의 '오피스 2019 폄하'
- Why Investigators Fear the Two Boeing 737s Crashed for Similar Reasons
- People who walk on the escalator actually slow everyone down
- SILENCE IS GOLDEN, ESPECIALLY WHEN YOU NEED TO SAY SOMETHING IMPORTANT
- The Credit Card Rewards Game Is Unfair. But Is It Unethical?
- “Be yourself” is terrible advice
- How to start a company with your best friend (and survive to tell about it)
- The Striking Similarities Between Lion Air and Ethiopian 737 MAX Crashes
- "NIST 지침과는 무관한" 최고의 비밀번호 조언
- GERMAN ROADS ARE SMARTER THAN YOURS
- Hennig: "Things are clearly not working the way they used to"
- [책과 미래] 100세 인생
- 움베르토 에코 Umberto Eco의 개인 도서관
- 유머 모음
- 한국 이커머스에는 빌런이 산다
- 경계 무너트리기
- 피드백에 멍들다
- USB4 Specification Announced: Adopting Thunderbolt 3 Protocol for 40 Gbps USB
- Stressed at Work? Mentoring a Colleague Could Help
- [김지수의 인터스텔라] "봄이 오면 꽃보다 시체를 더 많이 본다" 법의학자 유성호
- 인턴 지원서
- FOR ARTISTS, FAME HAS ALWAYS BEEN MORE ABOUT SOCIAL NETWORKS THAN CREATIVITY
- 3. 앱 마케팅 애드테크 용어 총정리 (입문자용)
- Forget the FAANGs. Pay Attention to the Highflying PUTINs.
- Why Americans Might Never Notice Climate Change’s Hotter Weather
- How Much Leisure Time Do the Happiest People Have?
- 회사원으로서 성공하는 것이 나중에 독이 될 수도 있다
- 제일기획 크게 빗나간 광고비 매출 예측의 함의
- Facebook is hiring moderators. But is the job too gruesome to handle?
- 10 of the Most-Googled Scientific Misconceptions
- THE LAST POWER1 ON MARS IS DEAD
- Zebra’s stripes are a no fly zone for flies
- The Surprising Value of Obvious Insights
- 수소차 전망 어둡게 만드는 세 가지 기술적 난제
- How Cats Used Humans to Conquer the World
토요일, 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주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)
- 개발/관리도구
- KT 무선 공유기 커스텀 펌웨어 개발기
- https://www.expunctis.com/2019/03/07/Not-so-random.html
- Ctrl-Alt-Delete: The Planned Obsolescence of Old Coders
- mitmproxy를 활용해 구글 애널리틱스 테스트 자동화하기
- Microsoft just open-sourced the iconic Windows Calculator
- 'this' in TypeScript(영원히 고통받는 자바스크립트 'this')
- Understanding Clean Code in Android
- NodeJS logging made right
- Oracle Database 12.2. It is close to 25 million lines of C code.
- Introduction to Theoretical Computer Science
- Common Mistakes When Hiring Software Engineers
- 데브시스터즈 웹사이트에 사용되는 재사용 가능한 리액트 컴포넌트들
- An awesome list of Hangul/Korean related libraries and modules
- "클라우드 간보기에 안성맞춤" AWS vs. 애저 vs. 구글 클라우드 무료 서비스 비교
- 24 HOURS OF GAME DEVELOPMENT IN RUST
- [번역] 도커 볼륨
- What Every Programmer Should Know About Memory
- Helping To Build Cloudflare, Part 2: The Most Difficult Two Weeks
- Introducing Progress Dashboard
- Linux kernel 5.0 released and here is how to install it
- bashupload.com beta - Upload files from command line to easily share between servers, desktops and mobiles, 25G max.
- Free: The Ultimate Excel Resource Guide & Microsoft Excel Keyboard Shortcuts
- Omi - Web Components를 사용한 차세대 웹 프레임워크.
- EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
- 개발자의 글쓰기(PDF)
- re2c is a free and open-source lexer generator for C and C++.
- “DNS 공격은 긴급한 위협” ICANN, 도메인 업계의 DNSSEC 전면 도입 촉구
- 구글 고 1.12 프로덕션 릴리즈 공개, 툴체인·런타임· 라이브러리 실행에 변화
- The hard part in becoming a command line wizard
- Red Flags in Software Developer Job Descriptions
- Introducing Gremlin Free
- 40 대 후반 개발자 .... 어떻게 하는게 현명할지
- Lightweight Kubernetes
- '오픈소스 착취' vs. '최대 기여자'··· 클라우드 기업에 대한 오해와 진실
- Zero Server - Zero configuration web framework.
- Top ten most popular docker images each contain at least 30 vulnerabilities
- “Computer Software” by Alan Kay
- LINE의 OpenJDK 적용기: 호환성 확인부터 주의 사항까지
- THE LAST POWER1 ON MARS IS DEAD
- Tools for building bots
- Famous Laws Of Software Development
- Ghidra is a software reverse engineering (SRE) framework developed by NSA's Research Directorate for NSA's cybersecurity mission.
- Linus Torvalds pulls pin, tosses in grenade: x86 won, forget about Arm in server CPUs, says Linux kernel supremo
- A visual guide to Go Memory Allocator from scratch (Golang)
- simdjson : Parsing gigabytes of JSON per second
- Will Node.js forever be the sluggish Golang?
- Practical Go: Real world advice for writing maintainable Go programs
- These are the top testing tools, libraries and frameworks for Java developers
- Technical Communication Symposium 2018 참석기 – 기술 문서의 번역 품질 평가 방법
- AWS INTERVIEW QUESTIONS AND ANSWERS
- Go, the Programming Language of the Cloud
- Y Combinator Resources for Developers
- 고성능 서버/데이터베이스
- FaunaDB 2.5.4
- Vulcanizer: a library for operating Elasticsearch
- State of the Cloud Report™ - 2019 Data for Driving Your Multi-Cloud Strategy
- An introduction to distributed systems
- pghoard - PostgreSQL backup and restore service
- [B급 프로그래머] (파이썬) 사용하지 않는 기능조차 여러분을 깨물 수 있다(본인이 쓴 글)
- 클라우드 비용 35%가 낭비되고 있는 이유
- Notes on the Amazon Aurora Paper
- Software Rot
- MySQL Challenge: 100k Connections
- SQLite를 사용해야 하는 이유
토요일, 3월 02, 2019
[B급 프로그래머] (파이썬) 사용하지 않는 기능조차 여러분을 깨물 수 있다
지난번 자바스크립트 문제에 이어 오늘은 파이썬 공부를 하다가 찾은 재미있는 글이 있어 독자 여러분들께 소개한다. 먼저 다음 코드의 실행 결과는 무엇일까?
- 42를 출력
- SyntaxError 42행
- KeyError 3행
다행히 이번에는 바로 맞추긴 했는데, 이 문제를 풀려면 파이썬 3.6에 대해 조금 알고 있어야 하는 내용이 있다. 바로 '타입 힌트'다. 타입 힌트는 프로그래머들이 변수에 주석을 달아 IDE, 문서 생성기, 정적 분석기와 같은 도구가 활용하게 만드는 기능이다. 그렇다면 위 문제와 타입 힌트가 어떤 상관이 있을까?
타입 힌트를 달기 위해서는 "x: int"와 같은 형식을 따른다. 개발자가 x를 int라고 지정했으므로 타입 검사를 진행하는 정적 분석기가 상당히 정확하게 문제(예: x에 문자열을 대입하는 경우)를 찾아낼 수 있게 된다. 이제 "ages['John']: 42"에 주목하자. 파이썬은 ages['John']의 타입을 42로 정의한다. 타입이 42라고??? 말이 안 되지 않은가? 하지만 애노테이션 표현식에 따르면 대입 가능한 타겟이면 그냥 받아준다(헉!). 따라서 컴파일러는 아무 일도 하지 않고 넘어가버린다. 결국 ages 딕셔너리에는 'John'이라는 키에 대응하는 값이 없기 때문에 KeyError가 발생하게 된다.
수정 내역은 이미 아시겠지만, 그래도 완결성을 위해 실어놓았다.
보너스: 지금 이 모든 가정은 파이썬 3.6 이상을 가정한다. 만일 파이썬 2의 경우라면 어떻게 될까? 이미 답을 알고 계시겠지만 그래도 한 번 더 생각해보면 좋겠다.
EOB