# 구시대 유물 Bryton Rider 20을 위한 TCX 로그의 Timezone 변경 스크립트

    _

    필자는 사이클 컴퓨터로 ~~*(매우 구식인)*~~브라이튼 라이더 20을 6년째 사용 중이다. 오래된 사이클 컴퓨터다 보니 불편한 점이 한두가지가 아니다. 운동 시 전체 구간의 평속을 위해서는 머릿 속으로 암산을 해야 하며 한 화면에서 출력 되는 정보도 적다.

    _

    <center>

    ![...](http://corp.brytonsport.com/images/rider20.jpg)

    > 필자가 사용 중인 호랑이 담배피던 시절의 브라이튼 라이더 20


    </center>

    _

    <center>

    ![...](http://corp.brytonsport.com/images/rider20ui.gif)

    > 볼 수 있는 정보는 겨우 3개로 케이던스 / 속도 / 심박을 한번에 볼 수 있다는 것에 감사해야 할 정도다. 케이던스와 시간은 함께 못본다!


    </center>

    _


    **무엇보다 불편하고 화가나는 점은 브라이튼 라이더 사이트 내 분석 도구에서 조차 지원이 끊겼다는 사실이다.**

    _

    하지만 이렇게 불편한 사이클 컴퓨터를 왜 계속 사용하느냐?에 대한 답변은 아직 고장이 나지 않았고, 아직 잘 작동하기에 사용하고 있다.

    _

    필자가 대학원 시절 서울 - 울산 라이딩에서 충전 없이 20시간 이상 동작하는 모습을 보여주었고, 20시간 로깅 이후 장거리 라이딩 중 전원이 끊겼음에도 불구 하고 종료 직전까지의 로그는 살아 있었다~~*(요즘 최신 기기였다면 라이딩 중 충전 기능으로 꺼질일이 없었겠지...)*~~.

    _

    이런 신뢰도가 마음에 들었는지 딱히 이놈을 팔거나 서랍안에 쳐박고 싶지 않았다.

    _

    ## 그러나 대단한 신뢰도를 줬던 이 기계는 지원이종료 되어 더 이상 브라이튼 스포츠에서 사용 할 수 없다.

    _

    사이클 컴퓨터는 두 가지 측면에서 아주 유용하다.

    _

    **1. 라이딩 중 정보 제공 역할**

    **2. 로그를 통한 기록 및 운동 분석**

    _

    운동을 하는 사람에게 기록이란 대단한 존재다. 내가 얼마나 달렸는지, 얼마나 힘들게 운동했는지 객관적인 수치로 나타낼 수 있으며 이를 토대로 운동의 강도를 조정하거나, [Strava](https://www.strava.com/)와 같은 운동 SNS을 통하여 공유 하며 뽐낼 수도 있다.

    _

    이러한 기록 및 분석은 대부분 사이클 컴퓨터 제조사의 분석 사이트를 통하여 제공 된다. 최근 기기들은 블루투스나 와이파이를 사용하여 분석 사이트로 운동 로그를 자동으로 업로드 할 수 있는 아주 편리한 기능을 제공해준다. 하지만 필자와 같이 아주 옛날 기기를 가지고 있다면 제조사는 usb 연결 등을 통해 PC와 연결 후 자동으로 업로드 할 수 있는 툴들을 제공해 준다.

    _

    최근에는 제조사의 분석 사이트는 아니지만 [Strava](https://www.strava.com/)와 같이 운동 로그를 각 제조사 분석 사이트에서 수집하여 추가로 분석 해주거나, 사람들과 공유 할 수 있는 SNS 서비스들도 존재하고 아주 인기있다.

    _

    필자는 아주 먼 구시대 유물 기기를 사용하고 있으므로 usb 연결을 통해 [브라이튼 스포츠](http://www.brytonsport.com)에 업로드하는 방법으로 사용하였다.

    _

    **하지만 최근 브라이튼 스포츠는 문을 닫고 [새로운 브라이튼 사이트](https://active.brytonsport.com/home)를 오픈하였다.**

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/15/1.png)

    > 문을 닫아버린 브라이튼 스포츠... 문도 굉장히 허접한 사이트처럼 닫았다.


    </center>

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/15/2.png)

    > 새로 문을 연 브라이튼 스포츠.


    </center>

    _

    홈페이지를 리뉴얼 하는 것은 있을 수 있는 일이고 유저에게 좋은 일이다. 하지만 당연하게도 지원 될 줄 알았던 구 사이트의 업로드 방법이 지원되지 않는다는 소식은 오랜기간 브라이튼 라이더를 신뢰하며*~~(가민이 부럽긴 했음)~~* 사용했던 필자로써는 적잖히 충격이었다.

    _

    "브라이튼 사이트에서는 자동 업로드는 불가 하지만 파일 수동 업로드는 가능 해요"라고 쓰여져 있었지만 파일 수동 업로드 기능을 사용해 보니 "라이딩 시간" 과 "운동 전체 시간"의 구분도 해주지 않는, 도저히 쓸 수 없는 만들다 만 기능으로 보였다.

    ~~(사실 지원이 완전히 종료 된 것은 아니지만, 위와 같이 도저히 쓸 수 없는 처참한 기능으로 본 글의 소제목은 종료로 표현 했다.)~~

    _

    *~~(오늘도 서론이 무지하게 길어진다 이 서론을 어떻게 마무리 짓고 본론을 시작 하지....)~~*

    _

    브라이튼 스포츠 사이트는 빠이빠이 하기로 결심하고, 최근 운동 기록들은 [Strava](https://www.strava.com/)에 직접 업로드를 하고 있었다.

    ~~(적어도 브라이튼 스포츠에 비해서는 파일 업로드 기능을 훨신 아주 훨신 잘 제공해 준다.)~~


    _

    하지만 몇주간 [Strava](https://www.strava.com/)에 직접 업로드 하던 나는 내 운동 기록이 실시간으로 타임라인데 노출이 되지 않거나, 운동시간이 잘못 기록 되는 현상을 볼 수 있었다.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/15/3.png)

    > 아침 출근 라이딩이 오후 4시 반으로 기록 되는 기 현상... 나도 오후 4시에 라이딩 할 수 있는 직장인 이면 참 좋겠다. 꿈을 이뤄줘서 고마워요. 스트라바.


    </center>

    _

    몇 건의 업로드를 통하여 원인을 찾을 수 있었는데, 업로드 하는 TCX의 타임존이 문제가 되고 있었다. 브라이튼 라이더 20에서 뽑은 TCX 파일은 당연하게도 GPS 시계가 동기화 되므로, 현지 시간인 [UTC+9의 시간](https://ko.wikipedia.org/wiki/UTC%2B09:00)으로 기록이 되어 있었다.

    _

    반면 스트라바에 TCX 파일을 업로드하면 스트라바는 해당 시간이 [UTC 시간](https://ko.wikipedia.org/wiki/%ED%98%91%EC%A0%95_%EC%84%B8%EA%B3%84%EC%8B%9C) 인 것으로 간주 하여 라이딩 기록을 분석 하는 듯 했다!

    따라서 위 이미지와 같이 오전 7시에 했던 라이딩에 UTC기준으로는 9가 더해저 현지시간 16시, 즉 오후 4시에 한 라이딩으로 기록 되는 것이었다.

    _

    그럼 이제 진짜 브라이튼 라이더 20을 버려야 하는가?

    필자는 개발자다. 직업에 맞춰 개발자 스럽게 TCX 파일시간을 UTC로 수정하는 스크립트를 만들었다.

    _

    ## TCX 파일의 UTC+9 시간을 UTC로 수정해보자

    _

    필자가 많이 사용해보진 않았지만 공부할 겸 Python으로 TCX 파일 로그를 읽어와 시간을 보정하게끔 스크립트를 제작하였다.

    _

    소스 부터 보자.

    <pre class="brush: py">

      import os

      import fnmatch

      import datetime

      import re

      from datetime import timedelta


      files = [f for f in os.listdir('.') if os.path.isfile(f)]

      for filename in files:

      basefilename = os.path.splitext(filename)[0]

      if fnmatch.fnmatch(filename, "*[!_replaced_].tcx"):

      with open(filename, 'r') as f, open(basefilename + "_replaced_.tcx", 'w+') as f_new:

      content = f.readlines()


      for line in content:

      date_in_line1 = re.search(r'(\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ)', line)

      if date_in_line1:


      date1 = datetime.datetime.strptime(date_in_line1.group(), "%Y-%m-%dT%H:%M:%SZ")

      date1_utc = date1 + timedelta(hours=-9)


      date_in_line2 = re.search(r'(\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ)', line[date_in_line1.end():])


      if date_in_line2:

      date2 = datetime.datetime.strptime(date_in_line2.group(), "%Y-%m-%dT%H:%M:%SZ")

      date2_utc = date2 + timedelta(hours=-9)


      newline = line[:date_in_line1.start()] + date1_utc.strftime("%Y-%m-%dT%H:%M:%SZ") + line[date_in_line1.end():date_in_line1.end()+date_in_line2.start()] + date2_utc.strftime("%Y-%m-%dT%H:%M:%SZ") + line[date_in_line1.end()+date_in_line2.end():]

      else:

      newline = line[:date_in_line1.start()] + date1_utc.strftime("%Y-%m-%dT%H:%M:%SZ") + line[date_in_line1.end():]

      f_new.write(newline)

      else:

      f_new.write(line)


      print ("converting done, " + basefilename + "_replaced_.tcx")


      os.system("Pause")

    </pre>

    _

    생각 외로 소스는 길지 않게 완성이 되었다*(Python 좋구나)*. Python 초짜 답게 매우 엉성하고, 간결하지 못하게 짯지만 적어도 내 로그에 대해서는 잘 동작했다.

    소스에 대하여 간략하게만 설명 하자면, py 스크립트가 위치한 디렉토리에서 tcx 파일들을 읽어와 시간 값이 있다면 해당 시간 값을 수정하여 새로운 파일에 출력 한다. 물론 시간 값이 없다면 그대로 출력한다. Timezone을 구해서 더 근사하게 구현 할 수도 있었지만, 단순하게 -9 hours 하는 방법을 택했다.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/15/4.png)

    > 스크립트 실행 시 시간이 수정 된 파일은 \_replaced\_ 이름이 붙어 출력 된다.


    </center>

    _

    출력 된 tcx 파일을 원본과 비교해 보면 아래와 같이 잘 변환 된 것을 알 수 있다.

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/15/5.png)

    > Bryton Rider 20이 만들어 낸 TCX 로그에는 시간 값이 1개 인 행이 있다!


    </center>

    _

    <center>

    ![...](http://taesaza0.ignorelist.com/taesaza0/blog_images/15/6.png)

    > Bryton Rider 20이 만들어 낸 TCX 로그에는 시간 값이 2개 인 행도 있다!


    </center>

    _

    _

    사실 6년도 넘는 시간을 함께 달렸기에 이 녀석은 충분히 값어치를 했다. 하지만 무언가를 사면 잘 버리지 않고 고쳐쓰는 성격 상 좀더 아껴 사용해줘야겠다.

    _

    좀만 더 버텨다오. 한 2년만 더 달리자.

    _


    @마크다운



    Posted by 이거니거니료니