arch-spatula / arch-spatula.github.io

Arch-Spatula의 레시피
https://arch-spatula.github.io/
3 stars 0 forks source link

[Draft] 24년 8월 줍줍 #331

Open arch-spatula opened 1 month ago

arch-spatula commented 1 month ago

글쓰기 주제

invent/24-08

참고할 자료

arch-spatula commented 1 month ago

Why You Struggle to Follow Through (Thinkers vs Doers)

https://www.youtube.com/watch?v=xSBGYoS6z68

arch-spatula commented 1 month ago

UTM 설치

https://mac.getutm.app/

https://github.com/utmapp/UTM/

의외로 설치는 직관적이었습니다.

플랫폼 언어

arch-spatula commented 1 month ago

nix iso image 구하고 설정하기

DOCKER NIX 컨테이너에서 검증

docker run -it nixos/nix
# shell.nix 설정을 위해 설치
nix-shell -p git neovim 
nvim shell.nix
arch-spatula commented 1 month ago
arch-spatula commented 1 month ago

JavaScript는 오늘도 저를 실망시키지 않습니다.

parseInt('2,500') // 2

The Art of Computer Programming 세트

https://www.hanbit.co.kr/store/books/look.php?p_code=B8068754595

https://www.hanbit.co.kr/store/books/look.php?p_code=B5813900488

https://www.hanbit.co.kr/store/books/look.php?p_code=B3301714641

arch-spatula commented 1 month ago
arch-spatula commented 1 month ago

Clipboard API

Clipboard API

https://developer.mozilla.org/en-US/docs/Web/API/Navigator/clipboard

애매하지만 [[Typescript]]로 분류합니다.

navigator.clipboard.writeText('클립보드에 저장할 텍스트')

위처럼 작성하면 클립보드 데이터를 접근할 수 있습니다.

개발자용 서체

https://goorm-sans.goorm.io/?utm_source=community&utm_medium=social&utm_content=eoplanet

arch-spatula commented 1 month ago

플래그 컨트롤 전략

const foo = ref(true);
const bar = ref(false);
const baz = ref(false);

위처럼 선언하고 호출이 발생하는 지점마다 개별로 플래그 컨트롤하면 가독성과 제어 측면에서 불리합니다.

const onBazClick = () => {
    foo.value = false;
    bar.value = false;
    baz.value = true;
};

위처럼 작성하면 무엇을 키고 무엇을 끄는지 자세히 확인해야 합니다. 지금은 onBazClick를 살린다는 것을 알 수 있습니다.

위와 비슷한 코드가 5개 정도 있습니다. 더 직관적인 방법은 string literal을 사용하고 어디로 바뀌는지 보여주는 것입니다.

type ShowType = 'foo' | 'bar' | 'baz';

const show = ref<ShowType>('foo');

const changeShow = (showType: ShowType) => {
  show.value = showType;
};

위처럼 선언하면 무엇을 변경하고 살릴지 더 선언적으로 제어할 수 있습니다.

const onBazClick = () => {
  changeShow('baz');
};

이전에 본 코드는 이렇게 1줄로 정리됩니다.

arch-spatula commented 1 month ago

조금더 생각해보면 플래그 컨트롤할 때는 true, false로 제어하는 것보다 상태를 명시하는 것이 좋습니다.

type PageType = 'list' | 'detail'

리스트 페이지, 상세 페이지 모달이 보이고 안보이고로 URL 변화 없이 제어해야 하는 상황이면 이런 것이 더 유리할 것입니다.

arch-spatula commented 1 month ago

go test 안함

package main

import "testing"

func testHello(t *testing.T) {
    got := Hello("Jake")
    want := "Hello, Jake!"

    if want != got {
        t.Errorf("want %q, gate %q", want, got)
    }
}
package main

import "testing"

func TestHello(t *testing.T) {
    got := Hello("Jake")
    want := "Hello, Jake!"

    if want != got {
        t.Errorf("want %q, gate %q", want, got)
    }
}

go test helper

func TestHello(t *testing.T) {
    t.Run("saying hello to people", func(t *testing.T) {
        got := Hello("Jake")
        want := "Hello, Jake"

        assertCorrectMessage(t, want, got)
    })

    t.Run("say 'Hello, world' when empty string is supplied", func(t *testing.T) {
        got := Hello("")
        want := "Hello, world"

        assertCorrectMessage(t, want, got)
    })
}

func assertCorrectMessage(t testing.TB, want, got string) {
    t.Helper()
    if want != got {
        t.Errorf("want %q, gate %q", want, got)
    }
}
arch-spatula commented 1 month ago

neovim 환경 회사에서 재현하기


https://kciter.so/posts/principles-of-debugging/

https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/pointers-and-errors

arch-spatula commented 1 month ago

https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events

오버레이 클릭이 동작 안하는 이유

https://github.com/microsoft/playwright/issues/12298

arch-spatula commented 1 month ago

https://news.hada.io/topic?id=16105&utm_source=slack&utm_medium=bot&utm_campaign=T056MP5374J

fluent-ffmpeg로 API 만들기

https://news.hada.io/topic?id=16082&utm_source=slack&utm_medium=bot&utm_campaign=T056MP5374J

floating-ui

https://github.com/floating-ui/floating-ui/blob/master/pnpm-workspace.yaml

HIDEAGEM

https://github.com/CYBERGEM777/HIDEAGEM

 888    888 8888888 8888888b.  8888888888        d8888  .d8888b.  8888888888 888b     d888
 888    888   888   888  "Y88b 888              d88888 d88P  Y88b 888        8888b   d8888
 888    888   888   888    888 888             d88P888 888    888 888        88888b.d88888
 8888888888   888   888    888 8888888        d88P 888 888        8888888    888Y88888P888
 888    888   888   888    888 888           d88P  888 888  88888 888        888 Y888P 888
 888    888   888   888    888 888          d88P   888 888    888 888        888  Y8P  888
 888    888   888   888  .d88P 888         d8888888888 Y88b  d88P 888        888   "   888
 888    888 8888888 8888888P"  8888888888 d88P     888  "Y8888P88 8888888888 888       888
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄    ____ ______ ____                                      ▄                              ▄
█   /    /      \    \   HIDEAGEM STEGANOGRAPHY PLATFORM   █                  .     .     █
█  /___ /________\ ___\                                    █   .-.   .-.      '.___.'     █
█  \    \        /    /  ASTRAL SOFTWARE FROM THE FUTURE   █  (_  \ /  _)     .'   `.     █
█    \   \      /   /                                      █       |         :       :    █
█      \  \    /  /      COPYRIGHT 2024 WWW.CYBERGEM.NET   █       |         :       :    █
█        \ \  / /                                          █       |          `.___.'     █
█           \/           LET'S DO COMPUTER STUFF ALL DAY   █                              █
█                                                          █                              █
█ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █    ._____.         .--.      █
█ MMMMMSSSSSSSSSSSSSSSSSSSSSSSSSSddMMMMMSSSSSSMSSSSSSSSSS; █      | |          /   _`.    █
█ MMMMSSSSSSSSSSSSSSSSSMSSSSS; ;SSdMMMMSSSSSSMMSSSSSSSSSS, █      | |         (_) ( )     █
█ MMSSSSSSSMSSSSSMSSSSMMMSS."-.-":MMMMMSSSSMMMMSSMSSSMMSS  █     _|_|_       '.    /      █
█ MSSSSSSSMSSSSMMMSSMMMPTMM;"-/\":MMM^"     MMMSSMMMSSMM   █    '     '        `--'       █
█ SSSSSSSMMSSMMMMMMMMMP-.MMM :  ;.;P       dMMMMMMMMMP'    █                              █
█ SSMSSSMMMSMMMMMMMMMP   :M;`:  ;.'+"""t+dMMMMMMMMMMP      █                _             █
█ MMMSSMMMMMMMMPTMMMM"""":P `.\// '    ""^^MMMMMMMP'       █      .--.     ' `:--.--.     █
█ MMMMMMPTMMMMP="TMMMsg,      \/   db`c"  dMMMMMP"         █     (    )       |  |  |_    █
█ MMMMMM  TMMM   d$$$b ^          /T$; ;-/TMMMP'  Let's    █    (_)  /        |  |  | )   █
█ MMMMM; .^`M; d$P^T$$b          :  $$ ::MMMMP  hide some  █        (_,       |  |  |/    █
█ MMMMMM   .-+d$$   $$$;         ;. $$ ;;MMMP,    Gems !   █                       (J     █
█ MMMMMMb   _d$$$   $$$$         :$$$; :MMMMMMp.           █                              █
█ MMMMMM"  " T$$$._.$$$;          T$P.'MMMSSSSSSb          █                _             █
█ MMM`TMb   -")T$$$$$$P'       `._ ""  :MMSSSMMP'          █       __      ' `:--.--.     █
█ MMM / \    '  "T$$P"           /     :MMMMMMP'           █  ___.'  '.___    |  |  |     █
█ MMSb`. ;                      "      :MMMMMM'            █  ____________    |  |  |     █
█ MMSSb_lSSSb.             .___.       MMMMMP ,d88b.d88b,  █                  |  |  | .., █
█ MMMMSSSSSSSSb.                     .MMMMMM. 88888888888  █                        `--': █
█ MMMMMMMMMMMSSSb                  .dMMMMMMMP `Y8888888Y'  █                              █
█ MMMMMMMMMMMMMSS;               .dMMMMMMMMMM'  `Y888Y'    █         ...             _    █
█ MMMMGEMMAMMMMb`;"-.          .dMMMMMMMMMMP'     `Y'      █         .':     \      /_)   █
█ MMMMMMMMMMMMMMb:   `'--.___.dMMMMMMMMMPP'                █       .'         \    /`.    █
█ MMMMMMMMMMMMMMMb;           dMMMMMMMMPPR                 █   `..'            \  /   ;   █
█ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █   .'`.             \/ __.'   █
█                                                          █                              █
█          ░░░░░░░░          ▒▒▒▒▒▒▒▒          ░░░░░░░░    █                              █
█       ▓▓▓░░ ████████    ███▒▒ ▓▓▓▓▓▓▓▓    ▓▓▓░░ ████████ █                 `-.    .-'   █
█    ▒▒▒▓▓ ░░ ██ ▒▒▒▒▒▒░░░██ ▒▒ ▓▓ ░░░░░░▒▒▒▓▓ ░░ ██+§¥µ██ █ .-"-._.-"-._.-     :  :      █
█ ███▒▒ ▓▓ ░░░██ ▒▒ ▓▓▓░░ ██ ▒▒▒▓▓ ░░ ███▒▒ ▓▓ ░░░██$@¢¶██ █ .-"-._.-"-._.-   --:--:--    █
█ ██ ▒▒ ▓▓▓▓▓▓███▒▒ ▓▓ ░░ ██████▓▓▓░░ ██ ▒▒ ▓▓▓▓▓▓████████ █                    :  :      █
█ ██ ▒▒▒▒▒▒▒▒    ▒▒▒▓▓ ░░░░░░░░    ░░░██ ▒▒▒▒▒▒▒▒          █                 .-'    `-.   █
█ ████████          ▓▓▓▓▓▓▓▓          ████████    CYBERGEM █                              █
▀                                                          ▀                              ▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

Two Threads, One Core: How Simultaneous Multithreading Works Under the Hood

https://blog.codingconfessions.com/p/simultaneous-multithreading

https://news.hada.io/topic?id=16164&utm_source=slack&utm_medium=bot&utm_campaign=T056MP5374J

https://news.hada.io/topic?id=16174&utm_source=slack&utm_medium=bot&utm_campaign=T056MP5374J

arch-spatula commented 3 weeks ago

https://codingdojo.org/

재미

arch-spatula commented 3 weeks ago

https://www.inflearn.com/users/31989/courses?srsltid=AfmBOor2KcZOLezRv610Cel_K_TBXa5BqeRJTFGVh0uUcRFbic3h803G

arch-spatula commented 2 weeks ago

파서 제너레이터

역사와 전통의 Yacc, Bison 이런 것들을 파서 제너레이터라고 부릅니다.

출력으로 파서를 생성하는 도구라고 합니다.

출력물이 코드입니다. 컴파일, 인터프린트 가능한 코드입니다. 피서 그자체가 구문 트리를 생성하는 입력 소스 코드도 제공됩니다.

문맥 무관(Context Free Grammar, CFG)를 사용합니다. 배커스-나우어 표기법(Backus-Naur Form, BNF), 확장된 배커스-나우어 표기법(Extended Backus-Naur Form, EBNF)이 있습니다. 존 배커스, 피터 나우어가 창안 했습니다.

파서 제너레이터는 상용 언어를 구현할 때는 사용하지만 학습용으로는 직접 파싱 기능을 구현할 것을 권장합니다.

출력이 너무 길때

go test ./parser > testoutput.txt 

testoutput.txt 같은 파일은 .gitignore할 것을 권장합니다. 디렉토리 노출도 문제이고 자주 바뀌는 내용이라 커밋에 안 올라가는게 좋을 것 같습니다. 하지만 이런 파일을 각자 로컬에 갖고 있으면 유용할 것 같습니다.

터미널에 로그가 너무 길게 찍힌 이유는 알고 보니까 재귀 오류가 있었습니다.

arch-spatula commented 2 weeks ago

https://github.com/PLTEAM1/lisp-interpreter

위랑 같은 것이 정상적인 프로그래머의 실력입니다.

arch-spatula commented 2 weeks ago

dotfile cookbook

이제는 시작해야 할 것 같습니다. 오늘 회사에서 사용하는 wsl 운영체제 패키지를 설치하는 방법을 알아냈습니다.

우리나라 정서에 상당히 안 맞습니다. 이직 준비를 시작하면 숨겨둘 것입니다. 하지만 이직 준비를 안 하는 동안에는 공개할 것입니다. 우리나라 정서에 상당히 거부감이 강한 이유는 window 감성 터지는데 그것돋 MS-Dos로 돌아가야 한다고 외치는 이상한 사람들이 흘러 넘칩니다. 물론 제가 이상한 사람이라는게 우리나라 현실입니다.

lua, neovim, nix를 다루면서 문서를 분리할 필요가 생긴 것 같습니다.

buffer 초기화 커맨드 e

arch-spatula commented 2 weeks ago

오랫동안 해보고 싶언 던 것

https://github.com/kitasuke/monkey-go

정답 레포가 있습니다. 이 레포를 보니까 인터프리터 1권과 컴파일러 2권 모두 다루기 위해 하나의 레포에서 작업한 것이 보입니다.

저도 흉내를 내야겠습니다.

문서 퀄리티가 엉망이라 중단

arch-spatula commented 2 weeks ago

go 언어에서 모두 한번에 테스트하기

go test -count=1 ./...

go 에서 이런 저런 커맨드라인 흉내내기

func buildBinary() (string, error) {
    binName := randomString(10) + "-" + baseBinName

    build := exec.Command("go", "build", "-o", binName)

    if err := build.Run(); err != nil {
        return "", fmt.Errorf("cannot build tool %s: %s", binName, err)
    }

    return binName, nil
}

빌드 등 명령하기

dir, err := os.Getwd()
if err != nil {
    return nil, nil, err
}

cmdPath := filepath.Join(dir, binName)

cmd := exec.Command(cmdPath)

실행파일 실행

os.Remove(binName)

파일 삭제 명령

arch-spatula commented 2 weeks ago

오늘의 의문

arch-spatula commented 1 week ago

커맨드라인 출력물 클립보드로 복사하기

ls | pbcopy

pbcopy이 클립보드로 복사하게 해줍니다.

https://stackoverflow.com/questions/1753110/how-do-i-capture-bash-output-to-the-mac-os-x-clipboard

별거 아닌 것 같아도 삶의 질을 높이는 지식입니다.

arch-spatula commented 1 week ago

유머에 대해서

arch-spatula commented 1 week ago

trace 만들기

https://github.com/cipepser/monkey/blob/master/parser/parser_tracing.go

package name

import (
    "fmt"
    "strings"
)

var traceLevel int = 0

const traceIndentPlaceholder = "\t"

func indentLevel() string {
    return strings.Repeat(traceIndentPlaceholder, traceLevel-1)
}

func tracePrint(fs string) {
    fmt.Printf("%s%s\n", indentLevel(), fs)
}

func incIndent() {
    traceLevel = traceLevel + 1
}

func decIndent() {
    traceLevel = traceLevel - 1
}

func trace(msg string) string {
    incIndent()
    tracePrint("BEGIN " + msg)
    return msg
}

func untrace(msg string) {
    tracePrint("END " + msg)
    decIndent()
}
func functionName() {
  defer untrace(trace("functionName"))
}
go test -v -run TestOperatorPrecedenceParsing ./parser > testoutput.txt
arch-spatula commented 1 week ago

D3

arch-spatula commented 1 week ago

프렛파싱은 무엇인가?

arch-spatula commented 1 week ago

D&D 라이브러리

https://www.youtube.com/watch?v=gaNLnuwoFRI