2025년 11월 7일 금요일

푸단대학에서 보내는 첫날 밤

제22회를 맞는 CJK(China-Japan-Korea) Bioinformatics Symposiun을 참석하기 위해 해외 출장을 오게 되었다. 이번 공무 출장은 생애 최초의 중국 방문이기도 하다. 공항철도 김포공항역에서 내려 국내선과 정반대 방향에 위치한 국제선을 타 본 것도 처음이다. 인천공항이나 김포공항 국내선보다 사람이 적어서 좋았다. 무빙워크가 수리 중이라 한참을 걸어야 했지만. 

두 시간도 걸리지 않는 운항 시간에도 불구하고 식사가 나오는 것도 미처 몰랐다. 그저 음료수 정도만 줄 것으로 생각했으까. 국제선이라서 그런 것일까? 일본 여행 때는 어땠었는지 잘 기억이 나지 않는다. 

지금 머무는 곳은 상하이에 위치한 푸단대학 안의 Fudan Qing Yun Hotel이다. 

푸단대학의 '푸단'은《상서대전 우하전(尙書大傳 虞下傳)》 중에서 "일월광화 단복단혜(日月光華, 旦復旦兮) (해와 달이 빛남이여, 환하고 또 환하도다)"라는 명언에서 차용하였다 - 나무위키


중국에서는 구글 서비스가 안된다고 하지만, 로밍을 해 가면 문제가 없다. 카카오톡도 잘 된다.

CJK 생명정보학 심포지엄은 한-중-일 세 나라가 번갈아 가면서 개최한다. 아주 처음(2002년)에는 한-일 생명정보학 트레이닝 코스로 시작하였다가 2006년 중국이 합류하였고, 지금은 교육 행사 성격은 많이 사라졌다. 30~40명 정도의 소수가 모이는 생명정보학 분야의 학술행사로서 참가비가 없다. 따라서 개최국에서 장소와 숙식을 제공하는 것이 전통이다. 코로나 시기에는 온라인으로 개최를 하기도 하였고, 최근 몇 년 동안은 개최 순서가 약간 흐트려졌다. 중국에서 개최하면 CJK, 한국에서 개최하면 KCJ, 일본에서 개최하면 JKC로 부른다. 공식 명칭은 알파벳 순서대로 CJK Bioinformatics Synposium. 한때는 ABC(Asian Bioinformatics Consortium)이라고도 불렸는데, 올해에는 다시 CJK로 되돌아갔다. 나 개인적으로는 처음 참석하였다.

푸단대학은 중국 3위, 세계 30위의 우수한 대학이다. 이런 대학의 인재들이 교문 앞에서 호텔까지 가방을 끌어 주머 미안할 지경이었다.

상하이 홍차오 공항에서.


인터넷이 잘 되는지, 신용카드나 현금은 잘 통하지 않는다는데 결제는 도대체 어떻게 해야 하는지 걱정이 많았다. 그러나 휴대폰 로밍을 해 오니 별다른 문제가 없었다. 휴대폰에서 핫스팟을 설정한 뒤 노트북 컴퓨터를 연결하여 연구소 인트라넷에 접속, 문서 결재를 하는 것도 평소와 다르지 않았다. 아직 현지에서 물건을 살 일은 없었는데, 네이버페이나 카카오페이에서 유니온페이 또는 알리페이 플러스가 된다고 하니 별 걱정을 하지 않는다. 알리페이 앱을 정식으로 깔게 되면 외국인의 경우 여권 사진을 찍어서 인증을 해야 한다는데, 운이 나쁘면 삼일씩 걸리기도 한단다.

22년이라면 결코 짧은 기간이 아니다. 환영 리셉션 후 내년의 개최지를 논의하는 회의에서 이 행사의 의미를 생각해 보았다. KOBIC의 황승우 박사를 비롯하여 이러한 역사를 일구어 온 세 나라의 고참 과학자들의 노고를 높이 사고 싶다. 특히 중국은 생명정보학 관련 컨퍼런스가 너무나 많아서, CJK 심포지엄의 성격을 어떻게 유지해 나가야 하는지 많은 고민을 하고 있는 것 같다. 내가 알기로는 특별한 기업 후원 없이 개최국에서 전적으로 비용을 대는 것도 많은 부담이 된다. 적은 수의 사람이 모여서 친목을 다지는 밀도 깊은 학술행사 성격을 유지하는 것이 오히려 좋은 CJK 심포지엄만의 특성이 될 수 있을 것으로 본다.

"갈까 말까 할 때는 가라"는 말이 있다. 이번 출장은 이웃 나라인 중국에 대한 이해를 높이는 좋은 기회가 될 것으로 본다. 

 

2025년 11월 2일 일요일

펜탁스 Q10과 함께 한 전주 나들이

펜탁스 Q10과 여분의 배터리를 챙겨서 가을의 분위기가 물씬 나는 전주 한옥마을을 다녀왔다. 한동안 잊고 있었던 조작법을 기억에서 다시 되살리는 기분이다. 작고 가벼우니 가방속에 쑤셔넣거나 늘 목에 걸고 다녀도 전혀 부담이 없다. 화면은 크기나 밝기 등 모든 면에서 스마트폰의 그것보다 나을 것이 없다. 밝은 야외에서는 도대체 잘 보이지 않는다. 그렇지만 화면 터치가 아니라 하드웨어 버튼과 휠에 의한 '조작'의 재미가 있으며, 촬영 후 화상에 이리저리 효과를 주면서 즐거움을 더할 수 있다.

아직 전주향교의 은행잎은 노랗게 물들지 않았다. 유난히 길고 더웠던 여름이 지금까지 영향을 미치고 있는 듯하다.

"극채색" 효과에 의해서 자동차와 단풍잎의 색조가 잘 대비된다. 집을 떠나기 직전.

중이 제 머리 못 깍는다고, 이것과 바로 다음 사진은 휴대폰으로 찍은 것. 찍은 사진을 구글 포토에 옮기고 나서 어느 카메라로 찍었는지 가장 쉽게 확인하는 방법은 종횡비율이다. 4:3이면 Q10, 16:9면 스마트폰. 







예쁜 골목의 모습을 수채화로 그리는 젊은 여성이 있었다.



최명희 문학관 앞에서. 보수 중이라 문을 닫았다.


누군가 잊어버리고 간 물건. 아침까지 내린 비로 젖은 것을 보니 아마도 며칠 동안 이 자리에 있었던 것 같다. 담배가 거의 꽉 차 있었는데...

영화의거리까지 걸어가서 조이앤시네마에서 영화 "빅 볼드 뷰티풀(원제: A Big Bold Beautiful Journey)를 보았다. 넓은 객석에는 우리 부부를 포함하여 단 네 사람밖에 없었다. 영화관의 팝콘이란 원래 쏟거나 남기라고 만든 것.

영화가 끝난 뒤 저녁을 먹고 나서 객사길을 걷다. 야경은 SCN 모드에서 있다는 것을 기억하지 못해서 프로그램 모드에서 -1.3스톱 줄여서 촬영해 보았다.

다음은 동영상 촬영 결과물이다. 쇼츠 형태, 즉 세로 포맷으로 바꾸려면 오픈샷 비디오 에디터 작업을 해야 한다.


렌즈에 햇빛이 직접 닿으면 화질이 좋을 수가 없다. 


출시된지 이미 십여 년이 훌쩍 지난 펜탁스 Q10의 센서(이면조사형 CMOS) 크기는 1/2.3인치로 갤럭시 S23의 1/1.56인치보다 작다. 소형 경량화를 위한 어쩔 수 없는 선택이었을 것이며, 대신 당시로서는 활용도가 높은 아기자기한 기능을 많이 넣은 것으로 알고 있다. 즉, 진지하고 사실적인 기록을 위한 사진기라기보다는 '재미'를 위한 사진기라고 보는 것이 타당하다. 여행길에 가볍게 들고 다닐 수 있는.

캐논 EOS 500D는 언제나 되어야 펜탁스 Q10만큼의 관심을 받게 될런지 알 수가 없다. 아마 집에서 동영상을 찍어야 할 때나 쓰게 될 것 같다.

2025년 10월 31일 금요일

펜탁스 Q10으로 담은 도심의 가을 풍경

되살아난 펜탁스 Q10을 들고 서울 출장을 다녀왔다. 워낙 작고 가벼워서 휴대하는데 별다른 부담이 없다. 남대문 근처의 풍경을 몇 장 찍어서 콜라주를 만들었다. 일부 사진은 '극채색' 효과를 넣어 보았다.


HDR(High Dynamic Range) 기능은 스마트폰을 따라갈 수 없다. 하지만 필름 카메라 시절을 생각해 본다면, 한 화면 내에서 밝은 곳이 완전히 날아가는 것을 감내하지 않았던가.

마침 쿠팡에 주문했던 40.5mm 렌즈캡도 도착하였다. 앞으로 어딜 다니든지 갖고 다니면서 잘 활용해 볼 생각이다. 


아두이노 나노 에브리(왼쪽; ATmega4809)와 아두이노 나노(ATmega328P) 호환보드.

 

얼마 전에 구입해 놓았던 아두이노 나노 에브리에 핀 헤더를 납땜하였다. 그런데 컴퓨터에 연결할 방법이 없다. 아두이노 나노에서 쓰이는 USB mini B도 아니고, 휴대폰에 쓰이는 USB-C도 아니다. 아... 휴대폰 생태계에서 퇴출되었던 마이크로 5핀 타입(micro type B)인 것 같다. 라즈베리파이 3B의 전원 커넥터에도 쓰이던 썼던 바로 그것.  그러나 갖고 있는 케이블을 연결해 보니 Arduino IDE에서 인식이 되지 않는다. 케이블이 고장났거나, 또는 충전 전용 케이블이거나. 쿠팡에서 케이블을 새로 주문하였다. USB 커넥터의 다양한 타입에 대해서는 나무위키의 그림 자료(링크)를 확인해 보자.


2025년 10월 30일 목요일

[Nano Ardule] MIDI 파일 재생기를 만들기가 이렇게 어렵다니...

그림 자료를 곁들여 꽤 긴 글을 쓰고 있었는데 순식간에 날아가 버렸다. 키보드를 잘못 건드린 것도 없는데 도대체 무슨 일이 벌어진 것일까? 시스템 또는 서비스의 일시적인 문제라고 믿기로 했다. 지금까지 이런 일은 없었기 때문이다.

Nano Adrule MIDI controller는 키보드 컨트롤러와 사운드 모듈 사이에 위치하여 음색을 바꾸거나 레이어 또는 스플릿을 하기 위한 목적으로 만든 것이다. 여기서 말하는 사운드 모듈은 디스플레이나 조절 기능이 없이 아주 단순한 구조로 된 것을 뜻한다. 즉, 노래방 반주기에서 적출한 도터보드 형태의 것을 포함한다.

내놓기 민망한 수준으로 회로를 꾸미고 아두이노를 제어하기 위한 스케치(.ino) 파일을 만들어 소기의 목적을 달성하는 데에는 성공하였다. 이 과정에서 챗GPT가 큰 기여를 하였다. 처음에는 마이크로SD카드에 저장한 type 0 MIDI 파일을 재생하는 기능까지 넣으려고 했으나 아두이노 나노라는 제한된 '두뇌'에 펌웨어를 다 밀어넣기가 곤란하여 일단 기능을 분리하게 되었다. 아두이노 나노 호환보드와 아두이노 나노 에브리를 하나씩 갖고 있으니 각각에 대해여 서로 다른 기능의 펌웨어를 업로드해 놓은 뒤 필요에 따라 소켓에 바꿔 끼워 가면서 쓸 수도 있을 것이다.

그러나 안정적인 MIDI 파일 재생 기능을 구현하는 것이 키보드 컨트롤러의 보조 역할을 하는 것보다 훨씬 어렵다는 것을 알게 되었다. 마이크로SD카드에서 파일 목록을 얻는 것부터 쉽지 않았다. 실패를 반복하면서 거의 포기 상태로 한동안 손을 놓고 있다가 또다시 열정을 갖고 파고들기 시작하였다. 수없는 시행착오를 거쳐서 SD카드 접근용 라이브러리 SDFat를 선택하고, MIDI 파일명을 기록한 인덱스 파일(INDEX.TXT)을 통해서 개별 파일을 접근하는 등 최적화를 위해 할 일이 너무나 많았다. 단계별로 적용하여 재생 안정화에 기여한 대책을 정리해 보면 다음과 같다.

MIDI 파싱/타이밍(논리) 안정화

  • 러닝 스테이터스 규칙 고정: runningStatus는 오직 채널 보이스(0x80–0xEF)에서만 갱신.
  • 메타(0xFF)/SysEx(0xF0/0xF7) 이후에는 runningStatus를 건드리지 않음.
  • 프리롤 정합성: Δ=0 구간에서 메타·SysEx는 소비하되, 첫 채널 상태를 만나면 firstStatusPending = true, runningStatus = 해당 상태로 초기화 후 메인루프에 인계.
  • 데이터바이트 보호: runningStatus 없이 데이터바이트(<0x80) 등장 시 다음 상태바이트(≥0x80)까지 스캔하여 동기화(트랙 경계 내에서만).
  • 트랙 경계 가드: trackEndPos를 프리롤/메인루프/메타파서 전 구간에 적용하여 조기 EOT/읽기 초과 방지.
  • 절대시간 스케줄러: songStartMicros + tick*micro_per_tick 방식으로 이벤트 스케줄, Δ=0 클러스터도 순차 처리.

“버스트(폭주)” 완화/전송 안정화

  • 스타트 가드: 재생 시작 시 2비트(count-in) 지연 + 15ms 프리롤로 초기 버스트 완화.
  • TX 페이싱(옵션): parseMidiEvent() 끝에 delayMicroseconds(200~350) 삽입해 UART 과부하 예방.(권장값: 250µs. 문제 파일에서만 필요하면 컴파일 타임 옵션으로 관리)
  • 하드웨어 버퍼 대기(대안): 필요 시 Serial.write() 전에 UDRE 체크로 송신 버퍼 여유 확인.
SD 파일 접근 안정화
  • SPI 속도 보수화: SD.begin(CS, SD_SCK_MHZ(1)) 로 1 MHz로 시작(호환성↑).
  • 오픈 재시도 래퍼: sdSafeOpen()으로 최대 3회 재시도 후 실패 판정.
  • 고정 버퍼 라인리더: String 대신 char[] 버퍼 기반 readNextLine()로 CR/LF/CRLF, BOM(UTF-8) 처리.→ countIndexLines(), loadIndexPage() 모두 이 라인리더 사용.
  • INDEX 포맷 규칙: 8.3 파일명, 빈 줄/주석(#) 무시, 마지막 줄 개행 보장. 필요 시 PC에서 파이썬 스크립트로 BOM 제거 + 줄바꿈 통일.
UI/입력 안정화

  • 버튼 디바운스: 모든 버튼에 소프트 디바운스(약 18ms + 릴리즈 대기).
  • 인코더 스텝 고정: detent=2 기준(두 클릭=1스텝)으로 과다 이동 억제.
  • 방향 반전은 #define ENC_DIR_INVERT 한 줄로 토글.
  • 표시 정렬: Vol/BPM/Reb/Kit 숫자 3자리 고정(오른쪽 정렬)로 상태 확인 용이.

모듈/보드 특성 대응

  • /SONGS vs /DRUMS 분리: 
    • /SONGS: 원본 그대로 재생(초기 CC/PC 미전송) → 불필요한 설정 충돌 차단
    • /DRUMS: 시작 시 CH10에만 Volume/Reverb/DrumKit(PC) 전송(SAM9703는 PC만으로 킷 변경)
  • All Notes Off: 인코더 버튼 롱프레스로 긴급 음 끊김 방지.

나노 아두이노 설계를 시작할 때만 하더라도 이렇게 복잡하고 까다로운 난관을 타개해 나가야 할 것이라고는 전혀 생각하지 못하였다. PC에서 .mid 파일을 만나면 단순히 더블클릭만 해서 어쨌든 소리를 들을 수 있다. 하지만 아두이노는 그렇지 못하다. 예를 들어 C:\Windows\Media 폴더에 전통적으로 존재해 오던 ONESTOP.MID라는 약 4분 분량의 MIDI 파일을 보자. html-midi-player("Play and display MIDI files on the web")에 업로드하면 노트 정보의 시각화는 물론 재생까지 이루어진다. 이 는 다양한 악기가 여러 장르를 거쳐 연주되는 매우 수준 높은 MIDI 파일이다.

html-midi-player("Play and display MIDI files on the web")에 로드한 ONESTOP.MID 파일.

Nano Ardule은 이 파일을 재생하다가 1분이 되기 전에 타악기 소리를 와르르 쏟아내고는 멈춘다. 그 이유를 알기 위해서 문제가 일어난 구간의 MIDI 파일의 이벤트를 텍스트 형태로 출력한 뒤(챗GPT를 이용하여 이러한 용도의 파이썬 스크립트를 만들었음) 분석을 해 보았다. 이외에도 부수적으로 만든 파이썬 스크립트가 여럿 있다.

00:35:000 ~ 00:45:500 
Time(mm:ss:ms) | AbsTick | Δ? | Kind | Detail 
----------------+---------+----+--------+-------------------------------------- 
00:35:051 | 9125 | 0 | CHAN | NOTE_ON ch= 1 note= 72 vel= 0 
00:35:067 | 9129 | 4 | CHAN | NOTE_ON ch= 1 note= 74 vel= 64 
00:35:082 | 9133 | 4 | CHAN | NOTE_ON ch= 8 note= 72 vel= 0 
00:35:121 | 9143 | 10 | CHAN | NOTE_ON ch=12 note= 38 vel=115
...

분석 결론은 다음과 같았다. 핵심은 노트보다 컨트롤 메시지(특히 Pitch Bend, CC, Bank/PC)가 폭주하는 구간이 있다는 점이다.

  • Pitch Bend 홍수
  • Bank Select + Program Change의 동시 발생
  • Mode Wheel(CC#1), Volume(CC#7) 연속 변화
  • Δ=0/2/4 정도의 촘촘한 이벤트 다발

PC에서는 내부 버퍼·타임스탬프 큐·멀티스레드로 완충되지만, 아두이노는 UART 대역폭과 싱글 루프 때문에 그대로 내보내면 밀립니다.

오늘의 목표는 ONESTOP.MID 파일을 제대로 재생하게 만드는 것이다. 그 다음으로는 드럼 연주 데이터만 들어있는 MIDI 파일을 2-마디 패턴으로 분해한 뒤 반복 재생하거나. 또는 '패턴 체인' 형태를 만들어서 곡 전체에 해당하는 드럼 연주를 제공하는 것.

아두이노를 이용한 드럼 패턴 플레이어를 만들기 위해 많은 아이디어가 스쳐 지나갔다. 실은 구글에서 online drum machine이라고만 입력하여 검색을 해도 꽤 좋은 서비스가 많다. 하지만 나는 인터넷에 연결되지 않은 상태에서도 이동하면서 사용 가능한 드럼 패턴 플레이어를 원한다. 

2마디 단위의 드럼 패턴을 그리드 형태로 양자화한 파일(Ardule Drum Pattern System; 바이너리 파일은 .ADP, 사람이 이해하기 쉬운 텍스트 버전은 .APT)을 마이크로SD카드에 저장해 놓은 뒤 원하는 것을 골라서 반복 재생하는 방식을 비롯하여 MIDI 파일을 2마디 단위로 직접 쪼개서 별도의 파일로 저장한 다음 활용하는 것에 이르기까지 여러 방법의 가능성을 따져 보았다. ADP 체계는 마이크로SD카드 의 MIDI 파일 접근이 쉽지 않아 애를 먹던 시절, 아예 메모리에 저용량의 패턴 데이터를 담아 보려고 생각한 것이다. 코드에 넣어 두었다면 Flash(PROGMEM)을, SD에서 불러온 패턴이라면 SRAM(겨우 2KB!)를, 그리고 사용자 커스텀 패턴이라면 EEPROM(이건 겨우 1kb에 불과함)를 쓰려고 했었다.

텍스트 형태인 APT(Ardule Pattern Text)의 사례. 이는 설계 및 편집을 위한 저장용 포맷이고, 실제로 프로그램 내부에서는 바이너리 형태(ADP)로 저장하려고 계획하였다. 드럼 전용이라면 ADT라고 쓰는 것이 옳다.


챗GPT의 해결책에는 이해하기 어려운 전문적인 내용도 많다. 계속되는 질문과 대답 속에서 다음과 같은 방법으로 거의 구체화가 되어가고 있다.

  1. (PC) 드럼 연주 정보가 담긴 type 0 MIDI 파일을 2마디 단위의 패턴으로 나눈 뒤, 출현빈도 역순으로 정리한다. 하나의 MIDI 파일에서 유래한 각 패턴은 위치 정보와 MIDI 이벤트 형태로 묶어서 하나의 파일에 정리한다. 이를 self-contained multi-ADT(.MAD)라고 부르기로 한다.
  2. MAD 파일의 뒷부분에는 완성된 곡 형태의 ARR 데이터를 담을 수 있다.
  3. (Nano Ardule) .MAD 파일을 읽어서 지정한 패턴의 반복 연주, 또는 ARR 데이터 연주를 실시한다.

초창기에는 ADP system을 고려하다가 표현력에 제한이 있으리라는 것을 이내 알게 되었다. 따라서 온전한 형태의 드럼 MIDI 파일을 아두이노에서 로드한 뒤 스캔하여 패턴 위치 및 빈도 정보를 추출한 뒤 이를 반복 재생하는 방법을 생각했었다. 그러나 서로 떨어진 위치의 패턴을 조합하여 체인을 만들기에는 아두이노에게 부담이 된다. 그래서 이러한 방식까지 진화하였다. .MAD의 개념 도입 초기에는 원본 MIDI 파일을 참조하는 방식을 생각했다가 생각을 바꾸었다. 하지만 ADP는 데모용 기본 리듬 등으로 활용할 가치가 있으니 아직 내다 버리지는 말도록 하자.

제안: multi-ADT 포맷 (권장 확장자: .MAD)

  • 파일명: FOO.MAD (8.3 호환)

  • 목적: 여러 2-bar 패턴 + 어레인지(패턴 번호/반복수) + 메타(템포, 드럼킷, 카운트-인) 모두 한 파일에.

  • 재생: 아두이노는 헤더의 오프셋 테이블을 읽어 패턴 위치로 즉시 seek끊김 없이 루프/점프.

바이너리 구조(간결 사양)

Offset Size Field 0x00 4 Magic = "MADT" 0x04 1 Version = 1 0x05 1 Flags (bit0=RAW-tick, bit1=GRID, bit2=HasTempoMap ...) 0x06 2 PPQN (e.g., 480) 0x08 2 Default BPM (for count-in; 곡 중 템포맵은 패턴 내 이벤트에 포함 가능) 0x0A 1 DrumKit PC (채널10 전제; 0=무시) 0x0B 1 CountIn Beats (2 or 4) 0x0C 2 PatternCount (N) 0x0E 2 ArrangeCount (M) // (패턴번호, 반복수) 개수 0x10 4*N PatternOffset[i] // 각 패턴 레코드의 파일 오프셋 ... 4*M ArrangePairs[j] // packed: (hi16=patternIndex, lo16=repeats) --- 각 패턴 레코드 --- PattHdr: +0 4 length_ticks (대개 2bar = 8*PPQN) +4 4 event_bytes (아래 이벤트 스트림 길이) +8 ? 이벤트 스트림 (델타-타임 + 미디메시지) Event Stream 인코딩(가볍고 빠르게): [VLQ delta] [Status or 0x00=running] [data1] [data2?] - 메타/시스엑스는 필요 시 스킵 가능 옵션(Flags) - 드럼 전용이면 CH10 메시지 위주로 간소화 가능

포인트: tick→byte 인덱스가 이미 파일 안에 내장되어 있어 패턴 시작 시 즉시 seek만 하면 됩니다.
템포가 바뀌는 패턴은 패턴 이벤트 안에 FF 51 03 메타를 넣어도 되고(Flags로 RAW모드), 대부분의 드럼 패턴은 고정 템포로 충분합니다.

텍스트 디버그 버전(선택): .MADT (사람 읽기용)

MADT, v=1, ppqn=480, bpm=120, kit=26, countin=2 PATTERN 1, len_ticks=3840 dt=0, 90 24 64 dt=120,90 2A 64 ... PATTERN 2, len_ticks=3840 ... ARR: 1x4,2x2,3x4,2x2,1x8

개발 단계에서 가독성↑ / 최종 배포는 .MAD 사용.


장점 요약

  • 무지연 점프/루프: 패턴 오프셋으로 즉시 seek → 카운트-인 동안 준비 끝.

  • 사이드카 정리: .MID + .PAT + .ARR한 파일로 통합.

  • 버스트 감소: 시작·전환부에 필요한 CC/PC/템포 이벤트를 패턴 전에 삽입해 둠.

  • 8.3 안전: FOO.MAD 하나로 끝.

설계를 구체화하기 위해 너무나 많은 문제와 해결책, 그리고 잘 모르던 개념 사이를 방황하고 다녔더니 이렇게라도 문서로 정리하지 않으면 다 잊어버릴 것만 같다.

MIDI와 오픈 사이언스를 연결할 수 있을까? 자동 생성으로 쓴 간단한 글 한편을 소개한다.

MIDI, 오픈 사이언스가 배워야 할 표준의 철학 

밴드 KRIBBtonite의 벼락치기 공연(2025년 10월 29일)

불현듯 무엇을 해야 되겠다고 마음에 떠올랐을 때, 여건을 따지지 않고 일단 저질러 보는 것이야말로 젊음의 특권 아닐까. (나보다) 젊은 사람들이 같이 있기 때문에 가능한 일이다. 공연은 그렇게 불과 일주일 전에 결정되었다.

포스터 제작: Dr. 조근형

공연 자체보다 준비 과정이 더 즐거웠다. 밤을 새다시피 업무에 시달리면서도 연습시간이 되어 마이크를 붙잡으면 치솟아오르는 열정을 어떻게 설명할 수 있을까. 멤버 중에는 악기를 배운 뒤 남 앞에 서서 연주를 하는 것이 처음인 사람도 있었다. 그러나 정확한 박자와 타격으로 든든한 연주를 해 주었다.


우리 밴드의 퍼포먼스 자체는 완벽하지 않았다. 창립 초창기라서 연습이 절대적으로 부족했고, 현장에서 사운드 체크를 해 줄 전문가가 있는 것도 아니었기 때문이다. 악보가 바람에 날아가거나 무선 마이크 전원이 켜져 있지 않은 것을 확인하지 않은 상태에서 노래를 시작하는 등 프로페셔널의 무대에서는 결코 허용할 수 없는 일이 일어났다. 나 역시 베이스를 연주하다가 실수를 종종 범하였고.

그렇지만 열정을 갖춘 멤버와 관객이 있었기에 너무나 보람이 느껴지는 무대였다. 특히 그동안 하나씩 장만해 온 장비—카날스 MW-620 2채널 무선 마이크와 인터엠 L1800 파워앰프(중고)—가 소규모의 야외 공연에서 충분하다는 것을 경험으로 알게 되었다는 점이 큰 성과이다. 이날의 공연에서는 모니터 대책은 적극적으로 마련하지 못했다. 몇 명의 멤버가 무선 인이어 모니터링 시스템을 단일 송신기로부터 공유하여 사용한 정도였다. 나는 별도의 모니터링 방안을 마련하지 않았는데, 있으면 좋을 것 같다. 

만약 강당 공연이라면 이러한 수준의 음향 장비를 잘 세팅하여 사용하면 되고, 오늘과 유사한 야외 무대라면 드럼에 유선 마이크를 1~2개 추가하면 될 것이다. 

만약 조금 더 완성도를 갖춘 뒤에 공연을 하기로 마음먹었다면 이날의 공연은 성사되지 않았을 것이다. 그러나 일을 저지르고 난 다음, '하기를 잘 했다'라고 생각하지 않는 사람은 하나도 없으리라.

규모는 제각각이지만 올해 벌써 4번의 공연을 치렀고, 12월 중에도 1~2회 정도 무대에 오르게 될 것 같다. 꿈을 현실로 만들고 성장하는 사람들의 모습을 보는 것이 즐겁다.

2025년 10월 28일 화요일

펜탁스 Q10 되살리기 - 고장 또는 메모리 카드 오류?

알리익스프레스에서 주문한 펜탁스 Q10용 배터리(D-LI68)와 충전기 세트가 드디어 배송 완료되었다. 220V 교류 전원에 꽂는 것 정품 충전기와 달리 이 아니라 USB-C 타입의 휴대폰 충전기를 이용하도록 되어 있다. 




배터리를 충전기에 꽂아 보니 거의 충전 상태였다. 카메라에 장착한 뒤 전원을 넣어 보았다. 켜지지 않으면 어떻게 하나 걱정을 하였지만 기우였다. 날짜 설정은 2012년부터였다. 출시연도를 짐작하게 한다. 캐논 EOS 100D는 2009년이었다. 

아내와 함께 2017년에 전주국제영화제를 찾아서 찍은 사진이 들어 있었다. 무려 7년 전의 사진이다. 우리에게 이렇게 젊은 시절이 있었나 싶은 정도로. 하지만 오늘은 남은 인생에서 가장 젊은 날이 아닌가. 배터리 주문과 관련한 글은 10월 18일에 작성한 나도 국민 삼각대 TMK-244B를 갖고 있었다 - 취미의 통섭(通涉, consilience)이다. 


과연 펜탁스 Q10이 휴대폰의 편리함을 대신할 수 있을까? 워낙 소형 경량의 미러리스 카메라이니 시험삼아 들고 다녀볼까 한다. 수시로 매뉴얼을 보면서 사용법을 다시 익혀야 되겠다. 딸아이가 어린 시절 수학여행에 들고 갔다가 잃어버린 직경 40.5 mm 렌즈캡도 주문하였다.

Helios-44M 렌즈를 찍어 보았다. 아니, 정확하게 말하자면 Q10으로 헬리오스 렌즈를 촬영한 것은 아니다. 단지 화면에 나오게 만들었을 뿐. 올림푸스 DSLR 바디가 하나쯤 더 있다면 지금 보유한 두어개의 렌즈를 활용할 수 있을 터인데.



낡은 보급형 미러리스 또는 DSLR로부터 스마트폰 카메라에는 없는 그 무엇인가의 의미를 찾아보고 싶다. 무의미한 시도라고 결론이 날지도 모르지만.


2025년 10월 29일 업데이트

치명적인 문제점을 발견하였다. 촬영 후 카드에 이미지가 저장이 되지 않고 있다. 어제 배터리를 살린 직후 찍은 단 하나의 이미지만 저장이 되었고, 오늘은 "화상을 저장되지 않았습니다"라는 메시지가 나오고, 대상 이미지를 보기 위해 재생 버튼을 누르면 "이 화상을 표시할 수 없습니다"라는 메시지가 나온다. 배터리를 되살린 의미가 전혀 없다. 수리가 필요한 상태인 것일까? 우선은 SD카드에 문제가 있을 것이라고 짐작해 본다.

카드를 꺼내어 컴퓨터에 연결해 보았다. 망가진 이미지가 많다. 포맷을 해 보아도 새로 촬영한 이미지를 저장하지 못하는 현상은 달라지지 않았다.


2025년 10월 30일 업데이트

새 SD카드(Axxen 32GB)를 구입하여 Q10에 장착해 보았다. 촬영된 화상이 잘 저장됨을 확인하였다. 카메라의 문제는 아니었다.

왼쪽의 것이 문제가 있던 기존의 메모리 카드.




달리기 입문 15개월째에 처음 받은 인사

원래 어제 달리기를 하는 날이었으나 저녁 식사가 너무 늦었고 오른쪽 무릎에 약간의 통증이 있어서 하루를 더 건너뛰었다. 점심시간을 이용한 밴드 공연을 앞두고 일과시간이 끝난 후 막바지 연습을 하느라 퇴근이 조금씩 늦었다. 공연 결정은 지난주에 별안간 이루어졌다. 올해를 넘기기 전에 정식 창단을 기념하는 공연을 하자고 이야기를 나누다가 요즘 바깥 공연을 하기에 적당한 날씨이고 다들 의욕이 넘치는 상황이니 아예 이 열기가 식기 전에 먼저 일을 저질러 보자고 뜻을 모았다. 특히 여성 멤버들의 열성과 실력이 대단하다. 다들 이런 '끼'를 속에 품고 어떻게 살았을까.

밴드 KRIBBtonite. 맨 왼쪽에 뒤통수를 보이고 있는 사람이 나(베이스 연주자). 촬영자: Dr. 김상옥.


오늘은 동네 한바퀴(3 km)를 달리기로 작정하고 집을 나섰다. 기온은 영상 7도. 이제 겨울로 접어드는 느낌이다. 런데이 앱에서 나오는 소리를 놓쳐서 총 5 km를 뛰는 것으로 마무리를 하였다. 4 km가 되기 조금 전이었을까, 반대 방향으로 달리던 한 젊은이가 나와 마주쳐 지나가면서 주먹을 불끈 쥐어 올리면서 '화이팅!'을 외치는 것이 아닌가.

나도 엉겁결에 주먹을 쥔 손을 번쩍 들어 올렸다. 소리를 지르지는 않았지만. 달리기를 시작한지 15개월째에 맞는 신선한 충격이었다.



도로 턱을 지나면서 착지를 잘못하는 바람에 무릎이 좀 아프다. 얼음찜질을 하면서 글을 마무리한다.