What is Hackers' Pub?

Hackers' Pub is a place for software engineers to share their knowledge and experience with each other. It's also an ActivityPub-enabled social network, so you can follow your favorite hackers in the fediverse and get their latest posts in your feed.

0
0
0
0
0
0
0
0

A post about me

nilio.ca/post?title=A%20post%2

This post is an attempt to start writing on my blog, it's a journey to find a creative direction for the future of what I will write while I don't want my blog to be too tech-oriented (just enough).

In this post I write about myself, my struggles and how I've overcome them. There is a bit on how I use computers and my current projects.

0
0
0
0

/me saw some headline on SFGate about California folks not having a RealID about to get screwed.

Then I read the article and it was about long lines at the DMV for getting RealID before some early May deadline BS.

But, near as I can discern: the early May deadline BS is mostly about not being able to fly with just a regular drivers license? A RealID or passport are OK, so why not go for a passport instead? Also, maybe you can still fly with a birth certificate and other kinds of ID too?

TL;DR: I still do not understand why people are scrambling to get RealIDs and I still do not understand why anyone would pay extra for a RealID when a passport seems as if it does a lot more than a RealID.

Maybe someone can explain it to me? SFGate did nothing more than make me feel paranoid about something that seems as if it is still a waste of time and money.
0

"Immigrants without legal status pay billions of dollars in taxes, many through a nine-digit code known as an Individual Taxpayer Identification Number. For years, immigrant advocates and tax experts say, the IRS has consistently assured undocumented taxpayers that their information is confidential, and that it would be safe for them to file tax returns."

Goodbye to all that revenue.

npr.org/2025/04/08/g-s1-59056/

0
0
0
0

このままだとNASAがDOGEされて補助金頼みのスペースXが立ち行かなくなる可能性もあるね。そもそも宇宙開発とMAGAは相性が悪い。
自由貿易もEVもMAGAとは相性が悪い。
イーロンマスクは、自分のビジネス基盤を潰すことを公言していたトランプに、五兆円費やしてTwitterを買い、二百億寄付して大統領の椅子を献上したんだなあ。
ある種の天才であることは間違いないんだけど、他人が何を考えてるのか読み取るのが本当に下手なんだろう。

0
0
0
0
0
0
0
0

논비건식에 CW를 달아야 하는 이유

* 최근 CW에 대한 피로도를 느끼는 플로우에 고민하다가 한 번 써봅니다. 출근길에 쓴 거라 많이 축약된 내용입니다.

일단 저는 비건인이 비건을 하는 게 단순히 고기를 먹지 "못해서"가 아니라는 지점이 CW를 걸어야 하는 거라고 보거든요
이거에 대해서 뭐 피곤하다거나 그런거 그럴 수 있다고 생각해요 저라고 매번 뮤트단어쓰고 쿠션 이중삼중으로 하는게 편하겠습니까? 어찌되었건 게시물 하나 올리는데에 다른 게시물에 비해 노력이 드는데
하지만 '그런 노력을 들여서까지 게시물을 올려야 하는가', '그럼으로써 논비건식을 남들에게 노출하고 논비건식을 접한 타인이 동물착취와 폭력을 연상케 해야하는가', 그리고 그 '논비건식을 타인도 섭취하고 싶게끔 해야하는가' 이런 고민을 한 번 거치게 할 수 있는 장치라고도 생각해요

논비건식은 단순히 선택의 영역이고 개인의 신념이기 때문에(사실 이보다는 호불호의 영역으로 보는 것 같지만) 강요해선 안 된다
맞는 말이죠. 하지만 당신께서 그렇게 생각할 수 있는 것 자체가 육식(그로 인해 발생하는 착취와 폭력의 현장)에 익숙하고 무디다는 증거고, 그런 의견이 주류가 되어 인정받을 수 있다는 사실 자체가 기울어진 운동장임을 증명하는 꼴입니다
이게 다른 종류의 CW는 잘 사용하는 사람이 논비건식에서만 그런다면 더 그렇죠

물론, 그럼에도 피로감을 느낀다는 의견에 공감하고 이해할 수 있습니다. 현대인으로서 내가 살아숨쉬는 모든 행위가 누군가를 착취하는 구조이니 얼마나 피곤합니까. 도덕적으로 옳은 삶을 지향한다는 건 참 쉽지 않아요
그러나 CW를 걸어야 하는 피로감에 오히려 반발감을 느끼거나 불쾌하다면 자신이 어떤 말을 하고 있는 건지에 대한 정확한 인지는 해야한다고 봅니다. 인지를 하는 상태에서 자신이 그렇게 판단한다면 어쩔 수 없는 거고, 그게 괜찮은 사람들끼리 모이고 아닌 사람들은 떠나는 수밖에 없는 거죠

이에 대하여 해당 행위에 대하여 비판하는 분위기가 도는 걸 넘어서서 "너는 왜 CW를 걸지 않느냐"며 개인에게 불링을 하는 걸로 이어지는 걸 저는 반대합니다 어떤 이유에서든 개인과 개인이 논쟁하는 게 아니라(이건 어쩔 수 없는 영역인 거 아시죠?) 개인과 다수가 싸우는 형태가 되어선 안 되니까요

더불어, 제가 비건식 가장 열심히 섭취 할 때 경험으로 뮤단이 해결방안이 될 수 없는게
논비건식 사진은 뮤트가 안 돼요 그리고 논비건식은 보통 사진만 올리는 경우가 많고 게시하는 말도 다 달라서 뮤트단어로 해결해라는 전혀 도움이 안되고 해결방안이 못 됩니다

0
0
1
0
0
0
0
0
0
0
0

What would you use to create high quality man pages?

scdoc and asciidoc don't support cross-references.

I'm kind of starting to see why some authors just write raw troff and commit that, but I'd like something more human-friendly if possible.

0

판교에 인구수가 지속적으로 유입된 결과, 그 질량이 주변의 중력에 영향을 미칠 정도로 커져서 시공간의 왜곡이 발생해요.

따라서 판교 일대는 곧 시간선이 느려지는 것을 넘어, 중력이 임계점을 넘어서는 경우 블랙홀이 되어 그 안에 있던 직원들이 시간의 정지를 느끼게 될 거에요.

고로 판교에서의 퇴근은 영원히 불가능해질 수도 있다는 예측을 할 수 있어요.

@hillside힐씨

그래서 우리가 퇴사를 해서 인구 밀집지역의 중력을 낮춰야 하는 거군요?

드디어 깨달았습니다. 우리의 이 퇴사 욕구, 욕망은 시공간 왜곡을 막기위한 진화의 산물인것을...

이건 우리가 먼지같던 단세포 생물일 때부터 이어져온 숙명인겁니다!

퇴사! 퇴사를 통해 시공간을 지켜야합니다!

0
0
0
0

Lee Dogeon shared the below article:

같은 것을 알아내는 방법

Ailrun (UTC-5/-4) @ailrun@hackers.pub

같은 것과 같지 않은 것

국밥 두 그릇의 가격이 얼마인가? KTX의 속력이 몇 km/h인가? 내일 기온은 몇 도인가? 일상에서 묻는 이런 질문은 항상 같음의 개념을 암시적으로 사용하고 있다. 앞의 예시를 보다 명시적으로 바꾼다면 아래와 같이 (다소 어색하게) 말할 수 있다.

  • 국밥 두 그릇의 가격은 몇 원과 같은가?
  • KTX의 속력은 몇 km/h와 같은가?
  • 내일 기온은 몇 도와 같은가?

이런 질문들의 추상화인 이론들은 자연스럽게 언제 무엇과 무엇이 같은지에 대해서 답하는 데에 초점을 맞추게 된다. 예를 들면

  • x2+x+1=0x^2 + x + 1 = 0의 실수 해의 갯수는 0과 같다.
  • 물 분자 내의 수소-산소 연결 사이의 각도는 104.5도와 같다.
  • 합병 정렬의 시간 복잡도는 O(nlog⁡n)O(n\log{n})같다.

등이 있다. 이렇게 어떤 두 대상이 같은지에 대해서 이야기를 하다보면 반대로 어떤 두 대상이 같지 않은지에 대해서도 이야기하게 된다. 즉,

  • x+4x + 422로 나눈 나머지는 x+1x + 122로 나눈 나머지와 같지 않다.
  • 연결 리스트(Linked List)와 배열(Array)은 같지 않다.
  • 함수 λ x→x\lambda\ x \to x와 정수 55같지 않다.

같은 것과 판정 문제(Decision Problem)

이제 컴퓨터 과학(Computer Science)과 프로그래밍(Programming)에 있어 자연스러운 의문은 "두 대상이 같은지 아닌지와 같은 답을 주는 알고리즘(Algorithm)이 있나?"일 것이다. 다시 말해서 두 대상 aabb를 입력으로 주었을 때

  • 알고리즘이 참 값(True\mathtt{True})을 준다면 aabb가 같고
  • 알고리즘이 거짓 값(False\mathtt{False})을 준다면 aabb가 같지 않은

알고리즘이 있는지 물어볼 수 있다. 이런 어떤 명제가 참인지 거짓인지 판정하는 알고리즘의 존재 여부에 대한 질문을 "판정 문제"("Decision Problem")라고 하며, 명제 PP에 대한 판정 문제에서 설명하는 알고리즘이 존재한다면 "PP는 판정 가능하다"("PP is decidable")고 한다. 즉, 앞의 질문은 "임의의 aabb에 대해 aabb가 같은지 판정 가능한가?"라는 질문과 같은 의미라고 할 수 있다.

이 질문에 대한 대답은 당연하게도 어떤 대상을 어떻게 비교하는지에 따라 달라진다. 예를 들어 우리가 32 비트(bit) 정수에 대해서만 이야기하고 있다면 "임의의 32 비트 정수 aabb에 대해 aabb가 각 비트별로 같은지 판정 가능한가?"라는 질문에 대한 답은 "그렇다"이다. 반면 우리가 비슷한 질문을 자연수를 받아 자연수를 내놓는 임의의 함수에 대해 던진다면 답은 "아니다"가 된다.[1]

그렇다면 어떤 대상의 어떤 비교에 대해 판정 문제를 물어보아야할까? 프로그래머(Programmer)로서 명백한 대답은 두 프로그램(Program)이 실행 결과에 있어서 같은지 보는 것일 것이다. 그러나 앞서 자연수를 받아 자연수를 내놓는 함수에 대해 말했던 것과 비슷하게 두 프로그램의 실행 결과를 완벽하게 비교하는 알고리즘은 존재하지않는다. 이는 우리가 두 프로그램의 같음을 판정하고 싶다면 그 같음을 비교하는 방법에 제약을 두어야 함을 말한다. 여기서는 다음의 두 제약을 대표로 설명할 것이다.

  1. 문법적 비교(Syntactic Comparison)
  2. β\beta 동등성 (β\beta Equivalence)

1. 문법적 비교(Syntactic Comparison)

이 방법은 말 그대로 두 프로그램이 문법 수준에서 같은지를 보는 것이다. 예를 들어 다음의 두 JavaScript 프로그램은 문법적으로 같은 프로그램이다.

// 1번 프로그램
let x = 5;
console.log(x);

// 2번 프로그램
let x  =  5;
console.log( x );

공백문자의 사용에서 차이가 있으나, 그 외의 문법 요소는 모두 동일함에 유의하자. 반면 다음의 두 JavaScript 프로그램은 동일한 행동을 하지만 문법적으로는 다른 프로그램이다.

// 1번 프로그램
let x = 5;
console.log(x);

// 2번 프로그램
let x = 3 + 2;
console.log(x);

두 프로그램 모두 x5라는 값을 할당하고 5를 콘솔에 출력하나, 첫번째 프로그램은 = 5;를, 두번째 프로그램은 = 3 + 2을 사용하여 5를 할당하고 있기 때문에 문법적으로 다르다.

문법적 비교는 이렇게 문법만 보고서 쉽게 판정할 수 있다는 장점이 있으나, 두번째 예시처럼 쉽게 같은 행동을 함을 이해할 수 있는 프로그램에 대해서도 "같지 않음"이라는 결과를 준다는 단점을 가진다. 혹자는

3 + 2같은 계산은 그냥 한 다음에 비교하면 안돼? 컴파일러(Compiler)도 상수 전파(Constant Propagation) 최적화라던지로 3 + 25로 바꾸잖아?

라는 생각을 할 수도 있을 것이다. 이 제안을 반영한 방법이 바로 β\beta 동등성이다.

2. β\beta 동등성

바로 앞의 소절에서 단순 계산의 추가에 의해 같음같지 않음으로 변하는 것을 보았다. 이런 상황을 피하기 위해서는 같음을 평가할 때 프로그램의 실행을 고려하도록 만들어야 한다. 가장 대표적인, 대부분의 프로그래밍 언어(Programming Language)에 존재하는 프로그램의 실행은 함수 호출이다. 따라서 함수 호출을 고려한 같음의 비교는 f(c)와 함수 f의 몸체 b 안에서 인자 xc로 치환한 것을 같다고 취급해야한다. 예를 들어

let f = (x) => x + 3;

이 있다면, f(5)5 + 3 혹은 8을 같은 프로그램으로 취급해야한다. 이 비교 방법의 큰 문제는 함수가 종료하는지 알지 못한다는 것이다. 두 프로그램 ab를 비교하는데, a가 종료하지 않는 함수 l을 호출한다면, 이 알고리즘은 "같음"이나 "같지 않음"이라는 결과를 낼 수조차 없다. 즉, 올바른 판정법이 될 수 없다.

더 심각한 문제는 아직 값을 모르는 변수가 있는 "열린 프로그램"("Open Program")에 대해서도 이런 계산을 고려해야한다는 것이다. 다음의 JavaScript 예시를 보자.

let g = (x) => f(x) + 3;
let h = (x) => (x + 3) + 3;

gh는 같은 프로그램일까? 우리가 gh가 같은 프로그램이기를 원한다면 f(x)x + 3을 같은 프로그램으로 보아야한다. 대부분의 프로그램은 함수 안에서 쓰여지기 때문에 프로그램의 비교는 거의 항상 gh의 몸체와 같은 열린 프로그램들의 비교이다. 따라서 gh를 다른 프로그램으로 본다면 계산을 실행하여 두 프로그램을 비교하는 의미가 퇴색되고 만다. 그렇기 때문에 우리는 x와 같이 값이 정해지지 않은 변수가 있을 때에도 f(x)을 호출하여 비교해야만 한다. 이는 우리가 단순히 모든 함수가 종료하는지 여부를 떠나서, 함수의 몸체에 등장하는 모든 부속 프로그램(Sub-program)이 종료하는지 아닌지를 따져야만 한다는 이야기이다.

이런 강한 제약조건으로 인해 β\beta 동등성을 통해서 프로그램 비교의 판정 문제를 해결 가능한 곳은 매우 제한적이지만, β\beta 동등성이 매우 유용한 한가지 경우가 있다. 바로 의존 형이론(Dependent Type Theory)의 형검사(Type Checking)이다.

의존 형이론과 형의 같음

의존 형이론은 형(Type)에 임의의 프로그램을 포함할 수 있도록 하는 형이론(Type Theory)의 한 종류이다. 예를 들어 명시적인 길이(n)를 포함한 벡터(Vector) 형Vector n Int과 같이 쓸 수 있다. 이 형은 n개의 Int값을 가진 벡터를 표현하는 형이다. 이제 append라는 두 벡터를 하나로 연결하는 함수를 만든다고 해보자. 대략 다음과 같은 형을 쓸 수 있을 것이다.

append : Vector n a -> Vector m a -> Vector (n + m) a

즉, append는 길이 n짜리 a 형의 벡터와 길이 m짜리 a 형의 벡터를 합쳐서 길이 n + m짜리 a 형의 벡터를 만드는 함수이다. 이 함수를 사용해서 길이 5의 벡터를 길이 2와 길이 3짜리 벡터 x, y로부터 만들고 싶다고 하자.

append x y : Vector (2 + 3) a

안타깝게도 우리는 길이 2 + 3짜리 벡터를 얻었지, 길이 5짜리 벡터를 얻진 못했다. 여기서 앞서의 질문이 다시 돌아온다.

아니, 2 + 35로 계산하면 되잖아?"

그렇다. 이런 의존 형에 β\beta 동등성을 적용하면 우리가 원하는 형을 바로 얻어낼 수 있다. Vector (2 + 3) aVector 5 a같은 형이기 때문이다. 더욱이, 의존 형의 경우 종료하지 않는 부속 프로그램이 잘못된 형을 줄 수 있기 때문에 많은 경우 종료하지 않는 부속 프로그램을 어차피 포함하지 않는다. 다시 말해, 앞서 말한 제약 조건 즉 모든 부속 프로그램이 종료해야만 한다는 제약조건은 의존 형의 경우 상대적으로 훨씬 덜 심각한 제약조건이 되는 것이다.

이런 의존 형에 있어서의 β\beta 동등성 검사를 "변환 검사"("Conversion Check")라고 하며, 두 형이 β\beta 동등일 경우 이 두 형이 서로 "변환 가능하다"("Convertible")라고 한다. 이 변환 검사는 의존 형이론 구현에 있어서 가장 핵심인 기능 중 하나이며, 가장 잦은 버그를 부르는 기능 중 하나이기도 하다.

마치며

이 글에서는 같음과 같지 않음의 판정 문제에 대해 간략히 설명하고 프로그램의 같음을 판정하는 법에 대해서 단순화하여 다루어보았다. 구체적으로는 문법 기반의 비교와 β\beta 동등성을 통한 비교로 프로그램의 같음을 판정하는 법을 알아보았고, 이 중 β\beta 동등성이 적용되는 가장 중요한 예시인 의존 형이론을 β\beta 동등성을 중점으로 짤막하게 설명하였다. 마지막 문단에서 언급했듯 의존 형이론의 구현에 있어서 β\beta 동등성을 올바르게 구현하는 것은 가장 중요한 작업 중 하나이기에, 최근 연구들은 β\beta 동등성의 구현 자체를 의존 형이론 안에서 함으로서 검증된 β\beta 동등성의 구현을 하기 시작하고 있다. 이 글이 같음과 같지 않음과 판정 문제 그리고 β\beta 동등성에 있어 유용한 설명을 내놓았기를 바라며 이만 줄이도록 하겠다.


  1. 두 함수가 같다라고 보는 방법에 따라 다르나, 두 함수가 항상 같은 값을 가진다면 같다고 하자. 이때 함수의 판정 문제는 정지 문제(Halting Problem)와 동일하다. 임의의 튜링 기계(Turing Machine) ff가 입력 nn을 받았을 때 종료하면 g(n)=1g(n) = 1, 아니면 g(n)=0g(n) = 0이라고 하면 이 함수 gg와 상수 함수 c(n)=1c(n) = 1가 같은 함수임을 보이는 것은 ff가 항상 종료한다는 것을 보이는 것과 동등하다. ↩︎

Read more →
5
2
2
0

“[] has been an overwhelmingly negative and demoralizing force in my own personal workplace, no question about it.”

Luke Plunkett:

“I spoke with people working in the video game industry or very close to it, including artists, game designers, and software developers. I asked them to tell their stories about their daily interactions and struggles with artificial intelligence in the workplace, and what it means for the jobs they've been trained and hired to do.”

aftermath.site/ai-video-game-d

0
0
0
0
0
0
0
0
0
0
0