- 중국어를 전공했습니다.
- 전역하자마자(금요일 전역, 월요일 출근) 강원도에서 제약 영업을 1년 4개월 정도 했습니다.
- 컴퓨터 학원을 1년 정도 다니면서 정보보안 스터디를 했습니다.
- 이때 Python, C, Java순으로 프로그래밍을 처음 접했습니다.
- 정보보안 관제 회사에서 고객사에 파견 나가 악성코드 대응 업무를 4년 정도 했습니다.
- 이때 개발자가 되고 싶어서 C++ 코리아 스터디에 몇 번 참석했는데 여기서 운명의 ‘모나드’라는 단어를 처음 접하고 하스켈 공부를 시작했습니다.
- 기업에서 정보보안 담당자 7년 차로 일하고 있습니다.
- 코딩은 취미로 하거나 혼자만 하는 소소한 업무 자동화에 활용하고 있습니다.
- 풀타임 개발자와 오픈소스 메인테이너의 삶을 동경하고 있습니다.
- 주로 Windows에서 Putty로(80x24, Consolas) 리눅스 서버에 붙어서 Vim을 사용합니다. Visual Studio Code를 잠깐 써봤는데 다시 Putty로 돌아왔습니다.
- 집에서는 몇 년 전 중고로 산 MacBook Air M1을 사용하고 있습니다.
- 회사에서는 몇 년 전 중고로 산 HHKB를 씁니다.
- 30대 후반, 기혼, 자녀는 셋(둘째와 셋째는 쌍둥이) 있습니다. 경기도에 살고 있습니다.
박준규
@curry@hackers.pub · 318 following · 170 followers
darcs hub
- hub.darcs.net/vincent
Hackage
- hackage.haskell.org/user/JoonkyuPark
- 하스켈은 특별히 애정하기 때문에 Haskell이라 적지 않고 하스켈이라 적었습니다.(는 사실 아니고 다 쓰고 나서 뒤늦게 깨달음)
- 자녀의 성별은 모두 여성입니다.(딸부자)
- 중국어를 전공했습니다.
- 전역하자마자(금요일 전역, 월요일 출근) 강원도에서 제약 영업을 1년 4개월 정도 했습니다.
- 컴퓨터 학원을 1년 정도 다니면서 정보보안 스터디를 했습니다.
- 이때 Python, C, Java순으로 프로그래밍을 처음 접했습니다.
- 정보보안 관제 회사에서 고객사에 파견 나가 악성코드 대응 업무를 4년 정도 했습니다.
- 이때 개발자가 되고 싶어서 C++ 코리아 스터디에 몇 번 참석했는데 여기서 운명의 ‘모나드’라는 단어를 처음 접하고 하스켈 공부를 시작했습니다.
- 기업에서 정보보안 담당자 7년 차로 일하고 있습니다.
- 코딩은 취미로 하거나 혼자만 하는 소소한 업무 자동화에 활용하고 있습니다.
- 풀타임 개발자와 오픈소스 메인테이너의 삶을 동경하고 있습니다.
- 주로 Windows에서 Putty로(80x24, Consolas) 리눅스 서버에 붙어서 Vim을 사용합니다. Visual Studio Code를 잠깐 써봤는데 다시 Putty로 돌아왔습니다.
- 집에서는 몇 년 전 중고로 산 MacBook Air M1을 사용하고 있습니다.
- 회사에서는 몇 년 전 중고로 산 HHKB를 씁니다.
- 30대 후반, 기혼, 자녀는 셋(둘째와 셋째는 쌍둥이) 있습니다. 경기도에 살고 있습니다.
해커즈 퍼브에 사람이 많아져서 더 이상 일일히 모든 사람을 내 홀로(Hollo) 계정에서 팔로우 할 수 없게 됐다. 마침 레일웨이 구독 비용도 생각보다 많이 나와서 구독을 해지했다. 최소 비용 5 달러는 이미 결제했기 때문에 6월 22일까지는 계정을 유지할 수 있을 것 같은데 그 전에 백업을 잊지 않고 해야겠다.(글이 많진 않지만 그냥 없애기는 아쉽다.) 서비스 종료된 인스턴스의 핸들을 멘션하면 무슨 일이 벌어질까? 발신자 인스턴스에만 글이 남게 되는 걸까?
프로그래밍 입문… 저는 AUTOEXEC.BAT을 수정하면서 코딩 비슷한 걸 시작한 것 같아요. 주로 아버지가 짜 둔 MS-DOS 배치 파일을 고치면서 놀았었고, 나중에는 90년대 말에 개인 홈페이지 붐이 오면서 HTML을 다루기도 했습니다. 게시판을 붙이고 싶어서 Perl을 조금 배웠고, 금방 PHP로 넘어가서 제대로 된 프로그래밍을 시작하게 됐네요. (“제대로 된”이라고 하는 이유는 그 전까지는 반복문을 다루지 못했기 때문에.) 그 뒤로 중학생이 된 뒤로는 JavaScript를 배웠고, 고등학생 때는 C/C++와 Python, Ruby 같은 걸 배웠던 것 같습니다.
@hongminhee洪 民憙 (Hong Minhee) 하스켈은 언제 나오나요?
평소에 함수형 언어 매니아들이 주장하는만큼 이펙트를 엄격하게 구분하는게 중요하다곤 생각안했는데, local first 앱을 만들다가 네트워크 요청을 포함한 IO와 그렇지 않은 IO를 구분해야하는 이유를 찾았다. 앱의 초기화 로직에 네트워크 요청이 숨어있으면 API 서버 장애시 앱이 아예 안켜지는 문제가 있다. 방금 이거랑 관련된 버그 찾느라 시간을 많이 썼다.
@bglbgl gwyng 사이드 이펙트에 자비를 베풀면 안 됩니다.
해커즈 퍼브 저장소를 딥위키에 넣어 봤다! https://deepwiki.com/hackers-pub/hackerspub
한동안 Hollo를 이용했는데 하스켈 코드 쓰러 잠깐 마음의 고향 해커즈 퍼브에 왔습니다.
welcome :: IO ()
welcome = do
putStrLn "Welcome to Hackers' Pub"
welcome
레일웨이가 터졌나! https://railway.app/
‘그냥 tryAny 쓰면 예외는 다 잡을 수 있는 거 아닌가? 왜 ResourceT를 써야 하지?’라고 생각했는데 찾아보니 tryAny로는 비동기 예외를 잡을 수 없다고 한다.
writeGreetingSafeAttempt :: IO ()
writeGreetingSafeAttempt = do
dir <- getDataDir
h <- IO.openFile (dir </> "greeting.txt") WriteMode
_ <- tryAny do
IO.hPutStrLn h "hello"
IO.hPutStrLn h "world"
IO.hClose h
@dansup I'd like to list up my instance hackers.pub on FediDB, but how could I do that?
오늘 자기 전에 Hollo 설치하자!
Hollo 설치했습니다! 핸들은 @hollo
오늘 자기 전에 Hollo 설치하자!
액티비티퍼브에 Place가 있어서 사람들이 위치 공유도 하고 장소에 ‘좋아요’도 누르듯이 Book도 있으면 재밌겠다. 사람들이 좋아하는 책에 ‘좋아요’도 누르고 서로 연결도 시켜주고!
액티비티퍼브에 Place가 있어서 사람들이 위치 공유도 하고 장소에 ‘좋아요’도 누르듯이 Book도 있으면 재밌겠다. 사람들이 좋아하는 책에 ‘좋아요’도 누르고 서로 연결도 시켜주고!
멘티를 서울숲하스켈에 보냈었는데, 거기갔다 왔더니 이제 JS 코드짤때 커링을 알아서 잘 활용한다. 사실 내가 그분께 주는 피드백이 '좀더 함수형으로 짜라' 이상도 이하도 아닌데(이거 들키면 안됨), 방법을 하나하나 가르치려니 너무 피곤해서 하스켈을 배우게 시켰다. 리턴 확실하구만.
@bglbgl gwyng 이 글은 하스켈 학교에 공유하면 안 되겠군요!(들키니까)
이런 용어집도 있었구나! 이거 설마 예전에 봤던 neo4j 책에서도 이 용어집을 참고했으려나!
액티비티퍼브에서 Hashtag뿐만 아니라 Mention도 tag구나!
갑자기 파서 콤비네이터가 만글고 싶어졌다
@joonnotnotJoon 파서 콤비네이터 하면 하스켈이죠!
@hongminhee洪 民憙 (Hong Minhee) Hollo를 사용하려고 합니다. 오라클 클라우드의 S3 호환 오브젝트 스토리지도 Hollo가 지원하나요?
@hongminhee洪 民憙 (Hong Minhee) 찾아보니 될 것 같습니다!
@hongminhee洪 民憙 (Hong Minhee) Hollo를 사용하려고 합니다. 오라클 클라우드의 S3 호환 오브젝트 스토리지도 Hollo가 지원하나요?
@curry박준규 아덕분에 중요한걸 깨달았습니다.
@bglbgl gwyng 어떤 깨달음을 얻으셨나요!
@hongminhee洪 民憙 (Hong Minhee) 하⋯ Hollo 설치하러 갑니다! 우선 도메인을 사야겠군요.
@hongminhee洪 民憙 (Hong Minhee) 도메인 이름 고르는 게 너무 어렵네요!😵
@curry박준규 아, Mastodon에서 <svg> 태그를 지워버리니까 그렇겠네요. (Hollo에서는 Phanpy를 써도 도표가 표시됩니다!)
@hongminhee洪 民憙 (Hong Minhee) 하⋯ Hollo 설치하러 갑니다! 우선 도메인을 사야겠군요.
@curry박준규 좋아요가 없어서 하트 찍어드렸습니다.
그나저나, 도표는 이미지로 첨부하지 않더라도 Hackers' Pub 자체 기능으로도 그릴 수 있어요!
@hongminhee洪 民憙 (Hong Minhee) 네, 그렇긴 한데 graphviz를 직접 적으면 팬피에서는 이미지 표시가 안 되더라고요!
저는 소셜 서비스의 핵심이 ‘좋아요(Like)’라고 생각합니다. 저는 제가 페이스북에서 처음으로 ‘좋아요’를 많이 받아서 너무 신났던 감정을 잊을 수 없습니다. 그리고 저는 지금도 ‘좋아요’의 노예⋯(사람들은 그런 너를 관종이라고 부른단다.)
@curry박준규 아, 그리고 오늘 마침 이런 게 떴네요.
@hongminhee洪 民憙 (Hong Minhee) 안 그래도 Evan Prodromou 님이 쓴 책을 읽다가 든 생각을 적은 것인데 신기하네요!
액티비티 퍼브를 구현한 지도앱 같은 게 있나요?
액티비티 퍼브에 Place 타입이 아마도 트위터나 페이스북에서 글을 쓸 때 현재 위치를 남기는 용도인 것 같은데 장소에도 Like를 하면 재밌을 것 같은데 생각해보니 페이스북에 이미 있는 것 같다.
액티비티 퍼브를 구현한 지도앱 같은 게 있나요?
어디 RFC 문서 의존 관계 정리된 거 없나요?
엔드포인트 솔루션이나 네트워크 장비를 운영하다 보면 그 솔루션 본연의 역할을 지고지순(?) 하게 지키기보다는 뭔가 민원을 해결하는 예외 처리에 리소스를 투입할 때가 많은데 그럴 때마다 뭔가 법을 어긴 것 같고 마음이 안 좋다.
@curry박준규 이제 잘 될 겁니다!
@parameterfreak 님 어서 오세요!
@hongminhee洪 民憙 (Hong Minhee)
@parameterfreak 이분 계정이 다른 연합(우리.인생)에서 검색이 안 됩니다.
유심을 교체했다.
논리와 low-level data representation을 다뤄볼지, 아니면 함수형 추상 기계들(Turing Machine같은 것이지만 함수형을 위한 것들)을 다뤄볼지
@ailrunAilrun (UTC-5/-4) 저는 둘 다 궁금합니다.😀
https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.6#superclass-expansion-is-more-conservative
내가 9.4 -> 9.6 마이그레이션에서 겪고 있는 문제가 이거랑 관련이 있는거 같은데(확실치 않음)... 9.4에서는 c :: Type -> Constraint 일때 forall c. c Int 뭐 이런 조건이 있으면, 모든 c에 대해 c Int가 존재하는게 말이 안되는데도 실제로 c Int 꼴로 쓰이는 c만 고려해서 타입체크를 통과시켜줬던거 같다(이것도 확실하지 않음). 근데 9.6에선 당연히 거부당한다.
위의 내 이해가 맞다면 9.4의 constraint solving 완전 무근본이었단건데, 이건 또 믿기 어렵다(하스켈의 설계 결정에 대한 신뢰 유지한다고 하면). 어디서 내가 잘못 파악한거지.
@bglbgl gwyng 어떤 코드에서 어떤 에러가 나나요?
책 읽다가 생소한 게 나와서 적어 본다.
패키지 attoparsec에 있는 함수 parseOnly는 청크 한 개만 다룰 수 있고 나머지 청크는 버린다. 이러면 스트림 데이터를 읽을 수가 없다. 이때 모듈 Data.Attoparsec.ByteString.Run에 있는 다음 도구를 사용하면 된다.
parseAndRestore :: Monad m =>
RestorableInput m ByteString -> Parser a -> m (Either ParseError a)
data RestorbleInput m i = RestorableInput
(m i) -- ^ Get the next chunk of input, or an empty string if there is no more
(i -> m ()) -- ^ Push a nonempty chunk of input back to the input stream
newRestorableIO
:: IO i -- ^ Get the next chunk of input, or an empty string if there is no more
-> IO (RestorableInput IO i)
RestorableInput IO ByteString은 ByteString 청크 스트림을 표현한다. 이게 일종의 가변 상태를 가지고 있다. 이 가변 상태가 있기 때문에 앞에서 읽었지만 소모되지 않은 청크를 버리지 않고 입력에 다시 넣는 방식을 쓰는 것 같다.
이런 방식을 Incremental parsing이라고 하는 것 같다.
그냥 커피랑 간식만 먹다가 왔다. package.yaml 잘못 수정한거랑 constructor import 빼먹은거 고쳐드린게 전부.
RE: https://hackers.pub/@bgl/01965764-69ba-7e46-934f-ab8450c2486c
@bglbgl gwyng 몰래 Nix 영업은 안 하셨나요?
이제 서울하스켈숲 세미나 조교하러 간다
@bglbgl gwyng 고생이 많으십니다! 세미나는 어떤가요?
와, 이번 장에서는 ExceptT 모나드 트랜스포머를 알려준다! 크리스와 줄리 선생님 필력만 믿습니다.
https://hackage-content.haskell.org/package/transformers-0.6.2.0/docs/Control-Monad-Trans-Except.html
역시 애플리케이션 만드는 것보다 라이브러리 만드는 게 더 재밌는 것 같다. 다들 이럴까, 내가 유독 그런 걸까?
@hongminhee洪 民憙 (Hong Minhee) 애플리케이션은 UI 때문에⋯
거의 15년 전에 야심 넘치게 Benjamin C. Pierce의 Types and Programming Languages를 한 권 장만했지만 아직도 아주 깨끗하다. 앞으로도 읽을 일이 없을 것 같다… ㅋㅋㅋ
@hongminhee洪 民憙 (Hong Minhee) 앗, 전설의(?) 책 tapl을 갖고 계시다니! 저는 그 책 너무 비싸서 도서관에서 잠깐 열람만 했었어요.
하스켈 패키지 서버 에러 나서 라이브러리 문서를 못보니까 코딩을 못하네!





