파이썬에서 구별이 잘 되는 색상들이 필요할 때 사용할 수 있다.

python -m pip install distinctipy
항상 일정한 순서대로 색상값들을 사용한다. 섞이게 하고 싶으면 random을 이용한다.
파이썬에서 구별이 잘 되는 색상들이 필요할 때 사용할 수 있다.

python -m pip install distinctipy
항상 일정한 순서대로 색상값들을 사용한다. 섞이게 하고 싶으면 random을 이용한다.
Strava는 별다른 조건 없이 API를 이용하여 자료를 처리할 수 있다.
access token을 이용해서 자료를 읽을 수 있다. 쓰기도 되는 모양이지만, 난 사용하지 않을 것 같다. access token은 발급 후 9시간 동안 유효하다. refresh token 을 이용해서 발급 신청을 할 수 있다.
홈페이지에서 확인할 수 있는 refresh token 이나 access token 을 이용할 수 있는 경우와 할 수 없는 경우가 있다. 환장할 노릇이지만 이건 외국 사용자들도 흔하게 겪는 문제인 것 같다. 이용할 수 없는 경우는 해당 token에 읽기 권한이 없기 때문이라고 한다. 이럴 경우 이용 목적을 명시한 code 를 발급 받고, 이를 이용해서 access token을 발급 받아서 이용하면 된다. 웃기는 것은 이렇게 하면 홈페이지의 access token 도 일시적으로 사용 가능하다.
이 쪽으로 공부를 하지 않은 나로선 이 과정이 이해가 어렵다. 여러 번 시도 끝에 알게 된 부분은 다음과 같다.
Web application 을 이용할 때에는 다음의 주소를 이용한다.
https://www.strava.com/oauth/authorize
스마트폰에서는 다음의 주소를 이용한다.
https://www.strava.com/oauth/mobile/authorize
난 redirect_uri 를 https://www.welovedoctor.com 으로 설정했다. 그렇다면 다음의 링크를 이용한다.
auth_url_mobile = f"https://www.strava.com/oauth/mobile/authorize?client_id={CLIENT_ID}&response_type=code&redirect_uri=https://www.welovedoctor.com&approval_prompt=auto&scope=read,activity:read"
이러면 redirect_uri 에 code가 포함된 주소를 받을 수 있다. nginx의 access.log 를 파싱해서 code를 추출했다.
이 code를 이용해서 token 을 받을 수 있다.
url = "https://www.strava.com/oauth/token"
payload = {
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'code': CODE,
'grant_type': 'authorization_code'
}
response = requests.post(url, data=payload)



과에서 사용하는 냉장고 온도를 실시간으로 감시하고 싶었다. 이유는 다음과 같다.
현장 실사에서 이런 시스템을 같추고 있는 기관들을 봤다. 상당히 멋져 보였다.
그런데 디지털 감시 시스템 기록은 유건평에서는 인정하지 않는다. 수작업으로 확인을 해야만 인정하고 있다. 그렇다면 인정하게 하려면 어떻게 해야할까? 그래서 직접 운영해 보기로 했다.
작업 비용을 최소화하고 싶었다. 그래서 선택한 것이 Pico 이다. 예전에는 Wi-Fi가 지원이 안되었다. 그런데 이 작업 시작하면서 다시 확인해보니 Wi-Fi가 지원되는 제품들이 있었다. 처음에는 이전에 구입한 모듈을 이용하기 위해서 ESP8266으로 데이터 통신을 했었다. 기본 코딩 방법을 익힌 다음 이 것들은 집 베란다에서 온도를 측정하는 목적으로 이용하고 있다.
DS18B20 모듈은 측정하고자 하는 온도 범위가 지원된다. 사진에 보이는 것처럼 길다른 측정선이 있는 제품도 있고, 간단한 모듈 형태로만 있는 제품도 있다. Pico를 냉장고에 넣을 수 없을 것이라고 생각했었다. 나중에 알고 봤더니 냉장고라면 사용 가능한 온도다. 그래도 위 제품을 이용한 것은 전원 콘센트부터 측정 부위까지 거리를 늘릴 수 있기 때문이다. 그리고 글리세린에 넣어야 할 수도 있는 것을 고려했다.
5mm 클램프를 구입하면 probe 쪽은 약하지만 고정할 수 있다. 검정 피복의 외경이 4mm 정도였다. 고무테이프를 이용해서 유격을 없앴다. 클램프가 있어야 온도 probe를 일정한 위치에 고정할 수 있다.
간헐적으로 연결이 끊어지는 경우가 있다. 하지만 내 목적에 영향을 미치지 않는다.
적어도 보름 정도 운영해 봤다. 안정성은 충분한 것으로 보인다. 다음 발표까지 보다 장기간 운영을 할 것이다.
집 서버는 대략 1일 1회 정도 재부팅한다. 처음에는 오전 9시 15분에 아내와 딸의 휴대전화가 연결되어 있지 않으면 재부팅 과정이 실행되도록 했다. 방학이 되니 적용할 수 없었다. 그래서 방학 때도 적용할 수 있는 코드를 새로 작성했다. 이 과정에서 재부팅 직전에 날짜와 시간을 db 파일에 저장해 둔다. 실행은 잘 되는데 로그를 보면 다음과 같이 cursor가 제대로 닫히지 않는다고 한다.
cur.close()
sqlite3.ProgrammingError: Cannot operate on a closed database.
여러 방법을 시도한 끝에 with를 이용해서 connection을 생성하는 방법을 적용했더니 더 이상 해당 메세지가 로그에 찍히지 않는다.
with sqlite3.connect(~~~, isolation_level=None) as con:
cur = con.cursor()
cur.execute(~~~)
cur.close()