패치v간

박준규
@curry@hackers.pub · 181 following · 103 followers
darcs hub
- hub.darcs.net/vincent
Hackage
- hackage.haskell.org/user/JoonkyuPark
darcs pull
또는 darcs push
로 서로 다른 저장소의 패치를 전달하려고 하는데 단일 패치 해시를 지정했는데 darcs가 자꾸 다른 패치를 가져오려고 했다.
‘버그인가⋯ 못쓰겠네⋯ 이래서 사람들이 안 쓰는 건가?’
그런데 ChatGPT에게 물어보니 패치간 의존성이 있기 때문에 그 패치를 먼저 가져오려고 하는 것일 수 있다고 한다. darcs는 어떻게 패치간 의존성을 파악할 수 있는 거지? darcs 의심한 내가 나빠.
darcs pull
을 처음으로 해봤다. git에서처럼 뭔가 merge commit을 따로 해야되는 줄 알았는데 패치 자체가 커밋 로그에 바로 기록되더라.
줄리 모로누키(Julie Moronuki) 님이 원래 언어학을 전공하셔서 그런지 글을 참 잘 쓰시는 것 같고 그 필력으로 하스켈 책을 세 권이나 써주셔서 너무 감사하다. 새로운 콘텐츠를 만들어 주시기를 고대하고 있는데 최근 어떻게 지내시는지 너무 궁금하다.
ChatGPT는 Moronuki가 일본식 성씨일 가능성을 제기했다.
그렇지 않아도 그의 블로그를 보니, 그가 일본에 방문해서 영어를 가르쳤던 경험이, 프로그래밍을 전혀 몰랐던 그로 하여금 하스켈을 대중에게 가르치는 사명을 일깨워준 계기가 된 것 같다.
만약 일본식 성씨가 맞다면 아마도 諸貫라고 쓰는 것 같다.
패키지 저장소를 만지작거리다가 TUF(The Update Framework)라는 개념을 알게 되었다. https://gruuuuu.github.io/security/tuf/
회사에서 쓴 코드를 공개 저장소에 올릴 수는 없어서 hackage-server를 직접 돌려보기로 했다. 빌드할 때 의존성 맞추기가 어려울 것 같아서 속는 셈 치고 Nix를 써봤는데⋯ 한 번에 서버가 에러 없이 실행됐다. 이제 사내에서 하스켈 패키지 관리를 할 수 있다!(그런데 아무도 안 씀⋯)
패키지 저장소에 내가 만든 패키지를 업로드해보니까 다음과 같이 코딩말고도 할 게 꽤 많다.
- 저장소 계정 만들고 권한 승인 받기[1]
- 라이브러리 코드에 주석 적기
- 라이선스 정하기
- 소스 코드 저장소 정하기
- 커밋 메시지 적기
- 체인지로그 적기
- 테스트 코드 적기
- 버전 관리하기[^4]
LLM 덕분에 영어로 적어야 하는 문서 대부분은 어렵지 않게 할 수 있었다. LLM 때문에 바보 된다는 말도 많지만 영어 때문에 주저 했던 작업을 쉽게 시작할 수 있었다는 점에서 확실히 진입 장벽은 낮아졌다.
앞으로 더 해볼 일은 특정 배포판에 패키지를 배포하는 일이다. 해키지에서 지원하는 배포판은 다음과 같다.
- Arch
- Debian
- Fedora
- FreeBSD
- LTS
- LTSHaskell
- NixOS
- Stackage
- openSUSE
도전 과제로 위에 적은 모든 배포판에 내가 만든 패키지 배포해보는 것도 재밌겠다. LTS, LTSHaskell은 뭔가 했는데, 스태키지(Stackage)에 패키지 업로드하는 방법을 안내한 문서를 보니까 스태키지의 저장소 종류인 것 같다.
한편 해커즈 퍼브의 홍민희 님도 헤비(?) 하스켈 패키지 업로더이신데 예를 들어 seonbi도 사실 하스켈 패키지이다.
해키지 업로더 계정이 필요하신 분은 나와 홍민희 님을 멘션하면 이미 두 명의 승인은 따 놓은 당상이다.
해키지에서는 가입 후 기존 해키지 업로더 2명의 승인이 필요하다. ↩︎
닉스(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으로 이전하시면 안 되려나.
타임라인에 Gumroads가 있길래 오랜만에 들어가봤습니다. 이곳은 전에 유명한 하스켈 책을 팔던 곳인데 지금은 없네요. 대신 @bglbgl gwyng 님이 좋아하실만한 걸 찾았습니다.
https://abuseofnotation.github.io/category-theory-illustrated/
해키지(Hackage)[1]에 패키지를 업로드하면 자동으로 빌드, 문서 생성, 테스트가 진행된다. 그런데 이게 시간이 좀 걸린다.(체감상 10분 정도) 이 과정이 자동으로 완료되기 전에 참지 못하고 수동으로 문서를 업로드하면 자동으로 진행되던 것들이 모두 중단된다. https://github.com/haskell/hackage-server/issues/1376
하스켈 패키지 저장소 ↩︎
오늘이 첫 번째 서울하스켈숲 워크샵이었을텐데 어땠을지 너무 궁금하다. 어디 후기 안 올라오려나⋯
RE: https://hackers.pub/@curry/0195d0ee-d8d2-7711-b550-b54cc1b5d599
엥? 팬피가 죽었네⋯
아, 자야 되는데⋯
몇 년 전에 취미로 프로그래밍 책 제본을 했다. 인터넷에서 업체에 PDF 파일을 전달하면 제본해서 택배로 받았다. 그렇게 읽지도 않는 책은 쌓여만 갔다. 결국 몇 달 전에 하스켈 학교 모르는 분에게 한 권만 나눔하고 모두 버렸다.
그런데 프로그래밍 책은 펼쳐 놓고 노트북을 켜서 실습할 때가 많기 때문에 잘 펴져야 한다. 떡제본은 펼침성이 나빠서 불만이었고 여러 제본 방식을 알아보다가 바인더 형식을 써보기로 했다. 적당한 업체를 찾아서 첫 주문을 했는데 오늘 도착했다. 원래 표지 디자인을 직접 해서 업체에 PDF를 전달해야 하는데 하는 법도 모르고 시간도 없어서
“그냥 대충 알아서 해주세요.”
했는데⋯
너무 이쁘게 잘 뽑아 주셨다. 책등 문구 디자인도 알아서 센스 있게 해주셨는데 너무 마음에 든다. 과연 이 책은 끝까지 읽을 수 있을까!
해키지에 패키지 올렸는데 왜 빌드가 안 돌지?
회사에서 거의 10년 동안 운영한 서버를 교체 중이다. 고생 많으셨습니다. 서버님⋯ 새로 오신 서버님에게는 돼지 머리랑 막걸리 준비는 못했지만 절이라도 올려야겠다.
프로그래밍 언어 하스켈은 1990년 4월 1일에 처음 나와 올해 35주년이 되었습니다. 오늘이 하스켈 생일이에요. 이거 만우절 농담 아니고 진짜예요.
아⋯ 0.1.1.1에서 메이저 업데이트면 0.2.0.0으로 했어야 하는데 1.0.0.0으로 잘못 올렸네⋯ 근데 그러면 A자리는 언제 올리는 거지?
RE: https://hackers.pub/@curry/0195ec4b-7343-7316-adc7-5c89372dfca7
📢 Haskell 생태계에서 안정성이란 무엇일까요?
Haskell 재단의 안정성 작업 그룹(SWG)이 생태계의 변화를 효과적으로 관리하기 위해 어떤 노력을 기울이고 있는지 소개합니다. GHC 언어 확장 분류, 컴파일러 안정성 기능 개선, 커뮤니티 소통 촉진 등 우리가 진행한 작업과 앞으로 나아갈 방향에 대해 이야기합니다. 함께 Haskell 생태계를 더 강하게 만들어가요! 💪🚀
🔗 자세히 보기
ChatGPT 덕분에 우연히 하찮은 버그 하나를 발견했다.
ChatGPT에게 소스 코드 보여주고 주석으로 문서 작성을 부탁했는데 다음과 같이 알아서 파이썬 doctest와 같은 코드를 출력했다.
>>> prefixLength "key=value"
3
>>> prefixLength "a=b"
1
>>> prefixLength "noequals"
8
이 함수는 입력 문자열에서 ‘=’ 왼쪽에 있는 문자열의 길이를 리턴한다. 그런데 ‘=’가 없을 경우는 미처 생각을 못했는데 ChatGPT가 출력한 코드를 보고 그 사실을 깨달았다.
덕분에 코드 패치하고 난생 처음 메이저 업데이트라는 것도 해본다.(원래 리턴 타입이 Int
였는데 Maybe Int
로 바꿔서 브레이킹 체인지가 되었다.)
https://hackage.haskell.org/package/align-equal-0.1.1.1/docs/Data-Text-AlignEqual.html
좋은 글 잘 읽었습니다. 글도 잘 쓰시고 코딩도 잘 하시고 부럽습니다. 본문 내용 중 ‘두부와 강철 영수증’이란 표현이 재밌네요. ‘오라클’이라는 전문 용어도 처음 알게 되었습니다. 과거에 하시던 블록체인과 현재 하시는 액티비티펍이 뭔가 탈중앙화라는 공통 분모가 있는 것 같네요.
@hongminhee洪 民憙 (Hong Minhee) 다음과 같이 단문에 인라인 코드 마크다운을 쓸 경우 적용이 안 되는데 수정 가능할까요?
‘조용히 공개’의 효과는 무엇인가요? 조용히 공개된 글을 부스트하면 어떻게 되나요?
이제 막 탄생해서 사용자가 많지 않은 서비스를 초기에 접하면 원하는 아이디를 선점할 수 있어서 좋다.
darcs에 브랜치라는 개념이 없고 대신 저장소를 복제해서 패치를 선별적으로 적용한다고 한다. 프로그래밍 책 읽으면서 연습 문제를 풀려고 하는데 본문과 연습 문제가 다른 시간선(?)을 달려서 브랜치를 써볼까 했는데 브랜치가 없네⋯ https://chatgpt.com/share/67e8f4fd-7274-800c-8565-42c76aabd6e5
해커스펍 계정은 쓰기 전용으로, 우리인생은 읽기전용으로 사용하고 있다. 또는 기술 관련 콘텐츠는 해커스펍에 올리고 일상은 우리인생에 올리려고 한다.
클라이언트는 팬피를 쓰고 있는데 해커스펍은 마스토돈 API 구현이 안 되어 있어서 팬피에는 우리인생 계정을 연동했다.
그런데 팬피에서 재밌게 글을 읽다 보면 무심코 팬피에서(우리인생 계정으로) 해커스펍 글에 댓글을 달아서 뭔가 곤란하다⋯
그리고 해커스펍에 오신 분들은 거의 다 팔로우를 하고 있는데 동시에 우리인생에서도 팔로우를 해야해서(팬피에서 읽어야 하니까) 불편하다.
네이버에서 이런 걸 왜 만들었을까?
Tamgu는 Prolog에서 영감을 받은 술어 엔진과 Haskell 언어에서 영감을 받은 기능적 기능을 갖춘 명령형 언어입니다. 이 세 가지 프로그래밍 스타일을 자유롭게 혼합할 수 있습니다.
@hongminhee洪 民憙 (Hong Minhee) 해커스펍의 ‘게시글만’ 탭을 선택했을 때 개별 게시글을 한 번만 노출되게 하는 방법이 있을까요? 지금은 공유된만큼 게시글이 노출돼서 같은 게시글이 여러 번 나옵니다.
액티비티펍에서도 트위터에서와 같이 피인용 글을 다루는 스펙이 있나요?
이번에는 Grok에게 커밋 메시지[1] 작성을 부탁하다가 Changelog 작성하는 문서[2] 안내를 받았다.
crontab은 원하는대로 동작하지 않을 때가 많고 왜 안 되는지 이유를 알기도 어려웠는데 ChatGPT에게 물어 보니 source ~/.profile
넣고 해보라길래 그렇게 했더니 잘 된다.
@hongminhee洪 民憙 (Hong Minhee) 마스토돈 클라이언트 팬피(Phanpy)를 처음 써봤습니다. 인스턴스로 접속해서 보는 게 아니라 클라이언트로 연합우주를 이용하는 게 처음인데 좀 더 유려한 사용자 경험을 제공하네요! 그런데 해커스펍은 팬피와 연동이 안 되나요?
@hongminhee洪 民憙 (Hong Minhee) 해커스펍 모바일에서는 검색을 할 수 없나요?
집에서 회사에 있는 WSL에 SSH로 접근하려고 삽질을 좀 했는데 결론만 적는다. 우선 구성은 다음 그림과 같다.
이때 다음과 같이 하면 macOS에서 WSL에 SSH로 접근이 가능하다.
- Windows에 SSH 서버 필요 없음
- Windows에
netsh interface portproxy
명령어로 포트 프록시 이용 - WSL에서
sshd_config
파일에GatewayPorts yes
설정 필요
그리고 macOS의 Visual Studio Code에서 Remote - SSH 플러그인을 이용하면 macOS에서 쾌적하게(?) 회사 WSL에 접근해서 코딩할 수 있다.
@hongminhee洪 民憙 (Hong Minhee) 해커스펍 이름은 어떻게 지으셨나요? 저 나름대로 떠오른 이미지를 ChatGPT에게 만들어 달라고 부탁해보았습니다.
해커스펍의 콘텐츠를 해커스펍이 아닌 다른 서버 계정으로 그곳에서 부스트 하면 더 많은 연합우주 사용자에게 해커스펍 콘텐츠를 알릴 수 있지 않을까?
하스켈 패키지 검색 엔진이자 웹 서비스인 후글(Hoogle)은 서비스에 종종 문제가 생기곤 합니다. 그럴 때는 다음과 같은 대체 서비스를 이용해보세요!
한편 후글을 로컬에 설치해서 사용하는 것도 가능합니다. 잦은 서비스 문제에 질렸다면 로컬에 후글을 설치해보세요!
그리고 만약 당신이 부자라면⋯ 하스켈 재단에 기부해주세요⋯
@hongminhee洪 民憙 (Hong Minhee) 혹시 포지페드(ForgeFed)를 아시나요? 액티비티펍 확장이라고 하는데 깃(Git) 같은 것을 연합우주에서 사용할 수 있는 것 같습니다. 해커스펍의 장기 로드맵에 포지페드가 포함되면 어떨까 싶어 공유합니다.
https://forgefed.org/
프로그래밍 언어 하스켈 패키지 중에 연합우주와 관련 있는 것을 찾아봤더니 webfinger-client
가 있습니다. 2016년에 마지막 업로드가 되었고 너무 오래 돼서 빌드도 안 되는 상태입니다. LLM 도움을 받아 빌드 가능하게 패치하고 메인테이너에게 연락을 해봤습니다. 답장은 아직 없고 사실 메일을 보낸 지 24시간이 지나지도 않았지만 왠지 연락이 오지 않을 것만 같습니다. 급한 마음에(왜 급한지 모르겠지만) 하스켈 포럼에 패키지를 인수하고 싶다고 글을 남겼습니다. 좋은 소식이 오길 기대해봅니다.
https://discourse.haskell.org/t/taking-over-the-webfinger-client-package-maintenance/11628
연합우주에서 부스트(공유하기)의 구체적인 효과는 무엇인가요?
웹핑거(WebFinger)는 사용자 정보뿐만 아니라 저작권이나 언어 정보도 다루는군요! https://www.rfc-editor.org/rfc/rfc7033.html
다음과 같은 블루스카이 브릿지(?)는 어떻게 연동하는 건가요? 블루스카이의 모든 계정을 다음과 같이 연합우주에서 팔로우 할 수 있는 게 아니고 블루스카이 사용자가 특별히 뭔가 조치를 해야 하나요?
@hongminhee洪 民憙 (Hong Minhee) 해커스펍에서 노트말고 모든 게시물을 따로 모아서 보려면 어떻게 해야 하나요? 만약 아직 없다면 다음과 같은 방법이 있을 것 같습니다.
- 검색할 때 키워드를 제공한다.(타입이 게시물인 것이라든지)
- 타임라인에 노트뿐만 아니라 게시물도 따로 노출한다.