Harfang's Perch

  • 글 목록
  • 소개
  • RSS
  • Atom
  • English
  • 한국어
  • 지킬에서 하킬까지 장대한 야크 털 깎기 여정

    2019-03-15

    코드 하이라이트가 안 될 때, 으레 야크 털을 깎으러 가기 마련이다

    이 모든 것은 블로그 글에 삽입한 엘름 코드에 코드 하이라이트가 안 된다는 것을 알아차렸을 때 시작되었습니다. 문제의 근원은 간단히 확인할 수 있었습니다. 기존 블로그는 지킬 및 보조 라이브러리를 모아둔 Github Pages 젬을 사용해서 만들었는데, 이 중 코드 하이라이트를 담당하는 rouge 라이브러리가 엘름 문법을 지원하기 이전인 2.2.1 버전으로 고정되어 있었습니다. rouge 버전을 강제로 올려서 간단히 해결할 수도 있었겠지만, 이 참에 아예 Github Pages 젬을 빼버리고 모든 의존성을 최신 버전으로 올려버릴까? 라는 생각이 들었습니다. 그렇게 야크 털 깎기가 시작되었습니다.

    전체 보기
  • Elm에서 동시에 여러개의 Msg를 호출하기

    2019-01-13

    Elm Architecture에서 update 함수는 Model 상태를 변경하는데 사용됩니다. Model, Msg, update의 구조에 따라서 update 함수를 호출한 뒤에 다른 Msg를 인자로 삼아 update 함수를 다시 호출해야할 수도 있습니다. update를 재귀적으로 호출하는 것은 간단히 할 수 있습니다.

    전체 보기
  • 엘름에서 포트 함수 관리하기

    2018-12-19

    엘름에서 포트 함수 관련 코드를 어떻게 하면 깔끔하게 관리할 수 있을지 고민하다가 두 가지 방식을 정리해보았습니다. 독자가 엘름 아키텍처와 포트 함수의 동작 방식 등은 이미 알고 있다고 가정하겠습니다. 깃헙 리포에 예시 앱을 올려두었으니 아래와 같이 받아서 실행해보실 수 있습니다.

    전체 보기
  • 엘름 디버거에서 전체 텍스트 표시하기

    2018-07-29

    엘름 디버거는 제가 써본 중 가장 우수한 디버거입니다. 엘름 언어 자체 특성 때문에 개발 과정에서 버그가 생길 일이 거의 없어서 사실 디버깅할 일이 없는게 함정이지만요. 엘름 디버거는 표시 가능한 문자열 길이에 제한을 두고, 지정된 길이를 넘어가는 문자열이나 자료 구조는 ...으로 생략해버립니다. 합리적인 기본값이긴 한데 가끔 내가 정확히 어떤 메시지를 받았는지 알고 싶을 때는 짜증을 유발합니다. 리처드 펠드먼의 RealWorld 샘플 앱에서 디버거가 긴 문자열을 생략하는 예시를 봅시다.

    전체 보기
  • Spacemacs에서 한국어 사용하기

    2018-07-22

    Vim에서 하스켈 개발 환경을 설정하다가 짜증이 나서 대안을 찾다가 Spacemacs를 설치해서 사용해보고 있는데, 별도의 설정 없이 설치하자마자 바로 쓸 수 있을 정도로 기본 설정이 훌륭해서 현재까지는 만족스럽게 쓰고 있습니다. 다만 한국어를 설정하는 방법이 옛날 글만 있거나 이맥스 초보가 이해하기 어렵게 작성되어 있어서 좀 헤멨습니다. 문서를 찾아보면서 어느 정도 원하는 대로 설정하는데 성공해서 설정을 공유합니다. 한국어 글꼴은 D2Coding을 사용하고 있는데 원하시는 글꼴을 설치해서 사용하시면 되겠습니다.

    환경은 Ubuntu 16.04.4, Emacs 26.1입니다.

    전체 보기
  • CSS가 어려운 이유

    2018-07-14

    예전에 CSS보다는 하스켈이 차라리 더 쉽다는 농담을 들은 적이 있는데, 당시에는 그냥 웃어 넘겼었습니다. 하지만 지난 몇 달 동안 CSS를 작성해보았더니 왜 그 사람이 그런 말을 했는지 이제는 이해할 수 있습니다. CSS는 복잡합니다. 문법과 구조는 간단하지만 결과물이 런타임에 따라 천변만화하기 때문에 어떤 결과물이 나올지 예측하기 정말 어렵습니다.

    세 가지 문제

    제가 보기엔 문제의 원인은 크게 세 가지로 나눌 수 있습니다.

    1. 어떤 CSS 규칙이 최종적으로 적용될지 예측하기 어렵다
    2. CSS 규칙의 상호작용을 모두 알기 어렵다
    3. 런타임 환경을 예상하기 어렵다
    전체 보기
  • Safer Smart Contracts Through Type-Driven Development - 감상문

    2018-02-18

    서문

    작년에 이드리스 언어에 관한 책을 한 권 읽고 블로그 글을 한 편 작성한 적이 있습니다. 그리고 그 글을 쓴 지 얼마 되지 않아 우연히 블록체인 기술을 다루는 회사에 입사해서 일을 하기 시작했습니다. 그러니 제가 최근 흥미를 가진 이 두 가지 주제를 함께 다룬 “Safer smart contracts through type-driven development: Using dependent and polymorphic types for safer development of smart contracts”라는 논문이 있다고 들었을 때 꼭 읽어봐야겠다는 생각을 하게 되었습니다.

    이 글은 해당 논문을 읽으면서 가지게 된 생각을 정리한 글이며, 논문 내용에서 한 발짝 더 나아가거나 한 내용은 없습니다. 또한 글을 쓸 때 함수형 프로그래밍 패러다임, 특히 순수 함수와 사이드 이펙트 사이의 차이점에 대한 기본적인 이해를 가정하고 작성했으니 감안하고 읽어주시기 바랍니다.

    전체 보기
  • 엘름 함수 연산자(|>, <|, >>, <<)에 대한 간단한 설명

    2018-01-28

    요약

    엘름 언어에 대해서 기본적인 것을 배우고 나서 엘름 코드를 읽다보면 >>, <<, |>, <| 같은 기묘한 연산자를 보게 되는데, 이는 함수를 조합하거나 적용할 때 사용되는 함수입니다. 이 글에서는 제가 해당 연산자를 언제 어떻게 쓰는지에 대해서 간단히 이야기해보겠습니다. 하지만 먼저 간단히 요점만 정리하면 다음과 같습니다.

    1. |>와 <|는 데이터의 흐름을 시각적으로 명확히 표현하고 싶을 때 사용합니다. 괄호를 중첩해서 사용해도 똑같은 의미를 나타낼 수 있지만 |>나 <| 연산자를 쓰면 더 명확합니다.

    2. >>와 <<는 데이터 흐름과는 무관하게 함수의 조합만을 표현하고 싶을 때 사용합니다. 실제 코드에서는 함수 조합을 통해서 새 함수를 정의하고, 그 함수를 |>나 <|와 함께 사용합니다.

    3. |>와 >>의 쌍이나 <|와 <<의 쌍만 사용하고, 둘을 섞어서 사용하지 않습니다. 연산자의 모양이 방향에 대한 의미를 내포하고 있기 때문에 서로 다른 방향을 나타내는 연산자를 섞어 쓸 경우 뇌에서 인지적 자원을 더 소모하게 됩니다.

    전체 보기
  • 리치 히키와의 인터뷰 (마이클 포거스)

    2017-12-09

    서문

    이 글은 마이클 포거스가 클로저(Clojure)의 창시자인 리치 히키(Rich Hickey)를 인터뷰하여 CodeQuarterly에 게재한 글을 번역한 글입니다. 인터뷰가 게재된 잡지가 발행된 시기는 2011년 6월 경으로 추정됩니다. 이 글을 작성하는 목적은 두 가지입니다.

    1. 보존 CodeQuarterly 사이트와 함께 인터뷰의 일차 출처가 사라졌기 때문에 보존을 위해 사본을 남깁니다.

    2. 한국어 번역
      참 좋은 글인데 한국어 번역본이 없는 것 같아서 공유하고자 번역합니다.

    전체 보기
  • Type-Driven Development with Idris 리뷰

    2017-10-23

    요약

    Type-Driven Development with Idris에서는 타입을 중심으로 하는 소프트웨어 개발 방식을 소개합니다. 기존에는 타입이 데이터가 올바른지 확인하는 정도의 역할을 수행했지만 이 방식에서는 타입이 보다 많은 역할을 수행합니다. 예를 들면 함수 실행 전과 후의 상태를 타입을 사용해서 표현하거나 함수와 데이터가 준수해야하는 계약(contract)을 타입으로 정의할 수 있습니다. 이를 통해 프로그래머가 정한 계약이나 약속을 프로그램이 컴파일 타임에 준수하도록 강제하며, 소프트웨어가 올바르게 작성되었는지를 다른 소프트웨어 개발 방식보다 더 확실하게 보장해줄 수 있습니다.

    이 책에서는 타입 주도 개발(TDD: Type-driven Development)을 이드리스(Idris) 프로그래밍 언어를 사용해서 소개합니다. 이드리스는 범용 순수 함수형 프로그래밍 언어로 이 책의 저자이기도 한 에드윈 브레이디(Edwin Brady)가 만들었습니다. 이드리스는 하스켈과 ML의 영향을 받은 언어로, TDD에 적합한 최신형 타입 시스템을 사용합니다. 이 책에서는 TDD와 함께 이드리스 언어의 기본도 배우게 됩니다.

    전체 보기
1 2 3 4 5