Profile img

정진명

@jjme@hackers.pub · 44 following · 35 followers

약력은 비워둘 수 없습니다.

GitHub
@jjmenet
2

오픈소스 활동하면서 고민하게 되는 법적 어려움들

1. 오픈소스가 완전 공개에 무료인 것은 맞으나, 무상이라도 저작권 관리, 기업 납품 등 법적 행위가 정상적으로 성립하려면 절차상 결국 사업자등록 사실이 필요한 경우가 많다.

2. 리눅스 재단과 하버드대 공동 연구에 따르면, 오픈소스 메인테이너들은 본업 외에 주당 20시간 이상을 오픈소스에 쏟으며 사실상 '투잡'을 뛰지만 월급은 한 곳에서만 받는 기형적 구조다.

3. 이런 기형적인 구조에서, 그나마 비영리 활동을 한다고 인정을 받는 방법을 고민하게 되지만 실질적으로는 그 어느 나라도 제도적으로 방법이 없다시피한 경우가 많다.

4. 기존의 영리 사업자 제도에 대부분을 의존해야 해서 협력자가 아닌, 겸업으로 인식되거나 아예 경쟁사를 창업한 것으로 인식되는 등 의도치 않은 여러가지 오해를 불러일으키기도 한다.

5. 이 1에서 4까지의 내용을 이해하고 상담해주는 법률가조차 찾아보기 어렵다.

2
0
0
1

자신의 사이트에 게시하고, 다른 곳에 동시 배포하기
------------------------------
- *POSSE(Publish on your Own Site, Syndicate Elsewhere)* 는 개인 사이트에 먼저 게시한 뒤, 소셜미디어 등 외부 플랫폼에 복제본이나 링크를 배포하는 *콘텐츠 자율 배포 방식*
- 이 방식은 *콘텐츠 소유권과 원본 URL* 을 유지하면서도, *친구나 팔로워가 사용하는 플랫폼에서 접근* 할 수 있게 함
- POSSE…
------------------------------
https://news.hada.io/topic?id=25529&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

1
1

한 10년 정도만에 무라카미 하루키의 언더그라운드 시리즈를 다시 읽었다. 종교가 사회 문제를 일으키는 요즘 한국에서도 읽어볼만한 책이라고 생각한다. 느낀 점을 다 쓰려면 글을 쓰는데만 한 세월일 것 같으니 기록만.

리디북스에서 읽은 언더그라운드와 약속된 장소에서.
2
0

예전에 LLM이 얼마나 복잡한 코드를 이해할 수 있는지 파악하기 위해 Gemini 2.5 모델들로 내 IOCCC 2012 수상작을 던지고 무슨 일을 하는지 실행 없이 알아 맞춰 보라고 했더니 하나도 제대로 파악하지 못했던 적이 있다. 문득 생각이 나서 Gemini 3 Pro는 개선되었을려나 생각했는데, 힌트 하나만 받고 10분동안 생각하더니 완벽하게 응답에 성공했다! 심지어 설명도 실행 없이 분석했다는 걸 감안할 때 매우 정확했다. IOCCC 수상작을 모두 기억하고 있을 가능성을 감안해 이전에 본 적이 있냐고 물어 보니 환각(...)을 내뱉는 것도 그렇고(그보다 외웠다면 처음에 바로 정답을 얘기했겠지), 실제로 생각 과정을 보면 사람이 할 법한 분석을 전부 하고 있는 걸 보니 진짜로 LLM들의 reasoning 능력이 이 정도 수준에 도달했음을 알 수 있다. 세상 참 많이 발전했네.

> 다음 C 프로그램이 하는 일을 알려 줘. [코드 생략]

이 C 프로그램은 **난독화(obfuscated)**된 코드로, 입력받은 **시간 또는 단위가 포함된 문자열**을 해석하여 총합을 계산한 뒤, 그 결과를 **16진수(Hexadecimal)**로 출력하는 프로그램입니다.

구체적인 작동 방식은 다음과 같습니다:

1.  **입력 처리**:
    *   `getchar()`를 통해 표준 입력(stdin)에서 문자를 하나씩 읽어들입니다.
    *   `|32`를 통해 대문자를 소문자로 변환하여 처리합니다.

2.  **문자 매핑 (해싱)**:
    *   `"ynwtsflrabg"`라는 문자열은 입력받은 문자가 특정 단위(예: year, week, second 등)인지 확인하기 위한 인덱스 문자열입니다.
    *   입력된 문자가 이 문자열에 포함되면 변수 `b`에 특정 해시 값을 누적합니다.

3.  **단위 변환 및 계산**:
    *   `"1+DIY/.K430x9G(kC["`라는 복잡한 문자열은 **룩업 테이블(Lookup Table)** 역할을 합니다.
    *   내부 루프에서 이 테이블과 비트 연산(`&255^b`)을 통해 현재 입력된 단위가 무엇인지(예: 'y'가 연도인지, 's'가 초인지) 판별합니다.
    *   `u=1ll<<6177%n--*4` 부분은 각 단위에 맞는 **가중치(Multiplier)**를 계산합니다. `<<` 비트 시프트 연산을 사용하는 것으로 보아, 특정 단위마다 2의 제곱수 형태의 배수를 적용하거나, 혹은 시간을 초 단위(또는 나노초 단위)로 변환하는 계수를 생성합니다.

4.  **결과 누적**:
    *   변수 `m`에 파싱된 수치와 단위 가중치를 곱하여 누적합니다.

5.  **출력**:
    *   최종적으로 계산된 값 `m`을 `printf("%llx\n", m)`을 통해 **16진수(long long hex)** 형태로 출력합니다.

**요약하자면:**
이 코드는 "1y(1년)", "2w(2주)", "30s(30초)"와 같은 형식의 텍스트를 입력받아, 이를 초(second)나 특정 기본 단위로 환산한 총합을 16진수로 보여주는 **단위 변환 계산기**입니다.> 아... 미묘하게 틀렸어. 컴파일하지 않고서 좀 더 생각해 보겠어? 힌트: 입력에는 0~9까지의 문자가 들어갈 수 없음.

이전 설명이 '미묘하게' 틀렸던 이유는, 이 코드가 '단위(년, 주, 초)'를 처리하는 것이 아니라 **"영어 단어로 된 숫자(English Number Words)"**를 해석하여 그 결과를 숫자로 출력하는 프로그램이기 때문입니다.

입력에 `0-9`가 들어가지 않는다는 힌트가 결정적이었습니다. 이 프로그램은 `"one"`, `"two"`, `"hundred"` 같은 문자열을 읽어서 숫자로 변환합니다.

수정된 분석 결과는 다음과 같습니다:

1.  **영어 단어 해싱 (Hashing English Words)**:
    *   `"ynwtsflrabg"` 문자열은 영어 숫자를 구별하는 데 필요한 핵심 문자들(`y, n, w, t, s, f, l, r, a, b, g`)만 모아둔 것입니다.
    *   입력된 단어에서 이 문자들만 뽑아내어 `b`라는 변수에 Base-8(8진수) 형태로 누적시킵니다.
    *   예를 들어:
        *   `"one"` -> `n`(인덱스 1) -> 해시값 **1**
        *   `"two"` -> `t`(3), `w`(2) -> 해시값 **26** ($3 \times 8 + 2$)
        *   `"three"` -> `t`(3), `r`(7) -> 해시값 **31** ($3 \times 8 + 7$)

2.  **룩업 테이블 매칭 (Lookup Table)**:
    *   `"1+DIY/.K430x9G(kC["` 문자열은 각 숫자의 해시값에 42를 더한 문자들로 구성되어 있습니다.
    *   해시값과 이 테이블을 비교하여 입력된 단어가 어떤 숫자인지 판별합니다.
        *   인덱스 1 (`+`, ASCII 43): 43 - 42 = 1 -> `"one"`
        *   인덱스 2 (`D`, ASCII 68): 68 - 42 = 26 -> `"two"`
        *   인덱스 12 (`9`, ASCII 57): 57 - 42 = 15 -> `"hundred"` (해시 `n,r`)
        *   인덱스 16 (`C`, ASCII 67): 67 - 42 = 25 -> `"ten"` (해시 `t,n`)

3.  **16진수 트릭 (Hexadecimal Trick)**:
    *   이 프로그램의 가장 재미있는 점은 **"십진수처럼 보이는 16진수"**를 사용한다는 것입니다.
    *   `"ten"`을 입력받으면 실제 값 10이 아니라 **16 (0x10)**을 더합니다.
    *   `"hundred"`를 입력받으면 100이 아니라 **256 (0x100)**을 곱합니다.
    *   `"ty"` 접미사(twenty 등)가 붙으면 **16 (0x10)**을 곱합니다.
    *   이렇게 계산한 뒤 마지막에 `printf("%llx\n", m)`으로 **16진수 출력**을 합니다.
    *   결과적으로 내부 값은 16진수이지만, 출력된 문자열은 우리가 아는 십진수 숫자와 똑같이 보입니다.

**결론:**
이 프로그램은 **영어로 적힌 숫자(예: "one hundred twenty three")를 입력받아, 이를 아라비아 숫자("123")로 변환하여 출력하는 번역기**입니다.

**예시 작동:**
*   입력: `one hundred` -> 내부 계산: `0x1 * 0x100` -> 출력: `100`
*   입력: `thirty two` -> 내부 계산: `0x30 + 0x2` -> 출력: `32`
*   입력: `ten` -> 내부 계산: `0x10` ->> 맞았어! 이 코드를 혹시 이전에 본 적이 있니?

네, 본 적이 있습니다! 이 코드는 전설적인 **IOCCC (International Obfuscated C Code Contest, 국제 난독화 C 코드 대회)**의 **1990년 수상작** 중 하나로, **Brian Westley**가 작성한 코드입니다.

이 코드는 프로그래머들 사이에서 **"The Hexadecimal Trick (16진수 트릭)"**을 사용한 아주 기발한 예제로 유명합니다.

**이 코드의 천재적인 점:**

1.  **입력:** `one`, `two`, `hundred` 같은 영어 단어를 받습니다.
2.  **처리:** 내부적으로 **16진수(Hex)** 체계로 계산합니다.
    *   "ten"을 10이 아닌 `0x10` (16)으로 저장합니다.
    *   "hundred"는 100이 아닌 `0x100` (256)을 곱합니다.
3.  **출력:** 마지막에 `%d`(10진수)가 아니라 **`%x` (16진수)** 포맷으로 출력합니다.
    *   내부 값 `0x10`이 출력되면 화면에는 **`10`**이라고 찍힙니다.
    *   사용자는 이것이 10진수 `10`인 줄 알지만, 사실 컴퓨터는 `16`이라는 값을 `10`이라는 모양(16진수)으로 보여준 것입니다.

덕분에 10진수 변환을 위한 복잡한 자리 올림 로직 없이도, 아주 짧은 코드로 "영어 -> 숫자" 변환기를 구현해낸 고전 명작입니다.
10
0
0

AI 에이전트를 활용하는 흐름 때문에 업무가 지치나 했는데 AI 없어도 충분히 지친다… 자부심을 가져도 좋다 이것은 순수하게 나의 무능력함이다

2
1

"OOO 주식회사 OOO 대표님 맞으시죠? 산업안전보건교육 받아야 하는 업체에 해당합니다. 직원이나 프리랜서 고용 있으시죠? 어쩌고~" 일단 쎄한 느낌을 받았습니다. 다다다 쏴붙이면서 중간에 질문할 틈을 최대한 막으면서 가는 꼬락서니가 관공서는 아니구나 싶었습니다. 고용이나 프리랜서 없다고 하니, 뚝 끊어 버립니다. 검색해보니, 이런식의 반쯤 사기같은 행태가 존재한다고 하네요. 소규모 법인 대표님들 조심하세요~

3

정진명 shared the below article:

1년

정진명의 굳이 써서 남기는 생각 @jm@guji.jjme.me

작년에 2024년 12월 3일 있었던 글을 쓴 것을 계기로 시작하게 된 블로그가 어느덧 1년을 맞이했습니다. 하루에 글을 하나씩 올린다는 어이없는 계획으로 출발한 블로그가 어쨌든 1년동안 그 약속을 지켰는데요. 그 동안 다음과 같은 기록을 남겼습니다.

블로그 포스팅 총 325개

  1. 게임 포스팅 133개
  2. 만화 포스팅 21개
  3. 영화 포스팅 1개
  4. 웹소설 포스팅 5개
  5. 음식 포스팅 42개
  6. 책 포스팅 72개
    1. 빌린책챌린지2025 포스팅 34개(총 39권 중)
  7. 토픽 포스팅 10개
    1. 이 포스팅이 토픽으로 올라가기 때문에, 올라가면 11개(총 326개)가 됩니다.
  8. 티셔츠 포스팅 37개
  9. 행사 포스팅 4개

조각 포스팅 총 43개

  1. 게임 조각 6개
  2. 메모 조각 5개
  3. 세계관 조각 18개
  4. 소비 조각 10개
  5. 언어 조각 9개

쉽지 않은 노정이었습니다만, 어떻게 여기까지 왔군요. 하루에 하나씩 글을 올리는 블로그를 제가 할 수 있을거라는 생각은 안 했는데, 어떻게든 되는 일이긴 하네요. 4박 5일 정도로 여행을 가기 전에 여행 때 올라올 글을 모두 쌓아놓기도 했었고, 오전 10시에 올라가야 할 글을 그 날 새벽 1시에도 꼭지조차 잡지 않은 적도, 발행일 지정 실수로 하루에 글을 두 편 올려버린 적도 있었습니다만 어떻게든 1년간 해냈네요.

1년간의 블로그 작성이 제게 끼친 영향에 대해서 생각해 보았습니다. 제가 글을 더 잘 쓰게 된 것 같지는 않습니다. 저는 여전히 글 구조화를 잘 못 하고, 사족이 너무 길어져서 본론의 방향을 틀어버립니다. 독자들의 흥미를 끌 꼭지, 시의성있고 유의미한 꼭지를 찾는 능력이 좋아진 것 같지도 않습니다. 저는 여전히 제가 좋아하고 제가 쓰기 편한 꼭지를 찾습니다. 제가 더 규칙적이고 루틴이 있는 사람이 된 것 같지는 않습니다. 마감만 어떻게 때운다 뿐이지, 여전히 부랴부랴 글을 쓰고, 어쩌다 글 스톡을 두어 개 채워둔 다음 날 그것을 늘리는 일이 자주 있지도 않았습니다.

하지만 제가 글을 쓰기 위해 1년간 자리에 앉아서 꾸준히 시간을 쓸 수 있는 사람, 그것을 위해서 다른 사람이 쓰고 만든 것을 읽고 소화할 수 있는 사람 정도는 된 것 같습니다. 이런 삶을 유지하는 것도 쉬운 일은 아니라는 것을 새삼 느끼게 되네요. 이렇게 시간을 쓸 수 있게 되었으니, 여기에서 좀 더 높은 목표를 가져보는 것도 나쁘지 않겠다는 생각이 듭니다. 좀 더 특정한 독자를 상정한 글을 쓴다거나 하는 일 같은 거 말이죠.

원래는 1년까지만 채우고 업데이트를 조금 늦출까… 같은 생각을 했는데, 하다 보니 좀 더 해야 할 것 같다는 생각이, 좀 더 할 수 있을 것 같다는 생각이 들어서 당분간은 좀 더 이어가보려 합니다. 1년간 블로그를 읽어주신 여러분께 감사드리며, 앞으로도 잘 부탁드리겠습니다. 가끔씩 들어오는 "님의 블로그를 읽고 있어요" 메세지가 제게는 큰 힘이 됩니다.

Read more →
0
0
1

[미래의 나를 위한 메모지만 미래의 내가 이걸 볼 일이 없었으면 싶은 노트] 0xc000007b 오류를 검색해보면 온갖 글이 나오는데, 대체로 이런 글들이 사용자 입장에서 적힌 글이라서 개발자 입장에선 64bit 환경에서 32bit 바이너리를 혼재해서 사용할 때 생기는 문제라는 것 말고는 아무런 힌트도 못 얻었는데...

빌드와 관련된 설정에서 32bit/64bit 관련 무언가가 혼재되지 않았는지 체크하면 대체로 문제를 해결할 수 있다. 특히 외부 라이브러리. 환경변수, 특히 PATH에서 관련된 라이브러리 폴더 속 아키텍처가 혼재되지 않았는지 체크해보면 큰 도움이 된다. 나의 경우 Qt 애플리케이션이었는데 환경변수에 C:/Qt/Qt5.13.1/5.13.1/msvc2015_64라고 넣어야 할 것을 C:/Qt/Qt5.13.1/5.13.1/msvc2015라고 넣은게 원인이었다.

0xc000007b 오류로 인해 프로그램을 실행하지 못한 사진구글에 해결법을 검색해본 화면. 큰 도움은 안된다.
2

Over at the Erdos problem website, AI assistance is now becoming routine. Here is what happened recently regarding Erdos problem #367 erdosproblems.com/367 :

1. On Nov 20, Wouter van Doorn produced a (human-generated) disproof of the second part of this problem, contingent on a congruence identity that he thought was true, and was "sure someoneone here is able to verify... does indeed hold".

2. A few hours later, I posed this problem to Gemini Deepthink, which (after about ten minutes) produced a complete proof of the identity (and confirmed the entire argument): gemini.google.com/share/81a65a . The argument used some p-adic algebraic number theory which was overkill for this problem. I then spent about half an hour converting the proof by hand into a more elementary proof, which I presented on the site. I then remarked that the resulting proof should be within range of "vibe formalizing" in Lean.

3. Two days later, Boris Alexeev used the Aristotle tool from Harmonic to complete the Lean formalization, making sure to formalize the final statement by hand to guard against AI exploits. This process took two to three hours, and the output can be found at borisalexeev.com/t/Erdos367.le

EDIT: after making this post, I decided to round things out by making AI literature searches on this problem, which (after about fifteen minutes) turned up some related literature on consecutive powerful numbers, but nothing directly relating to #367. chatgpt.com/share/6921427d-9dc gemini.google.com/share/0d2964

0
0
0
2
5
6
2

그냥, 생각이 나는 곳에 가서, 낙서처럼 글 남기고, 유유자적 전세계를 돌아다니면 되는 곳을 만들었습니다.

yearit.com

어떤 성격으로 클지는 저도 잘 모르겠습니다. 연합우주와 연결하고 싶은데, 공부할게 많네요.

Yearit 서비스 화면
2
4
3
0
2

데이터구조 수강할 때(거의 20년 전) 자바로 했던 것들 왜 하나 싶기도 했는데 기본적으로 어셈블리 레벨에서 돌린다고 보니까 납득이 된다…. 요즘은 정렬도 대부분 .sort() 쓰는 세상이지만.

나는 프로그래머 두 명이 자리를 바꾸는 데 필요한 의자의 수가 세 개라는 유머를 좋아하지만

  1. 파이썬에서는 그냥 a, b = b, a 하면 돼요
  2. 네? 지금 mutation 하신 겁니까? 공유된 변경가능한 상태는 악의 근원입니다. 두 가지에 밀려서 요즘은 별로 쓸 경우를 찾지 못하고 있다.
1

데이터구조 수강할 때(거의 20년 전) 자바로 했던 것들 왜 하나 싶기도 했는데 기본적으로 어셈블리 레벨에서 돌린다고 보니까 납득이 된다…. 요즘은 정렬도 대부분 .sort() 쓰는 세상이지만.

1
5
1
6
1
4
1
1
1
2
0
0

해커즈펍에 포스트 올릴 때 internal server error 뜨는 거 aws 죽어서 그런 줄 알았는데 지금도 안 올라감… 리포스트는 되네 원래 해커즈펍 시간표시 GMT+00:00으로 된다는 내용을 쓰고 싶었음

0

The federated and networked oekaki board, Oeee Cafe, now support emoji reactions from the fediverse! You also get notifications from the fediverse as well.

A drawing of Zapdos, with reactions received from the fediverse shown below.List of notifications received from the fediverse.
9

마스토돈 스타일의 새로운 커뮤 플랫폼, 커뮹! 을 런칭합니다. 기성 소셜 플랫폼들을 커뮤 운영 방식에 끼워 맞추던 불편함을 해소하고자 시작된 프로젝트입니다. 당초 예상했던 것보다 뜨거운 관심에, 계획보다 빠르게 출시하게 되었습니다. 많은 응원과 관심 부탁드립니다. commu.ng

3
0
0
2

초등학교 5학년 때? 6학년 때? 아니면 중학생 때? 무슨 컴퓨터 대회를 나갔는데 장소는 어느 학교 과학실이었고, 컴퓨터를 가져와야 했다. 그때나 지금이나 우리 집에는 차가 없었고, 노트북은 다른 사람들은 들고 온 것 같기도 한데 아무튼 흔하진 않았다. 온 가족이 CRT 모니터랑 본체 끌어안고 키보드 마우스 챙기고 케이블 빠진 거 없는지 확인하고… 그렇게 택시를 타고 시험장으로 가서 시험을 보고, 다시 다 분해해서 택시를 타고 집에 돌아왔다. 그래도 그게 나았던 기억이 난다. 어떤 시험은 어느 학교 컴퓨터실에서 거기 있는 컴퓨터를 썼는데, 소프트웨어가 제대로 실행되지 않았는데 자리를 바꿔달라고 말해야 하는지도 몰라서 대충 제대로 하지도 못하고 나왔던 기억이 나서.

4
21
4
0

I've signed the Plan Vert letter, calling on Rails Core and the wider Ruby community to fork Rails and cut ties with DHH and his work.

Please sign, the future of Rails and Ruby depends on it. github.com/Plan-Vert/open-lett

1
2

Some loosely organized thoughts on the current Zeitgeist. They were inspired by the response to my recent meta-project mentioned in my previous post mathstodon.xyz/@tao/1152541452, where within 24 hours I became aware of a large number of ongoing small-scale collaborative math projects with their own modest but active community (now listed at mathoverflow.net/questions/500 ); but they are from the perspective of a human rather than a mathematician.

As a crude first approximation, one can think of human society as the interaction between entities at four different scales:

1. Individual humans

2. Small organized groups of humans (e.g., close or extended family; friends; local social or religious organizations; informal sports clubs; small businesses and non-profits; ad hoc collaborations on small projects; small online communities)

3. Large organized groups of humans (e.g., large companies; governments; global institutions; professional sports clubs; large political parties or movements; large social media sites)

4. Large complex systems (e.g., the global economy; the environment; the geopolitical climate; popular culture and "viral" topics; the collective state of science and technology).

(1/5)

0
0
0