Pillow 기본 사용법

PIL은 (아마 짐작이 가능하겠지만) Python Imaging Library의 약자로, 파이썬에서 여러 포맷의 이미지를 읽고 조작할 수 있게 하는 라이브러리이다. GUI 관련 라이브러리/프레임워크들이 일부 이미지 조작과 관련한 기능을 제공하긴 했지만, 2000년대 초반에 ‘파이썬스럽게’ 이미지를 처리할 수 있고, 가장 많은 기능을 사용할 수 있었다. 그러나 행복한 나날은 오래가지 못했는데, 2009년쯤해서 PIL은 더이상 새 버전이 릴리즈 되지 않았다.

더 보기 »Pillow 기본 사용법

prompt toolkit을 사용하는 비동기 입력 프롬프트

prompt_toolkit은 asyncio를 지원하는 prompt_async()를 제공한다. input() 함수나 보통의 prompt() 함수는 입력을 받는 중에는 스레드 전체를 블럭하기 때문에 다른 동작이 모두 멈추게 된다. prompt_async()는 이러한 문제를 해결할 수 있는 대안이다. 참고로 patch_stdout()을 사용하면 입력을 기다리는 중에 다른 코루틴이 출력을 할 수 있게 하면서, 입력 중간에 출력되는 내용 때문에 입력 프롬프트가 망가지는 것을 방지할 수 있다. (단 코루틴에서 print()를 통해 출력한 경우만 제대로 작동하는 것 같고, print_formatted_text()를 쓰면 좀 꼬이는 거 같긴 하다…) 위 코드에서 task1은 1초마다 화면에 문구를 반복해서 출력한다. task2에서는… 더 보기 »prompt toolkit을 사용하는 비동기 입력 프롬프트

PUB-SUB 패턴에서 멀티파트 데이터를 사용하기

PUB-SUB 소켓은 데이터를 발송하는 복수의 Publisher와 이를 수신하는 역시 복수의 Subscriber들이 연결되어 데이터를 분산하는 ZMQ 패턴에 사용된다. 이들은 REQ-REP 패턴과 다르게 PUB쪽에서 SUB쪽으로 단방향으로 데이터가 전송되며, PUSH-PULL과 다르게 하나의 메시지를 모든 Subscriber가 수신한다는 특징이 있다. 이 때, SUB쪽 소켓은 자신에게 맞는 데이터만을 수신하도록 필터를 설정하는데, 보통 PUB-SUB 패턴의 예제에서는 이 필터를 문자열이나 바이트로 설정하여 일치하는 경우만 수신하도록 한다.

더 보기 »PUB-SUB 패턴에서 멀티파트 데이터를 사용하기

SQLite3 – Union 연산

SELECT 문을 사용해서 여러 테이블에서 결과를 조회할 때, JOIN을 사용하여 여러 테이블의 결과를 하나의 테이블로 결합할 수 있는 것을 살펴본 바 있다. JOIN은 두 개의 테이블을 열 방향으로 이어 붙이는 결과를 만들어 낸다. 이와 달리 각 열의 구성이 비슷한 테이블들을 아래/위, 즉 행 방향으로 이어붙이는 방법도 필요할 것이다. 이 때 사용할 수 있는 연산자가 바로 UNION이다. UNION은 하나 이상의 데이터베이스에서 SELECT 쿼리를 사용해 얻을 수 있는 비슷하게 생긴 여러 데이터를 하나의 테이블로 결합할 때 사용한다. 이 때 특이한 점은 연결되는… 더 보기 »SQLite3 – Union 연산

Vim 설정 관련 팁

옵션 목록과 도움말 찾기 옵션을 설정하기 전에 옵션에 관한 도움말을 읽어보는 것을 권장한다. 전체 옵션을 한 눈에 볼 수 있는 명령으로 :opt 가 있다. 이 명령을 실행하면 현재 창에서 새 분할 창이 생겨서, 전체 옵션이 망라되고 간단한 설명과 현재 설정되어 있는 값을 확인할 수 있다. 분할창을 전체 창으로 보려면 ctrl-w o를 누른다. (<ctrl-w>를 누른 후 <o> 키를 한 번 더 누르면 된다.) 옵션 창에서 옵션 이름 위에서 K (대문자이므로 <shift-k>를 누를 것)를 누르면 해당 항목에 대한 도움말을 추가로 표시할 수… 더 보기 »Vim 설정 관련 팁

JSON파일을 읽기 – Objective-C

Foundation에는 객체를 JSON 형식으로 직렬화하는 도구인 NSJSONSerialization를 제공한다. 이를 사용하면 객체 그래프를 JSON으로 변환하거나 반대로 JSON으로부터 객체 데이터를 재구성하여 사용할 수 있다. JSON 파일은 일반적인 텍스트 편집기로 열어볼 수 있는 텍스트 파일이지만, NSJSONSerialization은 파일을 읽어들인 바이트스트림을 객체로 변환한다. 따라서 파일은 NSData 형식으로 읽어들인 후에 사용하면 된다.

더 보기 »JSON파일을 읽기 – Objective-C

같은 것을 포함하는 순열 생성기 (Python)

OOO, XX 로 만들 수 있는 5글자 문자열을 모두 생성하는 방법을 소개한다. 총 5개의 글자로 만들 수 있는 순열은 5! (120) 가지이다. 그런데 같은 O 끼리와 같은 X 끼리는 구분할 수 없으므로 실제로는 5!/(3! * 2!) 가지로 10가지의 조합만 가능할 것이다. 파이썬의 itertools 에서는 순열, 조합 및 중복 순열과 중복 조합을 만드는 함수가 제공되지만 같은 것을 포함하는 순열을 생성하는 함수는 제공되지 않는다. 중복된 원소가 있을 때, 중복 없는 순열을 만드는 방법은 다음과 같이 생각해 볼 수 있다. OOOXX 의 5글자로… 더 보기 »같은 것을 포함하는 순열 생성기 (Python)

오일러 프로젝트 85

균일한 격자 내에서 만들 수 있는 직사각형의 개수에 관한 문제이다. 눈금의 크기가 1인 격자에서 가로, 세로를 정했을 때 그 속에서 만들 수 있는 직사각형의 개수가 2백만개에 가장 근접할 때의 가로/세로를 구하는 것이다. 격자의 가로 크기를 x, 세로 크기를 y라 했을 때 그 내부에 존재하는 직사각형들의 가로 크기는 1, 2, 3, … x 이고 세로 크기도 1, 2, 3, … y 가 된다. 가로가 a 일 때 이 폭으로 x 에 들어갈 수 이는 경우는 (x + 1 – a) 개… 더 보기 »오일러 프로젝트 85