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.

洪 民憙 (Hong Minhee) shared the below article:

닉스의 derivation 생성식과 derivation의 차이

lionhairdino @lionhairdino@hackers.pub

조금 과장해서 얘기하면, 문서들이 아래와 같이 쓰는 것처럼 보입니다.

"derivation에 있는 derivation이 derivation을 만들어 저장소에 derivation을 남긴다."

이게 무슨 말인가 싶은데, 의미가 조금 더 명확히 보이게 쓰면, 아래와 같습니다.

"derivation 생성식에 있는 derivation 함수derivation 객체를 만들어 derivation 파일 .drv에 저장한다."

아래는 처음 derivation을 보는 분들이 아닌, derivation이 저처럼 약간 모호한 분들과 의견을 나누기 위한 글입니다.


닉스의 derivation

"derivation은 패키지 빌드를 위한 모든 정보가 들어 있는 명세서"라는 간단한 설명만으로 넘어 가기엔, 중요한 개념을 담고 있다고 보입니다.

hello/default.nix

{ pkgs ? import <nixpkgs> {} }:
pkgs.hello

hello 패키지에 의존하는 somePackage/default.nix 파일에 아래 줄이 있습니다.

hello = import ../hello { inherit pkgs; };

엄밀히 얘기하면 import하고 있는 hello/default.nixpkgs.hello는, 평가가 끝나고 나온 결과물 derivation이 아직 아닙니다.

nixpkgs는 derivation를 생성할 표현식, 즉 derivation이나 .drv가 아니라, derivation 생성식 .nix들의 모음입니다. nixpkgs에 가져온 해당 식을 평가(nix-instantiate)하면, derivation이 만들어집니다. .drv 파일은, 이 걸, 나중에 또 계산(평가)하지 않기 위해 /nix/store에 남기는 derivation 캐싱 파일입니다.

"결과적으로 닉스는 실제 패키지도, derivation도 아닌 필요한 의존성들을 derivation 생성식들의 관계로 표현해 놓고, 최종 겉모양은 하나의 derivation 생성식이 하나의 패키지를 표현하게 된다."

거꾸로 접근해 보면, 보통 그냥 derivation이라 말하는 것은 derivation 객체라고 부를 수 있으며, .drv파일의 내용을 런타임에 메모리에 올린 derivation 데이터 타입 객체를 의미한다고 볼 수 있습니다.


대부분의 문서들이 derivation 생성식derivation을 구별하지 않고 써서, 초반에 derivation 개념 잡는 걸 방해하는 것 아닌가 싶어요. derivationderivation 생성식평가해서 나온 데이터 구조체일 뿐이니, 이를 구별하지 않고 쓰는 게 이해는 갑니다만,

지금 위와같이 상상하고 파는 이유는, "닉스는 분명 함수형이고, 선언형이라 했으니, 함수로 패키지를 표현하고, 함수들의 합성으로 최종 패키지(만드는 방법)를 표현할 것이다"로 상상하고 접근하니, derivation을 엮어 놓는 것이 아닌 derivation 생성식 - 함수로 엮어 놓는 게 중요한 차이점으로 보입니다.

사실, 그냥 넘어가도 될 것 같은데, 닉스 코드를 언어로 읽어 머릿속 인터프리팅하는데, 저는 은근 위와 같은 명확함이 필요합니다. 아마도 다른 분들도, 위 내용을 먼저 명확히 하고, 진도를 나간다면, 좀 더 자연스럽게 체계가 잡히지 않을까 생각이 듭니다.

잘못된 방향이 보이면 댓글 부탁드립니다.

※ 처음에 hello.drv 파일이 C 프로젝트의 .o 중간 파일처럼, 기계가 보기 위한 바이너리 파일쯤으로 생각했는데, 실제 모양은 아래와 같습니다.

Derive([("out","/nix/store/n131z2zya6ifx050b8q3biymx2jxfdwi-hello","","")],[("/nix/store/029h9shccppyiw1l7qsk6xp0grxgzzbb-stdenv-linux.drv",["out"]),("/nix/store/20vwa6qpx8w3ar66x1fmrjlwy86c7b71-bash-4.4-p23.drv",["out"])],["/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh","/nix/store/m8x2zsc2awjyhwq1fw65czpkikifxq3x-source"],"x86_64-linux","/nix/store/hrpvwkjz04s9i4nmli843hyw9z4pwhww-bash-4.4-p23/bin/bash",["-e","/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"],[("buildInputs",""),("buildPhase","gcc -o hello ./hello.c"),("builder","/nix/store/hrpvwkjz04s9i4nmli843hyw9z4pwhww-bash-4.4-p23/bin/bash"),("configureFlags",""),("depsBuildBuild",""),("depsBuildBuildPropagated",""),("depsBuildTarget",""),("depsBuildTargetPropagated",""),("depsHostHost",""),("depsHostHostPropagated",""),("depsTargetTarget",""),("depsTargetTargetPropagated",""),("doCheck",""),("doInstallCheck",""),("installPhase","mkdir -p $out/bin; install -t $out/bin hello"),("name","hello"),("nativeBuildInputs",""),("out","/nix/store/n131z2zya6ifx050b8q3biymx2jxfdwi-hello"),("outputs","out"),("patches",""),("propagatedBuildInputs",""),("propagatedNativeBuildInputs",""),("src","/nix/store/m8x2zsc2awjyhwq1fw65czpkikifxq3x-source"),("stdenv","/nix/store/sm7kk5n84vaisqvhk1yfsjqls50j8s0m-stdenv-linux"),("strictDeps",""),("system","x86_64-linux")])

뉴스 보면서 글 작성하다, 결론이 나고 올립니다.

Read more →

Last batch from the trip. As someone who always seems too sensitive to sound - and feels at fault about it, this place was my favourite. It was quiet. No sound of wind. No crystal popping (not hot enough). There were footsteps cracking softly over salt and the occasional laughter or talk. I felt calm.

Road in wilderness stretches into horizonSalt crystals with blue sky and mountains in the backdropSalt crystals under the sun

해키지(Hackage)[1]에 패키지를 업로드하면 자동으로 빌드, 문서 생성, 테스트가 진행된다. 그런데 이게 시간이 좀 걸린다.(체감상 10분 정도) 이 과정이 자동으로 완료되기 전에 참지 못하고 수동으로 문서를 업로드하면 자동으로 진행되던 것들이 모두 중단된다. https://github.com/haskell/hackage-server/issues/1376


  1. 하스켈 패키지 저장소 ↩︎

日本にもみんなで歌えるアンセムがあればいいのになあ。これなんか最高だと思うけど、何万人の皆さまが歌えるほどの知名度はない…
NEWEST MODEL(現ソウル・フラワー・ユニオン)『ソウル・サバイバーの逆襲』
youtube.com/watch?si=_aNyxMZps

확실하게 말해야겠다. 나는 내란수괴 윤석열과 주동자들의 사형을 원한다. 무기징역으로 그(들)의 사면이 정치적 거래도구로 이용될 가능성을 전폐시키고, 앞으로 우리 사회는 헌법과 그 헌법에 바탕이 되는 천부인권 사상과 사회계약을 유린한 자에게는 이전 사례들의 같은 허술함이나 관대함이 통용되지 않을 것임을 분명히 해야한다.

bgl gwyng shared the below article:

닉스의 derivation 생성식과 derivation의 차이

lionhairdino @lionhairdino@hackers.pub

조금 과장해서 얘기하면, 문서들이 아래와 같이 쓰는 것처럼 보입니다.

"derivation에 있는 derivation이 derivation을 만들어 저장소에 derivation을 남긴다."

이게 무슨 말인가 싶은데, 의미가 조금 더 명확히 보이게 쓰면, 아래와 같습니다.

"derivation 생성식에 있는 derivation 함수derivation 객체를 만들어 derivation 파일 .drv에 저장한다."

아래는 처음 derivation을 보는 분들이 아닌, derivation이 저처럼 약간 모호한 분들과 의견을 나누기 위한 글입니다.


닉스의 derivation

"derivation은 패키지 빌드를 위한 모든 정보가 들어 있는 명세서"라는 간단한 설명만으로 넘어 가기엔, 중요한 개념을 담고 있다고 보입니다.

hello/default.nix

{ pkgs ? import <nixpkgs> {} }:
pkgs.hello

hello 패키지에 의존하는 somePackage/default.nix 파일에 아래 줄이 있습니다.

hello = import ../hello { inherit pkgs; };

엄밀히 얘기하면 import하고 있는 hello/default.nixpkgs.hello는, 평가가 끝나고 나온 결과물 derivation이 아직 아닙니다.

nixpkgs는 derivation를 생성할 표현식, 즉 derivation이나 .drv가 아니라, derivation 생성식 .nix들의 모음입니다. nixpkgs에 가져온 해당 식을 평가(nix-instantiate)하면, derivation이 만들어집니다. .drv 파일은, 이 걸, 나중에 또 계산(평가)하지 않기 위해 /nix/store에 남기는 derivation 캐싱 파일입니다.

"결과적으로 닉스는 실제 패키지도, derivation도 아닌 필요한 의존성들을 derivation 생성식들의 관계로 표현해 놓고, 최종 겉모양은 하나의 derivation 생성식이 하나의 패키지를 표현하게 된다."

거꾸로 접근해 보면, 보통 그냥 derivation이라 말하는 것은 derivation 객체라고 부를 수 있으며, .drv파일의 내용을 런타임에 메모리에 올린 derivation 데이터 타입 객체를 의미한다고 볼 수 있습니다.


대부분의 문서들이 derivation 생성식derivation을 구별하지 않고 써서, 초반에 derivation 개념 잡는 걸 방해하는 것 아닌가 싶어요. derivationderivation 생성식평가해서 나온 데이터 구조체일 뿐이니, 이를 구별하지 않고 쓰는 게 이해는 갑니다만,

지금 위와같이 상상하고 파는 이유는, "닉스는 분명 함수형이고, 선언형이라 했으니, 함수로 패키지를 표현하고, 함수들의 합성으로 최종 패키지(만드는 방법)를 표현할 것이다"로 상상하고 접근하니, derivation을 엮어 놓는 것이 아닌 derivation 생성식 - 함수로 엮어 놓는 게 중요한 차이점으로 보입니다.

사실, 그냥 넘어가도 될 것 같은데, 닉스 코드를 언어로 읽어 머릿속 인터프리팅하는데, 저는 은근 위와 같은 명확함이 필요합니다. 아마도 다른 분들도, 위 내용을 먼저 명확히 하고, 진도를 나간다면, 좀 더 자연스럽게 체계가 잡히지 않을까 생각이 듭니다.

잘못된 방향이 보이면 댓글 부탁드립니다.

※ 처음에 hello.drv 파일이 C 프로젝트의 .o 중간 파일처럼, 기계가 보기 위한 바이너리 파일쯤으로 생각했는데, 실제 모양은 아래와 같습니다.

Derive([("out","/nix/store/n131z2zya6ifx050b8q3biymx2jxfdwi-hello","","")],[("/nix/store/029h9shccppyiw1l7qsk6xp0grxgzzbb-stdenv-linux.drv",["out"]),("/nix/store/20vwa6qpx8w3ar66x1fmrjlwy86c7b71-bash-4.4-p23.drv",["out"])],["/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh","/nix/store/m8x2zsc2awjyhwq1fw65czpkikifxq3x-source"],"x86_64-linux","/nix/store/hrpvwkjz04s9i4nmli843hyw9z4pwhww-bash-4.4-p23/bin/bash",["-e","/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"],[("buildInputs",""),("buildPhase","gcc -o hello ./hello.c"),("builder","/nix/store/hrpvwkjz04s9i4nmli843hyw9z4pwhww-bash-4.4-p23/bin/bash"),("configureFlags",""),("depsBuildBuild",""),("depsBuildBuildPropagated",""),("depsBuildTarget",""),("depsBuildTargetPropagated",""),("depsHostHost",""),("depsHostHostPropagated",""),("depsTargetTarget",""),("depsTargetTargetPropagated",""),("doCheck",""),("doInstallCheck",""),("installPhase","mkdir -p $out/bin; install -t $out/bin hello"),("name","hello"),("nativeBuildInputs",""),("out","/nix/store/n131z2zya6ifx050b8q3biymx2jxfdwi-hello"),("outputs","out"),("patches",""),("propagatedBuildInputs",""),("propagatedNativeBuildInputs",""),("src","/nix/store/m8x2zsc2awjyhwq1fw65czpkikifxq3x-source"),("stdenv","/nix/store/sm7kk5n84vaisqvhk1yfsjqls50j8s0m-stdenv-linux"),("strictDeps",""),("system","x86_64-linux")])

뉴스 보면서 글 작성하다, 결론이 나고 올립니다.

Read more →

不應該對受到霸凌的小孩說
「如果真的很勉強的話,不來學校也沒關係。」

而是應該對霸凌他人的小孩說
「如果你霸凌他人,就不准你來學校。」

我想這樣才是正確答案。

還有一個網友說到,國中時的人權作文,老師要我們寫「讓霸凌消失的方法」,但如果你寫了「霸凌根本不可能消失,根本是在作夢(白日夢),與其談讓霸凌消失,不如談人權教育與霸凌發生時對應與檢討的方式更好」這樣的內容,你就會被老師霸凌,所以霸凌根本不可能消失嘛。

---

關於霸凌主題的討論引用資料。

제 21대 대통령선거 대선 국면 돌입을 대한민국 국민 여러분의 뜨거운 환호 함성과 함께 시자아아아아아아아아아아아아아아아아악 하겠습니다!

Cognition, AI 소프트웨어 에이전트 Devin 2.0 공개
------------------------------
- Devin 2.0은 *클라우드 기반의 에이전트 네이티브 IDE* 를 도입하며, *다중 작업* , *코드 협업* , *수정 및 테스트* 까지 가능하게 함
- 기본 플랜은 월 $20부터 시작하며, *여러개의 Devin을 병렬로 실행* , *사용자 개입형 협업* , *Devin이 작성한 코드 리뷰 및 수정* 기능 지원
- # 병렬 Devin 에이전…
------------------------------
https://news.hada.io/topic?id=20144&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

닉스의 derivation 생성식과 derivation의 차이

lionhairdino @lionhairdino@hackers.pub

조금 과장해서 얘기하면, 문서들이 아래와 같이 쓰는 것처럼 보입니다.

"derivation에 있는 derivation이 derivation을 만들어 저장소에 derivation을 남긴다."

이게 무슨 말인가 싶은데, 의미가 조금 더 명확히 보이게 쓰면, 아래와 같습니다.

"derivation 생성식에 있는 derivation 함수derivation 객체를 만들어 derivation 파일 .drv에 저장한다."

아래는 처음 derivation을 보는 분들이 아닌, derivation이 저처럼 약간 모호한 분들과 의견을 나누기 위한 글입니다.


닉스의 derivation

"derivation은 패키지 빌드를 위한 모든 정보가 들어 있는 명세서"라는 간단한 설명만으로 넘어 가기엔, 중요한 개념을 담고 있다고 보입니다.

hello/default.nix

{ pkgs ? import <nixpkgs> {} }:
pkgs.hello

hello 패키지에 의존하는 somePackage/default.nix 파일에 아래 줄이 있습니다.

hello = import ../hello { inherit pkgs; };

엄밀히 얘기하면 import하고 있는 hello/default.nixpkgs.hello는, 평가가 끝나고 나온 결과물 derivation이 아직 아닙니다.

nixpkgs는 derivation를 생성할 표현식, 즉 derivation이나 .drv가 아니라, derivation 생성식 .nix들의 모음입니다. nixpkgs에 가져온 해당 식을 평가(nix-instantiate)하면, derivation이 만들어집니다. .drv 파일은, 이 걸, 나중에 또 계산(평가)하지 않기 위해 /nix/store에 남기는 derivation 캐싱 파일입니다.

"결과적으로 닉스는 실제 패키지도, derivation도 아닌 필요한 의존성들을 derivation 생성식들의 관계로 표현해 놓고, 최종 겉모양은 하나의 derivation 생성식이 하나의 패키지를 표현하게 된다."

거꾸로 접근해 보면, 보통 그냥 derivation이라 말하는 것은 derivation 객체라고 부를 수 있으며, .drv파일의 내용을 런타임에 메모리에 올린 derivation 데이터 타입 객체를 의미한다고 볼 수 있습니다.


대부분의 문서들이 derivation 생성식derivation을 구별하지 않고 써서, 초반에 derivation 개념 잡는 걸 방해하는 것 아닌가 싶어요. derivationderivation 생성식평가해서 나온 데이터 구조체일 뿐이니, 이를 구별하지 않고 쓰는 게 이해는 갑니다만,

지금 위와같이 상상하고 파는 이유는, "닉스는 분명 함수형이고, 선언형이라 했으니, 함수로 패키지를 표현하고, 함수들의 합성으로 최종 패키지(만드는 방법)를 표현할 것이다"로 상상하고 접근하니, derivation을 엮어 놓는 것이 아닌 derivation 생성식 - 함수로 엮어 놓는 게 중요한 차이점으로 보입니다.

사실, 그냥 넘어가도 될 것 같은데, 닉스 코드를 언어로 읽어 머릿속 인터프리팅하는데, 저는 은근 위와 같은 명확함이 필요합니다. 아마도 다른 분들도, 위 내용을 먼저 명확히 하고, 진도를 나간다면, 좀 더 자연스럽게 체계가 잡히지 않을까 생각이 듭니다.

잘못된 방향이 보이면 댓글 부탁드립니다.

※ 처음에 hello.drv 파일이 C 프로젝트의 .o 중간 파일처럼, 기계가 보기 위한 바이너리 파일쯤으로 생각했는데, 실제 모양은 아래와 같습니다.

Derive([("out","/nix/store/n131z2zya6ifx050b8q3biymx2jxfdwi-hello","","")],[("/nix/store/029h9shccppyiw1l7qsk6xp0grxgzzbb-stdenv-linux.drv",["out"]),("/nix/store/20vwa6qpx8w3ar66x1fmrjlwy86c7b71-bash-4.4-p23.drv",["out"])],["/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh","/nix/store/m8x2zsc2awjyhwq1fw65czpkikifxq3x-source"],"x86_64-linux","/nix/store/hrpvwkjz04s9i4nmli843hyw9z4pwhww-bash-4.4-p23/bin/bash",["-e","/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"],[("buildInputs",""),("buildPhase","gcc -o hello ./hello.c"),("builder","/nix/store/hrpvwkjz04s9i4nmli843hyw9z4pwhww-bash-4.4-p23/bin/bash"),("configureFlags",""),("depsBuildBuild",""),("depsBuildBuildPropagated",""),("depsBuildTarget",""),("depsBuildTargetPropagated",""),("depsHostHost",""),("depsHostHostPropagated",""),("depsTargetTarget",""),("depsTargetTargetPropagated",""),("doCheck",""),("doInstallCheck",""),("installPhase","mkdir -p $out/bin; install -t $out/bin hello"),("name","hello"),("nativeBuildInputs",""),("out","/nix/store/n131z2zya6ifx050b8q3biymx2jxfdwi-hello"),("outputs","out"),("patches",""),("propagatedBuildInputs",""),("propagatedNativeBuildInputs",""),("src","/nix/store/m8x2zsc2awjyhwq1fw65czpkikifxq3x-source"),("stdenv","/nix/store/sm7kk5n84vaisqvhk1yfsjqls50j8s0m-stdenv-linux"),("strictDeps",""),("system","x86_64-linux")])

뉴스 보면서 글 작성하다, 결론이 나고 올립니다.

Read more →