1. 제가 좋아하는 사람이 있습니다. 이 사람이 목소리 연기가 꽤 괜찮아서 어쩌다보니 목소리 데이터를 모을 수 있었습니다. 다만 쓸 만한 것이 다 합쳐서 2시간이 될까 말까 합니다.

 

2. 그리고 Tacotron이란 것이 있습니다. 딥러닝을 사용해서 일종의 TTS를 만드는 프로젝트인데 한국어 Tacotron이 오픈소스로 꽤 잘 나와 있습니다.

https://github.com/hccho2/Tacotron2-Wavenet-Korean-TTS

 

소스가 올라온지 2년 정도 되긴 했지만 제가 fork해서 일단 필요하면 계속 발전 시킬까 생각은 하고 있습니다. 기존 프로젝트에서 Requirement만 일단 모아놓고 추후에 가능하면 Tensorflow 2.x 로 가능할지 찾아보고 있습니다. 물론 제 성격상 언제 할 수 있을지 아무도 모릅니다.

 

3. KSS 데이터셋이라는 것이 있습니다. 한국어 음성 딥러닝을 공부하는 데에 있어서 정말 눈물나게 고마운 데이터입니다. 어떤 성우분인지 모르지만 12시간 분량의 문장을 녹음해 주었습니다.

https://www.kaggle.com/bryanpark/korean-single-speaker-speech-dataset

 

이걸 기반으로 음성인식도 하고 반대로 TTS도 만들고 하는데 쓰입니다. 연구소나 학교에서 정말 유용하게 쓰입니다. 대신

CC BY-NC-SA 4.0

이것 때문에 상업적인 이용은 불가능합니다.

 

그래서 위의 것을 다 합치면 무엇이냐...

 

Tacotron을 사용해서 제가 좋아하는 사람의 목소리를 TTS로 만들고 싶었습니다.

그래서 처음에는 제가 가지고 있던 2시간 분량의 좋아하는 사람의 목소리를 학습 시켜보았습니다.

결과는... 말을 하다 맙니다. 그래프를 보니 희미..합니다.

 

 

그래서 들어보니 한마디 나오려다가 옹알이를 합니다.

 

해결방법은 더 많은 학습데이터를 쏟아부으면 된답니다. 그런데 녹음을 부탁하기가 좀 껄끄럽습니다. 바쁠 수도 있고요.

그래서 다른 방법을 찾아보니 잘 만들어진 데이터셋과 함께 학습을 시키면 적은 데이터로도 괜찮은 품질이 나온다고 합니다.

 

그래서 Multi로 KSS데이터셋을 사용해 KSS와 그분의 목소리를 함께 학습을 시켰습니다.

 

결과는... KSS데이터셋으로 한 것만 멀정히 말합니다. 그런데 해당 학습 모델에서 KSS와 제가 모은 그분의 목소리가 섞이는 것이 보이더군요.

 

그분에게 제 TTS데이터를 보내봤습니다. 반응이 좋더군요. 자기 목소리랑 비슷하다고요.

근데...그거 KSS에 살짝 본인 목소리 데이터를 첨가한겁니다. (KSS12시간+그분2시간)

그래서 살짝 발상을 전환해서 제 데이터에 KSS데이터의 1시간분량을 첨가해봤습니다...

결과는... 꽤 만족스럽습니다. 전보다 발음도 괜찮고 일단 alignment는 잘 잡습니다. 대신 데이터셋을 새로 구성해서 처음부터 다시 학습 중입니다...

현재 데이터셋 설정
1. Multi-Speech
2. KSS Speech 12Hour
3. 그분+KSS 1hour

일단 현재는 만족

,

어마어마하게 작은 리눅스가 있습니다.

물론 작지만 그럭저럭 있을 것은 다 있습니다.

 

실제로 어마어마하게 작아서 GUI를 가진 이미지가 꼴랑 16MB입니다.

물론 16MB는 32비트용입니다. 64비트 버전도 있지만 이건 조금 용량이 큽니다.

http://tinycorelinux.net/

다만 역시 이것저것 없는 만큼 우분투 수준의 편리함은 없습니다.

그리고 패키지 매니저를 tce라는 별개의 것을 쓰다보니 호환성이 조금 떨어집니다.

 

하지만 이 정도면 똥컴의 희망이라 할 수 있습니다. 컴퓨터가 아직 죽지 않을 수 있는데 이것저것 안 돌아간다고 버릴 수는 없잖아요?

 

그래서 이 녀석을 써보기로 했습니다.

 

그리고 이렇게 작은 것은 그냥 쓰기 힘드니 약간의 커스터마이징으로 이것저것 추가한 다음 쓰는 것이 좋습니다.

https://github.com/elazarl/customize_tinycorelinux

 

elazarl/customize_tinycorelinux

Scripts to easily customize a tinycorelinux ISO. Contribute to elazarl/customize_tinycorelinux development by creating an account on GitHub.

github.com

여기 있는 스크립트를 이용하면 파일을 추가하고 이리저리 삽질하면 뭐라도 만들어 질 수 있겠지요.

대신 그만큼 고생은 하겠지만 이 정도면 상당히 훌륭합니다.

 

문제는 역시....이것만 가지고 뭘 하기가 어렵다는 것이겠네요.

 

우분투 환경에서 한번 Tiny Core Linux의 커스터마이징을 해봅시다.

 

우선 Tiny Core Linux의 iso파일을 다운로드 받습니다. 저는 Core버전 16MB짜리를 다운로드 받았습니다.

http://tinycorelinux.net/downloads.html

 

Downloads Tiny Core Linux

The Core Project, as suggested by our name, is not a turnkey desktop distribution. Instead we deliver just the core Linux from which it is quite easy to add what you want. We offer 3 different x86 "cores" to get you started: Core, TinyCore, and our install

tinycorelinux.net

그리고 다음 스크립트를 다운로드 받아서 압축을 풀어 놓습니다.

스크립트를 압축 푼곳에 다운로드 받은 ISO파일을 함께 위치 합니다.

 

그러면 이렇게 되겠지요.

 

그리고 터미널에서 이 위치에 들어 온다음 다음과 같이 명령을 칩니다.

tinycore-extract.sh TinyCore-current.iso

이러면...

 

이렇게 iso와 core라는 폴더가 만들어집니다.

이제 core쪽을 건드려서 이것저것 추가하고 다시 tinycore-repack.sh를 실행하면 커스터 마이징이 됩니다.

 

대신 Debian처럼 편리하게 패키지가 설치되는 것이 아니다보니 좀 어렵습니다.

 

그래서 Debian의 것을 TCZ화해서 가져오는 경우가 많더군요. 물론 이것도 녹록치는 않긴 합니다...

 

개인적으로 scrcpy를 실행시켜서 안드로이드 화면을 지속적으로 미러링 하는 것을 만들고 싶은데 이게 맘처럼 잘 안 되네요.

,

이 게임을 기억하시는 분이 있으려나 모르겠네요.

 

분명 이름은 쿠키샵인데 쿠키는 절대로 안 파는 경영게임 "쿠키샵"입니다. 그런데 이거 정말 오래된 게임인데 지금해도 꽤 난이도가 있습니다. RPG요소가 같이 섞여 있다보니 전투도 치뤄야하고 손님이 오면 후다다닥 처리도 해야하고 할일이 엄청 많습니다. 이걸로 마우스를 꽤나 망가뜨린 경우가 많다고 하네요.

 

PlaynLinux를 이용했고 Wine 5.7을 사용했습니다. 워낙 오래된 게임이라 딱히 설정은 필요없었습니다.

 

단 하나... 시디롬 인식이 잘 안 되서 gCDemu를 설치한 후에 gCdemu에서 iso 이미지를 마운트 했습니다.

이전에 프린세스 메이커3때도 그랬지만 이 당시에는 시디롬을 잘 활용했었습니다. 덕분에 시디가 없으면 안 돌아가는 경우가 많았습니다. 그런데 쿠키샵은 일단 시디롬이라고 인식되기만 하면 어찌되었든 돌아가서 복제방지가 허술한 축에 속합니다. 그리고 640x480으로 돌리니 상당히 눈이 아프네요. 이미 회사가 망해버려서 다시 리마스터링 한다거나 할 수도 없겠지요.

,

이전에 scrcpy를 써서 딜레이가 거의 없는 안드로이드 화면 미러링에 관하여 설명한 적이 있습니다.
https://moordev.tistory.com/323

그런데 PC야 원래 성능이 좋으니까 사실 wifi를 사용한 방법으로도 충분한 경우가 많습니다. 하지만 이보다 성능이 떨어지는 SBC(Single Board Computer)라면 어떨까요? 과연 이걸로도 scrcpy로 안드로이드 스마트폰 화면을 미러링 할 수있을까요?

그래서 한번 SBC의 가장 대표적인 보드인 라즈베리파이를 이용해봤습니다.

이번에 사용할 보드인 라즈베리파이3 B+ (쓴지 몇년 되었습니다.)와 저렴한 Waveshare사의 3.5inch LCD (A) 입니다.LCD는 그냥 라즈베리파이의 GPIO에 맞게 끼우면 바로 작동 됩니다.

물론 작동 된다는 것이지 바로 사용이 가능한 것은 아닙니다. 몇가지 설치절차가 필요합니다. 지금은 그냥 하얀 화면만 나올 뿐입니다.

우선 RaspberryPi OS가 설치된 SDCARD가 필요합니다. 이건 워낙 여기저기에서 방법을 잘 알려주고 있고 라즈베리파이를 본격적으로 쓰시는 분들이라면 이미 다들 알고 계시겠지요.

그리고 LCD에 바로 화면이 뜨지 않기 때문에 SSH를 활성화 하거나 HDMI 모니터와 USB키보드를 준비해야합니다. 저는 그냥 SSH를 활성화 한다음 유선랜을 공유기에 꽂아서 라즈베리파이에 접속했습니다.

SSH를 활성화 하는 방법은 간단합니다. RaspberryPi OS가 설치된 SDCARD를 PC에 꽂으면 boot라고 써있는 디스크가 보입니다. 여기에 SSH 라는 이름을 가진 파일을 하나 만들면 바로 SSH가 활성화 됩니다.

그 다음 SSH로 라즈베리파이에 접속합니다.

ssh pi@192.168.0.xx (192.168.0.xx는 라즈베리파이의 IP주소입니다. 공유기에 접속해서 확인 할 수있습니다.)
yes를 친다음 패스워드는 raspberry

기본 패스워드이니 sudo raspi-config 명령을 사용해서 이것저것 설정을 하고 이제 본격적으로 LCD에 화면을 띄워봅시다.

라즈베리파이를 설치하고 가장 먼저 해야할 것은 패키지 업데이트이고 그 다음이 바로 이 설정이다.

저는 waveshare사의 LCD를 사용했지만 Adafruit사의 것을 사용하시거나 기타 다른 업체를 이용하신다면 또 달라질 수 있습니다.

우선 해야할 것은 매뉴얼을 읽는 것입니다.
https://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)

3.5inch RPi LCD (A) - Waveshare Wiki

Introduction 3.5 inch Touch Screen TFT LCD Designed for Raspberry Pi Getting Started Hardware Connection There are 40 pins on Raspberry Pi but only 26 pins on the LCD, so you should pay attention to connecting the pins to your Pi accordingly. Install the t

www.waveshare.com

여기 보면 드라이버 설치방법이 써 있습니다. 드라이버를 이미 git을 통해 제공하고 있군요.
git clone https://github.com/waveshare/LCD-show.git

waveshare/LCD-show

Contribute to waveshare/LCD-show development by creating an account on GitHub.

github.com

cd LCD-show

이제 여기서 자신의 LCD에 맞는 것을 찾습니다. 저는 3.5인치 LCD A버전이므로 LCD-35입니다. 만약 LCD B버전이거나 다른 크기의 LCD라면 다른 것을 찾아야 합니다. 역시 매뉴얼을 보면 자세히 나와있으니 이를 이용하면 됩니다.

우선 실행옵션을 줘야하므로
sudo chmod +x LCD35-show
./LCD35-show

이러면 이제 필요한 소스를 다운받고 빌드를 해서 드라이버를 설치합니다. 그리고 자동으로 라즈베리파이가 부팅되는데 LCD에 X가 짠하고 뜹니다! 그리고 터치도 되므로 터치펜이나 손가락으로 꾹꾹 누르면 진행이 됩니다.

그냥 한번 화면을 90도로 돌려보았다. 그러니까 터치 좌표가 꼬인다...

이제 라즈베리파이 화면을 띄우는데에 성공했으니 한번 scrcpy를 빌드해봅시다.

우선 이 링크의 것을 참조했습니다. https://gist.github.com/RubenNL/e259f145371d2c16a3932fa39aa9a775

Install scrpy

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

그냥 scrcpy의 가이드대로 빌드하면 Android SDK가 필요한 경우가 있는데 Android SDK는 ARM위에서 돌아가지 않습니다. 따라서 미리 빌드된 것을 사용해야합니다.

우선 라즈베리파이에 접속을 한 후에

sudo apt install git wget meson libavformat-dev libsdl2-dev adb

위 명령으로 필요한 것을 설치합니다. 보통 libsdl2와 libavformat, adb만 설치하고 나머지는 이미 있을 가능성이 높습니다.

그리고 필요한 것을 다운로드 받습니다.
2020년 현재 최신 버전은 1.16버전이므로 이것을 사용합니다.

wget https://github.com/Genymobile/scrcpy/archive/v1.16.tar.gz
tar -zxvf v1.16.tar.gz
cd scrcpy-1.16
wget https://github.com/Genymobile/scrcpy/releases/download/v1.16/scrcpy-server-v1.16
meson x --buildtype release --strip -Db_lto=true -Dprebuilt_server=scrcpy-server-v1.16

이제 빌드를 위한 준비가 시작됩니다. 그리고 준비가 완료되면
ninja -Cx

이제 빌드가 될텐데 오류가 난다면 위의 사전설치 패키지를 확인해주시기 바랍니다.
빌드가 끝나면 인스톨

sudo ninja -Cx install

이제 안드로이드 스마트폰과 라즈베리파이를 USB로 연결하고 라즈베리파이에서 scrcpy 명령을 내리면 스마트폰 화면이 창으로 뜰겁니다. 대신 화면도 작고 창크기도 작은데다가 라즈베리파이의 성능 문제도 있다보니 매우매우 느립니다.

그리고 저는 라즈베리파이를 스마트폰 화면 미러링 전용으로 쓸 생각이라 이것을 scrcpy를 서비스로 등록해서 사용할 생각입니다. USB에 디버깅 옵션이 켜진 스마트폰이 연결되면 바로 화면을 띄우는 것이지요.

다시 라즈베리파이에서 터미널을 엽시다.
sudo nano /etc/systemd/system/scrcpy.service


이제 새로운 텍스트 에디터가 뜰텐데 다음과 같이 입력합니다.

더보기

[Unit]

Description=Start SCRCPY Android Screen

[Service]

Type=simple

User=pi

ExecStart=/usr/local/bin/scrcpy -b2M -m480 --max-fps 10 -f --rotation 1 -n

#Restart=always

Restart=on-failure

[Install]

WantedBy=graphical.target

#WantedBy=multi-user.target

위 명령 중에서 -b2M은 영상 비트레이트를 2M까지만 -m480은 최대 480p --max-fps는 10프레임 이하로 --rotation 1은 화면을 90도 돌리라는 의미입니다. 저는 주로 세로화면을 쓰기 때문에 이렇게 했습니다.

저장을 위해 Ctrl+O 그리고 엔터
이제 파일을 저장했으면

sudo systemctl daemon-reload
sudo systemctl enable scrcpy.service

위 명령어로 서비스에 등록합시다. 이제 USB로 스마트폰이 연결될때까지 라즈베리파이는 계속 연결을 시도할 것입니다.


그냥저냥 쓸 만한 속도가 나오네요. 제 보드는 라즈베리파이3니까 라즈베리파이4 이상이라면 fps를 높여서 더 빠르고 완벽한 속도를 보일 수 있을겁니다.

이제 필요하면 https://gitlab.com/larsfp/rpi-readonly

Projects · Ways / rpi-readonly

Make raspberry pi raspbian file system read-only

gitlab.com

여기의 것을 사용해서 SDCARD에 쓰기를 못하게 만들 수도 있습니다. 이러면 갑자기 Raspberrypi가 멈춰서 다시 시작해야 하는 일이 생기더라도 SDCARD를 보호 할 수 있습니다.

,

Python은 정말 프로그램 빠르게 만드는데는 최고라고 생각합니다.

물론 C로 만들면 실행속도도 빨라지고 최적화도 잘 되겠지만 신경쓸것도 많은데다가 개발속도가 그만큼 늦어집니다.

 

그래서 프로토타입은 Python으로 짜고 속도가 중요한 부분만 C로 짜는 경우도 많지요. (예 : Numpy)

 

그렇지만 Python은 Python인터프리터가 기본적으로 있어야 한다는 문제가 있습니다. 모든 PC에 Python이 깔려있다는 보장이 없기에 인터프리터를 따로 설치하거나 Virtualenv형태로 내장하거나 하는 방식으로 이용했습니다.

 

그런데 이러면 라이브러리들이 문제를 일으킵니다. 리눅스, macOS, Windows 각각 따로 라이브러리를 제공하는 경우(즉, C로 짜여져서 라이브러리 설치때 컴파일이 필요한 경우) 이 라이브러리들도 함께 배포해야합니다.

 

이러나 저러나 참 귀찮습니다.

 

그냥 한번에 딱 패키지화 해서 바로 쓸 수 있으면 좋을텐데요... 할때 나타난 녀석이 바로 Pyinstaller입니다.

https://pyinstaller.readthedocs.io/en/stable/

 

PyInstaller Manual — PyInstaller 3.6 documentation

© Copyright This document has been placed in the public domain. Revision 6d4cce1f.

pyinstaller.readthedocs.io

예전에는 Py2exe라는 녀석이 있었지만 이건 오로지 Windows전용으로만 만들 수 있는 물건이었고 당연히 저는 좋아하지 않았습니다. Pyinstaller는 일단 Python인터프리터가 깔리는 모든 OS를 지원하기 때문에 훨씬 더 각광을 받았고 지금은 많은 곳에서 쓰이고 있습니다.

 

설치도 pip의 존재로 인해 쉽습니다.

 

pip install pyinstaller

 

보통 Python환경을 만들어서 쓰시는 분들은 pip정도는 쓰고 있을테니 명령어 한번에 바로 사용이 가능하다는 점에서 점수를 주고 싶습니다.

 

사용방법도 쉽습니다. 

 

그냥 패키지화 할 py파일이 있는 곳에서

 

pyinstaller 어쩌고.py

 

이러면 dist폴더가 만들어지고 이 안에 필요한 라이브러리와 실행 파일이 만들어집니다. 다만 해당 명령이 실행된 OS에 따라 windows용이 만들어지고 Linux용이 만들어지고 그렇습니다. 즉, 리눅스용 패키지를 만들려면 리눅스에서 명령을 내려야 하고 Windows용을 만들려면 Windows에서 명령을 내려야 한다는 것이지요. 어쨌건 쉽습니다.

 

그런데...

 

오늘 Pyinstaller로 패키지화 하고나서 프로그램 실행이 안 되는 현상을 발견했습니다.

 

이상하더군요. 그냥 소스형태에서는 실행이 되는데 패키지화만 하면 실행이 안 되는 겁니다. 터미널에 떠있던 문구는 다음과 같았습니다.

 

ModuleNotFoundError: No module named 'pkg_resources.py2_warn'

 

py2_warn이란 패키지가 없다는 의미였습니다. 저는 이미 Python3를 쓰고 있었고 오로지 Python3만으로 작업 했는데 python2경고에 관한 내용이 있다는 것이 이상했습니다.

 

이 문제를 찾아보니 Pyinstaller 실행시 만들어지는 spec파일을 수정해서 다시 패키지화하면 된다고 하는데 다시 하려니 너무 귀찮았습니다.

 

더 찾아보니 Python3.7이 나온뒤에 함께 배포되는 최신 setup_tools와 Pyinstaller가 맞지 않아 생긴 문제라고 합니다.

 

https://stackoverflow.com/questions/61574984/no-module-named-pkg-resources-py2-warn-pyinstaller

 

no module named pkg_resources.py2_warn pyinstaller

I'm trying to make an executable file (.exe file for windows) for the code here. The main file to run is src/GUI.py. I found that pyinstaller is a better option to create the exe file. I tried bot...

stackoverflow.com

2020년 현재 setup_tools는 46버전입니다. 현재 이 버전은 github관련 코드를 가지고 있고 py2_warn 내용을 가지고 있습니다. 그냥 Python2는 지원기간이 끝났으니 사용을 권장하지 않는다는 내용인데 이게 도리어 문제를 일으키고 있는 것입니다.

 

그럼 방법은 아주 간단합니다. py2_warn이 없는 45버전 이하로 setup_tools를 깔고 Pyinstaller를 쓰는 겁니다. 어차피 다시 패키징할일은 거의 없을 것 같기에 잠시 버전을 내렸다가 다시 올리면 될 일이었습니다. 어차피 시간이 지나면 Pyinstaller에서도 해결해주겠지요.

 

터미널을 열고 (윈도우라면 cmd혹은 Powershell)

pip install --upgrade 'setuptools<45.0.0'

 

만약 리눅스라면 앞에 sudo를 붙여주세요.

 

이러면 44버전대의 마지막 버전을 설치해줄겁니다. 그리고 Pyinstaller를 실행하면 문제없이 패키지화된 실행파일이 실행 될 것입니다.

 

이런 문제가 해결될때까지 3.6버전에 눌러앉아 있는 것도 방법입니다.

,

보통 여러분들은 모바일 브라우저 무엇을 쓰시나요?

대부분은 Chrome을 쓰고 계실겁니다. 삼성인터넷이나 돌핀도 괜찮지만 아무래도 많은 사람들이 쓰는 브라우저가 편하죠.

 

 

그리고 요즘에는 모바일 디스플레이가 AMOLED를 주로 채용하고 있고 PC용 모니터도 OLED로 가는 추세입니다. 그런데 OLED의 단점이 바로 번인현상입니다. 소자의 수명문제로 특정 모양의 무늬가 잔상으로 남는 현상인데 OLED는 이런 문제가 심각한 편입니다. 요즘 스마트폰의 수명은 대략 3년이 한계고 그 전에 바꾸는게 대다수지만 저는 4~5년은 거뜬히 쓰기 때문에 조금은 아깝습니다.

 

그리고 PC용 모니터는 10년이고 20년이고 쓰는 경우가 많아서 더욱 수명이 중요하고요. LCD는 이런면에서 자유롭지만 색재현율의 한계가 OLED가 더 좋다보니 Windows에서도 다크모드가 생겼습니다.

 

안드로이드10을 쓰고 있다면 다크모드의 사용이 가능한데요. 모든 앱이 다크모드로 되는 것은 아니지만 기본적인 앱은 다크모드를 쓸 수 있습니다. 그건 Chrome도 마찬가지입니다.

 

하지만 웹페이지는 다크모드로 한다고 해도 원래색 그대로 나옵니다. CSS로 설정된 그 색을 쓰는 것이기에 웹개발자가 신경쓰지 않으면 그 색 그대로 쓸 수밖에 없습니다.

 

Chrome에서는 이에따라 강제 다크모드를 쓸 수 있는 옵션을 준비했습니다. 다만, 실험실기능이니 언제 없어질지 알 수없습니다.

 

방법은 다음과 같습니다.

크롬을 열고 주소창에 다음과 같이 적습니다.

Chrome://flags

 

 

이러면 실험실기능화면이 뜹니다. 그 다음 검색버튼을 누르고 Force Dark Mode를 검색하면

 

 

Force Dark mode for Web Content라고 뜹니다.

지금은 Disable로 되어있는데 이것을

 

 

Enabled with Selective Inversion of non-Image elements

 

이것을 선택합니다. 때에 따라서 이미지가 반전되기도 하기 때문에 그것을 막기위한 조치입니다.

 

그리고 크롬을 껐다 다시 켜면? (아래의 Relaunch를 눌러도 됩니다.)짜잔! 다크모드로 인터넷이 가능해졌습니다!

 

 

시꺼면 화면이 싫으시다고요? 대신 여러분의 스마트폰의 수명은 더욱 길어질거에요!

,

미스테리 퍼즐게임의 세번째 작품 The Room Three 입니다. 이전에 이미 The Room 과 The Room Two의 한글패치를 배포한 적이 있었는데 이번에 딱히 할 일이 없어서 The Room Three의 한글패치를 만들었습니다.

 

다운로드는 여기

https://drive.google.com/file/d/1QVN3JnR3_PWWjrLZAaTh6sC8cDQsRZBL/view?usp=sharing

 

TheRoomThree_Korean_0.2.7z

 

drive.google.com

설치 방법은 다음과 같습니다.

우선 스팀라이브러리에서 The Room Three에 오른쪽버튼을 눌러 속성에 들어갑니다.

그리고 로컬파일 탭에서 로컬콘텐츠 폴더 보기를 누릅니다.

그 다음 압축파일 내용물을 TheRoomThree_Data폴더에 덮어씌워주시면 됩니다.

언어는 그냥 영어 english로 하시면 됩니다.

 

모바일판의 번역을 이용했습니다.

,

digispark는 소형 아두이노가 있습니다. 아두이노를 사용하고 아두이노와 호환되지만 사실 아두이노와는 구조가 다르죠.

 

하지만 크기가 워낙 작아서 쓸모가 많고 전력소비가 적은 ATTY85를 사용해서 전력이 부족한 배터리 환경에서도 사용이 가능하다는 잇점이 있습니다.

 

문제는.. AdaFruit사의 정품은 가격이 좀 쎈편입니다. 2만원 남짓..?

 

대신 중국에서 이를 복제한(복제해도 아두이노 라이센스상 문제는 없습니다.)제품이 배송비 포함 1달러 조금 넘게 팔리고 있습니다. 문제는 이거... 호환성이 극악합니다.

 

알고봤더니 Digispark가 사용하는 부트로더의 버전이 낮은 것이 원인이었습니다.

 

1.6버전을 사용한다고 떠있는데 그마저도 중국에서 수정을 좀 한 것으로 보입니다.

 

Digispark의 부트로더는 Micronucleus라는 것으로 1.x버전으로 1.11까지 나왔고 2.x는 지금도 활발히 개발중입니다. 제가 사용한 보드는 1.6버전의 부트로더를 쓰고 있으므로 2.x를 쓰면 벽돌이 될 확률이 높습니다. 그러므로 1.11버전을 사용하는 것이 좋습니다.

 

Digispark의 버전을 확인 하는 방법은 아두이노IDE에서 Digispark관련 패키지를 설치한 후에 그곳에 있는 툴을 이용해서 확인 하면 됩니다.

 

우선 아두이노IDE를 설치하고(IDE의 설치 방법은 생략합니다. 워낙 쉽기때문에...) 파일-환경설정으로 들어갑니다.

 

그리고 추가적인 보드매니저URL에 다음과 같이 적습니다.

 

http://digistump.com/package_digistump_index.json

 

그 다음 확인을 누른 후

 

툴-보드-보드매니저

여기서 Digistump AVR Boards를 설치합니다

난 이미 설치가 되어 있어서 INSTALLED라고 떠있는 것 뿐이다

그러면 리눅스라면 ~/.arduino15/packages/digistump/tools/micronucleus/ 여기서 폴더 하나만 더 들어가면 micronucleus라는 프로그램이 있고 해당 프로그램을 터미널로 실행 하는 것만으로도 확인이 가능합니다

 

그런데 제가 구입한 보드는 어찌된 영문인지 리눅스용 프로그램에서는 인식이 되지 않고 윈도우에서만 인식이 되었습니다. 그래서 어쩔 수 없이 윈도우 가상머신을 설치 후에 https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip 

위 드라이버를 설치해서 윈도우에서 잡아주는 방법만이 가능했습니다. 대체 중국에서 무슨 짓을 했는지 궁금하군요.

 

어쨌건 드라이버를 설치하고 가상머신에서 USB연결을 이용해서 윈도우에 인식시키니 드디어 장치가 인식 됩니다.

대신 윈도우에서 부트로더를 업그레이드하면 이후에는 리눅스에서도 아무 문제없이 사용이 가능해집니다. 이 참에 윈도우 가상머신을 하나 구비해두시는 것을 추천합니다. 저는 네트워크를 끊어놓은 XP 가상머신 시스템을 하나 구비했습니다.

 

어쨌건 윈도우에서 드라이버가 설치되었다면 보드 인식이 되었을 겁니다. 그리고 드라이버 설치 폴더를 뒤져보면 Micronucleus.exe라는 프로그램이 있을 겁니다. 이것을 이용해서 부트로더를 업그레이드 하게 됩니다. 단, 명령어를 쓰기 때문에 기본 cd명령어 정도는 알고 계셔야 합니다.

 

1. 우선 Digispark장치를 뽑습니다.

 

2. 윈도우에서 CMD.exe를 열고 드라이버 설치 폴더로 들어갑니다. (cd 어쩌고)

 

3. 그리고 https://github.com/micronucleus/micronucleus/blob/v1.11/upgrade/releases/micronucleus-1.11-upgrade.hex 여기서 RAW버튼을 눌러서 hex파일을 다운로드 받아서 Microclues.exe파일이 있는 곳에 복사합니다.

 

Micronucleus.exe --run "micronuclues-1.11-upgrade.hex"

 

이렇게 명령어를 치면 장치를 연결해달라는 말이 뜹니다. 이 5초 안에 장치를 연결하고 USB장치를 잡아야 합니다. 하지만 5초란 시간은 생각보다 넉넉합니다.

 

그러면...

부트로더 업그레이드가 완료 됩니다.

 

이제 리눅스에서 시도해보면 문제없이 구동되는 것을 알 수 있습니다!

,

그동안 쓰던 넥서스7(2012)이 "또" 안 켜졌습니다.

사실 이전에 한번 배터리가 부풀어서(...) 교체를 받았는데 교체 받은지 6개월도 안 되서 또 안 켜지네요. 아무래도 오래된 거라 어쩔 수 없는듯 합니다.

 

그래서 일단 넥서스7의 뒷통수를 뜯은 다음 한번 전압을 재봤습니다.

 

참고로 넥서스7의 뒷통수를 뜯는 것은 그냥 대충 틈새에 신용카드같은것을 넣고 쭈욱 돌리면 따다다닥 하면서 뜯깁니다. 정말 고치기 쉽죠.

 

넥서스7 배터리의 빨간 선과 검은선을 전압계로 재니까... 0.7V??? 이건 그냥 안 나온다고 봐야지요.

쉽게 말해서 배터리 고장입니다. 리튬 배터리는 2V 이하로 떨어지면 다시는 충전이 되지 않습니다. 그냥 버려야 합니다.

 

그렇다고 잘 쓰던 넥서스7을 버리긴 아깝고 해서... 그냥 배터리 없이 그냥 작동 시켜보기로 했습니다.

 

https://forum.xda-developers.com/showthread.php?t=2311799

 

Nexus 7 Running without Battery

Can someone verify that the Nexus 7 can operates perfectly fine with the battery removed and only powered by the USB cable? I've read some threads eluding…

forum.xda-developers.com

여기를 보니까 그냥 대충 4.2V 이하로 만들어서 직접 전원을 넣으면 동작한다고 하더군요. 그래서 전압강하 모듈을 하나 사서 5V어댑터에 연결했습니다.

 

https://www.devicemart.co.kr/goods/view?no=1321132

 

MP1584EN 강하형 DC-DC 소형 가변 컨버터 [SZH-PWSD-002]

최대 3A 출력의 미니 사이즈(4mm * 17mm * 22mm) 강하형 전압 변환 모듈 / 4.5V ~ 28V의 전압을 입력하여 0.8V ~ 20V의 전압으로 출력 가능 / Step-Down / 벅(BUCK)

www.devicemart.co.kr

그리고 잘 적당히 절연처리를 잘 해주고 켜보니까...

 

 

배터리가 0%로 뜨기는 하지만 잘 켜지네요! 대신 시간은 초기화 되지만 어떻게든 돌아가 줍니다... 그런데 뭐만 하면 툭툭 꺼져버리는군요. 그래서 뭐가 문제인지 봤더니...

 

전압강하 모듈이 엄청 뜨겁습니다. 얘기를 들어보니 MP1584EN은 온도가 85도가 넘어가면 전류를 알아서 차단한다고 합니다. 그리고 전원을 완전히 차단하지 않는 이상 다시 전류가 통하지 않는다고 합니다.

 

자세히보니까... 어댑터는 5A이고 전압강하모듈은 최대 3A가 최대입니다. 아무리 그래도 3A 이상 흐르지 않는 이상 과열 될일은 없을 테지만 아무래도 넥서스7이 전기를 많이 먹어서 3A 이상을 먹나 봅니다. (오버클럭도 좀 했습니다. 기본 클럭은 답답해서...) 그래서 전압 강하 모듈을 새로 구매해서 5A 이상 지원 되는 걸 구매했습니다. 이거면...좀 낫겠죠? 아니면 방열판도 새로 사서 달아주면... 넥서스7보다 전원부가 더 커지는 불상사가...

 

추가...

 

여기가 뒷판의 와이파이안테나랑 연결되는 부분인데 박살이 났더군요. 어쩐지 통신 속도가 극악하더라니.... 그래서 이부분에도 안테나를 새로 사서(?) 달아줄까 고민중입니다. 이쯤되니 휴대용이 아니라 괴물이 되어 가는 듯한데...

 

이야기를 들어보니 4.2V로 낮추지 않고 그냥 5V로 넣어도 잘 돌아간다고 합니다. 아니 그냥 5V를 넣어야 안정적이라고 하네요. 대신 GPU풀로드 걸리면 발열량이 무시무시하므로 그건 신경쓰라고 합니다.

 

그래서...

 

그래서 그냥 5V를 쑤셔넣었는데 유튜브도 잘 나오고 3시간째 아무 문제 없이 굴러가고 있습니다

 

그래서...

아래에 플라스틱을 살짝 뜯어 낸다음 선을 뽑았습니다

 

그리고 5V를 어댑터로 직접 연결했더니 아주 잘 켜집니다.

 

그래서 그냥 이제는 화면을 끄지 않고 그냥 돌릴라고 합니다. 아무 문제 없을 것 같습니다.

,

구글의 Compute Engine은 AWS나 Azure와 같은 VPC 서비스입니다. 클라우드의 일부를 빌려주고 이를 이용한만큼 비용을 청구하는 방식입니다.


다만, 구글을 AWS와 달리 평가기간을 길게 주고 어떤 인스턴스를 쓰더라도 쓸 수 있는(대신 강력할 수록 그만큼 크레딧을 많이 쓰지만) 300$의 크레딧을 줍니다. 이것을 이용하면 CPU를 더럽게 많이 쓰는 Blender 렌더링을 무료로 원격렌더링 할 수 있습니다. (대신 SSH나 명령줄이 익숙하지 않으면 렌더링하기 힘들겁니다.)


사실 미리 비슷한 서비스 같은 것을 만들어두면 참 편리한데 사람이란게 참 귀찮아서 말이지요.


원격 렌더링에는 https://blendergrid.com/ 이러한 서비스가 이미 있지만 우린 직접 구축해서 해보는 것을 목표로 해보겠습니다. 이번에 하는 것을 잘 이용하면 Blendergrid 같은 서비스도 만들 수 있을 겁니다. 어차피 Blender도 요즘 웬만한 CGI같이 Python으로 굴러가니까요.


우선 구글 Compute Engine이 뭔지 알아야겠지요.https://cloud.google.com/compute/?hl=ko


이곳으로 접속해봅시다.

구글에 로그인이 되어있는 상태라면 무료로 사용해보기를 누를 수 있습니다. 여기서 사용을 활성화 하세요. 


그리고 결제니 뭐니 그런건 일단 신경 끄고(일단 지금 결제를 할 것은 아니니까 어디까지나 우린 평가중입니다.)

compute Engine의 설정으로 들어갑니다.


그리고 어느 서버에서 사용할 것인지 설정을 해두는 것입니다.




여기서 Region과 영역을 설정합니다. 저 같은 경우에는 asia-northeast1과 asia-northeast1-a 를 선택했습니다. 여기가 도쿄 서버라서 속도가 홍콩이나 다른 곳보다  낫습니다. 아쉽게도 서울은 없습니다.


그리고 VM인스턴스로 들어가서 인스턴스를 하나 생성합니다.


Blender는 닥치고 CPU코어가 많은 것이 짱이기 때문에 vCPU8개를 쑤셔 넣었습니다. 맞춤 설정에서 물론 GPU도 넣으면 상당히 좋지만 GPU까지 끌고 오면 평가판 크레딧이 남아나지를 않습니다. 하나만 넣었는데 배로 나가더군요. 만약 시간이 부족하신 분이라면 맞춤 설정에서 GPU를 넣거나 그냥 계정 활성화를 한번 더 넣어서 코어96개를 박아버리는 것도 방법입니다. 사실 코어96개가 성능이 더 나을거에요. CUDA설정은 조금 귀찮거든요.


그리고 저는 OS를 속편한 Ubuntu 18.04로 했습니다. 참고로 작업한 Blender버전과 렌더링할 Blender버전을 맞추는 것이 좋은데 일단 Blender버전만 같으면 어떤 OS에서 작업해도 상관은 없지만 아무래도 저는 Blender를 따로 wget으로 설치한다던지 하는게 너무 귀찮아서(저는 우분투18.04제공 Blender를 씁니다. 그냥 똑같이 맞춘겁니다.) 2019년 현재 안정버전은 2.79버전이고 제일 많이 쓰이는 것도 이 버전일테니 2.79버전을 저장소에서 제공하는 Ubuntu18.04를 선택한 겁니다. 다른 이유는 없습니다.


이제 서버 접속을 위한 Google Cloud SDK를 설치합니다. 자세한 것은 아래의 주소를 참고하세요. Windows 유저분은 그냥 설치 프로그램을 써서 설치하시면 됩니다.


https://cloud.google.com/sdk/docs/?hl=ko


여기서 Cloud SDK설치가 가능한데 우리의 데비안/우분투는 apt로 설치가 가능합니다.


우선 버전을 맞추기 위해 터미널에서 다음과 같이 명령을 내립니다.


export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"


리눅스 민트의 경우에는

$(lsb_release -c -s) 을 우분투에 맞춰서 바꿔주셔야 합니다.

19.x의 경우에는 bionic이라고 적어주세요. (우분투 18.04기반이므로 우분투 18.04의 것으로 적어두는 겁니다.)


export CLOUD_SDK_REPO="cloud-sdk-bionic"


그리고 저장소를 추가합니다.


echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list


그다음에 다음 명령으로 저장소 키를 추가합니다.

만약 curl이 없다면 curl을 미리 설치합니다. (그런데 보통은 미리 설치되어 있습니다.)

sudo apt install curl


curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -


이제 익숙한 명령어를 쓰면 됩니다.


sudo apt update

sudo apt install google-cloud-sdk


이제 gcloud 명령을 이용할 수 있습니다.

다음 명령으로 gcloud를 초기화 해봅시다.


gcloud init


이것저것 물어보고 구글 로그인도 하고 그럴텐데 그냥 열심히 진행합시다.

이것으로 인스턴스에 접속하면서 파일 전송을 SCP로 가능하게 됩니다.


다시 VM인스턴스로 돌아와서


인스턴스가 만들어졌다면 SSH라는 것이 있을텐데 이걸 쓰면 바로 브라우저에서 리눅스 서버에 접속이 가능합니다. gcloud의 기능을 쓸 수 없습니다. 간단한 것은 상관 없지만 파일전송이라던가 다른 귀찮은 것은 불가능합니다. 아니면 Private키를 받아와서 SSH클라이언트로 접속하는 것도 있는데 AWS 써보신 분은 아시겠지만 귀찮습니다.


그냥 gcloud로 하면 귀찮은거 없고 짱이에요.


gcloud명령보기를 누르면 gcloud로 터미널이나 CMD에서 긁어다가 쓸 수 있는 명령이 짠하고 나옵니다. 이것을 복사해다가 넣으면 인스턴스에 접속이 됩니다!!!


이제 서버에서 필요한 것을 설치하면 됩니다. 우린 Blender를 설치하려고 했으니 Blender를 설치하기로 합시다.


(서버에 접속한 상태에서)

sudo apt update

sudo apt install blender


먄약 Blender의 다른 버전을 원하시는 분들은 PPA를 등록하던지 직접 Blender홈페이지에서 wget으로 설치하던지 하는 방법으로 Blender를 설치하세요!


2019년 현재 우분투 18.04는 Blender 2.79버전을 제공하고 있습니다.


이제 렌더링을 할 Blend 파일을 서버로 전송하고 서버에서 렌더링을 돌려봅시다.

우선 작업한 Blender에서 설정을 조금 해야 합니다.


우선 Blend파일을 서버로 넣기 전에 필요한 설정을 미리 해둡시다. 렌더링결과를 어떻게 얻을 것 인지를 미리 설정하는 것입니다.


Blender 2.7x 기준 기본UI 상태에서 카메라탭을 누르면 렌더링 설정을 미리 할 수 있습니다.


일단 Output은 ./ 로 해두는 것이 정신 건강에 좋습니다. 자신 있으면 절대경로로 해두는 것도 좋습니다. 그런데 권한 문제로 복잡할 겁니다. 그냥 조용히 ./로 합시다.


그리고 결과물은 어떤 형태인지 몇 프레임에서 몇 프레임으로 할 것인지 후처리는 얼마나 할 것인지 등등을 미리 다 설정합니다. Blender의 좋은 점은 모든 것을 Blend파일안에 다 넣어 준다는 것입니다. 이러한 설정까지 말이지요.


그리고 텍스처와 기타 데이터를 모두 포함하기 위해서 한 가지 더 넣습니다.


File-External Data-Pack All Into .blend 를 눌러서 모든 데이터를 전부 Blend파일 안에 넣습니다.

이제 file-Save를 눌러서 해당 Blend파일을 저장합니다. 데이터에 따라 용량이 어마어마할 겁니다.


그리고 이것을 서버로 전송합니다.


아마도 여러분들이 만든 인스턴스는 instance-1 instance-2 이런 식으로 만들어져 있을 것입니다.

VM인스턴스 페이지에서 확인해보세요.


instance 이름을 확인하자

이 이름을 알아야 하는 이유가 이제 blend파일을 서버로 올려야 하기 때문입니다.


파일을 서버로 올리는 방법은 여러가지가 있지만 저는 gcloud명령을 통해서 scp로 보내는 방법을 쓸 겁니다.


다른 방법은 https://cloud.google.com/compute/docs/instances/transfer-files?hl=ko

이 페이지를 참조하세요.


여기서 이런식으로 파일을 인스턴스 서버의 홈폴더로 전송이 가능합니다. 홈폴더에 넣으면 SSH접속후에 바로 써먹을 수 있어서 편리하지요.

[INSTANCE_NAME]은 위에서 확인한 instance-1 같은 이름을 의미합니다.


gcloud compute scp [LOCAL_FILE_PATH] [INSTANCE_NAME]:~/


예를들어 ~/Dance.blend 파일을 instance-1 인스턴스 서버의 ~/에 올리고 싶다면


gcloud compute scp ~/Dance.blend instance-1:~/


이렇게 하면 전송이 됩니다. 이제 SSH 접속후에 ls명령으로 파일이 들어왔나 확인해봅시다.


gcloud명령으로 접속하면 쉽지요.


그리고 이제 SSH에서 Blender를 명령어로 렌더링 해봅시다.

https://docs.blender.org/manual/en/latest/render/workflows/command_line.html


여길 참고하면 됩니다.

명령어는 현재 blend파일이 있다는 가정하에


애니메이션의 경우

blender -b *.blend -a


특정 프레임의 경우

blender -b *.blend -f XX


이런식으로 하면 해당 폴더에 렌더링 결과물이 나오게 됩니다. 우린 CPU8개 짜리 인스턴스에서 돌리고 있지만 만약 CPU 96개의 인스턴스라면 엄청난 속도로 렌더링을 하고 있겠지요? 거기에 GPU까지 붙이면? 절대로 싼 비용으로는 못할 엄청난 렌더링 속도를 볼 수 있을 것입니다.


그리고 결과물은 다시 gcloud명령으로 받아올 수 있습니다.


gcloud compute scp instance-1:~/결과물 내컴퓨터경로


혹은 폴더로 받아오고 싶으시면


gcloud compute scp --recurse instance-1:~/결과물폴더 내컴퓨터경로


이렇게 하면 원격으로 구글 컴퓨트 엔진을 통해서 렌더링을 할 수 있게 됩니다.


뭔가 복잡한거 같은데 이것을 쉽게 만든다면 SaaS로서 충분히 훌륭한 서비스가 될 것이라고 생각합니다. 특히 Cycle렌더링할 때 CPU를 어마어마하게 사용하는데 원격에 렌더링 시켜놓고 우린 다른 작업을 할 수 있게 되는 것이지요.

,