Ruby 기반 임베디드 및 하드웨어 프로젝트
- PicoRuby 활용 프레젠테이션 장치: Raspberry Pi Pico W (RP2350 칩)에서 mRuby를 사용하여 텍스트 및 그래픽 출력을 지원하는 소형 프레젠테이션 장치(Picorabbit)가 시연되었습니다. RP2040의 메모리 제약 극복과 향후 프로그래밍 도구로의 확장 가능성이 제시되었습니다.
- Ruby 온 플레이스테이션: mRuby를 PlayStation 1에서 구동하는 시도가 소개되었습니다. C 언어 래퍼를 통해 PS1 그래픽 함수를 활용하며, 다른 개발자의 성공적인 mRuby 구동 사례도 언급되었습니다.
- PicoRuby MIDI 컨트롤러: PicoRuby R2P2 (RP2350)를 활용하여 신시사이저를 제어하는 MIDI 컨트롤러(PRMC1)가 제작되었습니다. M5Stack 유닛을 사용하며, I2C 통신 속도 문제 해결 과정이 공유되었습니다.
Ruby를 활용한 개발 도구 및 시스템
- 프로그래밍 언어 프론트엔드: Ruby를 활용하여 새로운 프로그래밍 언어의 프론트엔드를 손쉽게 구축하는 아이디어가 제시되었습니다. 연산자 오버로드, 조건문, 함수 정의 등을 Ruby의 기능을 통해 처리하고,
at_exit
훅을 사용하여 백엔드 처리를 연동하는 방식이 설명되었습니다. - 파서 시각화 도구(Railroad Diagram):
yacc
로 작성된 문법(BNF)의 가독성 문제를 해결하기 위해 Railroad Diagram 시각화 도구를 Ruby로 구현한railroad_diagram
Gem이 소개되었습니다. 이를 통해 Ruby, PHP, Perl 등 다양한 언어의 파서 구조를 쉽게 이해할 수 있게 되었습니다. - Ruby CI 환경 유지보수: Ruby CI 시스템에서 RISC-V 환경을 QEMU로 유지보수하는 과정이 설명되었습니다. 느린 실행 시간과 재부팅 문제를 해결하기 위해 조건부 재부팅 및
systemd path unit
을 활용한 호스트 OS 재부팅 알림 방식이 도입되었습니다. - Bundler 보안 자격 증명 관리: Bundler에서 프라이빗 Gem 사용 시 자격 증명(비밀번호, 토큰)을 안전하게 관리하기 위한 “자격 증명 헬퍼(Credential Helper)” 메커니즘 도입이 제안되었습니다. Git 및 PNPM의 사례를 참고하여 외부 프로세스가 안전하게 토큰을 제공하는 방식이 논의되었으며, 관련 RFC 및 풀 리퀘스트가 진행 중입니다.
Ruby의 고급 기능 및 기술적 도전
- Ruby를 이용한 사운드 생성: 터미널 기반 Ruby 게임에 음악을 추가하기 위해 Ruby로 사운드 파형 데이터를 생성하는 방법이 설명되었습니다. Famicom과 유사한 구형파 생성, 노이즈 제거를 위한 파형 스무딩(사인 함수 활용), FFI PortAudio를 통한 사운드 출력이 시연되었습니다.
- Fiber Scheduler와 비동기 처리: Ruby 서비스에서 HTTP 요청의 병렬 처리를 위해
Fiber Scheduler
적용이 검토되었습니다. 그러나gRPC-core
와 같이 C로 구현된 블로킹 I/O 처리 방식과의 호환성 문제로 인해 스레드 기반 접근 방식(RB_THREAD_CALL_WITHOUT_GVL
)으로의 전환이 논의되었습니다. - 유니코드 문자열 처리: Ruby 기반 텍스트 에디터(Textbringer)에서 유니코드 결합 문자(Combining Characters) 및 이모지 처리 시 발생할 수 있는 표시 및 커서 위치 오류 문제가 다루어졌습니다. 폰트 렌더링 및 문자 폭 계산의 복잡성이 강조되었습니다.