책 소개
▣ 출판사서평
★ 이 책에서 다루는 내용 ★
■ 매개변수 방정식과 turtle 모듈로 스파이로그래프와 비슷한 패턴 생성
■ 주파수 배음 시뮬레이션을 이용한 음악 작곡
■ 아스키 아트로 그래픽 이미지 변환
■ 임의의 패턴에 숨겨진 3D 이미지를 생성하는 오토스테레오그램 프로그램 작성
■ 입자 시스템, 투명도, 빌보딩 기법을 이용해 OpenGL 셰이더로 현실감 있는 애니메이션 제작
■ CT와 MRI 스캔으로 얻은 데이터를 사용한 3D 시각화 구축
■ 컴퓨터와 아두이노를 연결해 음악에 반응하는 레이저 쇼 연출
★ 이 책의 대상 독자 ★
이 책은 파이썬을 처음으로 접하는 사람을 대상으로 하지 않으며, 기초 지식을 친절하게 설명하지는 않는다. 하지만 현실 세계의 다양한 문제를 해결하기 위해 파이썬을 어떻게 사용할 수 있는지 구체적인 방법을 보여준다. 이 책의 프로젝트들을 실습하면서 여러분은 파이썬 언어의 미묘한 사용법을 접할 수 있으며 널리 쓰이는 파이썬 라이브러리들의 사용 방법도 배울 수 있다. 가장 중요한 것은, 어떤 문제를 여러 부분으로 나누고 문제를 해결하기 위한 알고리즘을 개발한 뒤, 파이썬을 사용해 기초부터 해결책을 구현하는 방법을 배울 수 있다는 점이다. 현실 세계의 문제들은 경계가 명확하지 않고 특정 분야의 전문적인 지식을 요구하기 때문에 해결하기 어려울 때가 많다. 하지만 파이썬은 문제 해결을 도와주는 다양한 도구를 제공한다. 어려움을 극복하고 문제의 해결책을 찾을 줄 아는 것은 프로그래밍의 고수가 되기 위한 여행에서 가장 중요한 부분이다.
★ 이 책의 구성 ★
1부: 워밍업
1장, ‘아이튠즈 재생목록 다루기’에서는 아이튠즈(iTunes)의 재생목록 파일을 파싱해 트랙 길이와 공통 트랙 등 유용한 정보를 수집하는 방법을 보여준다. 2장, ‘스파이로그래프’에서는 매개변수 방정식과 turtle 그래픽 모듈을 사용해 스파이로그래프와 유사한 곡선을 그려볼 것이다.
2부: 생명체 시뮬레이션
2부에서는 어떤 현상을 시뮬레이션하기 위해 수학적 모델을 사용한다. 3장, ‘콘웨이의 생명게임’에서는 콘웨이의 생명게임 알고리즘을 구현하는 방법을 배운다. 이 알고리즘은 일종의 인공 생명 시뮬레이션으로서 동적 패턴을 생성할 수 있다. 4장, ‘카플러스 스트롱 알고리즘을 이용한 배음 생성’에서는 카플러스 스트롱(Karplus-Strong) 알고리즘을 사용해 현악기의 현이 튕길 때 나는 소리를 생성하는 방법을 보여준다. 그다음 5장, ‘보이즈: 군집 시뮬레이션’에서는 새의 무리를 시뮬레이션하는 보이즈(Boids) 알고리즘을 구현하는 방법을 배울 수 있다.
3부: 이미지 갖고 놀기
3부는 파이썬으로 2D 이미지를 읽고 조작하는 방법을 소개한다. 6장, ‘아스키 아트’에서는 이미지로부터 아스키 아트를 만드는 방법을 보여준다. 7장, ‘포토모자이크’에서는 포토모자이크를 생성하며, 8장, ‘오토스테레오그램’에서는 3D 이미지 환상을 생성하는 오토스테레오그램을 생성하는 방법을 배울 것이다.
4부: 3D 입문
4부의 프로젝트들은 OpenGL 3D 그래픽 라이브러리를 사용한다. 9장, ‘OpenGL의 이해’에서는 OpenGL을 사용해 간단한 3D 그래픽을 만드는 기초 개념을 설명한다. 10장, ‘입자 시스템’에서는 입자 시뮬레이션을 생성하는데, 수학적 지식과 OpenGL 셰이더를 사용해 입자의 이동 경로를 계산하고 화면에 불꽃 분수를 렌더링한다. 그리고 11장, ‘볼륨 렌더링’에서는 볼륨 데이터를 렌더링할 때 사용되는 볼륨 레이 캐스팅 알고리즘을 OpenGL 셰이더를 사용해 구현한다. 이 기법은 MRI나 CT 스캔 같은 의료 영상에 널리 사용된다.
5부: 하드웨어 해킹
마지막 5부에서는 파이썬을 사용해 아두이노 마이크로컨트롤러와 라즈베리파이를 탐구한다. 12장, ‘아두이노 소개’에서는 아두이노를 사용해 간단한 회로로부터 센서 데이터를 읽고 그래프로 나타낸다. 13장, ‘레이저 오디오 디스플레이’에서는 파이썬과 아두이노를 사용해 음악 소리에 반응하는 레이저쇼를 연출하기 위해서 2개의 회전 거울과 레이저를 제어한다. 14장, ‘라즈베리파이 기반의 날씨 모니터’에서는 웹 기반의 날씨 모니터링 시스템을 라즈베리 파이를 사용해 구축한다.
★ 지은이의 말 ★
『파이썬 플레이그라운드』에 온 것을 환영한다! 이 책에서 여러분은 파이썬 프로그래밍의 세계를 탐험하기 위해 설계된 14개의 흥미로운 프로젝트를 만날 수 있다. 스파이로그래프와 유사한 패턴 그리기, 아스키(ASCII) 아트 생성하기, 3D 렌더링, 음악과 동기화되는 레이저 패턴 투영하기 등 다양한 주제가 다뤄진다. 이러한 프로젝트들은 그 자체로 재미있을 뿐만 아니라, 여러분의 아이디어를 펼쳐나가기 위한 기초가 될 수 있도록 설계됐다.
★ 옮긴이의 말 ★
파이썬이 처음 발표된 지도 벌써 25년이 되었다. 네덜란드 출신 프로그래머로서 구글을 거쳐 현재 드롭박스에서 근무 중인 귀도 반 로섬(Guido Van Rossum)이 창조한 파이썬 프로그래밍 언어는 실행 시간에 데이터 타입을 검사하는 동적 타이핑을 제공하며 객체 지향적 성격을 갖고 있는 대화식 언어다. 많은 수의 유용한 라이브러리가 존재해 데이터 과학 등의 분야에서 사용이 확대되고 있으며, 무엇보다도 코드를 작성한 뒤에 컴파일과 링크 과정 없이 곧바로 실행해볼 수 있기 때문에 사용하기가 무척 편리하다.
이 책은 파이썬으로 뭔가 재미있는 걸 만들어보고 싶은 프로그래머를 대상으로 한다. 따라서 파이썬의 기본 문법은 어느 정도 알고 있다고 가정하며, 약간의 수학적 지식도 요구한다. 경험상, 프로그래밍 공부는 물론 기초 개념을 탄탄히 하는 것도 중요하지만, 실제 실행 결과를 눈으로 확인하는 과정도 함께 할 때 지루함을 덜 수 있을 것이다. 그런 측면에서 파이썬 초심자라고 하더라도 이 책에서 제공하는 소스 코드를 다운받아서 실제로 실행해봄으로써 파이썬 공부를 위한 의욕을 유지하고 동기를 부여받는 효과를 얻을 수 있을 것이다.
이 책은 총 5부 14개 장으로 구성되어 있다. 1부의 1장에서는 아이튠즈 재생목록의 구조를 이해하고 조작하는 방법을 설명하며, 2장에서는 스파이로그래프라는 재미있는 곡선을 파이썬으로 생성할 것이다. 2부는 수학적 모델을 바탕으로 몇 가지 시뮬레이션을 파이썬으로 구현한다. 인공 생명을 위한 시뮬레이션으로서 많은 관심을 모은 콘웨이의 생명 게임을 비롯해, 현악기의 음을 컴퓨터로 재생하는 방법, 그리고 장거리를 이동하는 새의 무리가 그 대오를 유지하며 이동하는 모습을 구현하는 알고리즘을 배울 수 있다. 3부에서는 주로 이미지를 조작하는 방법을 다룬다. 아스키 코드(영화 〈마션〉에서 아스키 코드로 통신을 주고받는 모습이 어찌나 반가웠는지 모른다)를 이용한 이미지 생성, 포토모자이크 처리, 3차원 환상을 일으키는 오토스테레오그램 등이 파이썬으로 구현된다. 4부는 OpenGL을 사용한 3D 처리 방법을 설명한다. 다소 어려운 주제이니만큼, 우선 OpenGL의 기초를 설명하는 데 하나의 장을 할애하며, 이후에는 불꽃이 분수처럼 퍼져나가는 입자 시스템을 시뮬레이션하고, 볼륨(체적) 데이터를 렌더링하는 알고리즘도 구현한다. 마지막으로 5부에서는 아두이노와 라즈베리파이와의 연동을 통해 간단한 하드웨어를 제어하는 방법이 소개된다. 또한 파이썬 기반의 경량 웹 서버를 통해 간단한 날씨 모니터링 시스템이 구축된다.
▣ 작가 소개
저자 : 마헤시 벤키타찰람
20년 이상의 경력을 지닌 소프트웨어 엔지니어다. 중학교 3학년 시절부터 기술에 대한 열정을 키워왔으며, 인기 있는 전자공학 및 프로그래밍 블로그 electronut.in을 운영 중이다.
역자 : 이정문
컴퓨터공학을 전공했으며 폭넓은 분야에 관심을 갖고 있다. 번역서로 『Rational XDE로 하는 UML 객체지향 모델링』(에이콘, 2006), 『비기닝 ANSI C++』(에이콘, 2008), 『안드로이드앱 마케팅』(에이콘, 2011), 『데이터 과학으로 접근하는 정보보안』(에이콘, 2016) 등이 있다.
▣ 주요 목차
1부. 워밍업
1장. 아이튠즈 재생목록 다루기
__아이튠즈 재생목록 파일 분석
__요구사항
__코드
____중복곡 찾기
____중복곡 추출하기
____둘 이상의 재생목록에 공통되는 트랙 찾기
____통계 값 수집하기
____데이터를 플롯으로 나타내기
____명령 라인 옵션
__전체 코드
__프로그램 실행
__정리
__실습!
2장. 스파이로그래프
__매개변수 방정식
____스파이로그래프의 방정식
____turtle 모듈의 그래픽
__요구사항
__코드
____Spiro 생성자
____초기설정을 수행하는 함수들
____restart() 메소드
____draw() 메소드
____애니메이션 만들기
____SpiroAnimator 클래스
____genRandomParams() 메소드
____프로그램 재시작
____update() 메소드
____커서를 보이거나 숨기기
____곡선 저장하기
____명령 라인 인수 파싱과 초기화
__전체 코드
__스파이로그래프 애니메이션 실행
__정리
__실습!
2부. 생명체 시뮬레이션
3장. 콘웨이의 생명게임
__동작 원리
__요구사항
__코드
____그리드 표현하기
____초기 조건
____경계 조건
____규칙 구현하기
____프로그램에 명령 라인 인수 전달하기
____시뮬레이션 초기화하기
__전체 코드
__생명게임 시뮬레이션 실행
__정리
__실습!
4장. 카플러스 스트롱 알고리즘을 이용한 배음 생성
__동작 원리
____시뮬레이션
____WAV 파일 생성하기
____단 5음계
__요구사항
__코드
____deque로 원형 버퍼 구현하기
____카플러스 스트롱 알고리즘 구현하기
____WAV 파일 기록하기
____pygame으로 WAV 파일 재생하기
____main() 메소드
__전체 코드
__시뮬레이션 실행
__정리
__실습!
5장. 보이즈: 군집 시뮬레이션
__동작 원리
__요구사항
__코드
____새들의 위치 및 속도 계산하기
____경계 조건 설정하기
____새 그리기
____규칙 적용하기
____새 추가하기
____새들을 분산시키기
____명령 라인 인수
____Boids 클래스
__전체 코드
__보이즈 시뮬레이션 실행
__정리
__실습!
3부. 이미지 갖고 놀기
6장. 아스키 아트
__동작 원리
__요구사항
__코드
____그레이스케일 레벨과 그리드 정의하기
____평균 밝기 계산하기
____이미지로부터 아스키 콘텐츠 생성하기
____명령 라인 옵션
____아스키 아트 문자열을 텍스트 파일에 기록하기
__전체 코드
__아스키 아트 생성 프로그램 실행
__정리
__실습!
7장. 포토모자이크
__동작 원리
____타깃 이미지 분할하기
____색상 값의 평균 구하기
____이미지 대조하기
__요구사항
__코드
____타일 이미지 읽기
____입력 이미지의 평균 색상 값 계산하기
____타깃 이미지 분할하기
____타일과 가장 비슷한 이미지 찾기
____이미지 그리드 생성하기
____포토모자이크 생성하기
____명령 라인 옵션 추가하기
____포토모자이크의 크기 제어하기
__전체 코드
__포토모자이크 생성 프로그램 실행
__정리
__실습!
8장. 오토스테레오그램
__동작 원리
____오토스테레오그램 내의 깊이 지각하기
____깊이맵
__요구사항
__코드
____주어진 타일 반복하기
____임의의 원으로 타일 생성하기
____오토스테레오그램 만들기
____명령 라인 옵션
__전체 코드
__오토스테레오그램 생성 프로그램 실행
__정리
__실습!
4부. 3D 입문
9장. OpenGL의 이해
__올드스쿨 OpenGL
__현대적인 OpenGL: 3D 그래픽 파이프라인
____지오메트리 프리미티브
____3D 변환
____셰이더
____버텍스 버퍼
____텍스처 매핑
____OpenGL을 화면에 표시하기
__요구사항
__코드
____OpenGL 창 생성하기
____콜백 설정하기
____Scene 클래스
__전체 코드
__OpenGL 애플리케이션 실행
__정리
__실습!
10장. 입자 시스템
__동작 원리
____입자의 움직임 모델링하기
____최대 스프레드 설정하기
____입자를 렌더링하기
____현실적인 스파크를 생성하기 위해 OpenGL 블렌딩 사용하기
____빌보딩 사용하기
____애니메이션 생성하기
__요구사항
__입자 시스템을 구현하는 코드
____입자의 지오메트리 정의하기
____입자들의 시간차 배열 정의하기
____입자의 초기 속도 설정하기
____버텍스 셰이더 생성하기
____프래그먼트 셰이더 생성하기
____렌더링
____Camera 클래스
__입자 시스템의 전체 코드
__박스 코드
__메인 프로그램의 코드
____시간 단계별로 입자 갱신하기
____키보드 핸들러
____메인 프로그램 루프 관리하기
__메인 프로그램의 전체 코드
__프로그램 실행
__정리
__실습!
11장. 볼륨 렌더링
__동작 원리
____데이터 포맷
____광선 생성하기
____OpenGL 창 표시하기
__요구사항
__프로젝트 코드의 개요
____3D 텍스처 생성하기
__3D 텍스처의 전체 코드
__광선 생성
____컬러 큐브의 지오메트리 정의하기
____프레임 버퍼 객체 생성하기
____큐브의 후면 렌더링하기
____큐브의 전면 렌더링하기
____큐브 전체를 렌더링하기
____크기 변경 핸들러
__광선 생성의 전체 코드
__볼륨 레이 캐스팅
____버텍스 셰이더
____프래그먼트 셰이더
__볼륨 레이 캐스팅의 전체 코드
__2D 슬라이싱
____버텍스 셰이더
____프래그먼트 셰이더
____2D 슬라이싱을 위한 사용자 인터페이스
__2D 슬라이싱의 전체 코드
__코드 종합
__메인 파일의 전체 코드
__프로그램 실행
__정리
__실습!
5부. 하드웨어 해킹
12장. 아두이노 소개
__아두이노
__아두이노 생태계
____언어
____IDE
____커뮤니티
____주변장치
__요구사항
__광센서 회로 구축
____회로의 동작 원리
____아두이노 스케치
____실시간 그래프 생성하기
__파이썬 코드
__전체 파이썬 코드
__프로그램 실행
__정리
__실습!
13장. 레이저 오디오 디스플레이
__레이저 패턴 생성
____모터 제어
____고속 푸리에 변환
__요구사항
____레이저 디스플레이 만들기
____모터 드라이버 배선하기
__아두이노 스케치
____아두이노의 디지털 출력 핀 설정하기
____메인 루프
____모터 정지하기
__파이썬 코드
____오디오 장치 선택하기
____입력 장치로부터 데이터 읽기
____데이터 스트림의 FFT 계산하기
____FFT 값에서 주파수 정보 추출하기
____주파수를 모터 속도와 방향으로 변환하기
____모터 설정 테스트하기
____명령 라인 옵션
____수동 테스트
__전체 파이썬 코드
__프로그램 실행
__정리
__실습!
14장. 라즈베리파이 기반의 날씨 모니터
__하드웨어
____DHT11 온도 및 습도 센서
____라즈베리파이
____라즈베리파이 설정하기
__소프트웨어 설치와 구성
____운영체제
____초기 설정
____와이파이 설정
____프로그래밍 환경 설정하기
____SSH를 통한 연결
____보틀 웹 프레임워크
____flot으로 그래프 그리기
____라즈베리파이 종료하기
__하드웨어 제작
__코드
____센서 데이터 요청 처리하기
____데이터를 그래프로 나타내기
____update() 메소드
____LED를 처리하는 자바스크립트 핸들러
____대화식 기능 추가하기
__전체 코드
__프로그램 실행
__정리
__실습!
부록 A. 소프트웨어 설치
__프로젝트의 소스 코드 설치
__윈도우에 설치하기
____GLFW 설치
____각 모듈별로 사전에 빌드된 바이너리 설치
____그 밖의 옵션들
__OS X에 설치하기
____Xcode와 MacPorts 설치
____모듈 설치
__리눅스에 설치하기
부록 B. 실용 전자공학의 기초
__일반적인 부품
__필수 도구
__회로 제작
__더 많은 내용 배우기
부록 C. 라즈베리파이 팁
__와이파이 설정
__라즈베리파이 연결 여부 검사
__와이파이 어댑터의 절전 모드 방지
__라즈베리파이의 코드와 데이터 백업
__라즈베리파이 전체 OS 백업
__SSH로 라즈베리파이에 로그인
__라즈베리파이 카메라 사용
__라즈베리파이의 사운드 활성화
__라즈베리파이의 텍스트-음성 변환 기능 사용
__HDMI 사용
__라즈베리파이를 모바일 기기로 만들기
__라즈베리파이 하드웨어의 버전 확인
★ 이 책에서 다루는 내용 ★
■ 매개변수 방정식과 turtle 모듈로 스파이로그래프와 비슷한 패턴 생성
■ 주파수 배음 시뮬레이션을 이용한 음악 작곡
■ 아스키 아트로 그래픽 이미지 변환
■ 임의의 패턴에 숨겨진 3D 이미지를 생성하는 오토스테레오그램 프로그램 작성
■ 입자 시스템, 투명도, 빌보딩 기법을 이용해 OpenGL 셰이더로 현실감 있는 애니메이션 제작
■ CT와 MRI 스캔으로 얻은 데이터를 사용한 3D 시각화 구축
■ 컴퓨터와 아두이노를 연결해 음악에 반응하는 레이저 쇼 연출
★ 이 책의 대상 독자 ★
이 책은 파이썬을 처음으로 접하는 사람을 대상으로 하지 않으며, 기초 지식을 친절하게 설명하지는 않는다. 하지만 현실 세계의 다양한 문제를 해결하기 위해 파이썬을 어떻게 사용할 수 있는지 구체적인 방법을 보여준다. 이 책의 프로젝트들을 실습하면서 여러분은 파이썬 언어의 미묘한 사용법을 접할 수 있으며 널리 쓰이는 파이썬 라이브러리들의 사용 방법도 배울 수 있다. 가장 중요한 것은, 어떤 문제를 여러 부분으로 나누고 문제를 해결하기 위한 알고리즘을 개발한 뒤, 파이썬을 사용해 기초부터 해결책을 구현하는 방법을 배울 수 있다는 점이다. 현실 세계의 문제들은 경계가 명확하지 않고 특정 분야의 전문적인 지식을 요구하기 때문에 해결하기 어려울 때가 많다. 하지만 파이썬은 문제 해결을 도와주는 다양한 도구를 제공한다. 어려움을 극복하고 문제의 해결책을 찾을 줄 아는 것은 프로그래밍의 고수가 되기 위한 여행에서 가장 중요한 부분이다.
★ 이 책의 구성 ★
1부: 워밍업
1장, ‘아이튠즈 재생목록 다루기’에서는 아이튠즈(iTunes)의 재생목록 파일을 파싱해 트랙 길이와 공통 트랙 등 유용한 정보를 수집하는 방법을 보여준다. 2장, ‘스파이로그래프’에서는 매개변수 방정식과 turtle 그래픽 모듈을 사용해 스파이로그래프와 유사한 곡선을 그려볼 것이다.
2부: 생명체 시뮬레이션
2부에서는 어떤 현상을 시뮬레이션하기 위해 수학적 모델을 사용한다. 3장, ‘콘웨이의 생명게임’에서는 콘웨이의 생명게임 알고리즘을 구현하는 방법을 배운다. 이 알고리즘은 일종의 인공 생명 시뮬레이션으로서 동적 패턴을 생성할 수 있다. 4장, ‘카플러스 스트롱 알고리즘을 이용한 배음 생성’에서는 카플러스 스트롱(Karplus-Strong) 알고리즘을 사용해 현악기의 현이 튕길 때 나는 소리를 생성하는 방법을 보여준다. 그다음 5장, ‘보이즈: 군집 시뮬레이션’에서는 새의 무리를 시뮬레이션하는 보이즈(Boids) 알고리즘을 구현하는 방법을 배울 수 있다.
3부: 이미지 갖고 놀기
3부는 파이썬으로 2D 이미지를 읽고 조작하는 방법을 소개한다. 6장, ‘아스키 아트’에서는 이미지로부터 아스키 아트를 만드는 방법을 보여준다. 7장, ‘포토모자이크’에서는 포토모자이크를 생성하며, 8장, ‘오토스테레오그램’에서는 3D 이미지 환상을 생성하는 오토스테레오그램을 생성하는 방법을 배울 것이다.
4부: 3D 입문
4부의 프로젝트들은 OpenGL 3D 그래픽 라이브러리를 사용한다. 9장, ‘OpenGL의 이해’에서는 OpenGL을 사용해 간단한 3D 그래픽을 만드는 기초 개념을 설명한다. 10장, ‘입자 시스템’에서는 입자 시뮬레이션을 생성하는데, 수학적 지식과 OpenGL 셰이더를 사용해 입자의 이동 경로를 계산하고 화면에 불꽃 분수를 렌더링한다. 그리고 11장, ‘볼륨 렌더링’에서는 볼륨 데이터를 렌더링할 때 사용되는 볼륨 레이 캐스팅 알고리즘을 OpenGL 셰이더를 사용해 구현한다. 이 기법은 MRI나 CT 스캔 같은 의료 영상에 널리 사용된다.
5부: 하드웨어 해킹
마지막 5부에서는 파이썬을 사용해 아두이노 마이크로컨트롤러와 라즈베리파이를 탐구한다. 12장, ‘아두이노 소개’에서는 아두이노를 사용해 간단한 회로로부터 센서 데이터를 읽고 그래프로 나타낸다. 13장, ‘레이저 오디오 디스플레이’에서는 파이썬과 아두이노를 사용해 음악 소리에 반응하는 레이저쇼를 연출하기 위해서 2개의 회전 거울과 레이저를 제어한다. 14장, ‘라즈베리파이 기반의 날씨 모니터’에서는 웹 기반의 날씨 모니터링 시스템을 라즈베리 파이를 사용해 구축한다.
★ 지은이의 말 ★
『파이썬 플레이그라운드』에 온 것을 환영한다! 이 책에서 여러분은 파이썬 프로그래밍의 세계를 탐험하기 위해 설계된 14개의 흥미로운 프로젝트를 만날 수 있다. 스파이로그래프와 유사한 패턴 그리기, 아스키(ASCII) 아트 생성하기, 3D 렌더링, 음악과 동기화되는 레이저 패턴 투영하기 등 다양한 주제가 다뤄진다. 이러한 프로젝트들은 그 자체로 재미있을 뿐만 아니라, 여러분의 아이디어를 펼쳐나가기 위한 기초가 될 수 있도록 설계됐다.
★ 옮긴이의 말 ★
파이썬이 처음 발표된 지도 벌써 25년이 되었다. 네덜란드 출신 프로그래머로서 구글을 거쳐 현재 드롭박스에서 근무 중인 귀도 반 로섬(Guido Van Rossum)이 창조한 파이썬 프로그래밍 언어는 실행 시간에 데이터 타입을 검사하는 동적 타이핑을 제공하며 객체 지향적 성격을 갖고 있는 대화식 언어다. 많은 수의 유용한 라이브러리가 존재해 데이터 과학 등의 분야에서 사용이 확대되고 있으며, 무엇보다도 코드를 작성한 뒤에 컴파일과 링크 과정 없이 곧바로 실행해볼 수 있기 때문에 사용하기가 무척 편리하다.
이 책은 파이썬으로 뭔가 재미있는 걸 만들어보고 싶은 프로그래머를 대상으로 한다. 따라서 파이썬의 기본 문법은 어느 정도 알고 있다고 가정하며, 약간의 수학적 지식도 요구한다. 경험상, 프로그래밍 공부는 물론 기초 개념을 탄탄히 하는 것도 중요하지만, 실제 실행 결과를 눈으로 확인하는 과정도 함께 할 때 지루함을 덜 수 있을 것이다. 그런 측면에서 파이썬 초심자라고 하더라도 이 책에서 제공하는 소스 코드를 다운받아서 실제로 실행해봄으로써 파이썬 공부를 위한 의욕을 유지하고 동기를 부여받는 효과를 얻을 수 있을 것이다.
이 책은 총 5부 14개 장으로 구성되어 있다. 1부의 1장에서는 아이튠즈 재생목록의 구조를 이해하고 조작하는 방법을 설명하며, 2장에서는 스파이로그래프라는 재미있는 곡선을 파이썬으로 생성할 것이다. 2부는 수학적 모델을 바탕으로 몇 가지 시뮬레이션을 파이썬으로 구현한다. 인공 생명을 위한 시뮬레이션으로서 많은 관심을 모은 콘웨이의 생명 게임을 비롯해, 현악기의 음을 컴퓨터로 재생하는 방법, 그리고 장거리를 이동하는 새의 무리가 그 대오를 유지하며 이동하는 모습을 구현하는 알고리즘을 배울 수 있다. 3부에서는 주로 이미지를 조작하는 방법을 다룬다. 아스키 코드(영화 〈마션〉에서 아스키 코드로 통신을 주고받는 모습이 어찌나 반가웠는지 모른다)를 이용한 이미지 생성, 포토모자이크 처리, 3차원 환상을 일으키는 오토스테레오그램 등이 파이썬으로 구현된다. 4부는 OpenGL을 사용한 3D 처리 방법을 설명한다. 다소 어려운 주제이니만큼, 우선 OpenGL의 기초를 설명하는 데 하나의 장을 할애하며, 이후에는 불꽃이 분수처럼 퍼져나가는 입자 시스템을 시뮬레이션하고, 볼륨(체적) 데이터를 렌더링하는 알고리즘도 구현한다. 마지막으로 5부에서는 아두이노와 라즈베리파이와의 연동을 통해 간단한 하드웨어를 제어하는 방법이 소개된다. 또한 파이썬 기반의 경량 웹 서버를 통해 간단한 날씨 모니터링 시스템이 구축된다.
▣ 작가 소개
저자 : 마헤시 벤키타찰람
20년 이상의 경력을 지닌 소프트웨어 엔지니어다. 중학교 3학년 시절부터 기술에 대한 열정을 키워왔으며, 인기 있는 전자공학 및 프로그래밍 블로그 electronut.in을 운영 중이다.
역자 : 이정문
컴퓨터공학을 전공했으며 폭넓은 분야에 관심을 갖고 있다. 번역서로 『Rational XDE로 하는 UML 객체지향 모델링』(에이콘, 2006), 『비기닝 ANSI C++』(에이콘, 2008), 『안드로이드앱 마케팅』(에이콘, 2011), 『데이터 과학으로 접근하는 정보보안』(에이콘, 2016) 등이 있다.
▣ 주요 목차
1부. 워밍업
1장. 아이튠즈 재생목록 다루기
__아이튠즈 재생목록 파일 분석
__요구사항
__코드
____중복곡 찾기
____중복곡 추출하기
____둘 이상의 재생목록에 공통되는 트랙 찾기
____통계 값 수집하기
____데이터를 플롯으로 나타내기
____명령 라인 옵션
__전체 코드
__프로그램 실행
__정리
__실습!
2장. 스파이로그래프
__매개변수 방정식
____스파이로그래프의 방정식
____turtle 모듈의 그래픽
__요구사항
__코드
____Spiro 생성자
____초기설정을 수행하는 함수들
____restart() 메소드
____draw() 메소드
____애니메이션 만들기
____SpiroAnimator 클래스
____genRandomParams() 메소드
____프로그램 재시작
____update() 메소드
____커서를 보이거나 숨기기
____곡선 저장하기
____명령 라인 인수 파싱과 초기화
__전체 코드
__스파이로그래프 애니메이션 실행
__정리
__실습!
2부. 생명체 시뮬레이션
3장. 콘웨이의 생명게임
__동작 원리
__요구사항
__코드
____그리드 표현하기
____초기 조건
____경계 조건
____규칙 구현하기
____프로그램에 명령 라인 인수 전달하기
____시뮬레이션 초기화하기
__전체 코드
__생명게임 시뮬레이션 실행
__정리
__실습!
4장. 카플러스 스트롱 알고리즘을 이용한 배음 생성
__동작 원리
____시뮬레이션
____WAV 파일 생성하기
____단 5음계
__요구사항
__코드
____deque로 원형 버퍼 구현하기
____카플러스 스트롱 알고리즘 구현하기
____WAV 파일 기록하기
____pygame으로 WAV 파일 재생하기
____main() 메소드
__전체 코드
__시뮬레이션 실행
__정리
__실습!
5장. 보이즈: 군집 시뮬레이션
__동작 원리
__요구사항
__코드
____새들의 위치 및 속도 계산하기
____경계 조건 설정하기
____새 그리기
____규칙 적용하기
____새 추가하기
____새들을 분산시키기
____명령 라인 인수
____Boids 클래스
__전체 코드
__보이즈 시뮬레이션 실행
__정리
__실습!
3부. 이미지 갖고 놀기
6장. 아스키 아트
__동작 원리
__요구사항
__코드
____그레이스케일 레벨과 그리드 정의하기
____평균 밝기 계산하기
____이미지로부터 아스키 콘텐츠 생성하기
____명령 라인 옵션
____아스키 아트 문자열을 텍스트 파일에 기록하기
__전체 코드
__아스키 아트 생성 프로그램 실행
__정리
__실습!
7장. 포토모자이크
__동작 원리
____타깃 이미지 분할하기
____색상 값의 평균 구하기
____이미지 대조하기
__요구사항
__코드
____타일 이미지 읽기
____입력 이미지의 평균 색상 값 계산하기
____타깃 이미지 분할하기
____타일과 가장 비슷한 이미지 찾기
____이미지 그리드 생성하기
____포토모자이크 생성하기
____명령 라인 옵션 추가하기
____포토모자이크의 크기 제어하기
__전체 코드
__포토모자이크 생성 프로그램 실행
__정리
__실습!
8장. 오토스테레오그램
__동작 원리
____오토스테레오그램 내의 깊이 지각하기
____깊이맵
__요구사항
__코드
____주어진 타일 반복하기
____임의의 원으로 타일 생성하기
____오토스테레오그램 만들기
____명령 라인 옵션
__전체 코드
__오토스테레오그램 생성 프로그램 실행
__정리
__실습!
4부. 3D 입문
9장. OpenGL의 이해
__올드스쿨 OpenGL
__현대적인 OpenGL: 3D 그래픽 파이프라인
____지오메트리 프리미티브
____3D 변환
____셰이더
____버텍스 버퍼
____텍스처 매핑
____OpenGL을 화면에 표시하기
__요구사항
__코드
____OpenGL 창 생성하기
____콜백 설정하기
____Scene 클래스
__전체 코드
__OpenGL 애플리케이션 실행
__정리
__실습!
10장. 입자 시스템
__동작 원리
____입자의 움직임 모델링하기
____최대 스프레드 설정하기
____입자를 렌더링하기
____현실적인 스파크를 생성하기 위해 OpenGL 블렌딩 사용하기
____빌보딩 사용하기
____애니메이션 생성하기
__요구사항
__입자 시스템을 구현하는 코드
____입자의 지오메트리 정의하기
____입자들의 시간차 배열 정의하기
____입자의 초기 속도 설정하기
____버텍스 셰이더 생성하기
____프래그먼트 셰이더 생성하기
____렌더링
____Camera 클래스
__입자 시스템의 전체 코드
__박스 코드
__메인 프로그램의 코드
____시간 단계별로 입자 갱신하기
____키보드 핸들러
____메인 프로그램 루프 관리하기
__메인 프로그램의 전체 코드
__프로그램 실행
__정리
__실습!
11장. 볼륨 렌더링
__동작 원리
____데이터 포맷
____광선 생성하기
____OpenGL 창 표시하기
__요구사항
__프로젝트 코드의 개요
____3D 텍스처 생성하기
__3D 텍스처의 전체 코드
__광선 생성
____컬러 큐브의 지오메트리 정의하기
____프레임 버퍼 객체 생성하기
____큐브의 후면 렌더링하기
____큐브의 전면 렌더링하기
____큐브 전체를 렌더링하기
____크기 변경 핸들러
__광선 생성의 전체 코드
__볼륨 레이 캐스팅
____버텍스 셰이더
____프래그먼트 셰이더
__볼륨 레이 캐스팅의 전체 코드
__2D 슬라이싱
____버텍스 셰이더
____프래그먼트 셰이더
____2D 슬라이싱을 위한 사용자 인터페이스
__2D 슬라이싱의 전체 코드
__코드 종합
__메인 파일의 전체 코드
__프로그램 실행
__정리
__실습!
5부. 하드웨어 해킹
12장. 아두이노 소개
__아두이노
__아두이노 생태계
____언어
____IDE
____커뮤니티
____주변장치
__요구사항
__광센서 회로 구축
____회로의 동작 원리
____아두이노 스케치
____실시간 그래프 생성하기
__파이썬 코드
__전체 파이썬 코드
__프로그램 실행
__정리
__실습!
13장. 레이저 오디오 디스플레이
__레이저 패턴 생성
____모터 제어
____고속 푸리에 변환
__요구사항
____레이저 디스플레이 만들기
____모터 드라이버 배선하기
__아두이노 스케치
____아두이노의 디지털 출력 핀 설정하기
____메인 루프
____모터 정지하기
__파이썬 코드
____오디오 장치 선택하기
____입력 장치로부터 데이터 읽기
____데이터 스트림의 FFT 계산하기
____FFT 값에서 주파수 정보 추출하기
____주파수를 모터 속도와 방향으로 변환하기
____모터 설정 테스트하기
____명령 라인 옵션
____수동 테스트
__전체 파이썬 코드
__프로그램 실행
__정리
__실습!
14장. 라즈베리파이 기반의 날씨 모니터
__하드웨어
____DHT11 온도 및 습도 센서
____라즈베리파이
____라즈베리파이 설정하기
__소프트웨어 설치와 구성
____운영체제
____초기 설정
____와이파이 설정
____프로그래밍 환경 설정하기
____SSH를 통한 연결
____보틀 웹 프레임워크
____flot으로 그래프 그리기
____라즈베리파이 종료하기
__하드웨어 제작
__코드
____센서 데이터 요청 처리하기
____데이터를 그래프로 나타내기
____update() 메소드
____LED를 처리하는 자바스크립트 핸들러
____대화식 기능 추가하기
__전체 코드
__프로그램 실행
__정리
__실습!
부록 A. 소프트웨어 설치
__프로젝트의 소스 코드 설치
__윈도우에 설치하기
____GLFW 설치
____각 모듈별로 사전에 빌드된 바이너리 설치
____그 밖의 옵션들
__OS X에 설치하기
____Xcode와 MacPorts 설치
____모듈 설치
__리눅스에 설치하기
부록 B. 실용 전자공학의 기초
__일반적인 부품
__필수 도구
__회로 제작
__더 많은 내용 배우기
부록 C. 라즈베리파이 팁
__와이파이 설정
__라즈베리파이 연결 여부 검사
__와이파이 어댑터의 절전 모드 방지
__라즈베리파이의 코드와 데이터 백업
__라즈베리파이 전체 OS 백업
__SSH로 라즈베리파이에 로그인
__라즈베리파이 카메라 사용
__라즈베리파이의 사운드 활성화
__라즈베리파이의 텍스트-음성 변환 기능 사용
__HDMI 사용
__라즈베리파이를 모바일 기기로 만들기
__라즈베리파이 하드웨어의 버전 확인
01. 반품기한
- 단순 변심인 경우 : 상품 수령 후 7일 이내 신청
- 상품 불량/오배송인 경우 : 상품 수령 후 3개월 이내, 혹은 그 사실을 알게 된 이후 30일 이내 반품 신청 가능
02. 반품 배송비
반품사유 | 반품 배송비 부담자 |
---|---|
단순변심 | 고객 부담이며, 최초 배송비를 포함해 왕복 배송비가 발생합니다. 또한, 도서/산간지역이거나 설치 상품을 반품하는 경우에는 배송비가 추가될 수 있습니다. |
고객 부담이 아닙니다. |
03. 배송상태에 따른 환불안내
진행 상태 | 결제완료 | 상품준비중 | 배송지시/배송중/배송완료 |
---|---|---|---|
어떤 상태 | 주문 내역 확인 전 | 상품 발송 준비 중 | 상품이 택배사로 이미 발송 됨 |
환불 | 즉시환불 | 구매취소 의사전달 → 발송중지 → 환불 | 반품회수 → 반품상품 확인 → 환불 |
04. 취소방법
- 결제완료 또는 배송상품은 1:1 문의에 취소신청해 주셔야 합니다.
- 특정 상품의 경우 취소 수수료가 부과될 수 있습니다.
05. 환불시점
결제수단 | 환불시점 | 환불방법 |
---|---|---|
신용카드 | 취소완료 후, 3~5일 내 카드사 승인취소(영업일 기준) | 신용카드 승인취소 |
계좌이체 |
실시간 계좌이체 또는 무통장입금 취소완료 후, 입력하신 환불계좌로 1~2일 내 환불금액 입금(영업일 기준) |
계좌입금 |
휴대폰 결제 |
당일 구매내역 취소시 취소 완료 후, 6시간 이내 승인취소 전월 구매내역 취소시 취소 완료 후, 1~2일 내 환불계좌로 입금(영업일 기준) |
당일취소 : 휴대폰 결제 승인취소 익월취소 : 계좌입금 |
포인트 | 취소 완료 후, 당일 포인트 적립 | 환불 포인트 적립 |
06. 취소반품 불가 사유
- 단순변심으로 인한 반품 시, 배송 완료 후 7일이 지나면 취소/반품 신청이 접수되지 않습니다.
- 주문/제작 상품의 경우, 상품의 제작이 이미 진행된 경우에는 취소가 불가합니다.
- 구성품을 분실하였거나 취급 부주의로 인한 파손/고장/오염된 경우에는 취소/반품이 제한됩니다.
- 제조사의 사정 (신모델 출시 등) 및 부품 가격변동 등에 의해 가격이 변동될 수 있으며, 이로 인한 반품 및 가격보상은 불가합니다.
- 뷰티 상품 이용 시 트러블(알러지, 붉은 반점, 가려움, 따가움)이 발생하는 경우 진료 확인서 및 소견서 등을 증빙하면 환불이 가능하지만 이 경우, 제반 비용은 고객님께서 부담하셔야 합니다.
- 각 상품별로 아래와 같은 사유로 취소/반품이 제한 될 수 있습니다.
상품군 | 취소/반품 불가사유 |
---|---|
의류/잡화/수입명품 | 상품의 택(TAG) 제거/라벨 및 상품 훼손으로 상품의 가치가 현저히 감소된 경우 |
계절상품/식품/화장품 | 고객님의 사용, 시간경과, 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 |
가전/설치상품 | 전자제품 특성 상, 정품 스티커가 제거되었거나 설치 또는 사용 이후에 단순변심인 경우, 액정화면이 부착된 상품의 전원을 켠 경우 (상품불량으로 인한 교환/반품은 AS센터의 불량 판정을 받아야 합니다.) |
자동차용품 | 상품을 개봉하여 장착한 이후 단순변심의 경우 |
CD/DVD/GAME/BOOK등 | 복제가 가능한 상품의 포장 등을 훼손한 경우 |
상품의 시리얼 넘버 유출로 내장된 소프트웨어의 가치가 감소한 경우 | |
노트북, 테스크탑 PC 등 | 홀로그램 등을 분리, 분실, 훼손하여 상품의 가치가 현저히 감소하여 재판매가 불가할 경우 |