vim 플러그인의 키맵과 함수 이름

vim 플러그인을 작성하는 것을 간단히 요약하면 어떤 기능을 수행하는 함수를 작성하고, 이 함수를 호출할 수 있는 방법을 제공해주는 것이라 할 수 있다. 이 때 고려해야하는 중요한 요소 중 하나는 사용자는 내가 작성하는 플러그인 말고도 엄청나게 많은 다른 플러그인을 사용하고 있을 것이라는 것이다. 따라서 함수의 이름이나 사용자 정의 명령의 이름, 키 맵핑등이 온전히 내가 원하는대로 사용자가 쓸 수 있을 것이라는 생각을 하는 것은 위험하다.

더 보기 »vim 플러그인의 키맵과 함수 이름

ASCIIMATICS 101 – 2

지난 글에서 ASCIIMATICS로 기본적인 애니메이션 효과를 구현하는 방법에 대해 살펴보았다. 이번에는 텍스트 기반 UI를 구성하는 방법에 대해 다뤄보려고 한다. 텍스트 기반 UI는 여느 GUI와 마찬가지로 기본적인 UI 컴포넌트인 위젯을 조합하는 형태로 만들어진다. 대신에 일반적인 애니메이션 재생과 달리 이러한 위젯들은 사용자와의 상호작용을 전제로 디자인되어 있으며, 화면 뒤에 존재하는 데이터를 표시하고 변경하는 동작을 수반한다.

더 보기 »ASCIIMATICS 101 – 2

ASCIIMATIC 101

파이썬으로 가장 GUI를 구현하는 방법으로는 여러 가지가 있다. 기본으로 내장된 Tkinter 도 있고, wxPython 이나 pyQt 같은 것까지. 개인적으로 매우 간단한 UI를 갖춘 프로그램을 작성하려고 했지만 이래 저래 복잡해서 뭐 좀 없을까 하고 하다가 asciimatics를 알게되었다. asciimatics는 기본적으로 아스키문자를 사용해서 콘솔 화면에 애니메이션을 구현하는 라이브러리인데, 이 중에서 입출력과 관련된 기능도 있고, 간단한 TUI를 구현하는 기능 역시 존재한다. 이를 사용하면 간단한 폼이나 대화상자 등을 시각적으로 구현할 수 있고, 그외 이것 저것 재미난 것들을 화면에 구현해볼 수 있다. (이미지를 텍스트로 변환해서 표시한다던지…)… 더 보기 »ASCIIMATIC 101

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 설정 관련 팁