Profile img

박준규

@curry@hackers.pub · 320 following · 175 followers

darcs hub
hub.darcs.net/vincent
Hackage
hackage.haskell.org/user/JoonkyuPark

연합우주라는 번역은 어느 분이 처음 하셨나요? 엄청난 초월 번역인 것 같습니다. 한편 Gemini 프로토콜을 통해 제공되는 모든 파일의 전체 모음을 Geminispace라고 부르는데 어떻게 번역하는 게 좋을까요?

3
3
3

GBIC에

  • 1310 nm라고 적혀 있으면 싱글이고
  • 850 nm라고 적혀 있으면 멀티라고 한다.

광케이블의 직경을 의미하는데 단위는 나노미터이다. ... 인 줄 알았는데 찾아보니까 아니네. 직경이 아니라 파장이네.

3

Vim에서 Quickfix List라는 걸 처음 알게 되었다.

기존 코딩 흐름은

G 코딩 코딩 Vim을 닫는다. Vim을 닫는다. 코딩->Vim을 닫는다. cabal build cabal build Vim을 닫는다.->cabal build 에러 확인 에러 확인 cabal build->에러 확인 Vim을 연다. Vim을 연다. 에러 확인->Vim을 연다. 에러가 발생한 행(row)으로 간다. 에러가 발생한 행(row)으로 간다. Vim을 연다.->에러가 발생한 행(row)으로 간다. 에러가 발생한 행(row)으로 간다.->코딩

이랬는데 Quickfix List를 이용하면

G 코딩 코딩 :make :make 코딩->:make :copen :copen :make->:copen Enter를 눌러서 에러가 발생한 행으로 이동 Enter를 눌러서 에러가 발생한 행으로 이동 :copen->Enter를 눌러서 에러가 발생한 행으로 이동 Enter를 눌러서 에러가 발생한 행으로 이동->코딩

이렇게 Vim을 나가지 않고도 빌드 결과를 확인하고 에러가 발생하면 그곳으로 바로 점프할 수 있다!

.vimrc에 이렇게만 적으면 된다.

set makeprg=cabal\ build
6
9

하스켈에서 다음과 같은 에러를 만날 경우에

withFile: resource busy (file is locked)

readFile 대신 readFile'을 써보셔요!

  • readFile은 lazy 버전이고
  • readFile'은 strict 버전입니다!

System.IO 모듈 문서에 다음과 같은 설명이 있습니다.

경고: readFile 연산은 파일의 전체 내용을 모두 소비할 때까지 그 파일에 대해 부분적으로 닫힌(semi-closed) 핸들을 유지한다. 따라서 이전에 readFile로 연 파일에 대해(writeFile 등을 사용하여) 쓰기를 시도하면, 일반적으로 isAlreadyInUseError 오류와 함께 실패하게 된다.

4
5

하스켈에서 레코드 타입을 json으로 인코딩할 때 타입이 Maybe인 필드의 값이 Nothing이면 그 타입의 값은 null로 변환된다.(deriving Generic 했다면)

이때 null이 아니라 해당 필드 자체를 포함하지 않게 하려면 다음과 같이 하면 된다.

{-# LANGUAGE TemplateHaskell #-}

import Data.Aeson.TH

data Foo = ...

deriveJSON defaultOptions { omitNothingFields = True } ''Foo

위와 같이 deriveJSON 했다면 기존에 선언했던 아래 구문은 지워야 한다.

instance FromJSON Foo
instnace ToJSON Foo
3

하스켈에서 Either a bToJSON 인스턴스 구현이 약간 애매하다.

json 객체의 키 값으로 "Left""Right"를 넣는 것 같다. 그런 방식으로 사용하는 사람은 거의 없을 것 같은데... 아무튼 그래서 newtype은 쓰지 않고 인스턴스를 오버라이딩 하고 싶은데 대충 찾아보면 인터넷이나 LLM의 첫번째 대답은 OverlappingInstances 확장을 쓰라고 안내하는데 이건 deprecated 됐다. 대신 다음과 같은 프라그마(pragma)를 쓰면 된다.

  • OVERLAPPING
  • OVERLAPPABLE
  • OVERLAPS

프라그마는 확장과 다른데 확장은 확장을 적은 파일 전체에 적용되지만 프라그마는 해당 인스턴스에만 적용된다.

다음과 같이 사용한다.

instance {-# OVERLAPPING #-} ToJSON a => ToJSON (Either Foo a) where
  toJSON = ...

이렇게 하면 고아[1]를 만들었다며 컴파일러가 내 인성을 비난하겠지만 Either a b를 통째로 오버라이딩 한 것도 아니고 별로 문제가 될 것 같진 않다.


  1. 하스켈에서 타입이나 클래스가 정의된 모듈이 아닌 곳에 인스턴스를 선언할 때 그 인스턴스를 Orphan(고아) 인스턴스라고 한다. ↩︎

6
5
4

lens 라이브러리의 타입들은 optics(광학기구)라고 불립니다. 여기에는 Prism, Lens, Iso, Traversal, Fold, Getter, Setter 같은 것들이 포함됩니다. 이 이름들 중 일부는 빛의 굴절에 대한 말장난에서 비롯되었습니다. 예를 들어, 렌즈(lens)는 망원경이 풍경의 작은 일부를 시야 가득히 채워 보이게 해주는 것이고, 프리즘(prism)은 흰빛을 분리하여 그 구성 색들을 드러내 줍니다. 어느 정도는 은유가 담겨 있지만, 이런 이름들은 깨달음을 주기보다는 귀여운 쪽에 가깝습니다. 따라서 이름 자체에 너무 깊이 집중하는 것은 권하지 않습니다.

— 《Finding Success (and Failure) in Haskell》, 158쪽

6

이거 위험하지 않나... 관리 주체가 어딜까? 경찰이 하나?

3

너무 이른 시점에 일반화를 걱정하는 것은 위험할 수 있습니다. 자신이 코드를 작성하든 다른 사람의 코드를 이해하려 하든, 우리는 이 책에서 취한 접근 방식을 따를 것을 권장합니다. 즉, 일반적인 것부터 시작하지 말고 구체적인 예시부터 시작하세요. 그런 다음 그들이 어떤 측면을 공유하는지 관찰하세요. 학습자로서 이러한 순서는 더 쉬운 구체적인 예시를 토대로 더 어려운 추상적 개념을 이해할 기회를 더 많이 제공합니다. 저자로서 이러한 순서는 더 추상적인 발상이 타당성을 갖고 목적을 지닐 수 있도록 도와줍니다.

— 《Finding Success (and Failure) in Haskell》, 149쪽

6

하스켈은 이렇게 씁니다! 참 쉽죠!

main = do
  putStrLn "What is your name?"
  name <- getLine
  putStrLn ("Hello, " ++ name)
4
2
0

우리의 동료가 돼 주세요 케데헌의 열풍으로 우리나라에서 돈 쓰고 싶어하는 외국인들이 엄청나게 많아지고 있습니다. 전 세계가 우리나라 상대로 몰카 찍는 이 판국에 외국인 결제가 막혀있다는건 말이 안됩니다. 외국인 온라인 결제를 뚫어버리는 토모로우에서 혁신을 함께할 개발자 동료를 모십니다. 1. 무슨 일 하나요? 저희는 국가별로 신분증 데이터베이스… | Chanwoo Lee

우리의 동료가 돼 주세요 케데헌의 열풍으로 우리나라에서 돈 쓰고 싶어하는 외국인들이 엄청나게 많아지고 있습니다. 전 세계가 우리나라 상대로 몰카 찍는 이 판국에 외국인 결제가 막혀있다는건 말이 안됩니다. 외국인 온라인 결제를 뚫어버리는 토모로우에서 혁신을 함께할 개발자 동료를 모십니다. 1. 무슨 일 하나요? 저희는 국가별로 신분증 데이터베이스 접근 권한 계약을 해와서 DB 검증 기반 외국인 신분증 인증 서비스를 만들고 있습니다. 기본 웹서비스, 보안, 결제 시스템, 인증 시스템, DB 설계 및 튜닝 등 꽤 복잡한 시스템을 만들고 있고 그에 비해 기술 부채가 거의 없어서 개발 맛이 정말 좋은 팀입니다. 2. 배울 수 있는게 있을까요? 반 년만에 5배 성장을 이뤄냈고 이제 개발에 집중 투자하고 있습니다. 철저히 문제 해결 중심으로 돌아가기 때문에 다른 조직에서 경험하지 못하는 엄청난 속도감과 성장을 경험할 수 있습니다. 극강의 효율을 추구하는 팀이고, 우아한 코드 작성은 덤입니다. 3. 어떤 사람을 찾고 있나요? 공통 기본 스탯 2가지 - 과몰입, Just do it 정신을 겸비한 하드워커 - 함수형 프로그래밍 경험자 특수 스킬 택 1가지 - 하스켈 프로그래머 - AWS 아키텍트 - 보안 전문가 4. 복지는? - 4대보험 - 아침, 점심 샐러드 도시락, 야근 시 저녁 추가 제공 - 기후동행카드 지원 5. 연봉은? 최대 6,000 내에서 협의합니다. 실력, 마인드셋 등을 고려하여 차등 제안합니다. 압도적인 팀을 만들고 있습니다. 코딩하면서 심장이 뛰는 팀에서 일하고 싶으신 분은 지체없이 메시지 주세요.

kr.linkedin.com

3
4

댓글에 하스켈 욕이 보여서 마음이 안 좋다. 나는 대용량 파일을 다루지는 않지만 한국의 회사원이라 평문이 아닌 문서를 많이 다룬다.(hwp, xlsx 등) 윈도우 다운로드 폴더에 몇 번이고 받은 중복 파일들을 어떻게 다루면 좋을지 고민 중이었는데 git-annex를 써봐야겠다!

4

작년에 어떤 커뮤니티에 계엄 소식을 전했는데 “여기서 정치적인 발언은 하지 말아주세요.” 라는 말을 들었다.

5

GHCup 오랜만에 다시 설치하는데 못보던 게 생겼다.

GHCup provides different binary distribution "channels". These are collections of tools
and may differ in purpose and philosophy. First, we select the base channel.

[S] Skip  [D] Default (GHCup maintained)  [V] Vanilla (Upstream maintained)  [?] Help (default is "Skip").
4

GHCup 설치할 때마다 나오는 메시지인데 어디 기록할 곳이 없어서 여기에 적음.

System requirements
  Note: You need the following packages: curl g++ gcc gmp make ncurses realpath xz-utils pkg-config. Consult your distro documentation on the exact names of those packages.
3

남는 노트북에 NixOS 설치하고 tailscaled 깔았다. 노트북 덮개를 덮어도 절전 모드가 되지 않게 설정하려고 삽질을 조금 했는데 결론은 다음과 같이 하면 된다.

먼저 /etc/nixos/configuation.nix에 다음과 같은 내용을 적는다.

services.logind.extraConfig = ''
  HandleLidSwitch=ignore
  HandleLidSwitchExternalPower=ignore
  HandleLidSwitchDocked=ignore
  IdleAction=ignore
  IdleActionSec=0
'';

터미널에 다음과 같이 입력한다.

sudo nixos-rebuild switch
sudo systemctl restart systemd-logind

고작 노트북 한 대인데 전기비 많이 나오진 않겠지?

10
4
0
1

회사 근처 알라딘에 가서 다음과 같이 책 두 권을 샀습니다.

  • 로버트 A. 하인라인, 안정희, 《달은 무자비한 밤의 여왕》
  • 앤디 위어, 남명성, 《아르테미스》
5
5
9

  • 중국어를 전공했습니다.
  • 전역하자마자(금요일 전역, 월요일 출근) 강원도에서 제약 영업을 1년 4개월 정도 했습니다.
  • 컴퓨터 학원을 1년 정도 다니면서 정보보안 스터디를 했습니다.
    • 이때 Python, C, Java순으로 프로그래밍을 처음 접했습니다.
  • 정보보안 관제 회사에서 고객사에 파견 나가 악성코드 대응 업무를 4년 정도 했습니다.
    • 이때 개발자가 되고 싶어서 C++ 코리아 스터디에 몇 번 참석했는데 여기서 운명의 ‘모나드’라는 단어를 처음 접하고 하스켈 공부를 시작했습니다.
  • 기업에서 정보보안 담당자 7년 차로 일하고 있습니다.
    • 코딩은 취미로 하거나 혼자만 하는 소소한 업무 자동화에 활용하고 있습니다.
  • 풀타임 개발자와 오픈소스 메인테이너의 삶을 동경하고 있습니다.
  • 주로 Windows에서 Putty로(80x24, Consolas) 리눅스 서버에 붙어서 Vim을 사용합니다. Visual Studio Code를 잠깐 써봤는데 다시 Putty로 돌아왔습니다.
  • 집에서는 몇 년 전 중고로 산 MacBook Air M1을 사용하고 있습니다.
  • 회사에서는 몇 년 전 중고로 산 HHKB를 씁니다.
  • 30대 후반, 기혼, 자녀는 셋(둘째와 셋째는 쌍둥이) 있습니다. 경기도에 살고 있습니다.
18

해커즈 퍼브에 사람이 많아져서 더 이상 일일히 모든 사람을 내 홀로(Hollo) 계정에서 팔로우 할 수 없게 됐다. 마침 레일웨이 구독 비용도 생각보다 많이 나와서 구독을 해지했다. 최소 비용 5 달러는 이미 결제했기 때문에 6월 22일까지는 계정을 유지할 수 있을 것 같은데 그 전에 백업을 잊지 않고 해야겠다.(글이 많진 않지만 그냥 없애기는 아쉽다.) 서비스 종료된 인스턴스의 핸들을 멘션하면 무슨 일이 벌어질까? 발신자 인스턴스에만 글이 남게 되는 걸까?

2