콘텐츠로 건너뛰기

파일 탐색 유틸리티 fd 사용법

이 블로그에서 GNU find의 사용법에 대한 글을 올린 적이 있는데, 오늘은 이 GNU find를 대체할 수 있는 fd 라는 툴의 사용법에 대해서 간단히 정리해보고자 한다. fd는 이름부터 ‘find’를 50%줄여서 더 빠르게 쓴다는 취지로 개발되었으나, GNU find를 ‘완전히’ 대체하는 것을 목표로 하지는 않는다. 대신에 옵션명을 보다 직관적으로 현대화(?)하고 더 빠르게 동작할 수 있는데 중점을 두고 개발되었다. 개발자에 따르면 find 유틸이 제공하는 전체 기능의 80% 정도를 커버할 수 있으며, 성능은 대략 9배이상 빠른 것으로 본다고 한다. 무엇보다 윈도환경에서 사용이 가능하다. (msys 같은… 더 보기 »파일 탐색 유틸리티 fd 사용법

이미지를 아스키코드로 렌더링하기

인터넷에 보면 꽤나 유명한 사진 이미지를 아스키문자로 표현해놓은 것들을 종종 볼 수 있다. 선이나 슬래시 문자를 사용해서 그림처럼 그리는 것들은 아마도 장인정신을 발휘하여 한 땀 한 땀 수놓은 것들이겠지만, 그렇지 않고 문자와 문장 부호들만으로 멀리서 보면 그림처럼 보이게 표현해놓은 예들이 무척 많다. 이런 아스키 아트들은 사실 약간의 아이디어만 있으면 간단히 만들 수 있는데, 오늘은 아스키 코드로 이미지를 렌더링하는 방법에 대해서 알아보자. 이미지 처리를 위해서는 간단히 PIL 정도의 라이브러리만 있으면 된다.

더 보기 »이미지를 아스키코드로 렌더링하기

OpenCV를 사용하여 두 이미지의 다른 부분 찾기

두 이미지의 구조적 유사성을 분석하는 알고리듬으로 SSIM (Structural Similarity)가 있는데, 이를 사용하면 두 이미지가 어느 정도로 유사한지, 어느 부위가 다른지를 알아낼 수 있다. ssim을 수행하는 함수는 scikit-image 라이브러리가 제공하고 있으니, 이를 사용해서 두 이미지의 다른 부분을 찾는 작업을 수행할 수 있다. 다만 이미지를 비교하기 위해 필요한 전처리와 이미지 차이를 구분한 이후의 처리를 위해서는 opencv의 사용이 필수불가결하다. https://docs.opencv.org/master/modules.html 에서 각 모듈에 대한 정의와 Python API를 볼 수 있다. 필요한 라이브러리 설치 몇 가지 라이브러리가 필요하다. 먼저 opencv-python을 설치해서 OpenCV를 사용할 수… 더 보기 »OpenCV를 사용하여 두 이미지의 다른 부분 찾기

vim의 키 맵 설정 팁

vim에서 키맵을 잘 활용하는 것의 중요성은 딱히 말하지 않아도 될 것 같으니, 키 맵을 설정하는데 있어서 몇 가지 알아두면 좋은 팁들을 소개하고자 한다. 키 맵 작성 방법 키 맵은 :map 명령을 사용해서 정의할 수 있다. :map A B의 형식이다. A는 사용할 키 시퀀스이고 B는 A를 입력했을 때 작동할 키 시퀀스이다. 여기서 A, B가 모두 키 시퀀스라는 점을 잘 알아두자. 특정한 키 하나를 눌러서 동작을 실행하는게 아니라, 두 개 이상의 키를 순서대로 눌러서 동작을 실행할 수 있다. 따라서 실제로 vim의 키맵은… 더 보기 »vim의 키 맵 설정 팁

Vim에서 팝업 사용하기

vim8부터 popup 기능이 새롭게 도입되었다. 이제 vim script에서 팝업을 만들어서 대화 상자나 메뉴 혹은 그외의 UI들을 팝업 레이어로 만들어서 편집기 위로 띄울 수 있게 되었다. 특히 비동기로 외부 job을 실행하는 함수를 작성하는 경우에 그 결과를 사용자에게 알려주는 용도로 사용하기에 용이하다. 이 기능을 어떻게 사용하는지 살펴보도록 하자.

더 보기 »Vim에서 팝업 사용하기

중심극한정리

어떤 집단의 특성을 정확하게 알고 싶을 때, 가장 이상적인 해결 방법은 해당 집단의 전체 구성원을 조사해보는 것이다. 어떤 선거 후보에 대한 실제 지지율을 알고 싶다면 모든 유권자들을 만나서 지지여부를 조사하는 것이 가장 정확한 답에 가까울 것이며, 남자 고등학생들의 키를 알고 싶다면 모든 남자 고등학생들의 키를 조사하면 될 일이다. 하지만 이런 전수조사는 현실적으로 비용과 시간의 한계 때문에 실제로 진행하는 것은 불가능에 가깝다. 그래서 사람들은 전체 모집단의 일부를 표본으로 뽑아, 표본조사를 수행한다. 그리고는 통계학의 힘을 빌려서 표본 조사의 결과를 바탕으로 모집단의 특성을… 더 보기 »중심극한정리

순열과 조합 – itertools (python)

알려져 있는 원소들로 구성되는 가능한 모드 조합 및 순열을 구하려 할 때, 이를 직접 구현해보는 것도 좋지만 itertools 모듈에 있는 함수를 사용하는 것을 추천한다. 이 함수들은 기본적으로 제너레이터 함수이기 때문에 한번에 리스트 등으로 만들기 전까지는 메모리에 큰 부담을 주지 않으며 성능도 적절한 편이다. 오늘은 itertools의 함수 중에서 순열과 조합에 관련된 함수들을 알아보도록 하자.

더 보기 »순열과 조합 – itertools (python)

파이썬 패턴매칭

파이썬 3.10에서는 구조적 패턴 매칭이라는 새로운 문법이 도입된다. 패턴매칭은 match 문이라는 새로운 구문에 적용된며, 스칼라 같은 다른 언어들에서 영향을 받았다고 한다. match 문은 어떤 값(subject)을 여러 다른 형태(pattern)들과 들어맞을 때 까지 비교한다. 이는 C와 같은 언어의 switch 문과 같은 것이 아니냐고 할 수 있겠지만, switch 문이 여러 케이스의 값을 비교하는 것과 달리, match 문은 값에 대해서 패턴에 들어맞는지를 보는 것이 차이라 하겠다.

더 보기 »파이썬 패턴매칭

오일러 프로젝트 87번

어떤 소수의 제곱, 세제곱, 네제곱의 합으로 표현할 수 있는 수를 찾는 문제. 소수의 제곱 + 소수의 3제곱 + 소수의 4제곱)으로 나타낼 수 있는 가장 작은 수는 28입니다. 28 = 22 + 23 + 2433 = 32 + 23 + 2449 = 52 + 23 + 2447 = 22 + 33 + 24 50 미만에 이런 수는 모두 네 개 있습니다. 5천만 미만에 이렇게 나타낼 수 있는 수는 모두 몇 개나 됩니까? 보다 영리하게 푸는 방법은 여전히 모르겠고, 현재로서는 brute-force로 푸는… 더 보기 »오일러 프로젝트 87번

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

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

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