오랜만에 Termfedi 업데이트 Renote/React를 할 수 있게 Action 모드를 추가했다.

Hyeonseong Yang
@maka@hackers.pub · 15 following · 25 followers
pixel perfect.
Cutter에 명시적 타입 캐스팅과 OS와 직접적으로 상호작용할수 있는 시스템 함수를 몇가지 추가했다.
Cutter에 배열 시스템을 도입했다. 사실 Map에 더 가깝지만...
그냥 이름을 Map으로 바꿀까?
Cutter에 배열 시스템을 도입했다. 사실 Map에 더 가깝지만...
Cutter에 string 처리 관련 함수들을 대거 추가했다. 이제 유연하게 string들을 다룰 수 있다. 부끄럽지만 버전을 0.1 올려도 되지 않을까?
https://maka.nagoya/ https://github.com/makachanm/mydocs
개인 홈페이지를 Cutter 기반으로 다시 짜서 디플로이했다.
이제 Cutter에 include 기능이 생겼다. 이제 정말 라이브러리를 짜기 시작할수 있다는 뜻.
https://github.com/makachanm/questionbasket
셀프호스트 1인용 익명 질문함 서비스의 백엔드까지는 전부 짜긴 했지만 프론트엔드를 맡아줄 사람이 없어서 그냥 백엔드 API만 작동하는 정도로 남겨두었다. 언젠간 완성할수도 있지만... 일단은 이정도 완성시킨걸로 만족하기로 하자. Gemini 없었으면 4달 전에 진행하다 버린 프로젝트를 오늘 완성시킬순 없었을거다.
이제 반복/분기/출력 기능을 추가해 대부분의 프로그래밍을 자유자재로 할 수 있게 되었다. (어느정도 튜링-완전해짐)
chain 기능을 도입했다. 이제 여러 함수를 중복적으로 스트림처럼 태울수 있게 되었다. (F#에게서 영향을 받음)
이제 반복/분기/출력 기능을 추가해 대부분의 프로그래밍을 자유자재로 할 수 있게 되었다. (어느정도 튜링-완전해짐)
대략적으로 함수 재정의와 일부 연산자들을 도입했다. 이제 반복 함수만 만들면 언어로써는 어느정도 완성될거 같다고 생각한다.
개인적으로 만들고 있던 작은 프로젝트다. M4 매크로 언어와 Scheme(LISP)를 같이 섞은 느낌으로 제작한 프로젝트다.
아직은 제대로 된 분기 시스템이나 기초 stdlib이 많이 빈약하다. 하지만 본래 목적인 개인적인 용도의 노트 목적으로는 잘 사용할수 있을 듯 하다.
M4처럼 시스템과 상호작용할 인터페이스가 필요한데 어떤 부분을 추가시키면 좋을지 아직은 잘 모르겠다.
이 글에서 "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가 극히 적어 분기 점프에 있어 큰 문제는 아니고 최대한 해시 맵 기반으로 짜는 것이 빠르다는 교훈은 얻은듯 하다.
Go는 return값이 존재하는 함수에서 만일 조건문 안에서 return할때엔 무조건 if와 else 구문 내에서 전부 return하게 만들어 defer와 같은 상황을 만들게 한다.
여기서 재밌는 점은, 만일 else에 panic이 있다면 이를 인지하고 "return이 없어도 된다"면서 넘어가지만, 만일 이 panic이 다른 함수로 분리되어 있는 상황에서는 panic이기 때문에 값을 리턴할 필요가 없음에도 이를 인지하지 못하고 return을 집어넣으라고 한다.
해커스펍 고양이는 해커 + 네코 해서 헤코(HECKO) 라고 하면 좋겠지만 L33T로 H3CKO라고 하는건 어떨까 하고 생각한다
역시 내 작명센스는 괴멸적이다
Go는 오버라이드 기능을 제공하지 않아서 무조건 unique한 이름으로 지어줘야 한다. 아마 C/C++에서 오버라이드로 인한 혼동 방지를 위한 조치였을거라고 생각하지만, 이미 강타입으로 완전히 제어되고 있는 언어에서 오버라이딩으로 혼동을 하기 전에 타입 시스템이 태클을 걸 것이기 때문에 없는 것은 아무래도 불편하다는 생각이 든다.
개인적으로 C/C++에서 정말 깊게 감명받았던 시스템 중 하나가 연산자 오버로딩/함수 오버라이딩이였다. 강력한 타입이 보장되는 하에서 편의를 도모하기 위해 사용할수 있다는 점이 매우 강력하다고 생각했다.
혼동의 위험성을 말하지만 아무래도 큰 타입의 문제가 없는 이상은 내가 사용할때는 큰 문제가 없었다. 이는 CSharp과 Java같은 거대한 생산성 언어들에게도 넘어간 특징 중 하나다.
Go는 오버라이드 기능을 제공하지 않아서 무조건 unique한 이름으로 지어줘야 한다. 아마 C/C++에서 오버라이드로 인한 혼동 방지를 위한 조치였을거라고 생각하지만, 이미 강타입으로 완전히 제어되고 있는 언어에서 오버라이딩으로 혼동을 하기 전에 타입 시스템이 태클을 걸 것이기 때문에 없는 것은 아무래도 불편하다는 생각이 든다.
CW, Renote 내용 보기, Media URL 표기 기능을 추가했다. 이제 사실상 타임라인 보기 용도로는 거의 완벽하다.
Renote의 가독성을 좀 더 향상시켰다. 이제 누구의 노트를 Renote했는지 보인다.
노트 작성 기능을 만들기엔 입력기 부분을 짜야 한다는 난관이 있기에 그냥 탐라 힐끗힐끗 용도로만 쓰기로 한다.
CW, Renote 내용 보기, Media URL 표기 기능을 추가했다. 이제 사실상 타임라인 보기 용도로는 거의 완벽하다.
TUI 마스토돈 클라이언트에서 자동 새로고침 기능을 드디어 며칠(...)만에 정상 작동하게 고쳤다. 이제 나 혼자 마스토돈 탐라 힐끗힐끗 보는 용도로는 좋을듯 하다
노트 작성 기능을 만들기엔 입력기 부분을 짜야 한다는 난관이 있기에 그냥 탐라 힐끗힐끗 용도로만 쓰기로 한다.
TUI 마스토돈 클라이언트에서 자동 새로고침 기능을 드디어 며칠(...)만에 정상 작동하게 고쳤다. 이제 나 혼자 마스토돈 탐라 힐끗힐끗 보는 용도로는 좋을듯 하다
for의 흐름을 for 밖의 변수에 의존시키는 코드를 짜는 것은 매우 쉽지만 그만큼 상태 관리에 매우 부적합하고 불안하단 생각이 자주 든다.
하지만 언어의 한계상 어쩔수 없는 경우가 있다. 예를 들어 지금같이 case 안에서 for를 종료시켜야 할 때와 같다.
if-else를 사용하여 정리하는 방안도 있지만 코드가 너무 난해하고 지금과 같은 단순 비교에는 부적합하다.
.NET Universe Unplugged 2025-08 온라인 세미나를 진행하려 합니다. 온라인으로 누구나 .NET에 관련된 주제라면 무엇이든 들고와서 발표할 수 있는 세미나로 만들어보고 싶어 기획했는데, 많이 알려주시고 참여해주시면 좋을 것 같아 소셜 피드에도 공유합니다. :-D
https://forum.dotnetdev.kr/t/net-universe-unplugged-2025-08/13457
A Very Tidy Handheld Pi Terminal Indeed
https://hackaday.com/2025/07/27/a-very-tidy-handheld-pi-terminal-indeed/
개인적으로 취미 삼아 만드는 클라이언트에 실험적인 미스키 지원을 추가했다. 사실 제대로 발전시켜볼 생각은 없지만....
어찌저찌 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에서는 사용할수 없다는 점에 있다. 외부에서 서버에 접속하고 싶다면 서버는 항상 모니터에 연결되어 있어야 한다.
굉장히 불편하지만 해결 방법이 없는지 생각중이다.
현재 내 개인 서버에서는 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를 드랍한듯 하다.
대체제로는 GNOME의 Remote Desktop 서버를 쓰라는데 맞는 행동인지는 나도 잘 모르겠다.... 이제는 KDE와 GNOME 모두 Wayland로 갈아탔고, XRDP와 TigerVNC는 모두 X11의 잔재니 그런거 같다는 생각이 들기도 하지만...
어찌저찌 gnome-remote-desktop으로 설정했지만 애초에 CLI 고려가 전혀 안 되어 있고 필요 패키지도 몇가지 누락되어 있는데다 설정부터가 기본적으로 GUI GNOME 환경에서 이루어질걸 전제하고 있다.
매우 설정하기 불편해져서 만일 리모트에서 SSH로 RDP/VNC 서버를 띄운다면 매우 힘들어진다.
현재 내 개인 서버에서는 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를 드랍한듯 하다.
대체제로는 GNOME의 Remote Desktop 서버를 쓰라는데 맞는 행동인지는 나도 잘 모르겠다.... 이제는 KDE와 GNOME 모두 Wayland로 갈아탔고, XRDP와 TigerVNC는 모두 X11의 잔재니 그런거 같다는 생각이 들기도 하지만...
JSON을 처리하는 방법이 몇가지가 있는데 Go처럼 구조체에 맵핑하는 방식이 있다.
Go는 구조체 필드에 태그를 다는 태깅이 가능한데 JSON 파서가 이 필드의 태그를 읽어 맵핑한다.
하지만 재미있게도 이 태그를 통한 접근은 오직 Reflection 패키지를 이용해야만 가능하다. 이 과정에서 필드에 접근하는데, 이거부터가 Unsafe한 대입 연산을 허용시켜준다.
Vintage Plasma Display Shows Current Rad Levels
https://hackaday.com/2025/07/26/vintage-plasma-display-shows-current-rad-levels/
그리고 나는 F#의 파이프라이닝 기능은 정말 강력하다고 생각한다.
데이터 중심 프로그래밍과 커링을 한번에 잡는 매우 엘레강스한 설계가 아닐까.
Listening To Ethernet Via Eurorack
https://hackaday.com/2025/07/26/listening-to-ethernet-via-eurorack/
가끔 생각하지만 Go에는 Result<T>와 삼항 연산자가 필요한게 아닌가 생각한다
if err != nil 이라는 반복적이고 예쁘지 않은 안티패턴들을 계속 만들어내게 된다
오히려 익명 함수같은 체계는 다른 언어보다 잘되어있고 더 직관적이라고 생각한다 익명 함수를 잘 활용할수 있는 환경에서도 없다는건 많이 아쉽다
지금까지 Go를 하며 삼항 연산자를 써본적이 없다는 것에 놀랍지만 며칠 전에 쓸 일이 있었고 써보려고 하니 없는 문법이라고 한다
(구글에 검색했을때 Gemini 검색 결과로는 있다고 했다. 어떻게 구글의 프로덕트가 구글의 언어에서 할루시네이션을 일으키나.)
Go답게 잘 치환할수 있는 문법이 있을것 같은데 제네릭도 구글의 초안과 많이 달라진걸 생각하면 삼항이 들어와도 어떤 형태일지 전혀 모르지 않을까
가끔 생각하지만 Go에는 Result<T>와 삼항 연산자가 필요한게 아닌가 생각한다
if err != nil 이라는 반복적이고 예쁘지 않은 안티패턴들을 계속 만들어내게 된다
오히려 익명 함수같은 체계는 다른 언어보다 잘되어있고 더 직관적이라고 생각한다 익명 함수를 잘 활용할수 있는 환경에서도 없다는건 많이 아쉽다
안녕하세요! 현재 컴퓨터공학과 학부 2학년 재학중인 새내기입니다.
PLT, Lexer 등에 관심이 많습니다. Emulation, VM 기술 등도 관심이 많습니다. 아직 주 전공 분야를 정하진 못했지만 넓게 두루두루 좋아합니다.
올드 레트로 기술들 또한 좋아합니다.
Go와 .NET 언어 일부를 주력으로 삼고 있으며 F# 을 학습하려고 공부 중입니다.
현재는 취미와 흥미 위주의 프로젝트를 주로 진행 중입니다. 감사합니다!
안녕하세요! 현재 컴퓨터공학과 학부 2학년 재학중인 새내기입니다.
PLT, Lexer 등에 관심이 많습니다. Emulation, VM 기술 등도 관심이 많습니다. 아직 주 전공 분야를 정하진 못했지만 넓게 두루두루 좋아합니다.
올드 레트로 기술들 또한 좋아합니다.
Go와 .NET 언어 일부를 주력으로 삼고 있으며 F# 을 학습하려고 공부 중입니다.
현재는 취미와 흥미 위주의 프로젝트를 주로 진행 중입니다. 감사합니다!