lionhairdino

@lionhairdino@hackers.pub · 45 following · 51 followers

지금까지 다루어 봤던 언어는 아래와 같습니다. MSX Basic Z80 Assembly Pascal GW-Basic C Macromedia Director Visual Basic PHP Flash Actionscript C++ Javascript

그리고 지금은, 하스켈을 비즈니스에 쓰려고 몇 년간 노력하고 있습니다. 지금 상태는, 하스켈 자체를 연구하는 게 아니라, 하스켈 (혹은 함수형 언어) 이해가 어려운 이유를 연구하는 아마추어 연구가쯤 되어버렸습니다. 하스켈 주제로 블로그를 운영 중이지만, 아직은 하스켈 프로그래머라고 자신 있게 말하진 못하고 있습니다. 가끔 이해에 도움이 될만한 측면이 보이면, 가볍게 아이디어를 여러 SNS에 올려보곤 하는데, 그다지 프로그래머에게 쓸모 있는 내용이 포함되진 않는 것 같습니다.

Blog
lionhairdino.github.io

함수는 파란색, 변수는 빨간색 같은 의미없는 알록 달록 말고, 함수들이 소속된 모듈 별로 색이 다르다든지, 로컬 변수, 글로벌 변수, 매개 변수를 구별한다든지.. 누가 안 만드나...

0

가봤던 대부분의 오픈 오피스가 나름 전망도 좋고, 시설도 좋고 그런 걸 내세우는데, 여긴 지하였습니다. (지상까지 뚫려 있는 한 쪽에서, 약간의 해가 들어와서 그런가 지하 냄새는 없었습니다.) 세계를 널 뛰는 노마드 말고, 서울이나, 국내에서 튜링 같은 곳만 돌아다니는 노마드도 괜찮지 않나, 아주 잠깐 생각해 봤습니다. @arkjunJuntai Park

1

어제 튜링의 사과를 처음 구경했습니다. 귀인들 만나느라 이용은 안하고 구경만. 조금 과장해서 얘기하면, 다른 공유 오피스와는 다르게 PC방에 개발자 모인 것 같은 느낌이었습니다. 다른 오피스들처럼 조용하고, 조금은 생기 없는 풍경이 아니라, 상대적으로 소음도 좀 있고, 활기가 있어 보여 의외였습니다. 장소 오너분들도 개발자로 알고 있는데, 개발자 이해도가 높은 게, 영향이 있는 것 아닐까요?

(삶에 찌든 사람들 모인 PC방 말고, 젊은이들이 즐겁게 노는 모습의 PC방입니다.)

7

요즘 함수 적용Apply에 꽂혀서, 처음 보는 프레임워크 코드들을 Apply 위주로 읽으니 그럴싸합니다. 그래서, Apply 생각 일부를 정리했습니다. 함수형 프로그래밍 언어도 익숙하지 않은 외국어와 비슷한 느낌이라, 코드들을 정확히는 몰라도 일단 통밥으로 읽는 방법을 계속 훈련 중입니다.

Apply - 이펙트가 있는 함수들을 연이어 적용하고 싶어
Apply - Price와 (exRate -> Price)를 다루는 프로그램의 골격을 똑같이 하고 싶어

해커스펍에 바로 올릴까 했는데, 읽어보니 조금 더 정돈하고 올리고 싶다는 생각이 들어, 개인 블로그에 먼저 올립니다.

3

맞다 맞다 하면서, 청개구리 타래에 다 하트 눌렀습니다.(해커스펍에 중복 글 안보이는 타래 기능이 어여 들어 오길... 설마 TS 전혀 모르는 제가 TS 익혀서 기여할 수 있을 때까지 안들어오진 않겠지요) 여기 몇 분은 아실 것 같은데, 전 빅 황소 청개구리입니다. 튼튼한 손 발로 돌파해야 하는데, 얘들이 힘이 약해지고 있어요.

4
1

하스켈 db 라이브러리 Opaleye를 쓰려고, Arrow를 봤었는데. 지금은 Arrow를 안 쓰고 Applicative 스타일로 넘어간 것 같습니다. 일정 수준에 다다른 라이브러리 제작자들도 느낀 거지요. 추상화가 고급스럽고 좋긴 하지만, Arrow는 너무 갔다고. (<- 몇 년 전 이야기로, 어디까지나 혼자 추측입니다.) Arrow가 뭔지 알고는 있는 것 같은데, 아직도 쓰려면 (읽는 것 말고) 입술이 마릅니다. Opaleye 예시가 Arrow를 안 쓰니 훨씬 마음이 편하게 접근하네요.

같은 류에서 킬러 기능이 탑재됐다면, 좀 어려워도 꾸역 꾸역 가져다 쓰지만, 그렇지 않은 경우는 고급스러운 모양보다는, 쓰기 편한 게 장땡입니다.

3
0

문법 강조가 바뀔 때가 한참 지난 것 같은데, AI가 별의별 걸 다하는 세상에 아직도 눈에 보이는 소식들이 없네요. 예를 들면, 식별자(변수), 함수, 등 문법 요소에 따라 색을 입힌다거나 하는 게 아닌,
전역이냐, 로컬이냐로 색을 달리 한다든지,
오른쪽 우선 결합 연산자면 빨간색, 왼쪽 우선 결합이면 파란색 한다든지,
시맨틱 문법 강조가 일반화 될 때가 된 것 같은데, 혹시 저만 모르고 있는 건가요?

2

lionhairdino shared the below article:

How to pass the invisible

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

This post explores the enduring challenge in software programming of how to pass invisible contextual information, such as loggers or request contexts, through applications without cumbersome explicit parameter passing. It examines various approaches throughout history, including dynamic scoping, aspect-oriented programming (AOP), context variables, monads, and effect systems. Each method offers a unique solution, from the simplicity of dynamic scoping in early Lisp to the modularity of AOP and the type-safe encoding of effects in modern functional programming. The post highlights the trade-offs of each approach, such as the unpredictability of dynamic scoping or the complexity of monad transformers. It also touches on how context variables are used in modern asynchronous and parallel programming, as well as in UI frameworks like React. The author concludes by noting that the art of passing the invisible is an eternal theme in software programming, and this post provides valuable insights into the evolution and future directions of this critical aspect of software architecture.

Read more →
11
1
0

@lionhairdino 그건 항등원 말고 다른값들도 다 가능하지않나요? 1 ( _ ) 3 = 4 1 ( _ ) 3 = 3하면 각각 +, *로 유추되겠죠. 똑같은(identical) 값이 나오게하는 값이라는 정의 자체와 부합하는 용어인데 필요이상으로 꼬아서 생각하고 계신게 아닌가 싶네요.

그 것이 무엇이다라 할 때, 사실 주변의 것들로 대상을 설명, 정의한다에서 출발했습니다. 아시다시피 제가 워낙 인포멀이라 생각이 잘 전달될까 모르겠는데요. 1 ( _ ) 0 = 1 의 좌변과 우변이 같은 상태에서 시작했습니다. 제일 처음에 쓴 글은, 연산을 통해 연산자의 성격을 파악할 수 있다는 설명이고요. (잡소리 타래가 길어지니 슬 슬 불안합니다~. 쓸데없이 왜 신분증도 Identity, 항등원도 Identity(Element)일까를 설명하는, 어찌보면 말씀대로 굳이 꼬아서 보는 놀이쯤으로 봐주세요. 불안합니다...ㅎㅎ) @bglbgl gwyng

1

누가 먼저라기보다 무엇과 무엇이 같다(좌변과 우변이 다른 모양인데 같다. 1 + 0 = 1) 에서 고유성이 생긴다로 생각이 이어지고 있습니다. 무언가와 같다로 대상을 정의, 지칭하는 표현으로 쓴다는 생각입니다. 예를 들면, 기준이 되는 자가 있어야, 이게 1m인지, 2m인지 알수 있는 것처럼, 같은지를 볼 수 있는 대상이 있어야 대상을 표현할 수 있다는 상상입니다. 이상한 잡소리에 댓 달아 주셔서 감사합니다~ @pbzweihander쯔방 :yuri: :yurigarden: :garden:

0

@lionhairdino 연산은 정의하려면 아무렇게나 정의할수있고, 같은 항등원을 가지는 다른 연산도 여러개 만들수 있잖아요. 그래서 항등원 자체로 연산에 대해 뭔가 많은걸 알려준다고 보긴 힘들다고 생각합니다. a + b, max(a, b), a + b + ab 모두 0을 항등원으로 갖죠. 그냥 연산을 수행하기 전과 후가 identical해서 identity아닌가 싶네요.

(돈 안되는 생각 그만 해야되는데, 그냥 놀이입니다.) 세상에 연산자가 (+), (*) 만 존재한다는 가정을 하고,
1 ( _ ) 0 = 1 이 나왔다면, (+)로 유추할 수 있고,
1 ( _ ) 1 = 1 이 나왔다면, (*)로 유출할 수 있고,
0, 1이 마치 ( _ )를 식별Identify해주는 신분증Identity이다란 의미에 따온 건 아닐까 하는 상상입니다. 물론 말씀대로 0이나 1이 어느 하나로 특정해주는 건 아니긴한데요. 뭐랄까 어원, 의미가 이랬던 것 아닌가 정도 생각입니다. @bglbgl gwyng

0

보통 신분증같이 어떤 대상이 무엇이다를 확인해 줄 수 있는 것들을 Identity라 합니다. 왜 항등이 Identity일까 쓸데 없이 궁금함이 있었는데요. 다음과 같이 상상하면 얼추 그럴 수 있겠다 싶습니다.

더하기 연산자를 <+0> <+1> <+2> 로 정의해서
1 <+0> 2 = 3
1 <+1> 2 = 4
1 <+2> 2 = 5
라고 할 때, 지금 내가 쓰고 있는 더하기 연산자가 어떤 연산을 하는지 알려면 0과 연산을 해보면 알 수 있다. 1 <+2> 0 = 3
결과를 보고, <__> 안의 성질, 즉 연산의 고유 성질을 알아낼 수 있다.

1 <__> 0 = 1 이 나와야 항등원이니, 위의 말이 말그대로 항등원이란 건 아니고,

항등원Identity Element으로 연산의 고유 성질이 뭔지 볼 수 있는 도구가 될 수 있다는 걸 보이는 설명입니다.

이래서 항등원을 Identity Element라고 하는 것 아닌가... 하는 상상입니다.

2
2
0

디코는 울타리 안 사람들과 떠드는 느낌이고, 엑스나 쓰레드, 마스토돈은 광장에서 지나가는 사람들 속에서 떠드는 느낌인데, 해커스펍은 묘하다. 페디버스로 광장 사람들도 만날 수 있긴 하지만, 동시에 울타리 안에 있는 느낌도 준다.
'Pub

9

윤슬, 볕뉘
들어 보셨나요?
윤슬은, 찰랑이는 물(바다)에 햇빛이나 달빛이 비치면서 부서지는 모습을 말하며,
볕뉘는, 나뭇가지 사이로 (작은 틈으로) 들어오는 햇빛이라 합니다.

윤슬은 노래 가사로 들어 알고 있었는데, 볕뉘는 처음 들어 봤습니다.
잘 안쓰이는 이쁜 말들이 사라지는 걸 아쉬워하는 사람들이 있어, 살다 보면 한 번쯤은 어디선가 들어 보는데, 볕뉘는 전혀 들어 보지 못했습니다.

4
0
1
1
1
0
  • 출근할 때 새로 산 키보드 가지고 하면 기분이 좋다 유효 시간: 1시간
0

말씀을 뒤집어서 보면, 만일 고정점 a = f a 라는 정의에 있는 =을 약?화시켜 동형사상쯤으로 바꿔 놓는다면, 그제서야 모나드도 고정점이 된다.. 란 말씀이지요? "고정점 처럼 볼 수 있다"란 문장을 좀 더 포멀하게 바꿔주신 거지요?

1

현재까지는 마치 원칙처럼 머리를 지배하고 있는 생각이 있는데요.

함수형 프로그래밍을 차지하는 큰 줄기중 하나로,

조금 다르게 생긴 AB에 모두 대응하는 코드를 만들기 위해
**"인수 분해"**를 잘 해서,
A{ a, b, c, d }B{ a, b, c', d } 로 보고, 이 중에서 다른 c, c'을 골라 내고
또, 이 걸 잘 인수 분해해서
c{ e }c'{ f }를 찾아 내고, 둘이 결국 닮은 구석이 없으면, 우겨서
c{ e, _ }c'{ _, f }로 자리를 만들고,
_에 적절한 id를 집어 넣어 결국, AB같은 류로 만든다

란 생각에서 맴돌고 있습니다.

누가 누가 그럴싸하게 잘 우기나, 포멀하게 우기나!

1

a = f a 일 때, af의 고정점이라 하니
m a = m (m a) 가 된다면, m am의 고정점이라 할 수 있다.
모나드는 m a = m (m a)가 안되는 것을 join, return의 도움을 받아 성립하게 만든다.
그래서 m의 고정점을 바로 m a라 할 순 없지만, join, return의 도움으로 고정점처럼 동작하게 할 수 있다.
처럼 설명해도 되나 싶습니다.

여러 번 작업 한 걸, 한 번의 작업으로 표현한다.
반대에서 출발해서 보면, 한 번의 작업을 여러 번의 작업으로 인수 분해한다.

이런 목적 측면에서 보면, 고정점도 모나드도 하나의 궤로 설명할 수 있지 않을까 싶습니다.

그냥 상상입니다.

1

주의: 프로그래머에게도 수학도에게도 쓸모 있지 않은 그저 생각 놀이로, 어제 모임에서 제가 떠들었던 잡담입니다.

튜링 완전한 프로그램은 따로 메모리를 두어 관리하며 돌아가는데, 람다 산법은 이런 메모리가 없는데도 불구하고, 튜링 완전이 할 수 있는 일은 모두 할 수 있다고 합니다. 왜 그럴 수 있는지, 시작 아이디어가 뭘까 생각해 봤습니다. (슬쩍 보기엔, 학문적으로 긴 여정이 있는데, 그 걸 모두 따라가기엔 벅찬 일이라, 절대 따라가고 싶진 않고, 그저 아이디어 정도만 알고 싶습니다.)

함수형에선, 정보를 "기억memory"하는 역할도 역시 함수가 담당합니다. 기억이 필요할 땐 함수 구조를 주어, 기억 공간을 만든다고 볼 수 있습니다. 함수 합성에서 다음 함수의 인자로 새로 바인딩하며 기억의 역할을 합니다. 애초 메모리 모델이 없는 게 아니라, 다른 구조로 메모리 모델을 구현했다고 볼 수 있는 것 아닌가 싶습니다. (이렇게 말하는 곳은 없습니다.)

람다 함수는, "따로 호출할 일이 없어 이름 없는 함수로 정의한다" 쯤으로 넘어가기엔, 숨어 있는 의미가 너무 큽니다. 분명, 이렇게 넘어갈 일이 아닌데, 역시나 친절히 설명해주는 자료를 아직은 못봤습니다. (많이 찾아 보 거나, 깊게 공부한 건 아니라서, 어딘가에는 있지 않을까 싶어요)

람다 함수로 만들어,

  • 실행 시점 제어
  • 함수 합성 체인 참여
  • 필요한 정보들을 모아 두는 단위
  • 외부와 소통하는 길을 만들어 둘 수 있고, ...

여기에 기억이라는 중요한 역할도 담당하게 합니다.

람다 산법은 매개 변수, 함수 몸체, 적용, 이렇게 3가지 요소만으로 모든 걸 해결합니다. 알론조 처치 아저씨는 어찌 이런 구조를 떠올렸을까 싶습니다. 애초에 위와 같은 식으로 볼 수 있는 함수 통찰의 눈이 먼저 있었던 상태에서 만든 거겠지요?

4

하스켈 모임할 때도 해도사가 적극 후원해 주셨었는데, 닉스 모임할 때도 또 적극 후원해 주시고, 후원 감사합니다. 너무 한 회사만 달리고 있어, 다른 스폰서를 적극적으로 찾아봐야 하지 않을까요. 하스켈, 닉스 사용 중인, 혹은 도입을 염두하고 있는 회사 또 없나요?

3

0차 닉스 모임을 다녀왔습니다. 공식 중대형 컨퍼런스도 좋지만, 커뮤니티의 소수 인원이 모이는 자리만의 재미가 있네요. 간만에 목쉬게 수다 떨다 왔습니다. 회사 소속 모든 인원이 닉스를 쓰는 회사가 있다니...

3
0
0
2

혹시 이 후 글 타래(쓰레드) 표현에 대한 계획이 예정되어 있는지 모르겠네요. 지금, 상위 글이 흐릿하게 나오긴 하지만, 시선 분산이 되는 건 막지 못하는 것 같습니다. 상위 글의 폰트 크기까지 줄이든가, 디폴트로 폴딩 되어 있다거나 하면 어떨까요?

글 타래

상위글 작성자 아이디는 그대로 노출이 되고, 현재 글과 이어지는 선도 그대로 두고, 본문만 폴딩해두면 어떨까요. 다른 분들 의견도 합쳐지면 좋겠다 싶어, 공식 리포에 안 올리고 바로 여기에 올립니다.

0

혹시 이 후 글 타래(쓰레드) 표현에 대한 계획이 예정되어 있는지 모르겠네요. 지금, 상위 글이 흐릿하게 나오긴 하지만, 시선 분산이 되는 건 막지 못하는 것 같습니다. 상위 글의 폰트 크기까지 줄이든가, 디폴트로 폴딩 되어 있다거나 하면 어떨까요?

글 타래
1

페인트, 도배 공구 중에 스크레이퍼고 있는데요. 기존 페인트나 종이를 긁어서 떼어내는 도구입니다. "모으다/버리다" 뉘앙스보다는, "어딘가에 붙은 신문(사극에서 흔히 보이는 방榜)을 긁어서 떼어 내다" 뉘앙스가 들어 있어서 그렇게 쓰인게 아닌가 싶어요.

0

많은 언어에서 배열이 primitive로 주어지기 때문에 간과하기 쉬운데, 실제로 배열은 Binary Trie이다. 인덱스 0b01101010로 어떤 배열을 접근한다는건 왼오오왼오왼오왼으로 트리를 타고 내려가는 것이다. 실제로 칩에서 어떻게 동작할지를 상상해보면 좋다.

1
0

Intel 쓰고 있는 데스크탑 시스템의 메인보드가 고장이 나서, CPU, 메인보드만 AMD로 갈아 탔습니다. 그러고, 원래 쓰던 nixos 설치된 nvme로 부팅을 하니, 아무런 군소리 없이 부팅이 됩니다?! os 재설치 안해도 되어 한 숨 돌렸지만, 한 편으론 왜? 군소리가 없는지 아주 살짝 불안하네요. 각 종 칩셋들 드라이버 다 제대로 잡힌 건지...

1

같은 얘기 한 적 있는데, 유전자 발현(expression)을 계산(evaluation)하거나 평가(evaluation)하지 않듯이, 표현(expression)을 평가(evaluation)는 해도 계산(evaluation) 또는 (표현의) "값을 구한다(evaluate)"고 하지 않듯이, 식(expression)도 평가(evaluation)하지 않고, '값을 구한다(evaluate)'거나 계산(evaluation)했으면 좋겠다고 생각해 봅니다.

5
2
1

우연히 클릭되어, 모니터 사진을 풀 사이즈 이미지로 봤는데요. 모니터 먼지 제거엔, 여자분들 토너 묻혀서 닦는 솜?이 딱이더라고요. 여자 친구나 와이프, 혹은 딸이 한 번 사용한 것 재활용 하시면 됩니다. ;-) @perlmint

0

우연히 클릭되어, 모니터 사진을 풀 사이즈 이미지로 봤는데요. 모니터 먼지 제거엔, 여자분들 토너 묻혀서 닦는 솜?이 딱이더라고요. 여자 친구나 와이프, 혹은 딸이 한 번 사용한 것 재활용 하시면 됩니다. ;-) @perlmint

0
0
2
3
0