Profile img

pixel perfect.

2
2
2
0

이제 Pepper는 SDL을 렌더링/이벤트 백엔드로 쓰고 드로잉 라이브러리로 Cairo를 쓴다.

해커스펍은 안타깝게 동영상을 지원하지 않아 올릴순 없지만 간단한 애니메이션이나 xeyes 클론도 작성할수 있게 됐다.

1
6
1
1

Hyeonseong Yang shared the below article:

Hello... New World?

Caipira @caipira113@hackers.pub

This inaugural post marks the author's debut on Hackers' Pub. It likely introduces the author's interests and intended contributions to the community. The post sets the stage for future technical discussions and insights the author plans to share. It serves as an introduction, inviting readers to follow along and engage with the author's upcoming content.

Read more →
2
0

토큰-링 네트워크에서 영감을 얻어 노드들이 서로 토큰을 돌려가며 서로 헬스체크하는 일종의 탈중앙화(?) 헬스체크 서비스를 대충 만들어보았다. 토큰 네트워크를 토큰이 돌며 노드들이 서로의 주소를 사인하고, 만약 다음 노드가 없거나 연락 불가하다면 이슈어에게 다시 돌려주는 방식의 단순한 토큰링 네크워크인데, 잘 작동해서 기분이 좋다.

demo of token ring health check service
0

토큰-링 네트워크에서 영감을 얻어 노드들이 서로 토큰을 돌려가며 서로 헬스체크하는 일종의 탈중앙화(?) 헬스체크 서비스를 대충 만들어보았다. 토큰 네트워크를 토큰이 돌며 노드들이 서로의 주소를 사인하고, 만약 다음 노드가 없거나 연락 불가하다면 이슈어에게 다시 돌려주는 방식의 단순한 토큰링 네크워크인데, 잘 작동해서 기분이 좋다.

demo of token ring health check service
3
0
1

재미 삼아, Cairo를 백엔드로 하는 쉽게 그래픽 처리를 할 수 있는 간단한 언어를 하나 만들고 있다.

전체적으로 Lua나 Visual Basic에게 영감을 받아 쉽게 읽을수 있는 문법을 가지게 만들려고 생각중이다.

demo for image drawingdemo for general purpose computing

재미 삼아, Cairo를 백엔드로 하는 쉽게 그래픽 처리를 할 수 있는 간단한 언어를 하나 만들고 있다.

전체적으로 Lua나 Visual Basic에게 영감을 받아 쉽게 읽을수 있는 문법을 가지게 만들려고 생각중이다.

demo for image drawingdemo for general purpose computing
2
0
0
2
2
4
1
0
2
0
2
3

https://github.com/makachanm/questionbasket

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

4
0
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.

개인적으로 C/C++에서 정말 깊게 감명받았던 시스템 중 하나가 연산자 오버로딩/함수 오버라이딩이였다. 강력한 타입이 보장되는 하에서 편의를 도모하기 위해 사용할수 있다는 점이 매우 강력하다고 생각했다.

혼동의 위험성을 말하지만 아무래도 큰 타입의 문제가 없는 이상은 내가 사용할때는 큰 문제가 없었다. 이는 CSharp과 Java같은 거대한 생산성 언어들에게도 넘어간 특징 중 하나다.

0

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

one single constructor has own unique name.
0
0
2

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

first timeline picturetimeline picture after auto refresh
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
2
1

어찌저찌 gnome-remote-desktop으로 설정했지만 애초에 CLI 고려가 전혀 안 되어 있고 필요 패키지도 몇가지 누락되어 있는데다 설정부터가 기본적으로 GUI GNOME 환경에서 이루어질걸 전제하고 있다.

매우 설정하기 불편해져서 만일 리모트에서 SSH로 RDP/VNC 서버를 띄운다면 매우 힘들어진다.

일단 설정하는데 모니터를 따로 물려서 gnome-remote-desktop을 설정했다. SSH로 Pub/Private Key pair 설정시킨것과 외부 입력 허용 설정 들어간건 전부 다 설정되어 있었다.

User Service로 g-r-d를 등록시키고 시스템을 재부팅한 뒤에 내 메인 랩탑에서 KRDC를 통해서 RDP 연결이 잘 Accept되는 것도 확인하였다.

그 이후 모니터 케이블을 제거하고(중요함) 다시 KRDC를 통해서 접속을 시도해봤다. 이상하게 계속 접속을 거부하길래 로그를 열었더니 "Unknown Monitor" 오류를 내며 연결에 실패하고 있었다.

https://gitlab.gnome.org/GNOME/gnome-remote-desktop/-/issues/49 해당 문제에 대해 찾아보니 tigervnc나 xrdp처럼 별도의 X 서버를 여는것과 같이 wayland 컴포지터 세션을 새로 열어주는게 아닌 그냥 그저 GNOME의 Mutter가 실제 모니터로 출력되고 있을 때 화면 캡쳐와 키보드 마우스 입력을 포워딩하는 물건이였다.

GNOME 측에서는 "remote assistance sessions"을 위한 프로젝트라면서 Headless Remote Session에 대한 지원은 없을 것이라고 한다.

문제는 RHEL 10에서 공식적으로 완전히 제거된 tigervnc와 xrdp를 사용한 headless remote session을 g-r-d에서는 사용할수 없다는 점에 있다. 외부에서 서버에 접속하고 싶다면 서버는 항상 모니터에 연결되어 있어야 한다.

굉장히 불편하지만 해결 방법이 없는지 생각중이다.

0

현재 내 개인 서버에서는 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의 잔재니 그런거 같다는 생각이 들기도 하지만...

어찌저찌 gnome-remote-desktop으로 설정했지만 애초에 CLI 고려가 전혀 안 되어 있고 필요 패키지도 몇가지 누락되어 있는데다 설정부터가 기본적으로 GUI GNOME 환경에서 이루어질걸 전제하고 있다.

매우 설정하기 불편해져서 만일 리모트에서 SSH로 RDP/VNC 서버를 띄운다면 매우 힘들어진다.

0

현재 내 개인 서버에서는 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