sooop

sooop

IO모나드와 부수효과

하스켈에서 문자열을 화면에 출력해주는 putStrLn 함수를 생각해봅니다. 이 함수의 타입은 String -> IO ()로 문자열을 인자로 받고 빈 모나드를 리턴합니다. 무언가를 출력하는 일을 수행하니, 반환할 값에는 의미가 없다는 뜻입니다. 반환하는 값이 비어있으니, IO 액션의 연쇄에 있어서는 어떤 종착점이 될 수 있다고 봐도 됩니다. 말하자면 이 액션의 이후에는 어떤 처리를

By sooop

altair

Altair에서 변형 함수 사용하기

Vega-Lite는 몇 가지 간단한 데이터 변형 함수를 제공합니다. 물론 보통의 경우에 차트로 시각화하려는 원본 데이터는 DataFrame의 형태로 나와 있고, 데이터 프레임 자체를 조작하여 원하는 변형을 미리 처리하는 것이 보다 유연하고 강력합니다. (데이터 프레임은 원래 그럴려고 쓰는 것이니까요) 그렇지만 원본 데이터를 미리 조작하기 어려운 경우라면 간단한 변형은 Vega-Lite의 기능을 활용하는 방법도

By sooop

altair

Jupyter용 시각화 라이브러리 Altair

파이썬 생태계에서 데이터 시각화 분야에서는 matplotlib이 사실상 독보적인 위치에 있음은 반론의 여지가 별로 없긴합니다. 하지만 일관성이 부족한 API나 그래프의 외관을 예쁘게 만드려면 과다한(?) 노동이 필요한 점은 단점으로 지적받기는 합니다. 이런 문제를 극복하기 위해서, 기본적으로 예쁜 그래프를 만들 수 있도록 해주는 Seaborn이나, R의 ggplot의 인터페이스를 이식해온 plotnine 같은 대안이 존재합니다. 데이터

By sooop

ffmpeg

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

ffmpeg는 비디오, 오디오, 이미지등 사람이나 기계로 만든 거의 모든 포맷의 미디어 데이터를 인코딩/디코딩/필터링할 수 있는 멀티미디어 프레임워크로 미디어 관련한 소프트웨어들에 거의 기본적으로 탑재되어 있다. ffmpeg는 명령줄 도구 형식으로도 사용할 수 있어서 간단한 사용법만 익혀 두면 은근 유용하게 사용할 수 있다. ffmpeg는 실제로 엄청나게 많은 옵션들을 지원하며, 웬만한 영상

By sooop

Julia

선형대수를 사용해서 연립방정식 풀기

연립방정식을 손으로 푸는 방법으로는 학교에서 소거법이나 대입법 같은 테크닉을 배운다. 하지만 간단한 1차 연립 방정식을 다른 방법을 사용해서도 풀 수 있는데, 이 다른 방법이라는 것이 손으로 풀기에는 더욱 귀찮지만 컴퓨터에 적용할 수 있다는 장점이 있어서 소개한다. 한개에 600원하는 귤과 한 개에 1000원하는 사과를 모두 12개를 사고, 8800원을 지불하였다. 귤과 사과는

By sooop

ascii art

점자 텍스트로 이미지 표현하기

지난 글에서 이미지를 아스키문자로 렌더링하는 방법에 대해서 알아보았는데, 이번에는 조금 다른 이미지 렌더링 방식에 대해서 알아보자. 인터넷에서 돌아다니는 다음과 같은 아스키아트를 본 적이 있을지 모르겠다. 기존의 아스키아트는 글자 1개가 픽셀 1개를 표현하는데, 이런 종류의 아스키 아트는 1글자가 픽셀 8개를 표현한다. 2×4의 점으로 한 글자가 이루어지는 이 문자들은 유니코드 점자

By sooop

예금

예금과 적금의 차이

예금 예금은 일정기간을 정해놓고 자신의 돈을 은행에 맡기는 것을 말한다. 예금의 종류에는 보통예금, 정기예금, 당좌예금이 있다. * 보통 예금 : 입출금이 자유롭고 금액이나 기간에 제약이 없음 * 당좌 예금 : 돈을 은행에 두고 예금자의 요구에 따라 일부 혹은 전부를 언제든 지급받는 예금 * 정기 예금 : 일정한 기간을 정해여 금액을 맡기고 기간 만료일까지 환급을 받지 않는

By sooop

file

Julia - 파일 다루기

Julia에서 파일을 여는 법 줄리아에서 파일을 읽고 쓰기 위해서는 IOStream 객체이를 이용한다. 스트림 객체를 만들기 위해서는 open() 함수를 사용한다. 이렇게 얻은 스트림객체는 read(), write(), seek()등 파일 입출력 관련 함수에서 사용된다. 가장 기본적인 문법으로 파일을 열어서 내용을 읽고 출력하는 코드를 작성해보면 다음과 같은데, 다른 많은 언어들과 큰 차이를 보이지 않는

By sooop

AbstractString

Julia 문자열 다루기

Julia에서 문자열은 String 타입으로 정의되어 있으며, 내부적으로 UTF8로 인코딩되는 유니코드 문자열을 지원한다. 문자열은 일련의 유니코드 문자들로 구성되며 불변한 값이다. Julia에서는 String 외에 단일 문자를 표현하는 Char 타입이 존재하며, 리터럴 문법 역시 문자열과 문자가 구분된다. (문자열은 겹따옴표, 단일 문자는 홑따옴표를 사용한다.) 기본 리터럴 문법 "string"과 같이 겹따옴표를 사용한다.

By sooop

fd

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

이 블로그에서 GNU find의 사용법에 대한 글을 올린 적이 있는데, 오늘은 이 GNU find를 대체할 수 있는 fd 라는 툴의 사용법에 대해서 간단히 정리해보고자 한다. fd는 이름부터 ‘find’를 50%줄여서 더 빠르게 쓴다는 취지로 개발되었으나, GNU find를 ‘완전히’ 대체하는 것을 목표로 하지는 않는다. 대신에 옵션명을 보다 직관적으로 현대화(?)하고

By sooop

ascii art

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

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

By sooop

diff

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

두 이미지의 구조적 유사성을 분석하는 알고리듬으로 SSIM (Structural Similarity)가 있는데, 이를 사용하면 두 이미지가 어느 정도로 유사한지, 어느 부위가 다른지를 알아낼 수 있다. ssim을 수행하는 함수는 scikit-image 라이브러리가 제공하고 있으니, 이를 사용해서 두 이미지의 다른 부분을 찾는 작업을 수행할 수 있다. 다만 이미지를 비교하기 위해 필요한 전처리와 이미지 차이를

By sooop