콘텐츠로 건너뛰기

Capslock 키의 활용도 높이기 (AutoHotkey)

여러분은 CapsLock키 많이 쓰시나요? 유용하게 잘 쓰시는 분들도 있겠지만, 저 같은 경우에는 거의 사용하지 않습니다. 심지어 어떤 분들은 이 커다란 키가 뭐하는 키인지 모르는 분들도 계실 것 같고요. CapsLock키에 대해 한 가지 아쉬운 점은, 그 쓰임새가 신통치 않은 것에 비해서는 너무 좋은 자리에 위치하고 있다는 점입니다. 이 낭비되는 키를 어떻게 더 효율적으로 활용할 수 있는 방법이 없을까요? CapsLock키를 다른 키로 변경하기 먼저 해야 할일은 키보드에서 CapsLock 키를 누르더라도 해당 키가 아닌 다른 키로 인식하도록 하는 것입니다. AHK에서도 CapsLock 키를 조합키의… 더 보기 »Capslock 키의 활용도 높이기 (AutoHotkey)

Notepad++ – 특정 패턴의 단어나 문구만 추출하여 정리하기

최근에 텍스트로 된 CSV, JSON 파일과 엑셀을 모두 사용하면서 지난한 작업을 많이 하고 있는데, 다시금 Notepad++의 덕을 많이 보고 있습니다. 단순히 데이터를 포맷팅하거나, 단순한 찾기/바꾸기 외에도 제품바코드 번호나 주문번호 같은 특정 규격의 정보를 큰 파일에서 추출한다거나, 엑셀 파일에서 칼럼을 복사해와서 컴마로 연결하거나 하는 일을 주로 하게 됩니다. 오늘은 이런 일들을 처리하면서 평소에 잘 쓰지 않다가 익숙해진 몇 가지 기능들을 소개하려고 합니다. Notepad++는 정규식을 사용하여 검색이나 치환을 할 수 있는 강력한 기능을 갖고 있습니다. 정규식은 보통 특정 패턴에 매치되는 부분을 찾거나… 더 보기 »Notepad++ – 특정 패턴의 단어나 문구만 추출하여 정리하기

엑셀에서 주어진 생년월일로부터 만나이 구하기

엑셀에서 주어진 날짜를 생년월일로 하는 만나이를 계산하는 것은 상당히 귀찮고 번거로운 일입니다. 만약 생년월일이 A2 셀에 있다면, 그 날짜에 대한 오늘 기준의 만나이는 다음과 같이 계산합니다. 날짜를 년, 월, 일로 분리해서 오늘과 그날을 비교해야하는 로직이기 때문에 불가피하게 수식이 복잡하고 길어집니다. 물론 오늘의 연, 월, 일을 특정한 셀에 넣어두고 참조하는 방법도 있겠지만, 그것도 뭐 그리 내키는 수식은 아닙니다. 하지만 엑셀에서 날짜를 다루는 방식을 이해한다면 좀 더 간단한 만나이 계산을 할 수 있습니다. 엑셀에서 날짜는 1900년 1월 1일부터 하루씩 센 일수로 정의됩니다.… 더 보기 »엑셀에서 주어진 생년월일로부터 만나이 구하기

Rust 기초 (1)

데이터의 변수와 메모리 관리 방식 Rust는 정적 타이핑 언어로, 컴파일 시점에 모든 변수의 타입이 결정됩니다. Rust는 다양한 데이터 타입을 가지고 있는데, 이러한 타입들은 메모리를 사용하는 특성에 따라 스칼라 타입과 복합형으로 구분됩니다. 스칼라 타입은 하나의 단일 값을 의미하는데, 불리언(bool), 정수, 실수, 문자(char) 타입등이 여기에 속합니다. 복합형은 한 가지 정보로만 구성되는 데이터가 아니며, 같은 타입이어도 크기가 다를 수 있는 유형입니다. 문자열(String) 같은 타입이 복합형에 해당합니다. 스칼라 타입은 단일 값이며, 항상 그 크기가 고정되어 있습니다. 따라서 이러한 타입들은 스택에 저장됩니다. 문자열과 같은 복합형은… 더 보기 »Rust 기초 (1)

Python – 스도쿠 문제 풀이

예전에 LiveScript를 사용해서 스도쿠 문제를 푸는 코드를 소개한 적이 있었는데, 세상 쓸데없는 글이었습니다. LiveScript는 별로 알려지지도 않았고, 심지어 제가 처음 관심을 갖고 익혀본 그 즈음부터는 아예 개발도 중단된 상태로 방치되고 있는 언어거든요. 게다가 언어 자체가 함수형 언어식 표현을 적극적으로 도입하고 있고, 가독성하고는 크게 관련이 없다보니 코드 하나하나가 지금 읽어봐도 뭔지 도대체 알 수가 없더군요. (사실 알 수는 있습니다;) 그래서 다시 파이썬으로는 스도쿠를 푸는 프로그램을 어떻게 만드는지 소개하고자 합니다. 이번에는 최대한 간결하고 읽기 편한 코드를 만드는 것을 목표로, 가장 짧게(?) 작성하는… 더 보기 »Python – 스도쿠 문제 풀이

async for 구문의 작동 원리

비동기, 즉 작업이 완료되지 않더라도 리턴하는 함수는 프로그래밍에서 꽤 오랜 역사를 가지고 있는 아이디어입니다. . 비동기 함수는 ‘동시성’ 혹은 ‘병렬처리’를 위해 고안된 개념이기도 하고요. asyncio 가 비동기 처리에 관한 라이브러리라는 것은 그 이름부터 이미 알려주고 있습니다. 그런데 다시 말하지만 ‘비동기’는 동시성이나 병렬처리를 위해 고안된 개념이라는 것입니다. 컴퓨터 공학 분야에서 병렬처리나 분산처리에 대한 논의는 오래전부터 있었고, 지금 널리 사용되고 있는 다중 스레드의 개념도 이때 등장하여, 여러 상황이나 조건들에 의해 채택되고 지금까지 이어지고 있는 것입니다. 거꾸로 말하면 동시성 처리를 위해서 반드시 스레드만… 더 보기 »async for 구문의 작동 원리

Textual 강좌 3 – 위젯과 DOM 쿼리

위젯은 화면의 일정 영역을 관리하는 역할을 담당하는 구성 요소라고 정의된다. 위젯은 앱이 하는 것과 똑같은 방식으로 이벤트에 응답하고, 하위 위젯을 포함하여 계층 구조를 이룰 수도 있으므로 일종의 미니앱이라고 생각할 수 있다. DOM 쿼리 Textual에서 위젯의 UI 스타일은 CSS를 통해서 설정하게 된다. 해석한 CSS 내의 특정한 스타일을 위젯에 적용하기 위해서는 CSS 셀렉터로부터 그에 매칭하는 위젯을 선택할 수 있어야 함을 의미한다. 따라서 Textual에는 웹브라우저와 마찬가지로 DOM 쿼리를 통해 요소를 찾는 기능을 기본적으로 제공한다. query_*로 시작하는 메소드들을 사용하는데, 가장 많이 사용하는 메소드는 query_one… 더 보기 »Textual 강좌 3 – 위젯과 DOM 쿼리

Textual – 프로그레스 바 추가하기

Textual에서 시간이 오래 걸리는 작업을 처리하면 UI의 반응성이 떨어지는 상황이 발생한다. 이 때 취할 수 있는 UI 적인 개선으로는 몇 가지 방법이 있는데, 그 중 가장 직관적인 것이 진행률을 보여주는 것이다. 진행률을 보여주는 프로그레스 바는 원래 Rich에도 포함되어 있는데, 그 중 기본적인 유형을 Textual에도 사용할 수 있게 되었다. ProgressBar 위젯을 생성하여 화면에 추가한 다음, total 속성을 전체 일의 양으로 지정하고, 매 작업을 처리할 때마다 update() 나 advance()를 사용하여 진행된 분량을 늘려주면 프로그레스바는 그에 따라 UI 내용을 자동으로 업데이트한다. 이러한 사용방법은… 더 보기 »Textual – 프로그레스 바 추가하기

Textual 강좌 2 – 이벤트

사용자가 앱에서 키보드의 키를 누르거나, 마우스로 버튼등의 UI 위젯을 클릭하는 등의 조작을 앱은 그에 따른 어떤 동작을 수행하여 사용자 입력에 반응해야 한다. Textual에서 사용자 조작은 이벤트로 취급되어 해당 이벤트를 처리하는 이벤트 핸들러에 의해 미리 지정된 동작이 수행된다. 이벤트의 처리는 메시지 시스템이라는 매커니즘을 통해 처리된다. 이 방식은 웹에서 자바스크립트로 이벤트를 처리하는 것과 유사한 방식으로, 모든 이벤트는 메시지로 발행되고, 메시지를 수신할 수 있는 객체가 해당 메시지를 처리하게 된다. Textual이 내부적으로 미리 정의해놓은 메시지 외에도 커스텀 메시지를 정의하고 발행할 수 있으며, 이는 특정한… 더 보기 »Textual 강좌 2 – 이벤트

Textual 강좌 1 – App 구성하기

Textual은 터미널 환경에서 복잡한 UI를 가진 TUI앱을 빠르게 개발할 수 있는 애플리케이션 개발 프레임워크이다. 다른 의존성은 거의 필요하지 않으며, 모든 플랫폼의 터미널에서 작동한다. TUI앱의 가장 큰 장점은 SSH와 같은 원격 터미널에서도 UI를 갖춘 앱을 실행할 수 있다는 것이다. 파이썬에서 GUI를 구현하기 위한 여러 라이브러리나 프레임워크를 몇 년간 찾아 보았지만, 이 만큼 사용하기 편리하고 멋진 도구는 만난적이 없었다. Textual 홈페이지의 가이드 중 일부를 가져와서 간단한 강좌의 형식으로 소개해보고자 한다. 앱 구성하기 Textual 앱을 구성하고 실행하는 방법은 다음과 같다. Textual은 간단한 텍스트… 더 보기 »Textual 강좌 1 – App 구성하기