Post

Open smartwatch Contribution

첫 컨트리뷰션이자, 첫 메인테이너
Open smartwatch Contribution

Open-smartwatch Collaborator

Open-smartwatch 커뮤니티에 참여하며 Pull request와 Issue를 등록하였으며 Contributor로 활동하는 개발/문제해결 이야기를 기록하였다.

Intro

SNS에서 IOT/Embedded 관련한 작품을 종종 보면서 다음에 만들어 볼 버킷리스트로 기록을 하거나 호기심에 수집하는 취미가 있다. 근래 흥미를 끈 손목시계가 있었다.

현 26명의 개발자(11/17/2021)로 이뤄져 Open-source 기반의 오픈 스마트워치를 구성하고 있다.

스마트워치에 기능 개발과 버그 트러블슈팅 분야에 전력을 가하고 열거된 Issue들을 처리하고 있다. 또한 개선할 수 있는 부분들을 확인하고 있고 새로운 도메인들과 지식의 범위를 넓혀가고 있다.

Contribution

처음으로 수락된 Pull-request, 어렵지 않았지만 방법을 잊지 않기 위해 매일 Pull-request를 진행하였고 메인테이너가 요구하는 커밋 형식과 메세지에 맞춰서 Pull request를 제출하고자 검색하여 옵션 명령어들도 숙지하였다. 한 번 사용으로 끝나는 게 아니라 여러 차례 사용해보면서 특징을 파악하여 다른 상황에서도 활용할 수 있도록 응용해나갔다.

Git 사용법은 언어랑 같아서 자주 사용하지 않으면 둔해져서 일부러 Git을 공부하고 자주 쓰는 패턴을 정리하였다.

오픈소스 활동을 하면서 단순한 Git 패턴이 아니라 갖가지 사고에 대응할 수 있게 여러 방면의 옵션들과 명령어들을 확인할 수 있었다.

Assignees로 등록

등록된 새로운 Watchface 구현, 화면 요소 겹침 문제 2개 이슈에 관하여 진행자로 할당 받았다.

스스로 문제를 해결하고자 코드를 분석해보았고 프로젝트를 수차례 사용해보면서 근본적인 부분을 찾아보았다.

컴파일 이슈 처리

cmake 과정에서 Linux OS에서 컴파일이 되지 않는 문제가 있어 건의를 하여 Issue 처리를 진행하였다.

그래픽스 라이브러리에서 오류가 발견되어 수정하였고 Linux OS에서도 프로토타입 그래픽 환경을 테스트 해볼 수 있었다.

Git-learning

오픈소스 활동을 하면서 많이 공부한 것을 꼽으라면 Git이다. 물론 더 공부할 부분이 많지만 현재 PR(Pull Request)를 자유롭게 요청하고 커밋을 생성 취소를 자유롭게 하면서 최소한 협업 활동에 방해가 되지 않으려고 공부하고 하나씩 터득하였다. 소스 코드 버전 관리를 위해 만든 Git은 알면 알수록 넓은 세계가 있어 카테고리를 하나 만들어 따로 공부할 예정이다.

빠른 UI 개발을 위한 그래픽 라이브러리

손목시계 UI를 수정하거나 개발할 때 잦은 업로드와 디바이스 연결을 최소화하고자 데스크탑에서 그래픽 드라이버를 먼저 개발하여 위치나 디자인 등을 테스트할 수 있는 환경을 조정할 수 있다.

새로운 Watchface를 개발하기 위해 데스크톱에서 바로 테스트할 수 있는 그래픽 라이브러리를 만들어 여러번 연결하여 업로드하는 번거로움을 최소화할 수 있었다.

한국어 파일 추가

가장 가볍게 시작할 수 있는 방법을 찾다가 다국어 지원에 먼저 발을 들여 한국어 파일 ko-KR.h를 추가하였다. 첫 관문은 언제나 어렵고 높았다. 제일 먼저 README 파일을 읽으면서 저장소 소프트웨어에 관한 내용을 정독하였다. 또한 세트로 위키 페이지를 참고하여 현재 개발된 기능과 기초 사항들을 파악하였다.

Issue 항목을 찾아보면서 현재 논의되는 문제들을 보고서 Commit 내역과 Pull Request를 참고한 끝에 프로젝트 기능과 구조에 대해 이해할 수 있었다.

프로젝트 구조는 굉장히 직관적이고 단순한 구조를 띄고 있다고 하고 PR에서 누군가 코드에 관한 코드리뷰를 기입해서 이부분이 굉장히 큰 도움이 되었다. 너무 나무를 보려고 하고 숲을 보지 않은 것이 문제였다.

이로써 첫 PR을 내가 관심있는 저장소에서 Merge하였다.

ESP32 한글 폰트 Issue

실제로 한글 폰트를 사용해보려 했으나 한글폰트가 지원이 안되는 걸로 확인이 되어 UTF-8 키워드를 중심으로 문제를 찾고 있다. 폰트파일과 한글 글꼴에 특유의 초성, 중성, 종성을 만들어주는 함수를 프로젝트에 첨가하면 될 거 같다. 메인테이너가 글꼴 수정 방법을 공유해주고 수시로 연락체계를 유지해 한글화 패치를 완성하고자 한다. 가능하다면 다른 언어에 대한 패치도 도와주고자 한다.

워크플로우 생성

로컬에서 라이브러리의 빌드/컴파일을 확인할 수 있지만 원격에서도 확인하면 좋을 거 같아서 워크를로우를 구축하였다.

CI 구문을 이해하는데 어렵지 않았지만 원하는 동작을 실행시키기 위해 필요한 문법을 외부 커맨드와 규칙을 지키며 상호작용시키는데 어려웠다.

새로운 제품에 관하여

OledWatch를 개발할 때 가장 초점을 맞춘 것은 실생활에 기성품에게 지지 않을 기능을 추가하는 것이다. 끝에 생각한 것이 그 당시 손목시계에 진동모터를 넣어 시끄러운 알람으로 아침에 일어나는 것이 아니라 진동을 느껴 조용히 아침을 맞이할 수 있는 방법을 구상한 것이다. 이를 현재 활동하고 있는 오픈소스 커뮤니티 프로젝트에 적용시켜 추후 제품 하드웨어에 추가 설계에 건의하였다.

추후 하드웨어를 보강하여 새로운 제품을 런칭할 생각인데 현재 Issue로 재밌는 기능들을 계획하고 있어 여러 기능을 복합적으로 구현하여 기성품에 못지 않는 디바이스를 선보일 예정이다.

Sprint-Process

이전에 프로젝트는 아무리 아이디어를 내고 기능을 구현하더라도 같은 머릿속에서 나오기에 한계가 있고 스스로 어려운 길은 피하고 싶은 본능이 엿보인다. 커뮤니티에서 과제를 진행하면서 피하지 않고 공부할 수 있게 되었고 커뮤니티 발전을 위해 아낌없이 이슈를 열어 성장을 도모할 수 있었다.

안정화 버전 등록

여러 수정된 코드와 필요한 기능을 함축한 커밋 버전을 Release하여 등록하였다. 손목시계를 사용하다보면 불안정한 베타 버전이나 개발 버전 위에서 버그가 생길 때 제대로 기능을 수행하지 못하는 일이 종종 있었다. Release TAG를 활용해 오픈소스 코드로 안정화된 손목시계를 사용하고자 한다.

걸음 수 카운트 이슈( Why not working Step Counter ? )

걸음수 카운트가 오작동하는 이슈가 발견되어 이에 대한 원인을 추적하였다.

메인테이너에게 처음 언급 하였을 때 다른 개발자들 사이에서는 따로 문제가 포착되지 않았다.

결과적으로 숨겨진 에러를 찾았고 당장 눈 앞에 놓인 문제보다 실질적인 원인을 뿌리 뽑는데 집중한 것이 큰 도움이 되었다.

디버깅을 진행하고 원본 저장소에 내용을 현재 포크 저장소와 비교하여 어떤 부분이 다른지 세세하게 확인하고 있다.

자정을 지나고서 확인했을 때 문제가 없었지만 시계를 Always On 상태로 모니터링하면서 확인한 결과 발견하지 못한 문제를 찾았다.

자정 정각 돌입하기 전 걸음 수 모습이다. 금요일과 토요일에 걸음 수가 카운팅 되어 있는 것을 볼 수 있다.

Always On 상태로 모니터링했을 때 걸음 수 이동 모습이다.

요일을 가리키는 프레임 박스가 이동하면서 걸음 수 역시 같이 이동하는 것을 볼 수 있다. 또한 걸음 수 역시 초기화되지 않은 것을 확인할 수 있다. 초기 언급된 합산이 되지 않는 문제는 해결이 되었다.

Reset 버튼 입력 후 변화된 모습이다.

값이 원래 출력되야 하는 모습으로 디스플레이되었다.

트러블슈팅

입문자들이 많은 업로드 문제를 겪어 많이 나왔던 문제들을 모아 기술문서에 트러블슈팅 항목으로 만들어 올렸다.

This post is licensed under CC BY 4.0 by the author.
If you find any errors, please let me know by comment or email. Thank you.

© Ruffalo. Some rights reserved.

I'm

Using the Chirpy theme for Jekyll.