Pepper에 분기 예측 기능을 추가했어요
Hyeonseong Yang
@maka@hackers.pub · 15 following · 29 followers
pixel perfect.
Pepper 언어에서 이젠 프랙탈도 렌더링할수 있다! 프랙탈 코드는 비록 내가 짠건 아니지만 하다가 렉서의 버그도 발견해서 픽스하고 아무튼 나쁘진 않은듯 하다.
내 언어가 include와 명시적 타입 캐스팅(이제야?)를 지원하게 만들었다...
이제야 겨우 이런걸 지원한다는게 웃음벨
내 언어가 include와 명시적 타입 캐스팅(이제야?)를 지원하게 만들었다...
이제야 겨우 이런걸 지원한다는게 웃음벨
이제 0.1.0을 릴리즈할때가 된거같다
이제 Pepper는 SDL을 렌더링/이벤트 백엔드로 쓰고 드로잉 라이브러리로 Cairo를 쓴다.
해커스펍은 안타깝게 동영상을 지원하지 않아 올릴순 없지만 간단한 애니메이션이나 xeyes 클론도 작성할수 있게 됐다.
제 프로그래밍 언어가 이제 xeyes를 할수 있게 됐어요
제 프로그래밍 언어가 이제 xeyes를 할수 있게 됐어요
띠용띠용 벽에 튕기는 애니메이션도 가능해요
Flogger를 업데이트했다.
로그 스크롤, Info, Critical별로 모아보기 기능을 추가했다.
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 →(사실 토큰 설계만 내가 하고 나머지는 Gemini가 많이 짜줬다. 즉석식품 불법개발자)
https://github.com/makachanm/ringrollers
일종의 PoC 수준의 코드지만 일단 공개해놓았다. 조금 더 예쁘게 다듬으면 좋을 듯 하다. 아직 프론트엔드도 없다.
토큰-링 네트워크에서 영감을 얻어 노드들이 서로 토큰을 돌려가며 서로 헬스체크하는 일종의 탈중앙화(?) 헬스체크 서비스를 대충 만들어보았다. 토큰 네트워크를 토큰이 돌며 노드들이 서로의 주소를 사인하고, 만약 다음 노드가 없거나 연락 불가하다면 이슈어에게 다시 돌려주는 방식의 단순한 토큰링 네크워크인데, 잘 작동해서 기분이 좋다.
(사실 토큰 설계만 내가 하고 나머지는 Gemini가 많이 짜줬다. 즉석식품 불법개발자)
토큰-링 네트워크에서 영감을 얻어 노드들이 서로 토큰을 돌려가며 서로 헬스체크하는 일종의 탈중앙화(?) 헬스체크 서비스를 대충 만들어보았다. 토큰 네트워크를 토큰이 돌며 노드들이 서로의 주소를 사인하고, 만약 다음 노드가 없거나 연락 불가하다면 이슈어에게 다시 돌려주는 방식의 단순한 토큰링 네크워크인데, 잘 작동해서 기분이 좋다.
이제 네트워크 인터페이스도 일부 추가하고, I/O도 일부 보강하고, 그래픽 기능의 버그를 많이 고쳤다.
이제 거의 이정도까지 할 수 있다.
사실 많은 보일러플레이트 코드 노가다는 Gemini가 수고해주긴 했다...
이제 네트워크 인터페이스도 일부 추가하고, I/O도 일부 보강하고, 그래픽 기능의 버그를 많이 고쳤다.
이제 거의 이정도까지 할 수 있다.
재미 삼아, Cairo를 백엔드로 하는 쉽게 그래픽 처리를 할 수 있는 간단한 언어를 하나 만들고 있다.
전체적으로 Lua나 Visual Basic에게 영감을 받아 쉽게 읽을수 있는 문법을 가지게 만들려고 생각중이다.
재미 삼아, Cairo를 백엔드로 하는 쉽게 그래픽 처리를 할 수 있는 간단한 언어를 하나 만들고 있다.
전체적으로 Lua나 Visual Basic에게 영감을 받아 쉽게 읽을수 있는 문법을 가지게 만들려고 생각중이다.
사용례
termfedi의 로깅을 flogger로 리모트로 받는다.
서버의 UI를 좀 더 보기 좋게 조금 손보았다.
어젯밤에 그냥 갑자기 필 받아서 만든 것 전에 TUI 애플리케이션을 디버깅하다가 혈압 뻗쳐서 겨우겨우 디버깅했었는데
이게 갑자기 생각나서 Unix Socket 기반의 로거 라이브러리와 서버를 하나 만들었다.
https://github.com/makachanm/flogger-server https://github.com/makachanm/flogger-lib
사용례
termfedi의 로깅을 flogger로 리모트로 받는다.
어젯밤에 그냥 갑자기 필 받아서 만든 것 전에 TUI 애플리케이션을 디버깅하다가 혈압 뻗쳐서 겨우겨우 디버깅했었는데
이게 갑자기 생각나서 Unix Socket 기반의 로거 라이브러리와 서버를 하나 만들었다.
https://github.com/makachanm/flogger-server https://github.com/makachanm/flogger-lib
이번에는 좀 더 범용성 있는 무언가를 만들고 있다.....
오랜만에 Termfedi 업데이트 Renote/React를 할 수 있게 Action 모드를 추가했다.
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/



































