본문 바로가기

프로그래밍 기록/OSS | 컨트리뷰션

[Microsoft/Calculator] 마이크로소프트 계산기 컨트리뷰터가 되기까지의 기나긴 여정

2020년 7월 7일

교육을 위하여 서울에 올라온 당일 호텔침대에 누워서 서피스로 뭐하면서 시간 때우지~ 하면서 만지작 거리다가 우연찮게 계산기를 실행하게 되었다. 이왕 실행시킨 김에, 윈도우 2004 업데이트 이후 계산기에 그래프 모드가 추가되엇다는걸 어디서 들었었기 때문에 어떤가하고 확인해보면서 이것저것 만지다가..

위와 같이, 테마가 저장되지 않고 초기화되는 현상을 발견하였다.

MS 계산기가 오픈소스인것은 이미 알고있었기 때문에 다음날에

github.com/microsoft/calculator/issues/1303

 

Graph mode theme is changed after running programmer mode. · Issue #1303 · microsoft/calculator

Describe the bug Graph mode theme is changed to Dark form White after running programmer mode. Steps To Reproduce 0. Set Windows Theme to Dark mode Run Calculator Change mode to Graph Change theme ...

github.com

바로 이슈를 달았다.

 

2020년 7월 11일

며칠뒤 위와 같은 답변이 달려서, 이를 수정하고자 하고자 포크를 뜨고, Readme 에 그래프 모드에 관한 링크가 존재하여, 작업 전에 확인해보려고 했는데..

404 에러가 발생하였다..

대충 저 링크 관련 커밋들을 확인해보니, 어느 경로로 변경되야하는지 감이와서

github.com/microsoft/calculator/issues/1308

 

Link is broken in readme · Issue #1308 · microsoft/calculator

In my opinion, mock implementation link is broken. Since the mock project path has been moved, I think you need to change it from "/src/MockGraphingImpl" to "/src/GraphingImpl/Mocks&...

github.com

위와 같이 이슈를 등록하고

github.com/microsoft/calculator/pull/1309

 

Fix link of mock implementation of the engine by Lee-WonJun · Pull Request #1309 · microsoft/calculator

Link of "mock implementation of the engine" is changed to "/src/GraphingImpl/Mocks" from "/src/MockGraphingImpl" Fixes #1308 Description of the changes: Fix link in R...

github.com

PR을 날렸다.

링크 관련이라 그런지 바로 머지 되었다.

 

2020년 7월 12일

깨진 링크를 고친뒤 에러 현상을 확인하기 위하여 포크한 프로젝트를 빌드하고 실행 시켰다.

그래프모드로 들어가는 그 순간! Null Pointer Exception 에러를 뿜뿜하면서 프로그램이 죽어버렸다...

순간 혼란! 너무 기본적인 오류라 내 설정 문제일꺼라고 생각하고 디버깅하면서 계속 찾아봣는데..

아무리 봐도 그냥 오류다..

이것 역시

github.com/microsoft/calculator/issues/1310

 

A crash occurs when running graph mode. · Issue #1310 · microsoft/calculator

Describe the bug I am trying to fix #1308 now. But when I try to switch the mode to graph mode, I get a null pointer exception error. Steps To Reproduce Steps to reproduce the behavior: Clone this ...

github.com

이슈를 등록하고,

github.com/microsoft/calculator/pull/1316

 

Null Check in RenderMain::CanRenderPoint by Lee-WonJun · Pull Request #1316 · microsoft/calculator

Fixes #1310 Description of the changes: -Null Check in RenderMain::CanRenderPoint How changes were validated: manual Tested with #1312

github.com

PR을 날렸다.

머지되었다

 

2020년 7월 13일

두건의 PR 이 머지됫지만.. 결국 처음에 발견한 문제는 고치지 못했다.

교육에 가져간 서피스북은 윈도우 2004 업데이트가 안되서 그래프모드가 없고, 서피스는 개발환경이 안깔리고, 개발도 힘들어서

교육 끝난직후 방에 도작하자마자 해당 오류의 원인을 분석하였다.

처음에는 그냥 모드 저장이 안되니까 별거 아니라고 생각했는데...

약 이틀간 계속 찾아봤는데... 잘모르겠다.. 일단 C++ 에 MVVM 패턴이 적용된 괴랄한 CX / C++ (맞나이거?) 이라 코드가 내가 생각한대로 동작하지 않는다.

그래프모드 -> 프로그래머 모드 변경시에만 해당 현상이 발생하고, 디버깅시 프로그래머 모드의 CalcuatorProgrammerRadixOperators 파일에서 컨트롤 초기화 함수가 불릴때 갑자기 발생한다.

너무나도 뜬금없어서 파일 CalcuatorProgrammerRadixOperators.cpp 에서 생성된 g.hpp (CX/C++ 이 메크로등을 이용하여 다시 새로운 코드를 생성한다) 까지 확인해보고.. CalcuatorProgrammerRadixOperators 있는 ui xaml 에 정의된 애들을 하나씩 지우고 테스트 지우고 테스트를 반복한 끝에 대충 언제 발생하는지 알아냈다.

대충 체크박스가 초기화될때, 기존 그래프모드에 있는 체크박스도 같은 그룹으로 묶이고, 다른 체크박스가 선택되면서 체크박스 해제 콜백이 불리고.. 다시 테마가 초기화 되는 문제였다..

본질적인 라이브러리를 바꿀수는 없기때문에 필자는 체크박스의 초기화 타임을 미루는 방법을 선택하고

github.com/microsoft/calculator/pull/1312

 

Change the initialization time of Radio button's isChecked by Lee-WonJun · Pull Request #1312 · microsoft/calculator

Change the initialization time of Radio button's isChecked in CalculatorProgrammerRadixOperators Fixes #1303 Description of the changes: Remove checkDefaultBitShift Add a member variable for s...

github.com

PR을 날렸다.

 

2020년 7 월 22일

내 PR 에 답장이 없다..

그사이 마스터 브랜치가 변경되어 내 PR 이 충돌나서 충돌 나지 않게 고치고 겸사겸사 추가된 코드를 이용했다.

 

 

2020년 7월 31 일 ~ 2020년 8월 21일

답장 (코드리뷰) 이 달렸다. 괜찮은 방식이지만 ~~ 한 부분은 고쳐달라는 내용이었다.

고치고 Push 한뒤, 며칠뒤 다시 답장이 달렸다.

대충 이 PR 이 적용되면 이러이러한 문제가 발생하는데 확인해달라는 내용

근데 이거 아무리봐도 내코드랑 상관없는 다른 문제인거같은데.. 하면서 일단 고쳐보긴 고쳣다.

고쳣는디, 내 말대로 상관없는 문제라고해서 다시 revert .. 크흠...

근데 고치면서 진짜 내코드에 오류가 있어서.. 그것도 겸사겸사 고쳤다... revert 할건 revert 하고, 남길껀 남긴뒤 PR

 

코드리뷰

다시 답장이 왔다. 고친부분에 대한 리뷰로 왜 이런지 알려달라는 내용이어서 답변해주었다.

근데 그냥 이렇게 하면 오류가 있을 수 있어서 Check 해달라는 답장이 와서 해당 코드를 추가하는겸 겸사겸사 중복되는 코드라 함수로 추출하고 다시 Push!

 

머지 승인

8월 21일 마침내 머지되었다.

후후후

 

후기

무려 한달이 넘는기간동안 영어로 대화하면서.. 오류를 PR 했는데, 사실 한달이나 걸릴 필요는 없었는데.

1. 외국이라 시차때문에 하루에 한번 밖에 확인 안된다.

2. 그마저도 거의 일주일씩 텀이 있다. 코로나 때문인가..

위 이유로 한달넘게 걸렸다.

영어도 처음에는 잘썻나 확인하면서 보냈는데 시간이 갈수록 그냥 번역기 돌리고 대충 맞는거 같으면 고대로 복붙 크흠..

어찌됫든 무려 MS 의 20K 가 넘는 스타를 받은, 윈도우라면 무조건 들어가는 무려 "계산기" 라는 프로젝트에 내 코드가 들어간다는거에 자부심이 든다. (뭔가 라이브러리의 본질적은 문제를 해결한건 아니라 테세우스의 배마냥 내코드는 나중에 흔적도 없이 사라질지도 모르지만..)

외국인과 리뷰하면서 머지시켰다는 것도 기쁘고, 그 동안의 OSS는 Fix Typo 나 한줄 추가하는 정도였는데, 내가 발견한 오류의 이슈등록부터 PR 그리고 머지까지 한 싸이클을 완료했다는것이 뿌듯하다.

728x90