글쓴이 보관물: 나루

나루에 대하여

클린 코드를 지향하는 개발자입니닷~*

Web Canvas에서 화면에 출력할 문자열의 길이 알아내기

Canvas의 Context에 measureText라는 메소드를 사용하면, TextMetrics라는 객체를 돌려받게 되고, width 속성을 통해서 화면에 그려질 텍스트의 크기를 알아낼 수 있다.

var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var text = ctx.measureText('12345');
console.log(text.width);

참고자료:
https://developer.mozilla.org/ko/docs/Web/API/Canvas_API/Tutorial/Drawing_text

크레온 플러스 API 연동관련 IsConnect 확인 후 강제종료

크레온 플러스 API 연동시 특정 시스템에서 발생하는 문제가 있다.

결론부터 이야기하자면, 윈도우즈 운영체제에서 인식하는 CPU 개수가 1개인 경우에 CpCybos의 IsConnect 값을 확인하는 경우에 실행중인 어플리케이션이 강제 종료되는 현상이 있다. CPU 개수가 2개 이상인 경우에는 문제없이 작동하는 것을 확인했다.

원인을 파악하는 상세한 과정은 아래에 적어두었다. 과정에 대해 궁금하지 않은 사람은 읽지 않아도 괜찮다.

테스트한 머신은
Vultr 가상 머신 1 CPU, 2G RAM
python 3.9.6
pywin32 302

필자가 작성한 파이썬 코드에서 IsConnect에서 문제가 생기는 것을 확인하고, 문제를 파악하기 위해서 다시 작성한 코드는 아래와 같다.

import win32com.client
import time

print("START")
cp_cybos = win32com.client.Dispatch('CpUtil.CpCybos')
print("LOADED")
a = time.time()
is_connected = cp_cybos.IsConnect
b = time.time()
d = b - a
print("%.8f" % d)

for i in range(10):
print(i)
time.sleep(1)

print("END")

화면 출력 결과는 오류 없이 아래와 같이 출력되고 끝난다.

START
LOADED
5.55898523
0
1

너무 당황스러웠다, For Loop을 돌다가 어플리케이션이 강제종료된다는 것은 상식적인 코드의 실행결과가 아니었다.

흥미로운 것은 IsConnect 값을 얻어오는 과정이 문제가 생기지 않는 머신에서는 1초 미만의 시간만 걸리는 한 편, 문제가 생기는 머신에서는 5초 이상의 시간이 걸린다는 것이었다.

집에 있는 PC에서도 동일한 python 버전과 동일한 버전의 pywin32 라이브러리를 사용했는데, 결과가 달랐다.

1차적으로는 OS 버전이 달랐기 때문에, 혹시나 하는 마음으로 집에 있는 운영체제와 같은 버전의 윈도우를 Vultr의 동일 사양의 인스턴스에 설치해보았다. 하지만 결과는 같았다. 동일한 문제가 생기고 있었다. OS 버전의 차이가 영향을 주는 게 아니라는 것을 확인했다.

크레온 플러스 API Q&A 게시판에서 관련 게시물들을 검색하다가, “Re : 비주얼 스튜디오 닫힘 현상”이라는 게시물을 확인했고, 디버깅 하는 경우에는 “메모리 보안 프로그램 사용”을 끄고 사용해야 한다는 것이다.

그래서 동일한 시스템에서 “메모리 보안 프로그램 사용”의 체크를 해제하고 크레온 플러스를 실행하니, 정상 작동이 되는 것이다. 그러면 보안 프로그램 끄고 쓰면 되겠네 싶겠지만, 집에 있는 피씨에서는 보안 프로그램을 끄지 않고도 잘 된다. 보안 프로그램을 쓸 수 있는 PC와 쓸 수 없는 PC에는 어떤 차이가 있어서 그런 것일까 의문이 들었다.

가상 머신이라서 안 되는 것일까 싶은 생각이 들어서, 현재 개발용 머신으로 사용하는 Ubuntu 20.04에 Gnome Boxes 위에 동일한 윈도우즈를 설치하고 테스트해봤다. 전혀 문제가 생기지 않았다.

그렇다면 Vultr 서비스에 어떤 문제가 있어서 그런 것 아닐까 싶었다. 그런데 지난 번에 사용했던 $20 짜리 인스턴스는 문제가 생기지 않았었는데, 왜일까 싶은 생각이 들었다. 현재 테스트한 Vultr의 인스턴스는 CPU 1개짜리, 잘 되던 인스턴스는 CPU 2개짜리 였다. 잽싸게 떠놓은 Snapshot으로 CPU 2개짜리 인스턴스를 띄우고 테스트 해 봤고, 잘 작동하는 것을 확인했다.

이게 정말 원인이라면 Gnome Boxes에서도 동일한 문제가 생겨야 한다는 생각으로 Gnome Boxes의 CPU 개수를 1개로 변경하고 다시 테스트 해봤는데, 동일한 문제가 생겼다.

결론을 다시 정리해 보았다.

첫째, AOS는 CPU 개수가 1개인 머신에서 크레온 플러스의 IsConnect 값을 얻어오는 과정에서 문제를 일으킨다.

둘째, 가상머신이나 클라우드 서비스와는 아무 상관이 없다.

해결책
IsConnect 값을 얻어온 이후에 얼마 안 있다가 어떠한 오류 메시지도 없이 작성한 어플리케이션이 종료된다면, CPU 개수를 운영체제가 몇 개로 인식하고 있는지 확인하고, 만약 1개라면 2개 이상인 머신에서 구동한다.

끝!

리눅스 운영체제에서 타임존 설정하기

클라우드 서비스를 이용하게 되면 기본적으로 시간은 UTC +00:00 기준으로 설정된다. 한국시간 기준으로 타임존을 설정하려면 timedatectl 명령어를 사용하면 된다.

우선 timedatectl만 입력하면 상태값들을 확인할 수 있다.

그리고, 아래와 같이 입력하면 Asia/Seoul 기준의 타임존 설정이 끝난다.

sudo timedatectl set-timezone Asia/Seoul

제로웨이스트챌린지 10일차

양말 바닥도 뭐 엄청 성하진 않지만, 그래도 조금이라도 더 신을 수 있으면 신어보자공! 엄마 아빠의 바느질을 어깨너머로 배운 서당개 40년 실력은 역시 그냥 서당개구나ㅋㅋ오늘은 10일차 챌린지!

제로웨이스트챌린지 9일차

화장실에서 대사를 치른 후에 휴지 조금만 사용하기!

사실 계속 줄여왔다. 6장을 사용하다가 너무 많이 쓰는 거 아닌가 싶은 생각에 5장, 그리고 4장까지 줄였는데, 3장도 해볼만 하겠다 싶어서 3장에 도전했다. 그리고 성공!!

반 접고, 1/3씩 접은 후, 1차.
다시 반 접고, 2차.
다시 반 접고, 3차!

오늘은 9일차 챌린지!

차별이 아닌 빛나는 별이 될 수 있도록!

‘차별이 아닌 빛나는 별이 될 수 있도록!’ 아동권리증진 캠페인 영상을 보고ㅡ 함께 참여해요!

아동권리캠페인 영상 -> https://youtu.be/jCnph5j9OXc

11월 19일 세계아동학대예방의 날을 기억하며,
대한민국에 거주하는 모든 아동이 기본권을 보장받는 사회가 될 수 있도록 아동권리증진 캠페인 영상을 만들었습니다.
모든 아동의 기본권이 보장될 수 있도록 우리모두 함께해요!

[함께 참여할 수 있는 방법]
방법1. 영상 좋아요 누르기!
방법2. 개인SNS에 아래 해시테그를 복사&붙여넣기 후 영상 공유하기!
방법3. 11월 19일 세계아동학대예방의날을 알리기!

#11월19일 #세계아동학대예방의날 #차별아닌빛나는별 #우리모두함께해요 #아동권리증진캠페인 #이주아동 #UN아동권리협약 #재단법인바보의나눔 #사단법인희망씨

기후위기와 모기

기후위기가 모기와 관련되어 있다는 내용의 영상이 있어서 소개하려 한다.

https://www.facebook.com/Hey.News.JTBC/videos/857593698280211

올 가을에 우리집은 하루에 30마리까지 모기를 잡은 적이 있다.

영상을 보고 든 생각

  • 모기는 사람을 가장 많이 죽이는 동물이다. 기후위기로 모기 개체수가 증가하면 모기 때문에 죽는 사람이 늘어날 것이고, 그게 내가 될 수도 내 후손이 될 수도 있다.

기후위기와 모기 관련 영상 요약

  1. 곤충은 체온이 없으므로, 기온의 영향에 따라 성장 속도에 차이가 난다. 기온이 따뜻할 수록 번식 속도는 빨라져서, 개체수가 증가하게 된다.
  2. 일본뇌염 주의보 발령 시기가 점점 빨라지고 있다. 과거에는 6월이었는데, 2020년에는 3월 26일이었다.
  3. 흰줄숲모기는 뎅기열, 지카바이러스 등의 매개체로서의 역할을 하는데, 겨울철 평균 기온이 10도가 되면 흰줄숲모기가 죽지 않고 해를 거듭해 살아서 바이러스를 전파할 수 있다. 2050년에 제주도 평균 기온은 영상 10도를 예상하고 있다.

내가 생각하는 결론

  • 기후위기에서 가장 심각한 문제인 온난화를 멈추기 위해 탄소배출을 줄여야 한다.
  • 탄소배출을 줄여야 하는 대상은 모든 사람과 모든 기업이다.
  • 지금 탄소배출을 0으로 만들어도 지구의 평균기온이 갑자기 떨어지지는 않을 것이다.

지금 지구 생태계는 스파게티코드 같은 상태다. 전 지구적으로 생태적 리팩터링이 필요한 시점이다.

참고)
스파게티코드: 프로그램 소스 코드가 마치 스파게티처럼 복잡하게 얽힌 모습에 비유한 것
리팩터링: 프로그램의 소스코드를 개선하는 작업