Pebble Time 2는 emery, Pebble Time Round 2 는 gabbro 라는 코드네임을 쓴다.
Glimmer, Slow, nBack 모두 emery 플랫폼 전용으로 포팅해버렸다. 이전 하드웨어를 배려하지 않는다. 내가 가지고 있질 않으니.
Emulator 돌아가는 걸 보면 상당히 나아졌다는 걸 바로 알 수 있다.
다만 가속도계 테스트는 여전히 귀찮다.
pebble-mcp 를 만들어서 AGENT가 직접 테스트하게 만들려고 분석하다 PKJS를 사용하면 실시간으로 Celestigram/AspectScope를 붙여도 문제없을 것 같다는 생각이 듦. 조만간 API가 준비되는데로 던져볼 예정.2026-09-09
Synaplex(사이너플렉스) Architecture
10년전에 만들었지만 대단한 수작(?)이라는 상태머신과 시그널/슬롯 코드에 대해 Gemini 3.8 AGENT가 평가에 (헤벌레…하진 않았고) 고무되어 Embeded XState + Signal/Slot 구조를 완성했다.
덕분에 겁나게 복잡한 로직도 Pebble 앱으로 만드는건 시간 문제가 되버림. 그 첫번 째 결과가 nBack v3. 진동 및 모르스 부호, 글자, 숫자, 색, 위치 등 6가지의 Stimulus 를 5가지의 방법으로 피드백할 수 있게 됐다.
[Rule Table FSM] (거시 상태 수직 통제)
Loaded ──► Rolling ──► Ready ──► Sleeping
│ ▲
trigger(event) │ │ emit(signal)
▼ │
[Signal / Slot] (미시 사건 수평 전파)
window_appear, disappear, focus_in, focus_out, preferences_changed, deinit
C언어로 개발감각 이어가기
Gemini 3.8-flash 정도면 Pebble 코딩에 아무 문제 없었다. Grok은 병신이고, Claude/GPT는 과하다.
다만, 고지식한 Gemini 라서 AGENTS.md에 프로젝트 관련 코딩룰을 업데이트 하느라 빡친 경우가 몇번 있긴했다.
아래 코드는 상태머신 규칙의 선언부 중 일부인데, 그 당시 내가 가변길이의 정렬된 malloc 방법을 알고있었다는게 새삼 다가왔다. (value[] 부분)
typedef struct {
short length;
short watermark;
union __stateElement {
struct __transitState *state;
short event;
} value[];
} stateArray;
Gemini가 언급하기 전까지는 까맣게 잊고있었네.
10년전 가용 Heap 메모리가 54KB 정도였던, 정말 쥐어짜야 했던 극단적인 환경에서 상태머신과 시그널/슬롯을 만들었으니, 정말 필요는 발명의 친구쯤 되나보다.
10일 정도에 배터리 50%
9월 3일 첫 충전 하고 9월 12일 오후4시에서의 배터리상태는 49%.
초반이라 이것 저것 설치/삭제, 개발하면서 로그붙이고 하는 과정을 감안한다면 꽤 선방한 셈이다.
Glimmer 앱으로 watchface를 선택한 이후 시간당 약 0.1% 방전률을 보이고있으니, 이대로라면 Glimmer를 사용할 경우 이론적으로 41일 16시간을 쓸 수 있다는 계산. (100% ÷ 0.1% = 1,000시간. 1,000시간 ÷ 24 = 약 41.67일) 물론, 야무진 꿈이다.
모바일 Pebble 앱에서 보여주는 통계는 약 3일치밖에 보여주지 않는게 단점.
그 이전 사용통계를 보니 백라이트가 상당히 전력을 소비하는 것을 발견, 즉시 가장 낮은 단계로 설정하니 소비량이 극적으로 줄어들었다.
안정되면 한달에 한번 정도 충전할 것이고, 1년 중 배터리 충전횟수가 15번 이내면 … 뭐,, 5년은 문제없겠다.
여전히 허접?
Pebble 초반에 비해 디바이스가 그렇게 고급져보이진 않아도 꽤 나아졌다고 생각했으나 벌써 Back 버튼이 도망갔다는 유저 리포트가 올라왔다. 뭘 설치해서 그렇게 Back 버튼이 빠질 정도였을까??? Select 버튼이라면 그러려니 하겠는데, Back.. 이라… ㅂㅌ인가;
실물 Slow 워치 vs. 페블 Slow 워치앱.
요일 표시가 없는 건 도저히 참을 수 없으므로, 난 페블 Slow 워치앱.
게다가 페블 Slow 워치앱은 초침도 표시된다 ㅋ
Slow 워치앱이 Pebble Time Round 2에서 동작하면 완전히 Slow 전용 디바이스로 보일 듯.
내겐 Pebble이 손목 위의 모니터에 가깝다. 뭐든 코딩할 수 있고 버튼/터치가 가능한 조그만 장난감이 손목에 있는 셈이다.
이건 뭐 내 Venus가 Gemini에 위치하기 때문에 새로운 것에 대한 묘한 끌림이 자연스럽다.
그리고 난 단지 C 코딩을 하고싶을 뿐이다.
쥐어짜내야하는 가용 메모리 상황이 오히려 내겐 자극제랄까.
오랜만에 다시 생각해보는 char *p vs. char p[] 차이
char c[10]="sample sentence"; 정의DEFINITION에 대해 char *p = c 라고 하고 배열처럼 쓰면 박살나는 이유:
l-value p는 반드시 주소타입의 r-value를 할당해야한다.
따라서 p를 배열처럼 사용하면 (ex: p[3]) r-value가 ASCII 값이되어 SEGFAULT 또는 뭔 짓을 할 지 알수없게된다.
차이는, r-value가 주소여야 하는가 여부다.
야… 이거 너무 오래되서 까물까물 하는구나;;
로컬에서 개발하고 있는 앱, CloudPebble을 통해서 넣기
카페 또는 로컬 네트워크에 연결할 수 없을 때 등… 로컬 네트웍으로 접속해서 넣는 방법 외에, CloudPebble을 거치는 게 더 편할 때가 있다.
모바일 Pebble 앱에서 개발자 연결을 하고, CLI에서 로그인을 해둔 상태여야 한다.
pebble login
pebble install --cloudpebble
C & JS Hybrid App – Moddable XS
Bytecode로 컴파일된 JS + C 언어라니;;; 관련 기술이 모두 공개된 Pebble 개발 생태계가 대단히 흥미롭다. 2016년과 달리 모바일 앱 소스코드, pypkjs, pkjs-runtime.js, pebble-qemu-wasm … 모두 공개된 상태인데 페블 앱 개발은 그리 활발하진 않다. 그러나 그 공개된 기반 기술들과 응용 기술들의 여파는 심상찮을 것 같다는 직감이든다.