페블타임2

https://repebble.com/watch

오랬만

작년 9월에 주문한 Pebble Time 2 , 1년만인 2026년 9월 3일 오후 3시에 DHL로 도착.

본체를 꺼낼 때의 그 묵직함…

꼴도 보기 싫은 기본 스트랩!

배터리 충전후 곧바로 스트랩부터 다른 걸로 끼웠다.

치렁 치렁한 USB 케이블 대신 USB-C 타입을 꽂을 수 있는 어댑터 타입을 제공하는 건 신선하다. 단, 열쇠고리에 묶어두지 않으면 언젠간 잃어버릴 것 같다.

빨간색 사이드패널 색으로 골랐는데 나름 괜찮네.

삵아서 떨어지는 Pebble Time 과는 달리, 사이드 패널은 단단해 보인다. 버튼도 나쁘지 않다.

진동 세기, ok.

10년전 만들었던 앱은 도트가 튀어보일 정도로 Pebble Time 2의 LCD가 나아졌네.

개발환경 셋업은 귀찮아서 뒤로 미룬다.

AspectScope 기반의 Transit Monitor 앱을 만들 계획이다.

시간을 갈아넣어 만들었던 C83k 언어팩도 문제없이 동작. 해상도가 좋아져서 그런지 더 미려해 보인다착각.

메세지를 확인하는 용도외엔 언어팩이 필요하다고 생각하진 않지만 Transit Monitor에서 표시하는 메세지를 한국어로 표시해야하므로 설치.

그러나 역시 Round가 눈에 밟힌다. 누가 내게 Pebble Round 2블랙를 선물해주면 언어팩, 앱, 100만원치 구조분석 등을 모두 선물해줄텐데…


개발자 계정 다시 찾기

Pebble을 받기 전에 미리 Rebble로 넘어갔던 계정을 찾는다고 아주 쑈를 했다.

메일을 보내도 응답 자체를 안하던 놈들이, 지겹게 보내니까 그런지 결국 어떻게 하라는 멜을 보내옴.

몇가지 방법을 제시받았지만 그냥 Slow 소스코드 일부를 보여주고 “그게 나야, 쓰바” 했더니 단번에 계정 돌려 받음.

즉시 계정 정리: 2016년 개발했던 방만한 여러 앱 정리하고, 딱 세개만 남김: Glimmer watchface / Slow watchapp / nBack watchApp

개발환경 설정은 아주 간편

그냥 … 뭐, 과정이랄 것도 없다. 걍 하라는대로 설치하면 된다.

패키지 꼬이면 문제 생기던 Emulator도 잘된다. pebble 유틸리티에 갖가지 기능이 겁나 늘었다.

뭔가 문제가 생기면 PebbleOS Clone 받아둔 프로젝트에서 Opencode로 소스검색해서 원인을 찾아보고 판단할 수 있어서 답답함이 많이 해결됨.

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 전용 디바이스로 보일 듯.


$290 (약 45만원)

$255/199 (약 34만원/27만원)

2026년, 애플워치/갤럭시워치 vs Pebble의 가치?

남들에게 어떤 가치가 있는지 내가 알바는 아니고,

내겐 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 … 모두 공개된 상태인데 페블 앱 개발은 그리 활발하진 않다. 그러나 그 공개된 기반 기술들과 응용 기술들의 여파는 심상찮을 것 같다는 직감이든다.


2026년 10월 1일자 커밋 ab3d69a: 16 bit -> 24-bit app load & virtual sizes

fw/process_management: read 24-bit app load and virtual sizes

현재, 앱 RAM과 .bin 파일 상한이 128KiB여도, 크기를 기록하는 load_size와 virtual_size 필드가 16비트여서 코드·데이터·BSS를 합친 실행 이미지가 65,535바이트에서 막혀있다. 이 커밋이 SDK와 PebbleOS에 적용되서 배포되면 64K 코드 한계에 부딪혀서 어정쩡하게 구현되던 것들이 그나마 숨통을 트일수 있게될 것 같다. 2026년 1월 2일 현재의 PebbleSDK v4.33.1 + PebbleOS v4.38.4 조합에서는 아직 적용이 안된다.


Ubuntu Linux ARM64 환경, Pebble 개발환경 구성요소에서 빠진 것

Linux ARM64에서는 기본적으로 stpyv8 패키지가 제공되지 않아 PebbleSDK를 설치했다 해도 QEMU로 앱을 설치할 수가 없다.

다행히도 빌드에 성공한 워크플로우가 있어서 빌드 구성정보를 가져와 VMWare Fusion에서 성공. 3G RAM, 2CPU 환경에서 1시간 16분 걸림. (using single CPU thread)

https://github.com/andrwj/stpyv8.git


Charing History

  • 3rd Charge: 2026-09-29 17:55 (21%) => 2026-09-29 19:15 (99%)
  • 2nd Charge: 2026-09-17 14:32 (11%) => 2026-09-17 16:32 (up to 75%) | 2026-09-17 16:32 (up to 75%) ==> 2026-09-29 17:55 (21%) [about 12 days; Glimmer/Signals 개발]
  • 1st Charge: 2026-09-03 16:00 (100%) ⇒ 2026-09-17 14:32 (11%) [about 14 days; Slow/nBack 개발]

Claude Startups 지원 프로그램에 얽힌 이야기

한가닥 가능성을 발견했을 때 Claude를 기반으로 제품을 만드는 창업자들과 함께하세요. Claude Team 1년 무료 이용권, API 크레딧, AI-native 기업 운영에 도움이 되는 툴 특별 혜택, Anthropic Applied AI 팀과의 오피스 아워 등 다양한 혜택을 누리세요. https://claude.com/ko/programs/startups Claude의 Startups 지원 소식을 듣기 전까지는 공허한 마음에 삐끗한…

Audio 사용이 가능한 pebble-qemu-wasm

uConsole에서 삽질하며 수정한 QEMU Audio 코드를 PR 했다. Eric이 바뻐서 테스트해보기나 할지 몰라, 내 브랜치를 만들어서 몇가지 수정하여 연결한다:

structura.lisp

Abstract structura.lisp는 위상기반 구조판독을 프로그램으로 표현하기 위해 만들기 시작한 Common Lisp 패키지이다. Rust로 작성한 Aspectscope-MCP는 Swiss Ephemeris를 기반으로 Natal, Transit, Progress Chart를 계산하고, Aspect와 Aspect Pattern 및 CSF, Celestigram을 탐색하며, 특정 조건이 성립하는 시점을 찾아내등 LLM을 끼고 기본적인 역할을 해왔다. HTTP 방식의 MCP 서버이기 때문에…

speak-mcp on Zeno.app

Zeno.app - 16GB Mac에서 35B 로컬 AI를 돌리는 흥미로운 실험, 그러나 아직은 실험에 가깝다 최근 Icosa Computing이 공개한 Zeno라는 macOS용 로컬 AI를 설치해 보았다. 회사 설명에 따르면 전체 MoE expert를 메모리에 올리지 않고, 사용되지 않는 expert weight는 SSD에 두었다가 필요한 expert만 RAM으로 읽어들이는 방식을 적용하여…

Saffron Ink – VSCode Theme

Gray background: Github Light Theme - Gray 테마를 기반으로 내 취향에 맞게 수정하였다. 원래 테마보다 좀 더 어두운 배경, 강한 텍스트 대비를 주었다. 선택영역 색상 및 커서 색상을 쪼매 튀게. 각 영역의 border-radius 제거. scrollbar 색상을 배경색 대비 3% 어둡게. https://marketplace.visualstudio.com/items?itemName=andrwj.saffron-ink

Pebble QEMU Development on uConsole with Physical Controls

의도 기본 생각은 단순하다: uConsole의 Joystick Keys 와 물리키보드를 이용해 Pebble QEMU Emulator에 직접 버튼/터치/가속도데이터 등을 전송하여 개발/디버깅 하겠다는 것이다. 왼쪽 이미지에 보이는 Pebble앱은 한국어(한글) 모르스부호 연습기 앱인데, 단순히 한글 자모를 출력하는게 아니라 한글 오토마타를 내장해서 모르스부호를 입력하면 한국어 문장이 조립된다. 죽도록 버튼을 누르지 않고…

HERDR multiplexer

Why & What https://herdr.dev/ ('26-SEP-18) HERDR 사용하기로 결정한 이유는 ① Rust로 제작되었다는 것, ② Plugin 생태계가 꽤 성장세로 보여서, ③ TMUX가 채우지 못하는 부분이 있어서 이다. 깔끔하게 hook을 설치/제거할 수 있다는 점은 좋다. 그러나 integration hook은 설치하지 않는다. 불필요하게 모든 턴마다 hook을 걸어 하는 일은…

Obsidian Web Clipper Setting for ChatGPT

ChatGPT 채팅의 내용을 깨끗하게 Obsidian 앱으로 import 하는 설정. 현재로썬 이게 최선... 구분선 위의 빈줄을 한 칸으로 줄일 방법을 찾다 찾다... 그냥 쓰기로 .. {{selectorHtml:[data-testid*="conversation-turn"] |join:"" |remove_html:("img,svg,picture,source,canvas,object,embed,iframe") |remove_attr:("style,alt,aria-label,aria-description,title,srcset") |markdown |replace:"#### 나의 말:":"---\n\n# 질문:" |replace:"/\\n+#### ChatGPT의 말:/g":"---\n\n## 답변:" |trim}}

LLM Wiki

흥미로워 보였지만 내가 원하는 기능은 없다 LLM Wiki 앱이 사용하는 프로젝트의 루트에 생성된 schema.md, purpose.md 파일들에 추가 설정 없이, AspectScope를 사용하여 분석한 데이터를 Ingest 시킨 결과를 봤더니, 고개가 절래절래 저어졌다. 검증 또는 확인이 필요하다는 문서가 하나의 분석 문서당 적게는 3개, 많게는 8개까지 만들어졌는데 해당 문서를…

command-run MCP

TURA 프로젝트에서 영감 받음 https://github.com/Tura-AI/tura Build agent that uses 80% less token and delivers better results. 핵심 아이디어는 rg, find, sed, git, cargo test 같은 shell command 호출을 개별 단위가 아닌 묶음으로 처리하게 해서 잦은 도구호출로 인한 토큰을 아끼자는 것이다. TURA의 TUI가 멋지긴 한데 당장…

또 한번의 난관을 넘는다

솔직히 어제 좀 기분이 더러웠다. 이런 처짐은 내가 뭔가의 바닥을 꿰뚫어 보고 그 본질을 깨닫고 실망했을 때의 반응이다. functional-thinking-mcp 의 두 도구(tool)를 kontexus-mcp로 편입한 것은 태스크 관리를 맡았던 workgraph-memory-mcp 와의 상호작용이 CLAUDE.md, AGENTS.md 와 같은 규정에 의해 조절되고 있어서 MCP 쪽에서 해결하려는 목적 때문이기도 하지만,…

Harness 체계의 빈틈을 채워 줄 Kontexus-MCP

Kontexus-MCP는 Rust로 포팅된 WGM+FTM 이다 Harness의 빈 틈 Harness의 구조적 전제는 하나이다: 에이전트는 턴 단위로 존재하고, 세션이 끝나면 사라진다. 그 전제 위에서 harness는 실행 중인 것을 잘 다룬다. 컨텍스트를 유지하고, 도구를 붙이고, 병렬로 펼치고, 훅으로 개입 지점을 준다. 그러나 아래와 같은 틈이 있다: 빈자리턴 사이…

제한의 역공

앱의 흐름진행을 오로지 상태테이블에 기반하여 흐름을 결정하고 이어가는 앱KONTEXUS-STUDIO을 만드는 프로젝트를 하고 있다. 이 앱이 필요한 가장 큰 이유는, 이런 방식의 진행을 정말이지 오랬동안 꿈꿔왔기 때문이다. 상태전이 테이블에 의한 앱의 진행은 까다롭지만 거의 모든 최악으로 복잡한 앱이라도 만들 수 있는 근본적인 방법이라고 생각한다. 이 앱은…

Pico-8 Game: Gadget_v2

WordPress Page를 쓰지 않고, 일반 Post 게시물에서 React/Flutter로 만든 페이지/앱을 임베딩하여 마치 WrodPress 게시물의 일부처럼 보이게하고 싶었다. 페이지나 포스트 하나 하나가 다른 앱을 보는 것인가 착각할 정도로 독립된 영역에서 동작하되, 업데이트와 관리가 가능해야한다는 요구조건을 만족시키는 방법을 실험하기 위한 게시물이다. 겉으로는 단순히 WASM으로 변환된 Pico8 게임이긴…

WP 방어

십수년간 업데이트 해오던 내 자료;; 홀라당 날려먹고 백업도 없어서 블로그를 내 팽겨친채 있다가, 다시 운영하려 할 때 걸림돌이 보안 문제였다.  워드프레스 사이트를 운영해본 사람들은 얼마나 공격질을 해대는지 이해할 것이다. 블로그를 내팽겨친 건 그 보안문제를 해결할 마땅한 방법이 없었기도 하거니와 시간내서 그 정도를 만들고 싶지도 않았기…