WTF Pebble

2014년 3월부터 지금까지 페블을 사용하며 코딩해왔다. 오리지널 페블이 출시된지 거의 2년이 지났지만 여전히 페블 어플리케이션을 사고 팔수 있는 시스템은 구축되지 않았고 그럴 기미도 보이지 않는다.  그럼에도 불구하고 페블 코딩이 즐거웠던 것은  개발자 등록에 따른 비용도 없고 어플리케이션 개발과 설치및 사용에 있어서 애플이나 안드로이드와 상대적으로 훨씬 자유롭기 때문이었다. GCC 4.7.2 크로스컴파일러를 통해 C99/C11 문법을 사용할 수 있으며 Python으로 만들어진 통신라이브러및 툴체인, QEMU 가상머신, CloudPebble 등의 핵심 서비스까지 완전히 개방되어 있어 할 이유만 있다면 얼마든지 자기 입맛에 수정이 가능하며 회사의 정책에 크게 묶이지 않은 것 처럼 보이기 때문에 ‘자유’를 만끽한다고나 할까..

 

페블 자체의 스펙은 공룡급 회사 제품과 비교불가다. 마치 iPad와 옛날 Palm Pilot이나 Clie와 비교하는 수준이라고나 할까..  이런 페블의 저스펙 제품이 애플이나 안드로이드 운영체제를 기반으로하는 스마트와치에 대항?하여 나름 선방하는 이유에 분명 자발적인 커뮤니티와 이를 지원하는 페블의 정책이 들어있을 것이라 생각한다.

 

하지만 페블 타임이 출시되고 내 손에 들어온 뒤 약 한달동안 적잖은 크기의 어플을 만들면서 점점 페블이라는 회사의 대응에 실망을 느끼는 중이다다.  가장 짜증스러운 점은 스마트폰에 설치되는 Pebble stock application 의 자잘한 버그인데, 버전이 현재 3.2 이지만 항상 크고 작은 문제로 시원한 느낌을 받은 적이 없는 것 같은 착각마저 들정도다. 페블을 사용하는 것 자체를 불가능하게 만드는 고질적인 몇가지 문제때문에 사용자가 포럼에 도배질을 하다시피해도 묵묵부답…

 

iOS 기기에서는 블루투스 연결이 자/주/ 끊어지고 다시 연결을 맺지 못하는 경우가 태반이다.  Bluetooth LE 연결을 통해 알림이 들어오지만 LE 연결이 맺어지지 않는 경우가 많고 원인이 특정한 문제에 결부된 게 아니라서 해결책이라는 것을 내놓기 어렵다. 안되면 그저 네트워크 리셋을 진행하는 수밖에 없다.  덕분에 저장해뒀던 WiFi 연결정보가 지워지기 때문에 WiFi 비번을 모조리 외우게 될 정도다.

 

언어팩에 대한 문서를 전혀 제공하지 않아 Multi-Byte로 구성되는 언어사용자는 펌웨어가 업데이트 될 때마다 곤욕을 치룬다. 그나마 펌웨어 3.1까지는 다른 나라의 언어팩을 참조로 만들어 낼 수 있었으나 펌웨어 3.2 부터는 아무런 언급도 없이 뭔가 변경해버려 페블 사용자체가 불가능지기 까지 했다.  페블 자체에서 언어를 해결할 수 없으면 개발자에게 문서라도 제대로 내놓던가 할 것이지 아무리 메일로 문의를 해도, 포럼에 글을 남겨도, 빌어먹을 고자세로 아무런 대꾸가 없다.  쓰바, 사용자가 언어팩을 만들어 쓰겠다고해도 일언방구조차 없고 펌웨어 업그레이드 때문에 문제가 발생해도 포럼이나 슬랙채널이나 메일지원에서도 이에 대한 회사차원의 솔류션을 볼 수 없다.  Multi Byte 사용자를 사업상의 우선순위에서 한참 내려놓았거나 아예 솔류션이 없는 것일수도 있다. 어느 쪽이던 간에 짜증나는 대응을 보이고있는 것은 사실이다.

 

몇시간만에 답을 달라는 것이 아니다. 그저 글을 올리면 좀 댓글이라도 달아주면 좋으련만 점점 더 자유방임형 고객응대 상황이 심해지고 있다.  JavaScript를 포함하는 어플리케이션은 일단 앱스토어에 올리지 않으면 설정하는 부분에서 동작조차 되지 않는다.  설령 앱스토어에 올렸다해도 오류가 나는 경우가 많고, 그런 오류에 대해 포럼에 문의해도 방구끼는 사람조차 보이지 않는다.  포럼 사용자가 댓글이라도 달아주면 무지하게 감사할 일이겠으나 페블은 사용자끼리 해결하도록 자유방만형 정책을 세웠는지 담당자의 답변을 보기란 정말 힘들다.  과연 담당자가 있는지 그것도 의심스럽다. 한때 고객지원 개발자를 뽑는다고 이벤트도 했고 몇몇이 입사하기도 했다는 소식도 들렸는데, 그 사람들은 방위직인가? 어디에 짱박힌건가…

 

애플만큼의 퀄리티를 바란적 없다. 화려한? 어플을 기대한 것도 아니다. 그저 내 맘대로 가지고 놀 코딩 장난감이라 생각해서 페블을 사용하는 중이다.   구매가 가능하고 안전한 앱스토어를 열어준다면 그야말로 땡큐지; 그게 아니라면 최소한 사용은 가능하게 해줘야 할것아닌가.   시계화면 많아봐야 유치한 전자시계와 다를바가 없다. 배터리 오래가봐야 그게 내 손목에 올라올 지극히 당연한 이유가 되지 못한다. 알림이 오더라도 한글 표시도 제대로 못하는 스마트와치?, 땀이 차서 홍수나는 싸구려 밴드에 바람이 스치기만 해도 기스나는 케이스, 바퀴만한 베젤을 가진 주제에 사용자가 맘대로 쓰지도 못하게 하는 제품… ㅋ 진짜 한심하다;;

Pebble Time Firmware 3.2 + 한글 언어팩 문제

7월 23일, 오늘 저녘즈음에 페블 펌웨어 업그레이드 노티가 와서 별 생각없이 업그레이드 했다가 낭패를 만났다.

 

설정 -->  바로가기  메뉴를 선택하거나 전화가 오면 리부팅이 되버렸다. 공장 초기화를 몇번이나 해도, 소용없고 내가 만든 언어팩이든 다른 사람이 만든 언어팩이든 모두 삭제되지 않는 문제가 생겼다.  분명 언어팩과 관련해서 뭔가 변했지만 페블측에선 언어팩 제작과 관련해서 어떤 공식적인 얘기도 없었기 때문에 이와 관련된 문제로 도움을 요청해봐야 응답받을 가능성은 없다. 개발자 채널을 통해 아무리 요청해도 몇달이 지나도록 응대하지 않는 상황이라 그냥 펌웨어를 뒤로 돌려 버리기로 했다.

 

BUT, 펌웨어 설치가 안된다!! 쓰바;;;;

 

언어팩으로 이런 문제가 생긴다니 신기할 따름이지만 몇가지 방법을 시도하다 겨우 제대로 돌리고 한글도 원상 복구?시킬수 있었다.  주의: 안드로이드 사용자만 가능!

 

01. 영문언어팩으로 기존 언어팩 사용을 무효화 한다:  en_US.pbl

 

02. 공장 초기화

 

03. 펌웨어 v3.1를 설치한다:  Pebble-3.1-snowy_dvt.pbz

 

04. 변환테이블 없이 한글 폰트만 포함된 언어팩을 설치했다:  이 버전은 개인 목적으로 만든 언어팩이므로 올리지 않는다. 공개된  다른 한글 언어팩을 사용해도 별 문제 없을 것이다.

 

05. OK

 

일본/중국 언어팩을 열어봐도 별반 다르지 않았다.  새로운 언어팩의 스펙에 대해 정보를 얻거나 3.2 펌웨어에서 사용가능한 다른 언어용 언어팩을 얻기 전까지는 일단 펌웨어 3.1에서 머물러야 할듯싶다.

 


 

<<추가>>

다시는 할 일 없을 것 같았던 펌웨어 해킹질을 해보았다. Pebble Time 펌웨어3.0 부터 리소스도 많아졌을 뿐만 아니라 폰트사이즈에 따라 리소스 번호가 연속하지 않는다는 것을 보고 언어팩의 문제점을 어렴풋이나마 추측할 수 있었다.

 

그래서, 한글로된 문자와 전화받는 것에 필요한 사이즈의 폰트 하나만 포함하면서, 내 경우 18pt, 언어팩이 ko_KR 이 아닌 en_US 타입이 되게 하여 설치했더니 펌웨어 3.2 버전에서도 메뉴사용에도 문제 없고 전화올 때 리부팅 되지 않고 알림에도 한글을 볼수 있게되었다.

 

 

 

 

 

페블 코딩, 일년 몇개월

작년, 페블을 사기 전부터 알람 어플을 구상했었다. 24시간 화면에 기반하고 N개의 알람을 아날로그 방식으로 표시하는 것이 핵심이었는데  오늘, 드디어 완성했다. 횟수로는 2년이 걸린 셈이다.

 

그동안 이 어플만 만들고 있었던 것은 아니다.  Pebble SDK를 익히는 시간도 있었고 변변찮은 어플을 앱스토어에 올리고 사용자들이 던져주는 하트에 헤벌쭉 하기도 했었다.  페블 타임이 나오기 전의 모델은 하드웨어 사양이 너무 낮아 도저히 내가 생각했던 내용을 하나의 어플 속에 다 넣을 수 없었지만 일년을 기다려 받은 페블 타임은 조금 나아진 환경을 제공했고  변경된 환경에서 코딩해보니 아쉽긴 해도 만족할 만한 정도의 충분한 공간이었기에 이제야 마무리 된 것이다.

 

그렇다해도 앱스토어에 무료로 풀 생각은 없다.  기본적인 시계와 알람 1개만을 설정할 수 있는 기능제한 버전을 공개해봤으나  이주 동안의 실적이 말해주듯 고작해야 100명도 안되는 사람들이 어플을 내려받았고 그 와중에 하트를 준 사람은 60명도 되지 않기 때문이다.  몇몇이 말도 안되는 요구를 해오기도 했고 자기가 원하는 기능을 넣어주면 기부금을 주겠다는 해외 친구도 있었지만,, 다 개뿔이다.  그냥, 완성된 버전 2.0은 나와 개발을 도와준 다른 한명만 쓰는 것으로 결정했다.

 

Adjusting Alarm time
알람 시간 맞추기

이 어플의 특징은 상당히 직관적인 알람설정과 아날로그식 표시를 지원한다는 점이다.하지만  숫자표시 방법보다 더 직관적일 수는 없을 것이다. 그러니 여기서 말하는 ‘직관적’이란 평가는 지극히 개인적이고 상대적이다.  알람을 설정할 때, 굳이 현재 시간을 생각하지않고 그냥 “지금부터 몇분, 몇시간 뒤…”를 상상하며 아날로그 시계 바늘 감듯 어플에서 시계 바늘을 돌리는 식이다.  알람 설정을 시작할 단계에선 시계 바늘 자체가 12시간 기반의 현재 시간을 나타낸다.  타겟으로 정한 시간에 분침바늘을 맞추면 상대적인 알람시간이 빨간색 ARC와 숫자로 표시되는 방식.

 

분침을 돌리는 동안 버튼을 떼지 않으면 가속도가 붙어 빨라지므로 먼 시간에 알람을 맞추는 것 또한 불편하지 않다. 그외 할 얘기는 많으나, 보는 사람이 관심없을 것이므로 패스~ 어플에 대한 내용은 http://andrwj.com/wiki/Slow+ 위키페이지에 기록해두었다 (버전 2.0에서 추가된 부분은 아직 기록되지 않은 상태)

 

페블어플을 만드는 것은 임베디드 기기에서 C코딩을 하는 것과 비슷해서 메모리 조작에 조금의 문제가 있을 경우, 그냥 어플이 죽어버린다.  경우에 따라서 디버그 코드가 출력되기도 하지만 절반 이상이 로그를 출력할 시간조차 주지 않고 죽어버리는 경우였다. 이것 때문에 스트레스 좀 받았다.   어이 없는 경우가 몇번 있었는데 그중에 가장 황당한 케이스는 비동기 호출로 실행되는 함수에서 모듈 변수에 접근할 수 없었을 때였다. 모듈 변수라 함은 특정 소스내에서 static으로 선언된 타입을 말하는 것이고, 비동기 호출이라 함은 app_timer_register()에 의해 설정한 함수가 지정한 시간뒤에 호출되는 것을 말한다.  또한 항상 에러가 나지 않는다는 점이 더 힘들게 만들었는데, 최근 그 요망한 경우를 드디어 밝혀낸듯 하다:

블루투스나 배터리, 액셀러레이터 같은 센서값을 가지고 호출해오는 시스템 콜백의 실행환경에선 초기화 되지 않거나 한번도 접근하지 않은 모듈 변수를 사용할 경우, 그냥 어플이 죽어주신다. 아무것도 남기지 않는다.  후져빠진 PebbleOS의 문제라고 추측할 뿐이다.

 

다행히도 대부분의 시스템 콜백은  void *  타입의 컨텍스트 포인터를 달고 다닐 수 있게 인수를 하나 제공한다.  콜백마다 캐스팅 하느라 코드가 지저분해져 #define 을 아낌없이 듬뿍 사용해 주었다.  웃기게도 모듈변수나 전역변수를 사용하면 캐스팅해서 쓰는 것보다 배는 더 메모리를 먹는 다는 점이다.  때문에 어플 사이즈가 커져갈 수록 변수하나 만드는게 살떨려가는 스릴을 맛볼 수 있었다.

 

GCC 4.7.2에서 지원하는 nested function 특징을 사용하는 것도 나름 재밌었다.  JavaScript 사용하는 경우에는 워낙이 자연스럽게 Closure를 사용하지만 C에서 그딴건 기본적으로 될리가 없다. 그러나 주의해서 사용하기만 한다면 nested function으로  Closure 비슷한 재미 좀 볼 수 있었다. (C에서 JS에서 하던 짓거리를 구현하려고 하지 말자)  다시 얘기하지만 nested function을 비동기로 불러 뭔가를 해보려할 때 절대 모듈 변수를 신뢰해선 안된다.  NF 함수에게있어  scope 라는 놈이 어디까지인지 제대로 파악하지 않고 쓰면 , 가차없는 어플의 죽음을 맛보게 될 뿐이다.

 

이 어플의 소스코드는 총 6300라인 정도밖에 안되지만 참 많은 기법을 테스트 해본 뒤에 나온 코드라 정이 간다. C언어 사용에 있어  많이 편해져서 좋은 점도 있으나, 무엇보다 마무리 지었다는 뿌듯함과 왠지모르게 흐르는 듯한 자신감이 더 좋다.  이 어플을 완성해서 이기도 하지만,  도중에 이리 저리 해보던 시도속에서 때로 스스로가 한심하게도 보이기도 했으며 아무도 알아주지 않는 일을 하고 결국에는 또 아무도 모를 것이 틀림없으나, 내가 스스로 만족해 하는 레벨의 소스를 코딩했고 그 결과가 나왔기 때문이다.   마치 은퇴후 취미로 코딩을 즐기는 기분이었다고나 할까..

 

 

은퇴후 코딩을 할지 모를 일이고, 또 은퇴라는 것이 존재하는 지도 알수없지만 현실 코딩 세계로 돌아가야할 시점이 되었다.

 

내년엔 백수가 될 것이 틀림없다. 물론 지금도 백수인 상태나 마찬가지다.

 

그래도, 난 은퇴후 코딩질 같은 호사를 누려보았다는 것에 감사한다.

 

맥에서 유럽문자 입력하기

맥환경에서 번역을 하다보면 원어를 입력할 때가 종종있다. 이때마다 GUI를 쓰게되면 작업이 느려지고 귀찮을 때가 있는데, 이놈의 핫키는 왤케 생각이 나질 않는건지…  어디다 기록해뒀다는 것 자체를 잊어버려서 이젠 블로그에 남긴다.

 

독일어  umlaut ä, ö, ü, es-zett ß

  • umlaut: Option +   u    +  a, o, u
  • es-zett ß: Option +  s 

 

프랑스어 à â ç é è ê ë î ï ô û ù ü ÿ  ..

  • acute ( ´ ) :  Option +  e 
  • grave ( ` ) :  Option + `
  • circumflex ( ˆ ) :  Option +  i
  • cedilla ( ¸ ) : Option +  c

 

스페인어 ñ, ¿

  •  Option   +  n
  •  Option   +  Shift  +  ?

Pebble 한국어 언어팩

§ 본 언어팩을 사용함에 따른 문제에 대해 일체의 책임을 지지않으며 개별답변이나 지원은 하지 않습니다. 

 

§ 페블 클래식, 페블 스틸용이며 페블 타임은 펌웨어 버전 3.1 이하에만 적용할 수 있습니다.

§ 페블에 2.9.1 버전의 정식펌웨어가 설치된 상태여야 합니다.

§ Pebble Stock application이 설치된 스마트폰에서 언어팩을 열어 설치합니다.

§ 한글 2,350자에 대해  4가지 폰트사이즈(14, 18, 24, 28)를 지원합니다.

§ 몇몇 특수기호및 이모티콘이 빠져있을 수 있습니다.

 

 

제주도청 한라산체  

폰트정보

언어팩 다운로드

 부산시청 부산체

폰트정보

언어팩 다운로드

 나눔바른고딕체

언어팩 다운로드

 

Note1: 메뉴및

시스템  메세지는

영어입니다!

 

Note2: 폰트크기는

12, 18, 22, 26px