박준규

@curry@hackers.pub · 159 following · 74 followers

프로그래밍 언어 하스켈(Haskell) 덕질하는 계정

darcs hub
hub.darcs.net/vincent

책을 읽고 있는데 고퍼(Gopher)라는 고대의 프로토콜이 나왔다. 책에서 다음과 같이 아직 살아 있을 수 있는 고퍼 서버 목록을 소개한다.

고퍼 서버에 \r\n을 날리면 응답이 오는데 위 세 개 서버에 요청을 날려보니 모두 응답이 온다.

예를 들어 세 번째 고퍼 서버의 응답은 다음과 같다.(스압 주의)

i	fake	(NULL)	0
i	fake	(NULL)	0
i __  __      _        _____ _ _ _	fake	(NULL)	0
i|  \/  | ___| |_ __ _|  ___(_) | |_ ___ _ __	fake	(NULL)	0
i| |\/| |/ _ \ __/ _` | |_  | | | __/ _ \ '__|	fake	(NULL)	0
i| |  | |  __/ || (_| |  _| | | | ||  __/ |	fake	(NULL)	0
i|_|  |_|\___|\__\__,_|_|   |_|_|\__\___|_|	fake	(NULL)	0
i	fake	(NULL)	0
1MetaFilter	/MetaFilter	gopher.metafilter.com	70
isharing and discussing neat stuff on the web	fake	(NULL)	0
1Ask MetaFilter	/Ask MetaFilter	gopher.metafilter.com	70
iasking questions and getting answers	fake	(NULL)	0
1FanFare	/FanFare	gopher.metafilter.com	70
ipop culture discussion -- TV, movies, podcast, books	fake	(NULL)	0
1Projects	/Projects	gopher.metafilter.com	70
icreative work by MetaFilter community members	fake	(NULL)	0
1Music	/Music	gopher.metafilter.com	70
ioriginal musical and audio recordings by MeFites	fake	(NULL)	0
1Jobs	/Jobs	gopher.metafilter.com	70
iemployment opportunities and member availabilities	fake	(NULL)	0
1IRL	/IRL	gopher.metafilter.com	70
iorganizing meetups and community events in real life	fake	(NULL)	0
1MetaTalk	/MetaTalk	gopher.metafilter.com	70
iwhere the commuity talks about MetaFilter itself	fake	(NULL)	0
1FAQ	/FAQ	gopher.metafilter.com	70
ifrequently asked questions	fake	(NULL)	0
5
6
14
0
0
3
3
0

darcs show dependencies라고 입력하면 다음과 같이 Graphviz DOT 코드를 출력해준다!

%0 1a66e7eb Initial commit f55ce246 Book.hs: Extract file handle allocation into fileResource function f55ce246->1a66e7eb 227e4ff1 feat: Add greeting text file I/O with uppercase printing 227e4ff1->f55ce246 771b32dc Add `repeatUntilIO` helper and use it in `printFileContentsUpperCase2` 771b32dc->227e4ff1

(해커즈 퍼브에서는 graphviz를 지원합니다!)

darcs show dependencies라고 입력하면 다음과 같이 Graphviz DOT 코드를 출력해준다!

%0 1a66e7eb Initial commit f55ce246 Book.hs: Extract file handle allocation into fileResource function f55ce246->1a66e7eb 227e4ff1 feat: Add greeting text file I/O with uppercase printing 227e4ff1->f55ce246 771b32dc Add `repeatUntilIO` helper and use it in `printFileContentsUpperCase2` 771b32dc->227e4ff1

(해커즈 퍼브에서는 graphviz를 지원합니다!)

2

darcs pull 또는 darcs push로 서로 다른 저장소의 패치를 전달하려고 하는데 단일 패치 해시를 지정했는데 darcs가 자꾸 다른 패치를 가져오려고 했다.

‘버그인가⋯ 못쓰겠네⋯ 이래서 사람들이 안 쓰는 건가?’

그런데 ChatGPT에게 물어보니 패치간 의존성이 있기 때문에 그 패치를 먼저 가져오려고 하는 것일 수 있다고 한다. darcs는 어떻게 패치간 의존성을 파악할 수 있는 거지? darcs 의심한 내가 나빠.

0

darcs pull 또는 darcs push로 서로 다른 저장소의 패치를 전달하려고 하는데 단일 패치 해시를 지정했는데 darcs가 자꾸 다른 패치를 가져오려고 했다.

‘버그인가⋯ 못쓰겠네⋯ 이래서 사람들이 안 쓰는 건가?’

그런데 ChatGPT에게 물어보니 패치간 의존성이 있기 때문에 그 패치를 먼저 가져오려고 하는 것일 수 있다고 한다. darcs는 어떻게 패치간 의존성을 파악할 수 있는 거지? darcs 의심한 내가 나빠.

3
4
0
2
1

메타적인 얘기지만, 저는 오늘 “Kubernetes는 적정 기술인가?”라는 떡밥이 Hackers' Pub 내부적으로 발생했다는 사실이 아주 기쁩니다. 여태까지는 Hackers' Pub 자체에 대한 떡밥이거나, GeekNews나 X에서 넘어온 떡밥이었거든요.

1

@saschanazKAGAMI🏳️‍🌈🏳️‍⚧️ 그게 제일 바람직하다는 것에 저도 동의해요. 다만 현실적으로는 아무래도 DB라든지 MQ라든지 이것저것 같이 띄워야 하다 보니, 서비스 운영을 하려다 보면 그런 전체 형상 관리를 위한 추상화 계층이 있기는 있어야 하는 것 같아요. 물론 도커 컴포즈를 안 쓰고 앤서블로 그런 모든 것을 관리할 수도 있고, 아예 닉스나 닉스오에스를 써서 더 아름답게 할 수도 있겠습니다만... 도커 컴포즈 정도면 타협 가능한 것으로...

0

같은 것과 같지 않은 것에 대해서 짤막한 글을 써 보았습니다. 오랜만에 국어로 쓰는 글이라 잘 읽힐지 모르겠네요.

0
0
0

기능이 여럿 있는데, 그 상세를 잘 모르겠는 것이 많군요. 이를테면 "공개"와 "조용히 공개"의 차이점이 제게는 직관적이지 않네요. 무슨 차이인지 아시는 분이 있다면 알려주시면 감사하겠습니다.

0

줄리 모로누키(Julie Moronuki) 님이 원래 언어학을 전공하셔서 그런지 글을 참 잘 쓰시는 것 같고 그 필력으로 하스켈 책을 세 권이나 써주셔서 너무 감사하다. 새로운 콘텐츠를 만들어 주시기를 고대하고 있는데 최근 어떻게 지내시는지 너무 궁금하다.

ChatGPT는 Moronuki가 일본식 성씨일 가능성을 제기했다.

그렇지 않아도 그의 블로그를 보니, 그가 일본에 방문해서 영어를 가르쳤던 경험이, 프로그래밍을 전혀 몰랐던 그로 하여금 하스켈을 대중에게 가르치는 사명을 일깨워준 계기가 된 것 같다.

만약 일본식 성씨가 맞다면 아마도 もろぬき라고 쓰는 것 같다.

0

줄리 모로누키(Julie Moronuki) 님이 원래 언어학을 전공하셔서 그런지 글을 참 잘 쓰시는 것 같고 그 필력으로 하스켈 책을 세 권이나 써주셔서 너무 감사하다. 새로운 콘텐츠를 만들어 주시기를 고대하고 있는데 최근 어떻게 지내시는지 너무 궁금하다.

ChatGPT는 Moronuki가 일본식 성씨일 가능성을 제기했다.

그렇지 않아도 그의 블로그를 보니, 그가 일본에 방문해서 영어를 가르쳤던 경험이, 프로그래밍을 전혀 몰랐던 그로 하여금 하스켈을 대중에게 가르치는 사명을 일깨워준 계기가 된 것 같다.

만약 일본식 성씨가 맞다면 아마도 もろぬき라고 쓰는 것 같다.

0
0

회사에서 쓴 코드를 공개 저장소에 올릴 수는 없어서 hackage-server를 직접 돌려보기로 했다. 빌드할 때 의존성 맞추기가 어려울 것 같아서 속는 셈 치고 Nix를 써봤는데⋯ 한 번에 서버가 에러 없이 실행됐다. 이제 사내에서 하스켈 패키지 관리를 할 수 있다!(그런데 아무도 안 씀⋯)

0

회사에서 쓴 코드를 공개 저장소에 올릴 수는 없어서 hackage-server를 직접 돌려보기로 했다. 빌드할 때 의존성 맞추기가 어려울 것 같아서 속는 셈 치고 Nix를 써봤는데⋯ 한 번에 서버가 에러 없이 실행됐다. 이제 사내에서 하스켈 패키지 관리를 할 수 있다!(그런데 아무도 안 씀⋯)

0

간혹 "이모지"가 아니라 "에모지"라고 쓰는 이유에 대한 질문을 받습니다. 여기다 써 두면 앞으로 링크만 던지면 되겠지?

요약: 에모지라서 에모지라고 씁니다.

"이모지"라는 표기는 아마도 "emoji"가 "emotion"이나 "emoticon"과 관련이 있다고 생각해서 나오는 것으로 보이는데요. "emoji"와 "emoticon"은 가짜동족어(false cognate)입니다. "emoji"는 일본어 絵文字(에모지)를 영어에서 그대로 받아들여 쓰고 있는 것입니다. 심지어 구성원리도 에모+지가 아니고 에+모지(絵+文字)입니다. "emotion"과 유사해 보이는 것은 순전히 우연일 뿐, 계통적으로 전혀 아무 상관이 없습니다. "이모티콘"과 "이미지"의 합성어가 아닙니다. (그랬으면 "-ji"가 아니라 "-ge"였겠죠.)

그리고 그렇기 때문에 에모지를 에모지로 표기할 실익이 생깁니다. :), ¯\_(ツ)_/¯, ^_^ 등은 이모티콘입니다. 반면 😂는 명확히 에모지입니다.

프로그래머에게 이건 정말 중요한 구분입니다. "이모티콘을 잘 표현하는 시스템"과 "에모지를 잘 표현하는 시스템"은 전혀 다른 과제이기 때문입니다. 에모지는 "그림 문자"라는 원래 뜻 그대로, 어떤 문자 집합(예를 들어 유니코드)에서 그림 문자가 "따로 있는" 것입니다. 내부 표현이야 어떻든, 적어도 최종 렌더링에서는 별도의 글리프가 할당되는 것이 에모지입니다. "무엇이 에모지이고 무엇이 에모지가 아닌가"는 상대적으로 명확합니다(문자 집합에 규정되어 있으니까).

반면 이모티콘은 "무엇이 이모티콘인가?"부터 불명확합니다. 우선 대부분의 이모티콘은 이모티콘이 아닌 문자를 조합하여 이모티콘이 만들어지는 형식입니다. 예를 들어 쌍점(:)이나 닫는 괄호())는 그 자체로는 이모티콘이 아니지만 합쳐 놓으면 :) 이모티콘이 됩니다. 하지만 조합에 새로운 의미를 부여했다고 해서 다 이모티콘이라고 부르지도 않습니다. -_- 같은 것은 대다수가 이모티콘으로 인정하지만, -> 같은 것은 이모티콘이라고 부르지 않는 경향이 있습니다.

- 문자와 > 문자에는 화살표라는 의미가 없기 때문에, -> 조합과 화살표의 시각적 유사성에 기대어 화살표라는 새로운 의미로 "오용"한 것은 이모티콘의 구성 원리에 해당합니다. 하지만 화살표는 인간의 특정한 정서(emotion)에 대응하지 않으므로 이모티콘이라고는 잘 부르지 않습니다. 그렇다고 얼굴 표정을 나타내야만 이모티콘인가 하면 그렇지도 않습니다. orz 같은 것은 이모티콘으로 간주하는 경향이 있어 보입니다. 오징어를 나타내는 <:=는 이모티콘인가? 이모티콘이 맞다면, 왜 ->는 이모티콘이 아니고 <:=는 이모티콘인가? 알 수 없습니다. ㅋㅋㅠㅠ는 둘 다 정서를 나타내는데, ㅠㅠ만이 아이콘적 성질을 가지므로 이모티콘이고 는 이모티콘이 아닌가? 알 수 없습니다. 만약 만 이모티콘이 아니라고 한다면, ㅋ큐ㅠ 에서 는 이모티콘인가 아닌가?? 알 수 없습니다. 이 알 수 없음은 이모티콘의 생래적 성질입니다. 어쩔 수 없죠.

패키지 저장소에 내가 만든 패키지를 업로드해보니까 다음과 같이 코딩말고도 할 게 꽤 많다.

  • 저장소 계정 만들고 권한 승인 받기[1]
  • 라이브러리 코드에 주석 적기
  • 라이선스 정하기
  • 소스 코드 저장소 정하기
  • 커밋 메시지 적기
  • 체인지로그 적기
  • 테스트 코드 적기
  • 버전 관리하기[^4]

LLM 덕분에 영어로 적어야 하는 문서 대부분은 어렵지 않게 할 수 있었다. LLM 때문에 바보 된다는 말도 많지만 영어 때문에 주저 했던 작업을 쉽게 시작할 수 있었다는 점에서 확실히 진입 장벽은 낮아졌다.

앞으로 더 해볼 일은 특정 배포판에 패키지를 배포하는 일이다. 해키지에서 지원하는 배포판은 다음과 같다.

  • Arch
  • Debian
  • Fedora
  • FreeBSD
  • LTS
  • LTSHaskell
  • NixOS
  • Stackage
  • openSUSE

도전 과제로 위에 적은 모든 배포판에 내가 만든 패키지 배포해보는 것도 재밌겠다. LTS, LTSHaskell은 뭔가 했는데, 스태키지(Stackage)에 패키지 업로드하는 방법을 안내한 문서를 보니까 스태키지의 저장소 종류인 것 같다.

한편 해커즈 퍼브의 홍민희 님도 헤비(?) 하스켈 패키지 업로더이신데 예를 들어 seonbi도 사실 하스켈 패키지이다.

해키지 업로더 계정이 필요하신 분은 나와 홍민희 님을 멘션하면 이미 두 명의 승인은 따 놓은 당상이다.


  1. 해키지에서는 가입 후 기존 해키지 업로더 2명의 승인이 필요하다. ↩︎

0

@lionhairdino 근데, 이미 고쳤습니다. ANSI 구문 강조 테스트:

  Welcome to VitePress!

  Where should VitePress initialize the config?
  ./docs

  Site title:
  My Awesome Project

  Site description:
  A VitePress Site

  Theme:
 Default Theme (Out of the box, good-looking docs)
 Default Theme + Customization
 Custom Theme
0
0
0

@hongminhee洪 民憙 (Hong Minhee) 아⋯ 이 커밋 보고 언어 설정과 관련이 있을 것 같아서 설정을 보다가 그 옵션을 보긴 했는데 ‘이게 원래 없었나?’라고 생각했습니다. 다른 서비스에서는 못본 기능 같은데 꽤 유용할 것 같습니다! 한편 요즘 타임라인에 일본어가 자주 올라오긴 했는데 안 보고 싶다는 생각보다는 번역해서 보고 싶다고 생각했어요. 팬피의 일본어 번역 품질은 별로더라고요.

0
0
0
0

닉스(Nix)를 써보려고 Nix Pills라는 글을 읽기 시작했다. 화면에 Hello, world!를 출력하는 패키지 hello를 닉스로 설치하는 방법이 나오더라.

nix-env -i hello

저런 하찮은 프로그램이 패키지로 존재하는지 처음 알았다.

혹시 해키지에도 저런 게 있는지 검색을 해봤는데 있더라.[1] 2010년에 Simon Marlow가 업로드했다. 그런데 특이한 점이 이 패키지의 소스 코드 저장소 주소가 darcs.haskell.org라는 것이다. darcs를 호스팅하는 곳은 hub.darcs.net만 있는 줄 알았는데 haskell.org에도 있었구나⋯ 그런데 이 사이트 UI도 아예 없고 그냥 디렉터리 리스팅이 나오는데 hub.darcs.net으로 이전하시면 안 되려나.


  1. https://hackage.haskell.org/package/hello-1.0.0.2 ↩︎

0
0

해키지(Hackage)[1]에 패키지를 업로드하면 자동으로 빌드, 문서 생성, 테스트가 진행된다. 그런데 이게 시간이 좀 걸린다.(체감상 10분 정도) 이 과정이 자동으로 완료되기 전에 참지 못하고 수동으로 문서를 업로드하면 자동으로 진행되던 것들이 모두 중단된다. https://github.com/haskell/hackage-server/issues/1376


  1. 하스켈 패키지 저장소 ↩︎

0
0
0
0
0
0

몇 년 전에 취미로 프로그래밍 책 제본을 했다. 인터넷에서 업체에 PDF 파일을 전달하면 제본해서 택배로 받았다. 그렇게 읽지도 않는 책은 쌓여만 갔다. 결국 몇 달 전에 하스켈 학교 모르는 분에게 한 권만 나눔하고 모두 버렸다.

그런데 프로그래밍 책은 펼쳐 놓고 노트북을 켜서 실습할 때가 많기 때문에 잘 펴져야 한다. 떡제본은 펼침성이 나빠서 불만이었고 여러 제본 방식을 알아보다가 바인더 형식을 써보기로 했다. 적당한 업체를 찾아서 첫 주문을 했는데 오늘 도착했다. 원래 표지 디자인을 직접 해서 업체에 PDF를 전달해야 하는데 하는 법도 모르고 시간도 없어서

“그냥 대충 알아서 해주세요.”

했는데⋯

너무 이쁘게 잘 뽑아 주셨다. 책등 문구 디자인도 알아서 센스 있게 해주셨는데 너무 마음에 든다. 과연 이 책은 끝까지 읽을 수 있을까!

책등 이미지책의 목차 일부주문 제작한 B5 크기의 3공 바인더
0