Home » 21세기소년

21세기소년

21세기소년 / IT / 정보기술 / 인터넷 / 프로그래밍 / 미래 / 과학 / 과학지식 / 물리 / 화학 / 천문 / 생물학 / 이과생이나 관심가질 법한 자질구레한 이야기들

Julia 정규식 다루기

Julia에서 정규식은 별도의 모듈을 반입하지 않고 사용할 수 있으며, 패턴 자체는 Base.RegExp 타입으로 표현된다. 정규식 패턴을 만들 때에는 r"..." 형태의 리터럴로 바로 정의할 수 있다. (대신, raw string문자열은 raw"..."이다.) 한번 생성한 Regexp 값은 .pattern 필드로 그 패턴을 다시 확인할 수 있다. 참고로 r" .... " 리터럴은 정규식 패턴을 좀 더 손쉽게 사용할 수 있게 하기 위해 백슬래시를 이스케이프해준다. 따라서 \d 등과 같은 이스케이프 문자 시퀀스에서 백슬래시는 두 번이 아니라 한 번만 쓰면 된다. (r"\d+")

더 보기 »Julia 정규식 다루기

예제로 알아보는 ffmpeg 필터 사용법

ffmpeg는 비디오, 오디오, 이미지등 사람이나 기계로 만든 거의 모든 포맷의 미디어 데이터를 인코딩/디코딩/필터링할 수 있는 멀티미디어 프레임워크로 미디어 관련한 소프트웨어들에 거의 기본적으로 탑재되어 있다. ffmpeg는 명령줄 도구 형식으로도 사용할 수 있어서 간단한 사용법만 익혀 두면 은근 유용하게 사용할 수 있다. ffmpeg는 실제로 엄청나게 많은 옵션들을 지원하며, 웬만한 영상 편집/변환 프로그램이 할 수 있는 일을 거의 다 할 수 있다고 보면 된다. 전체 옵션들은 문서화가 잘되어 있으며, 공식 위키에서도 굉장히 유용한 팁들을 찾을 수 있다. (영문임) ffmpeg tool 공식 문서 공식… 더 보기 »예제로 알아보는 ffmpeg 필터 사용법

cocnvim rename 이 작동하지 않을때

cocnvim + jedi-language-server 조합을 사용중인데, 언제부터인가 rename 기능이 작동을 안하기 시작했다. 같은 버전의 cocnvim을 설치했을 때, nvim에서는 잘 되고, vim에서는 PC에 따라서 되는 것도 있고 안되는 것도 있고 원인을 찾을 수가 없었다. (심지어 같은 소스로 빌드한 vim에서도 같은 cocnvim 버전, 같은 nodejs 버전에서도 결과는 모두 달랐다. 또 대상 파일의 언어에 무관하게 재현되는 문제이다.) 일단 임시 방편으로 cocnvim 설정에서 coc.preferences.promptInput 값을 false로 두면 이름 변경할 때 팝업창이 아닌 명령줄에서 이름을 입력하도록 바뀌는데, 이렇게 설정을 바꿔둔 경우에는 테스트 해 본 모든 환경에서… 더 보기 »cocnvim rename 이 작동하지 않을때

vim에서 터미널로 코드를 실행하기

vim에서 파이썬이나 자바스크립트 코드를 작성하고 바로 실행하는 가장 쉬운 방법은 :!python % 과 같이 외부 명령을 바로 호출하는 것이다. 이 경우 vim은 잠시 숨겨지고 해당 명령을 실행하는 상태로 화면이 전환된다.

보다 IDE와 비슷한 느낌(느낌 알잖아요…)이 중요하다면 vim내에서 창을 나누고 그 창에서 실행 결과를 보는 방법이 있다. vim8에서 도입된 job 기능을 사용하여 백그라운드에서 해당 프로그램이 실행되면 그 결과를 새 버퍼로 받아서 보여주는 방법도 있고, 또 아예 :term 명령으로 해당 파일을 여는 방법도 있다.

더 보기 »vim에서 터미널로 코드를 실행하기

matplotlib의 기본 사용법 및 다른 시각화 라이브러리

오늘은 파이썬의 시각화 부분에서 가장 널리 쓰이고 있는 matplotlib에 대해서 알아보도록 하자.

matplotlib을 사용할 때 주로 서브패키지인 pyplot을 사용한다. pyplot은 MATLAB의 인터페이스와 유사하게 작동할 수 있도록 하여 MATLAB을 사용하는 사용자층이 쉽게 matplotlib으로 옮겨오도록 하고 있다. 문제는 MATLAB의 인터페이스가 그모양이어서 그런지 모르겠는데, matplotlib의 인터페이스가 일관성도 없는 편이고 그다지 객체지향적이지도 않아서 사실상 API 문서만으로도 사용이 어렵고 관련 예제를 보면서 코드를 따라써야 하는 수준으로 처리해야 하는 경우가 많다는 것이다.

더 보기 »matplotlib의 기본 사용법 및 다른 시각화 라이브러리

(Python) 그 날짜가 몇 주째인지 계산하기

특정한 년,월,일을 입력 받았을 때 그 날짜가 해당 월의 몇 째 주에 속하는지를 알려주는 함수를 작성해보자. 예를 들어 2020년 4월 27일 월요일은 4월의 5주차에 해당하는 날이다. 2020년 5월 15일은 2주차에 해당하는 날이다. 27, 15일은 각각 7로 나누는 것만으로도 3주나 차이가 나는데, 정확한 계산방법은 무엇일까?

더 보기 »(Python) 그 날짜가 몇 주째인지 계산하기

(Vim) 필요없는 공백제거하기

왠만한 편집기들은 파일을 저장하기 전에 각 라인의 뒤에 들어있는 쓸데없는 공백들을 제거해주는 기능을 제공한다. (이러한 trailing space들의 해악에 대해서는 따로 말할 필요가 없을 것 같다.) 물론 vim에서도 이걸 사용할 수 있다. :s 명령을 사용하면 각 줄에서 맨 뒤쪽 공백을 제거할 수 있다.

:%s/\s\+$//

간단히 설명하면 이 명령은 다음과 같이 동작한다.

더 보기 »(Vim) 필요없는 공백제거하기

(Vim) 입력모드의 자동완성

vim은 사실 기본적으로 현재 버퍼에 입력된 키워드를 기반으로 자동완성을 제공한다. 다만 그게 <Tab> 키가 아닐 뿐이다. 어떤 내용이든 입력하는 사이에, 입력모드에서 <C-n>을 입력해보자. (Ctrl + N) 그러면 커서 왼쪽의 단어의 일부로 시작하는 현재 버퍼 내의 키워드들로 자동완성이 시작된다. (후보가 2개 이상이면 팝업으로 표시된다.)

이렇게 자동완성 모드가 시작되면 <C-n>은 다음 후보로 진행하며, 이전 후보로 진행하는 것은 <C-p>이다.

이 자동완성 후보 목록은 'complete' 옵션에서 정할 수 있는데, 이 옵션은 콤마로 연결되는 문자들의 목록이고 다음과 같은 의미를 갖는다. 생각보다 엄청많고 별도의 설명이 또 필요할 것 같지만.. 여기서는 생략한다. 기본적으로 이 값은 . u b t i로 정해진다.

더 보기 »(Vim) 입력모드의 자동완성

Vim – 레지스터에 관해

vim에서 문자열을 복사하는 것을 매뉴얼에서는 copy가 아니라 yank로 설명한다. 이는 전통적인 이유가 있긴한데, 어쨌든 보통의 응용프로그램에서의 ‘복사’는 클립보드에 콘텐츠를 써 넣는 것을 의미한다. 하지만 vim은 항상 클립보드를 사용할 수 있는 것은 아니다. 대신에 ‘레지스터’라는 별도의 메모리 공간을 사용해서 텍스트를 따로 보관했다가 나중에 사용한다. 이는 sed의 홀드 영역과 비슷하다고 할 수 있다. 대신에 vim은 단순히 하나의 저장 영역을 사용하는 것이 아니라 매우 다양하고 많은 레지스터를 사용한다.

레지스터 사용방법

레지스터는 각각의 이름이 있고, 각 이름은 모두 키 하나에 맵핑되어 있다. 레지스터는 기본적으로 편집 명령을 통해서 쓰거나 읽을 수 있다. 복사(y)는 물론 삭제(d, x) 및 교체 (r, s)시에도 제거되는 내용은 즉시 폐기된다기 보다는 특정한 레지스터에 복사할 수 있다. 특정 레지스터에 복사된 내용을 p 등으로 붙여넣는 경우에 레지스터를 사용할 수 있다.

더 보기 »Vim – 레지스터에 관해