[목차]

1탄 - 아두이노 세팅 및 코딩

2탄 - 벽 스위치에 교체 설치

3탄 - HomeKit 연동


미루고 미루다가 더 늦기전에 써본다.


============================



자, 이제 홈킷서버를 구성하고, 전등스위치와 통신해야한다.

보통 라즈베리파이로 많이 하지만, 나의 경우엔 블투내장인 PI3 이상이 없기도 했고,

서버로 쓰고 있는 맥북이 있었으니 이걸 사용.


결과적으론

전등 스위치 <-- Bluetooth --> 맥북 <-- HomeKit --> iOS

이런 느낌이 된다.



1. 블루투스 통신 프로그램 제작


https://github.com/iolate/BLEHomeKit

Swift 를 써보고 싶어서 Swift 로 간단한 커맨드라인 툴을 작성하였다.

Swift 를 배우는 삼아 작성한거기도 하고, 대충 짰으며, 

SwiftSocket 이라는 오픈소스를 사용하였는데, 이 글을 올릴려고 보니 CocoaPods, git submodule 등의 설정이 전혀 안되어 있어서

그냥 주석으로 퉁쳤다. 알아서 참고만 하자.

사실 이름도 BLEHomeKit 이면 안될 것 같지만 이 역시 바꾸기 귀찮으니 패쓰.


실행이 되면 전등 스위치의 HM-10 과 연결하고, tcp 소켓을 열어서 대기한다.

daemonize 는 귀찮아서 그냥 screen 으로 실행해주는 방식을 취했다.



2. node, npm 설치 (Mac)


Homebrew 가 없다면 먼저 설치해주자.

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


그 후 node 와 npm 을 설치해준다. brew 의 npm 은 버전이 낮아서(?) 아래와 같이 따로 설치해줬던 것으로 기억.

$ brew install node --without-npm

$ curl -L https://www.npmjs.com/install.sh | sh


node 가 설치된 경로를 환경변수에 넣어준다.

나의 경우 경로는 /usr/local/Cellar/node/7.6.0/bin/ 였으며, ~/.bash_profile 에 넣어주었다.

$ vi ~/.bash_profile

export PATH="/usr/local/Cellar/node/7.6.0/bin:$PATH"


이후 source 를 하든 쉘을 다시 로그인하든 알아서 하자.



3. 의존성 및 HAP-NodeJS 설치


나의 경우 아래와 같이 진행했는데 원래 node 를 안써서 뭔가 이상한 부분이 있을 수 있음.

$ npm install -g node-gyp

$ npm install node-persist debug mdns fast-srp-hap ed25519 buffer-shims curve25519-n ip


HAP-NodeJS 패키지도 npm 에 있는 듯 하지만, 나는 설치가 안되었음.그래서 git 에서 받아서 진행했다.

아마 npm 에서 바로 받으면 위 의존성들도 설치를 해주겠지?

$ git clone https://github.com/KhaosT/HAP-NodeJS.git

$ cd HAP-NodeJS/

$ npm rebuild



4. 액세서리 파일 편집


예시 파일들을 보고 적당히 수정해주면 된다.

나는 아래 접어둔 것과 같이 구성하였다.


이것저것 테스트해보면서 대충 짠거라 코드가 좀 부끄러웠던 것 같지만,

다시 보기도, 수정하기도 귀찮으니 일단 패쓰. 잘 작동하면 됐지...


위 BLEHomeKit 으로 tcp 커넥션이 필요하며 이게 비동기로만 가능한 node 의 조건상, feedback 이 제대로 안 올 수도 있는데,

뭐... 대충 잘 작동한다. ㅋ...





5. HAP-NodeJS 실행


$ cd /path/to/HAP-NodeJS

$ node Core.js


이렇게 실행해주면 끝!

마찬가지로 daemonize 는 귀찮아서 screen 으로 실행해주면 된다.





6. HomeKit 에 등록 및 사용


등록하는 과정은 귀찮아서 생략. 걍 홈 앱을 열면 알아서 잘 해준다.
그러면 아래와 같이 컨트롤센터 가장 우측에서 제어를 하거나, 시리로 제어가 가능해진다.

    


스크린샷에 보이는 에어컨은 아두이노로 에어컨 제어하기 (IR, HomeKit) 1탄  이 글에서... 다루다 말았다. ㅋ



여튼 끝. 개선할 점이 군데군데 많지만 수개월째 매우 만족스럽게 잘 사용하고 있다.




기대 안하고 있다가 다른 사람이 컷이 4문제 정도일 것 같다는 말에 혹시? 했는데..

본선 진출..... ㅋㅋㅋㅋㅋㅋ


가볼까 말까........


(08.11 18:12 수정)


----------------------------------------------------------------------




예선 참가 도중의 스크린샷도 하나도 없고, 끝나고 완전히 다 닫혀버려서 소스코드도 하나도 없어서 그냥 지나가려고 했지만,,

그래도 재밌었던 경험이라? 조금 부끄럽기도 하지만 짤막하게 남겨본다.


알고리즘 같은걸 제대로 배워본 적도, 공부해본 적도 없어서 보통 이런 대회는 자신이 전혀 없고,,

괜히 쳤다가 참혹한 현실의 결과에 우울할 것 같아 응시를 잘 안하지만,

그래도 잉여로운 나날에 변화점이 될 수 있지 않을까 시도해봄.


예선은 원래 오후 1시 ~ 7시였지만, 당일날 멍때리고 있다가 오후 2시부터 시작하였다.


다행히 문제를 보고 싶다는 동아리 선배의 말에, 스크린샷/복붙을 해둔 친구가 있어서 글 쓰기는 조금 편한 듯.

기본 코드를 제외한 문제 원문이 그대로 있지만, 혹시 모르니 다 올리진 않고 적당히 내 기억에따라 작성...


언어는 C++, Java 2가지였고, 원래 Java 를 별로 안좋아할 뿐더러 C++11 이라 Java 보다 불편할 이유가 없었기에 모두 C++ 로 풀었다.

여튼 문제는 총 6문제!


1 -> 2 -> 4 -> 5 -> 3 순으로 풀었는데, (6은 못품)

1 -> 2 -> 4 까지 2시간 정도 걸렸고, 5번을 푸는데 1시간 정도 투자했던 것 같다.


3번도 1시간 정도 투자했던 것 같지만 결국 못풀었고...

6번은 제대로 시도조차 못해봤다.


결론적으로 1, 2, 4, 5번 이렇게 4개 문제를 풀었음.



Code Festival 문제

1. 카카오 프렌즈 컬러링북


2차원 벡터로 표현된 이미지에서 가로세로 같은색끼리 classification 해서 총 몇개 그룹으로 나뉘는? 뭐 그런 문제였다.

그냥 재귀함수 하나 짜서 돌렸다.


2. 보행자 천국


2차원 맵을 주고 좌측 상단에서 우측 상단까지 최단거리로 가는데, 지점마다 제한(방향전환 불가 / 진입불가)이 있고, 총 몇개의 루트가 있는지를 구하는 문제.

얘도 마찬가지로 재귀로 짰는데, 타임아웃이 났다.

벡터를 하나 더 만들어서, 한번 경우의 수가 구해진 경로는 저장을 했더니 통과.



3. 브라이언의 고민

♚프☆렌☆즈☆레☆이☆싱♚★사전예약★진행중
$지금$예약시♜이모티콘♜100%※증정※
★라이언★카트♨전원♨획@득@기@회
즉시이동 http://...

sentence 

answer 

 HaEaLaLaObWORLDb

 HELLO WORLD

 SpIpGpOpNpGJqOqA

 SIGONG JOA

 AxAxAxAoBoBoB

 invalid


스팸필터를 피하기 위한 규칙적인 광고글을, 원래 문구로 복구시켜보는 문제.


파이썬을 사용하지 않는 문자열 처리를 싫어해서 젤 뒤로 미뤘는데, 결국 마감시간에 쫓겨 제출하지 못했다.

나름 짠다고 짰는데, 경우의 수를 제대로 고려해주지 못했다.

급하게 작성을 하다가 결국 풀지 못한 문제...

중간에 안놀고 1시부터 제때 풀기 시작했으면 풀 수 있지 않았을까 싶어서 아쉬움이 많이 남는다.



4. 4단 고음


어.. 음...

시작음이 1이라고 할때, x3 +1 +1 순서로 높아지는 3단 고음을 구현하는 아이유가,

삼단고음을 중간중간 섞어서 당일 컨디션에 따라 원하는 고음 높이를 구현하기 위한 가지수를 구하는...(뭔소리야)


(생략)

3단 고음은 다음과 같이 적용된다. 1단계에서는 음높이가 세 배가 되며, 2단계와 3단계에서 음높이가 각각 1씩 증가한다. 이를 기록으로 남길 때 * 와 + 기호를 사용하기로 했다. 즉, 3단 고음을 한 번 한 경우는 문자열로 나타내면 다음과 같다.

*++

(생략)

3단 고음의 2단계를 마친 후 3단 고음을 새로 시작한 다음, 나머지 단계를 이어서 하는 경우는 *+*+++

(생략)


 *

 x3

+1 

x3 

+1 

+1 

+1 


최종 음높이: 15



위 문제들과 마찬가지로 그냥 재귀로 역으로 찾으면서 내려갔다.

당연히 그냥 전체 돌면 타임아웃이 나고 중간에서 적당히 빠져나와줘야 하는데...


역계산 하면서 나오는 + 갯수상, 반드시 나와야하는 * 갯수(예를 들어 +가 3개라면 남은 *은 2개, 즉 현재 계산 중인 높이가 3^2 = 9 이상)로 먼저 걸렀는데 또 타임아웃.

그래서 다음으로 최종 음높이를, 밑을 3으로 하는 로그(log(n) / log(3)) 를 취한 값을 구해서, * 이 나올 수 있는 최대 갯수를 구한 다음에 이걸 기준으로 한번 더 걸러주니 정답처리 되었다.



5. 캠핑


쐐기의 좌표를 주고, 외곽선을 제외한 내부에 다른 쐐기가 없는, 대각선으로 쐐기 두개를 고르는 문제였다. (설명을 못하겠네.. ㅈㅅ..)


얘는 그냥 루프로 돌렸지만,, 당연히 그냥 다 돌면 타임아웃...


주어진 쐐기에 대한 좌표들을 x에 대해서, 그 다음 y에 대해서 정렬을 했고, 루프 안에서 인덱스 몇개를 저장하는 방식으로 루프 횟수를 줄이니 8.5초(...)로 통과가 되었다.



6. 신비로운 유적 탐험


트리의 최대 공통부분의 크기를 구하는 문제. 위 예시의 경우 답은 7


바이너리 트리였다면 좀 시도를 해봤을텐데, 시간도 없었고 감이 잘 안와서 시도도 못해본 문제...

1학년때 특허의 claims 항목과 관련하여 비슷한 논문(?)을 봤었는데, 그냥 그 기억만 떠오르고 말았다.




------


5문제 쯤 풀면 괜찮게 풀었다고 말할 수 있지 않을까.. 했는데 4문제로 그쳐 아쉬웠다.
사실 푼 4문제도 잘 풀었다고 말할 수 없을 것 같기도 하고...ㅠㅠㅠ

코드를 백업하지 못해 아쉽다고 생각하기도 했지만, 지금 생각해보니 있어봤자 부끄럽기만 했을 것 같기도 하다.
잘 푼 사람이나 모범답안(?) 같은거 몇개 공개해주면 정말 고마울 것 같은데....ㅠㅠㅠㅠ

결과가 어떤식으로 나올지, 잘한 사람들 코드를 공개해줄지 기대하며, 끝!


배틀그라운드를 하고싶어만 하던 와중에, 곧 입대하는 선배가 본인의 그래픽카드를 조금 저렴하게 판다고 하셔서,

약간의 고민 끝에 바로 질러버렸다.


eGPU 에 대한 궁금증 + 관심이 예전부터 조금 있기도 했고...


비싼 듯 싼 듯....


Mac 및 Bootcamp 를 공식지원하지 않는다곤 하지만, 이런저런 편법을 사용하면 된다고 하여 구매하도록 하였다.

그래픽카드를 바로 되팔아도 몇만원 이득보게 구매하기도 하였고, eGPU Box 도 크게 감가가 없는 듯 하기도 하였고.



     


비교군은 갤럭시s6.. 생각보다 너무 큰 택배상자가 와서 놀랐다


설명서, 나사, 전원케이블, 30cm TB3 케이블이 함께 온다.

저 파란 타이? 는 뭔지 모르겠고...




이건 선배가 쓰다가 나에게 판 그래픽카드!

어릴땐 형이 알아서 컴을 맞췄고 고등학생때부턴 맥을 사용해왔으니,

내 소유의 그래픽카드는 처음이다. 여전히 잘 모르기도 하고..ㅋㅋㅋ

어련히 좋겠거니....


장패드도 같이 주셨는데 나에겐 부담스럽다..ㅠㅠ



    


그래픽카드에 비해 eGPU BOX 가 너무 커서 그래픽카드 2개 설치하는 용도인가 했는데,

안에 두꺼운 팬? 이 자리하고 있다.

mini 제품도 따로 있던데,, 뭐 들고 다니면서 쓸건 아니니 아쉽지만 큰 사이즈는 그러려니...




TB3 케이블이 너무 짧아서 후면을 앞으로 배치하였다.




전원을 종료한 상태에서 연결하고 켜야한다고 하던데, 나의 경우엔 Mac, Windows 둘다 켜진 후에 연결해도 별 문제는 없었다.

물론 연결해도 될 뿐 정상작동한다는 소리는 아님..

또한, AKiTiO Node 가 전원도 공급해준다.



Windows 는 그래픽드라이버 잡고 재부팅하니 별문제 없이 바로 사용가능.

다만 후에 부팅하려고 하니 처음 로고화면에서 멎어서 부팅이 안되는 경우가 발생했다.

부팅 상태에서 연결하면 장치관리자에 error 12, 리소스 부족으로 사용할 수 없다는 메시지가 나오는데,,

egpu.io 에 가보면 아예 상단 메뉴로 [GUIDE] Macbook Pro: solving eGPU error 12 in Windows 10 가 링크되어 있다.


난 저 가이드를 하기 싫어서 부팅 상태에서 연결 후 가만히 있으니 윈도우가 재부팅해야한다고 하고, 재부팅 후에 다시 잘 되더라.

한번 더 부팅하면 어떻게 될지 모르겠다.... 바로 배틀그라운드 결제 후 재밌게 하고 옴..ㅋㅋ


USB-C 허브가 하나 있는데, eGPU 연결된 상태에서 얘를 추가로 연결하면 컴퓨터가 바로 재부팅된다.

HDMI 때문에 그런 것 같기도 하고... 이건 좀 불편함..



Mac 은 모델에 따라 조금 다른 것 같다.


나는 USB-C 지원 맥북을

Macbook Pro Touchbar (15", 2016) 모델과, 

뉴맥북 레티나 (12", 2016 early) 모델을 가지고 있는데,


맥북프로의 경우에는

부팅 전후 연결에 별 문제가 없다. 시스템 리포트에 정상 연결됨을 확인할 수도 있고.



다만 외장 그래픽으로써 사용이 되진 않는 것 같은데,

automate-eGPU 라는 스크립트가 있다.

루트리스를 꺼야하는게 귀찮고 맥북프로에서는 외장그래픽이 딱히 필요가 없어서 시도해보지 않았다.

tensorflow 를 돌려보고 싶어서 구동해봤다.

외장모니터가 반드시 물려있어야 작동한다는 점을 제외하면 그럭저럭 잘 됨.



뉴맥북은 연결되면 좋을 것 같아서 rootless 를 끄고 시도해보기로 했다.

다만 뉴맥북은 연결하자마자 아래와 같은 메시지가 뜨고 연결이 되지 않는다.

스크립트 역시 장치가 검색되지 않아서 작동하지 않고... 대역폭이 부족해서 안되나부다..

알고보니 뉴맥북은 썬더볼트3 지원이 아니였다....ㅠ







외장그래픽 연결 후 해본건 오버워치 훈련장이랑 배틀그라운드..

배틀그라운드는 첫판을 자동 설정 그대로, 모두 울트라로 진행하였고, 별로 렉이 없었다.


그 후론

안티 앨리어싱: 울트라

포스트 프로세싱: 매우 낮음

그림자: 매우 낮음

텍스쳐: 울트라

효과: 매우 낮음

식생: 매우 낮음

거리 보기: 중간

으로 무리 없이 플레이 하였다.


총 5판 정도?에 듀오로 팀 2위 까지(1킬이지만...ㅋㅋ) 가보고 멀미할 것 같아서 그만함..ㅋㅋㅋㅋ





한동안 재밌게 하다가, 게임 외에 사용처를 못찾으면 팔아버려야겠다.


+ Recent posts