Profile img

pixel perfect.

4
1
2
0
2
3

https://github.com/makachanm/questionbasket

셀프호스트 1인용 익명 질문함 서비스의 백엔드까지는 전부 짜긴 했지만 프론트엔드를 맡아줄 사람이 없어서 그냥 백엔드 API만 작동하는 정도로 남겨두었다. 언젠간 완성할수도 있지만... 일단은 이정도 완성시킨걸로 만족하기로 하자. Gemini 없었으면 4달 전에 진행하다 버린 프로젝트를 오늘 완성시킬순 없었을거다.

4
4
1

개인적으로 만들고 있던 작은 프로젝트다. M4 매크로 언어와 Scheme(LISP)를 같이 섞은 느낌으로 제작한 프로젝트다.

아직은 제대로 된 분기 시스템이나 기초 stdlib이 많이 빈약하다. 하지만 본래 목적인 개인적인 용도의 노트 목적으로는 잘 사용할수 있을 듯 하다.

M4처럼 시스템과 상호작용할 인터페이스가 필요한데 어떤 부분을 추가시키면 좋을지 아직은 잘 모르겠다.

macro language demo
1

news.hada.io/topic?id=22140

이 글에서 "switch network 쓰지 말고 hash map 쓰세요 그쪽이 더 빠릅니다" 해서 정말 그런가? 했는데 그런듯 하다.

지금 진행하던 개인 프로젝트의 디버깅을 찍어보는데 특정 토큰/명령어에 대해서 한 조각씩 들어오는 것에 대해 분기 네트워크를 타면 CPU의 분기예측 캐시가 제대로 쌓이질 않아서 case문 내의 모든 case를 중구난방으로 분기하면서 모두 체크하고 있다. (예를 들어 TOKEN_DEFINE을 찾기 위해서 ase TOKEN_BRACKET_OPEN.. case TOKEN_ALLOCATE... case TOKEN_EQUAL.... 같이 전부 중구난방으로 점프해가며 하나씩 체크한다. O(n)과 같은 최악의 케이스는 아니지만 10개의 케이스가 있으면 적어도 5개는 검색해버리는 짓을 벌임)

후반부로 갈수록 캐시가 쌓여서 바로 점프하는 모습은 보이지만 O(1)으로 바로 분기 없이 점프할수 있는 해시맵이 엄청나게 빠른건 사실인듯하다.

재귀하향식 파서로 구현했기 때문에 파서는 어쩔수 없이 switch network를 타버리긴 하지만 case가 극히 적어 분기 점프에 있어 큰 문제는 아니고 최대한 해시 맵 기반으로 짜는 것이 빠르다는 교훈은 얻은듯 하다.

3

Go는 return값이 존재하는 함수에서 만일 조건문 안에서 return할때엔 무조건 if와 else 구문 내에서 전부 return하게 만들어 defer와 같은 상황을 만들게 한다.

여기서 재밌는 점은, 만일 else에 panic이 있다면 이를 인지하고 "return이 없어도 된다"면서 넘어가지만, 만일 이 panic이 다른 함수로 분리되어 있는 상황에서는 panic이기 때문에 값을 리턴할 필요가 없음에도 이를 인지하지 못하고 return을 집어넣으라고 한다.

golang says return value of this function is needed
1
4

Go는 오버라이드 기능을 제공하지 않아서 무조건 unique한 이름으로 지어줘야 한다. 아마 C/C++에서 오버라이드로 인한 혼동 방지를 위한 조치였을거라고 생각하지만, 이미 강타입으로 완전히 제어되고 있는 언어에서 오버라이딩으로 혼동을 하기 전에 타입 시스템이 태클을 걸 것이기 때문에 없는 것은 아무래도 불편하다는 생각이 든다.

one single constructor has own unique name.
0

TUI 마스토돈 클라이언트에서 자동 새로고침 기능을 드디어 며칠(...)만에 정상 작동하게 고쳤다. 이제 나 혼자 마스토돈 탐라 힐끗힐끗 보는 용도로는 좋을듯 하다

first timeline picturetimeline picture after auto refresh
3

for의 흐름을 for 밖의 변수에 의존시키는 코드를 짜는 것은 매우 쉽지만 그만큼 상태 관리에 매우 부적합하고 불안하단 생각이 자주 든다.

하지만 언어의 한계상 어쩔수 없는 경우가 있다. 예를 들어 지금같이 case 안에서 for를 종료시켜야 할 때와 같다.

if-else를 사용하여 정리하는 방안도 있지만 코드가 너무 난해하고 지금과 같은 단순 비교에는 부적합하다.

the code showing example of for break in case statement
1
1

현재 내 개인 서버에서는 Oracle Linux 10을 이용중인데 (AlmaLinux 10, Rocky Linux 10, CentOS Stream 10, RHEL 10도 포함) XRDP를 비롯한 VNC 서버 패키지들이 전부 제거되어 있었다.

어찌된 일인지 pkgs.org를 마구 검색해도 VNC와 RDP 패키지들은 하나도 남아있지 않았다. 그래서 검색해보니 Red Hat이 RHEL 10부터 tigervnc와 xrdp를 드랍한듯 하다.

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/10.0_release_notes/removed-features

대체제로는 GNOME의 Remote Desktop 서버를 쓰라는데 맞는 행동인지는 나도 잘 모르겠다.... 이제는 KDE와 GNOME 모두 Wayland로 갈아탔고, XRDP와 TigerVNC는 모두 X11의 잔재니 그런거 같다는 생각이 들기도 하지만...

1

JSON을 처리하는 방법이 몇가지가 있는데 Go처럼 구조체에 맵핑하는 방식이 있다.

Go는 구조체 필드에 태그를 다는 태깅이 가능한데 JSON 파서가 이 필드의 태그를 읽어 맵핑한다.

하지만 재미있게도 이 태그를 통한 접근은 오직 Reflection 패키지를 이용해야만 가능하다. 이 과정에서 필드에 접근하는데, 이거부터가 Unsafe한 대입 연산을 허용시켜준다.

2

.NET에는 C LINQ로 SQL과 같은 형태로 데이터를 파이프라이닝해서 가공할수 있고

F 메소드 파이프라이닝을 언어 차원에서 지원한다.

.NET은 굉장히 일찍부터 데이터 파이프라인 개념을 도입했던 언어인데 생각보다 주변에서 이런 기능을 적극적으로 쓰는걸 본적이 없는거 같다.

0

가끔 생각하지만 Go에는 Result<T>와 삼항 연산자가 필요한게 아닌가 생각한다

if err != nil 이라는 반복적이고 예쁘지 않은 안티패턴들을 계속 만들어내게 된다

오히려 익명 함수같은 체계는 다른 언어보다 잘되어있고 더 직관적이라고 생각한다 익명 함수를 잘 활용할수 있는 환경에서도 없다는건 많이 아쉽다

4

안녕하세요! 현재 컴퓨터공학과 학부 2학년 재학중인 새내기입니다.

PLT, Lexer 등에 관심이 많습니다. Emulation, VM 기술 등도 관심이 많습니다. 아직 주 전공 분야를 정하진 못했지만 넓게 두루두루 좋아합니다.

올드 레트로 기술들 또한 좋아합니다.

Go와 .NET 언어 일부를 주력으로 삼고 있으며 F# 을 학습하려고 공부 중입니다.

현재는 취미와 흥미 위주의 프로젝트를 주로 진행 중입니다. 감사합니다!

10
3
0