콘텐츠로 건너뛰기
Home » 21세기소년

21세기소년

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

텍스트 오브젝트

vim의 가장 독특한 기능 중 하나를 꼽으라면 “텍스트 오브젝트”를 취급하는 기능입니다. 예를 들어 di) 같은 명령으로 괄호 내부의 텍스트를 삭제하거나, dd 를 사용하여 한 줄 전체를 지우는 것 등이 있습니다. 이러한 동작을 커스텀 함수를 통해서 사용할 수 있을까요?

더 보기 »텍스트 오브젝트

브라우저에서 PDF 파일이 열리지 않을 때

PDF 문서가 어느 새 보편적으로 사용되면서 파이어폭스나 구글 크롬, 엣지와 같은 웹브라우저들도 자체적으로 PDF 파일을 렌더링할 수 있는 기능을 지원하고 있어서, 별도의 뷰어 프로그램이 없어도 이제 PDF 파일은 어디서든 쉽게 열 수 있는 문서 형식이 되었다. 그런데, 어느 날 갑자기 웹브라우저에서 잘 열리든 PDF 파일이 더 이상 열리지 않는 증상이 생기는 경우가 있다. 이 문제는 사실 같은 원인임에도 두 가지 증상으로 나타나는 것 같다. 디스크에 저장된 PDF 파일을 “다음으로 열기..” 를 통해서 브라우저로 열려고 하거나, PDF 파일을 브라우저로 끌어다 놓았을 때 파일이 열리지 않고 다음과 같이 작동하고 있었다.

  • 문서 내용을 표시하는 대신, 문서 파일을 다운로드 하는 것처럼 작동해서 파일의 복사본이 다운로드 폴더에 저장된다.
  • 다운로드를 하지 않으면서 브라우저에 빈 공간이 표시된다.

이 문제는 주로 구글 크롬 및 이와 동일한 엔진을 사용하는 마이크로소프트 엣지, 오페라에서도 공통으로 발견되며 나의 경우 파이어폭스에서는 여전히 정상적으로 PDF 파일이 열리고 있었다. 이 문제를 어떻게 해결할 수 있는지 살펴보자.

더 보기 »브라우저에서 PDF 파일이 열리지 않을 때

대용량 데이터와 엑셀 파일

엑셀과 같은 프로그램을 스프레드 시트라고 한다. 스프레드 시트는 개념상 무한히 큰 종이를 행과 열로 나누고 여기에 데이터와 수식을 넣어서 표를 계산하거나 데이터를 분석하는 프로그램을 말한다. 하지만 ‘무한히 큰 종이’는 말 그대로 개념적인 것이며, 실제로 컴퓨터의 메모리는 유한하기 때문에 스프레드 시트의 크기 역시 실제로는 유한한 크기를 갖는다.

더 보기 »대용량 데이터와 엑셀 파일

vim에서 컴파일 결과를 바로 보기

typescript나 scss 처럼 다른 언어로 컴파일하는 스크립트를 작성하고, 이 결과를 별도의 창에서 확인하는 기능을 vim에서 구현하는 방법을 알아보자. 기본적으로 vim에서는 :r 명령을 사용하면 쉘을 통해 실행한 외부 명령의 출력을 현재 버퍼로 가져오는 것을 수행할 수 있다. 그 외에도 job을 이용한 비동기 방식의 처리도 가능하고 아예 vim 내에 터미널 창을 만들어서 실행하는 방법등 여러 방법이 있다. 오늘은 이러한 방법을 사용해서 vim에서 scss를 컴파일한 결과를 보여주는 방법에 대해서 살펴보겠다.

더 보기 »vim에서 컴파일 결과를 바로 보기

워드프레스에 jupyter notebook 삽입

워드프레스 포스트에 Jupyter notebook을 삽입하는 방법을 알아보겠습니다. 가장 손쉬운 방법은 Github Gist 에 정적 HTML로 변환한 파일을 업로드하고 해당 Gist를 포스트에 삽입하면 되는 것입니다. 로컬에서 작성한 ipynb 파일을 업로드해도 되지만, Google Colab을 사용하면 Gist로 저장하는 일을 좀 더 간편하게 할 수 있습니다.

더 보기 »워드프레스에 jupyter notebook 삽입

WP-cron을 시스템 cron으로 대체하기

워드프레스는 포스팅의 예약 발행과 같은 스케줄링을 지원하는데, 이는 WP-cron이라는 스케줄러를 통해 처리된다. wp-cron은 매 페이지가 호출될 때마다 로드되어 예약된 작업이 있으면 이를 처리해주는 방식으로 작동한다. 다만 이렇게하면 포스트 발행을 예약한 시점에 접속이 없다면 스케줄러가 실행되지 않거나, 그외 플러그인과의 충돌이나 워드프레스 자체의 버그로 인해서 작업이 누락되는 경우도 발생한다고 한다.

리눅스 서버를 사용한다면 시스템의 cron을 사용해서 이 wp-cron의 실행을 대체할 수 있다. 이 글은 아마존 라이트세일 인스턴스 (Bitnami – wordpress 서버)에서 wp-cron을 끄고 시스템 자체의 cron을 실행하게 하는 방법이다.

더 보기 »WP-cron을 시스템 cron으로 대체하기

ffmpeg로 영상 일부 구간 빠르게 자르기

큰 영상 파일의 일부 구간만 필요한 경우에 ffmpeg를 사용하면 빠르게 일부분을 추출할 수 있다. 이 때 사용되는 파라미터는 -ss-to 로 각각 결과물의 시작과 끝 시점을 정의한다. 이때 시점을 정의하는 문법은 h:mm:ss 로 사용한다. (그래서 특정 시간부터 t 초라고 한다면 시간을 계산해야 한다…)

더 보기 »ffmpeg로 영상 일부 구간 빠르게 자르기

SQLite – STRICT 테이블

얼마전 SQLite의 새 버전인 3.37.0이 릴리즈되었습니다. 주로 안정성이나 성능 개선 위주의 업데이트만 있다가, 이번 버전에서는 STRICT 테이블이라는 새로운 기능이 추가되었습니다. 이 기능은 다른 DBMS 처럼 테이블 칼럼의 형식에 맞는 값만 저장하도록 제한하는 기능으로, 새로 생성하는 테이블의 옵션 형태로 설정하게 됩니다. SQLite3는 다른 DBMS와 달리 자료의 형(type)에 대해서 유연한 편입니다. 예를 들어 INTEGER 타입으로 정의된 칼럼에 “123” 같은 문자열을 저장하려 한다면 SQLite는 자동으로 이 문자열을 정수형태로 변환을 시도합니다. 따라서 저장되는 값은 문자열이 아닌 정수값 123이 저장됩니다. 만약 “xyz” 같은 변환이 불가능하거나,… 더 보기 »SQLite – STRICT 테이블

Julia 정규식 다루기

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

더 보기 »Julia 정규식 다루기

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

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