make: g++: Command not found

 

npm install을 할 때, 위와 같은 에러가 발생하곤 한다. g++ 인스톨이 필요하다.

해결방법은 yum -y install gcc-g++ 로 설치. root 권한이 필요할 수 있다.

블로그 이미지

김생선

세상의 모든것을 어장관리

얼마전 아내가 아기 젖병 및 장난감 소독 용도로 4만원 정도의 자외선 소독기를 구매했다. 25리터의 크기정도 되는 것이었다. 그 물건에 대한 디스가 될 것 같아 구체적인 언급은 하지 않을 예정이다만 가격에 비해 수납용도가 상당히 적어서 직접 만들어보려 했었다. 그래서 알아본 것은 UV LED를 80리터 정도 되는 리빙박스에 설치하는 것. 여기에 시간적 여건이 허락한다면 아두이노를 달아서 타이머 기능까지 구현하려 했었다. 그런데, 많은 문제점을 알게 되었다.

 

1. 분석

위에서 구매한 상품도 그렇고 자작하려던 UV LED도 그렇고. 일단 UV가 무엇인가에 대해서 공부를 하기 시작했었는데 내가 알 지 못했던 많은 부분이 눈에 띄게 되었다. 일단 UV는 크게 세 종류로 구분이 된다.

 

LG 공식 블로그 발췌 ; http://www.lgblog.co.kr/innovation/116197

위에서 보다시피 UV-A, B, C의 세 종류 파장이 존재하며 각각의 파장별로 사용 용도가 현격히 다른 점이었다. 그렇다면, UV-A 파장은 살균력이 전혀 없을까? 답은 그렇다, 였다. 약 2일간에 걸쳐 많은 자료를 찾아보았는데 310nm 파장 이상으로 올라가게 되면 살균력은 거의 미미한 편에 가까웠고, UV-A(405nm 파장)는 살균이라기보다는 박테리아에 존재하는 포피린 물질 분해를 통해 박테리아를 죽이는 작용을 하는, 일종의 간접살균 방식이었다. 반면 UV-C 파장은 세포의 DNA를 파괴해버리는 파장을 가지고 있다.

그래서일까. UV-A 파장의 소독기는 대부분 권장 소독시간이 시간 단위로 책정됨을 알 수 있었으며, UV-C 파장의 소독기는 대부분의 권장시간이 분 단위로 책정이 되어있었다.. 여기서 하나 더, UV는 플라스틱이나 유리, 금속 등 대부분의 물질을 통과하지 못한다는 점. 특수하게 제작된 소재들을 통과할 수 있는데 대표적으로 석영유리가 있다. 석영유리는 다른 유리들과 다르게 90% 이상의 투과율을 보인다는 점. 그렇다면 위의 제품은 더욱 신뢰도가 떨어지는 것 아닐까? UV-A LED를 사용하는데다가 그 LED 앞에 불투명 플라스틱이 있으니까. 여기서부터 저 제품의 신뢰도는 급감하게 되었다.

 

2. 설계

그렇다면 과연 어떻게 만들어야 할까. UV-C LED를 사용해서 만들어볼까? 하는 마음으로 UV-C LED를 구하려 봤지만 판매하는 업체 자체가 극히 적은데다가 칩 하나당 약 4500원의 고가였다. 반면 UV-A LED는 50cm 30구 LED바가 약 5천원, 아 이거 참 비교가 많이 되는구나.

헉 소리가 나오는 UV-C LED

여기저기 구글링을 해보아도 UV-C LED로 자외선 소독기를 만드는 사람들은 극히 드물었다. 아니, 없다고 봐도 무방했다. 그래서 생각을 좀 넓혀보기로 했다. 까짓거, UV Lamp는 어떨까. 그렇게 UV Lamp로 눈을 돌렸다.

 

UV Lamp는 생각보다도 자료가 풍부했는데 UV LED가 개발되기 전 까지 주력으로 사용하던 제품이기에 그런갑다, 싶었다. 램프에도 UV 파장이 제각기 나오긴 하는데 보다 확실하게 UV-C가 체크된 제품으로 골랐다. 여기에 UV Lamp가 사용될 소켓(등기구)까지. 그리고 형광등과 같은 구조로 되어있으니 안정기까지 구매했다. 아, 80리터 리빙박스를 구매하는 건 당연한 것.

 

UV Lamp는 다양한 길이별로 판매가 되고 있는데, 길이별로 사용이 가능한 등기구가 다르니 필요한 길이를 체크하는 것이 중요하다. 나의 경우에는 리빙박스 뚜껑에 부착할 용도(G8T5)로 길게 설계했다.

당연하게도 길이에 따라 소비전력은 달라지고, 등기구도 달라지기 마련이다.

T규격 등기구를 구매할 때의 주의사항은 별도 규격의 전원 케이블이 존재한다는 점이다. 나의 경우에는 스위치가 달린 전선을 같이 구매해서, 전선을 연결해주고 사용하는 중. 이렇게 되면 모든게 끝이다.

 

3. 구매 및 자작

모든 설계(랄 것도 없는)가 끝났으면 제품들을 구매한다. 내가 구매한 제품들은 다음과 같다.

산요 G8T5 UV-C 램프(2개, 개당 4,900원) - https://smartstore.naver.com/sanyo-uv/products/303112026

(안정기 내장 등기구 사용시 필요없음) 산요 자외선 안정기 2등용 (1개, 19,000원) - https://smartstore.naver.com/sanyo-uv/products/663493605

스위치 달린 전원 케이블 (1개, 2,500원) - https://smartstore.naver.com/ilwollighting/products/750912747

(테스트실패) 공대 T5 등기구 (2개, 개당 1,000원) - https://smartstore.naver.com/ilwollighting/products/4598189386

(테스트성공) 시그마 T5 등기구 (2개, 개당 3,500원) - http://item.gmarket.co.kr/detailview/item.asp?goodscode=189656563

에코 리빙박스 80리터 (1개, 18,900원) - https://smartstore.naver.com/n-plastic/products/310682570

구매총합 59,200원 - 테스트용 포함 모든 구매비용

실질총합 38,200원 - 제작하는데 필요한 부품 구매비용

(인건비 980,000원 별도)

 

모든 제품이 도착하자마자 바로 작업하기 시작했다.

산요, UV-C 램프

 

안정기와 스위치, 등기구와 램프를 체결한 후 테스트 샷
등기구와 안정기를 리빙박스에 체결
잘 나옴. 캬캬캬캬

여기까지 사진을 찍어두고나서 테스트로 5분정도 켜놨는데 갑자기 펔 소리가 나더니 탄내가 나기 시작했다. 사실 이 글을 쓰는 지금까지도 정확한 원인을 파악하지 못한 채이다.

하나의 등기구가 완전히 작살났는지 아예 불이 들어오질 않았던 점이 문제였다. 거기에 외부에 노출된 안정기가 좀 불안하기도 하고. 고장난 등기구를 분해해보니 안정기로 추측되는 전자부품들이 잔뜩 있었다. 그리고 일부 부품은 과다 전력 공급으로 부품이 타버렸는지 탄내가 진동했다. 아 이거, 혹시 안정기 내장형 등기구인가 -_-; 하는 마음이 들었다. 그런데 아무리봐도 등기구에는 관련 설명이 존재하지 않는데...? 멘붕이 오던 순간이었다.

 

그래서 안정기 내장형 T5 등기구로 다시 구매를 하고, 안정기를 없앤 채 동작하는 구조로 가져가게 되었다.

 

4. 후기

UV-C 파장은 상당히 위험하다. 200nm 이하 파장에서는 오존을 만들어내네, 피부암 발병원인이네, 직접 보면 눈 시력을 상실하네 어쩌네 하는데 그건 주의를 요하면 되는 부분이라 생각된다. 어차피 앵간한 플라스틱은 투과하지 못하는데다가, 8w 정도로는 1m 거리의 살균력밖에 없으니 크게 무서워 할 것도 없다. 안전하게 스위치를 내리기만 하면 즉시 살균효과가 사라지니까.

 

여기에 안정기의 체결방식에 대해서도 공부하게 되는 계기가 되었다. 뭐 부품좀 하나 날려먹고 합선도 되어보고 해야 하나씩 경험치가 쌓이는 듯. 되먹지못하게 설명서가 난잡해서 회로를 이상하게 체결하기도 했었고, 테스트 한다고 날선을 합선시켜서 차단기도 내려가보는 경험을 이번에 모두 하게 되었다. 어찌보면 안뒤진게 신기하다, 싶을지도.

 

만들어낸 물건에 대한 소독력은 사실 세균을 직접적으로 테스트 할 수는 없으니 확실하게 소독이 완료되었는지는 알아보기가 어렵다. 그래도, 학교나 식당에 있는 컵 소독기와 같은 냄새가 애기 장난감으로부터 솔솔 풍기는데다가 80리터 정도 되는 초대형이다보니 보다 안심하고 편하게 쓸 수 있겠다. 다만, UV 특성상 파장이 닿는 부위에 대해 살균이 되는 원리이므로 5분에 한 번씩 다른 면의 장난감을 노출시키는 방식으로 쓰고 있다. 이는 나중에 리빙박스의 각 면에 반사체를 설치하는 방향으로 고민중인데 아직 거기까진...

 

덕분에 UV 소독기의 원리 및 구조에 대해 알게 되었고, 세상에 물건으로 그럴싸하게 사기치는 사람이 참 많다는 것을 알게 되었다. UV-A는 몇시간? UV-C는 몇분이면 충분하다. 여기에 UV 소독기 관련 물건들의 정확한 스펙을 알아볼 수 있는 기회도 되어 좋았다.

'어장 하우스' 카테고리의 다른 글

[UV-C] 자외선 소독기 자작  (0) 2019.07.31
블로그 이미지

김생선

세상의 모든것을 어장관리

** 아래의 내용은 개인환경설정용으로 기록하며, [윤대근 저, 하이퍼레저 패브릭으로 배우는 블록체인] 서적에서 내용 및 순서를 가져옴을 밝힘.

** 다른 환경설정을 할 경우 책의 내용을 직접 타이핑해야 하는 번거로움과 오타를 수정해야 하는 불편함이 있기에 블로그에 기록하여 공유함.

** 가장먼저 우분투 가상머신 설정이 있는데, 이는 어디에서든 찾아볼 수 있으니 건너뛴다. 추후 직접포스팅 할 예정

 

*** 아래의 방법은 orderer/peer0/peer1 등을 각각의 VM으로 생성하는 방법으로, 컴퓨팅 자원이 상당해야 가능하다.

*** 이에 docker를 이용하여 패브릭을 구동하는 방법을 작성중이다.

 

1. GO Lang 설치

모든 내용은 특별 언급이 없는 경우 root 권한으로 진행한다.

 

# GO 다운로드 및 압축해제

 fabric@Root-Image:~$ sudo -i

 root@Root-Image:~# wget https://storage.googleapis.com/golang/go1.10.4.linux-amd64.tar.gz 

 root@Root-Image:~# tar -xvf go1.10.4.linux-amd64.tar.gz

 

# GOPATH / GOROOT 환경변수 설정

이는 하이퍼레저 패브릭 실행시 꼭 필요한 환경변수임.

 root@Root-Image:~# mkdir /root/gopath

 root@Root-Image:~# gedit /etc/profile

 

# 프로파일 수정(gedit /etc/profile 이후)

열리는 프로파일 최하단에 다음과 같이 입력

 export GOPATH=/root/gopath

 export GOROOT=/root/go

 export PATH=$PATH:$GOROOT/bin

이후 저장 및 종료,

 

# 환경변수 업데이트 및 확인

 root@Root-Image:~# source /etc/profile

설정 완료 후에는 GOPATH/GOROOT가 정상적으로 설정되었는지 확인한다. 정상적으로 디렉토리 이동이 된다면 올바르게 설정된 것.

 root@Root-Image:~#cd $GOPATH

 root@Root-Image:~#/gopath# cd $GOROOT

 root@Root-Image:~#/go#

 

2. pip, git, curl, GNU libtool, tree, openssh-server, net-tools 설치

하이퍼레저 패브릭 설치 및 실행을 위한 기타도구 설치

 root@Root-Image:~#apt-get install python-pip

 root@Root-Image:~#apt-get install git

 root@Root-Image:~#apt-get install curl

 root@Root-Image:~#apt-get install libltdl-dev

 root@Root-Image:~#apt-get install tree

 root@Root-Image:~#apt-get install openssh-server

 root@Root-Image:~#apt-get install net-tools

 

3. docker, docker-compose 설치

하이퍼레저 패브릭 공식문서에서는 도커 17.06.2 버전을 명시하고 있음.

# docker 다운로드 및 테스트

 root@Root-Image:~#wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.06.2~ce-0~ubuntu_amd64.deb 

 root@Root-Image:~#dpkg -i docker-ce_17.06.2~ce-0~ubuntu_amd64.deb

 root@Root-Image:~#docker run hello-world

 

# docker-compose 설치

 root@Root-Image:~#pip install docker-compose

 root@Root-Image:~#docker-compose --version

* docker-compose version 1.24.1, build 4667896 (이 부분은 설치된 시점의 버전에 따라 다를 수 있음)

 

4. 하이퍼레저 패브릭 설치

# 하이퍼레저 패브릭 git clone

 root@Root-Image:~#mkdir -p $GOPATH/src/github.com/hyperledger

 root@Root-Image:~#cd $GOPATH/src/github.com/hyperledger

 root@Root-Image:~/gopath/src/github.com/hyperledger#git clone -b release-1.3 https://github.com/hyperledger/fabric 

 

* 책에서는 하이퍼레저 패브릭 1.3 버전을 기본으로 설정했으며, 책과 동일한 결과값을 구하기 위해 하이퍼레저 패브릭의 git branch도 동일한 것으로 진행함.

# 하이퍼레저 패브릭 소스 컴파일

 root@Root-Image:~/gopath/src/github.com/hyperledger#cd fabric

 root@Root-Image:~/gopath/src/github.com/hyperledger/fabric#git reset --hard d942308df6302d3510e835bad62f861ad854b4b3

 root@Root-Image:~/gopath/src/github.com/hyperledger/fabric#make

* make 를 하는 과정에 있어 약 15~20분이 소요가 되며, 컴파일이 모두 끝난 후에는 unit-test_1 단계로 진입하게 된다.

* unit-test_1 에서 컴파일 오류가 발생하긴 하는데 재시도를 하면 정상적으로 진행되는 경우도 있다.

* unit-test_1 에서 테스트 단계를 진입하게 되는데, 이 때 ctrl+c를 눌러서 강제종료해도 무방하다.

 

# 하이퍼레저 패브릭 환경변수 설정

 root@Root-Image:~#gedit /etc/profile

* 파일 하단에 다음과 같이 입력 후, 저장 후 종료

 export FABRIC_HOME=/root/gopath/src/github.com/hyperledger/fabric

 export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/.build/bin

* 하이퍼레저 패브릭 환경변수 적용

 root@Root-Image:~# source /etc/profile

* 정상적으로 적용이 된 후에, 다음과 같이 입력하면 용도별 커맨드를 확인 가능함

 root@Root-Image:~#cryptogen

 

#e2e_cli 테스트 실행

* 실습에 들어가기에 앞서, 현재 설치된 하이퍼레저 패브릭 시스템이 정상동작 하는지 확인

 root@Root-Image:~# cd $FABRIC_HOME/examples/e2e_cli

 root@Root-Image:~/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli./network_setup.sh up

* 테스트가 정상동작 하지 않을 수 있다. 이는 peer 서버등에 대해 현재 설정되어있지 않기 때문으로 추측된다.

* 대체 이놈의 책은 이런거 검수 한 번 안하고 출판했는지 이해가 가지 않는다.

* 정상적으로 설치가 되었음을 확신한다면, 다음 단계로 이동하자.

 

# 테스트 디렉토리 생성 및 시스템 기본 설정 파일 경로 지정

 root@Root-Image:~#mkdir /root/testnet

 root@Root-Image:~#cd /root/testnet

 root@Root-Image:~#cp /root/gopath/src/github.com/hyperledger/fabric/sampleconfig/core.yaml /root/testnet/core.yaml

root@Root-Image:~#cp /root/gopath/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml /root/testnet/orderer.yaml

* 위의 파일들을 모두 옮겨준 후에 다음과 같이 profile을 수정해준다

 root@Root-Image:~#gedit /etc/profile

 export FABRIC_CFG_PATH=/root/testnet

 root@Root-Image:~#source /etc/profile

블로그 이미지

김생선

세상의 모든것을 어장관리

출력하다보면 겉면이 아주 지저분해지는 것을 볼 수 있다. 일반적으로 겉면이 곡선이라거나 피규어와 같은 형태를 띈 상태에서는 크게 볼 수 없는 현상인데, 사각형의 케이스 같은 경우에는 아주 두드러지게 확인이 가능하다. 아래와 같은 현상 말이다.

 

Cura 4.0 에서 확인한 모습
실 출력 모습

세로로 세워서 출력을 했고, 내부채움 100%에 노즐 굵기는 0.6mm. 이외에는 크게 설정을 건드리지 않았다.

기능상의 문제는 없었으나, 세로로 뽑기 때문에 서포트를 세울 일도 없었고 깔끔하게 나오지 않는 것이 상식적으로 있기 힘든 점. 그래서 좀 더 찾아보았다.

 

다행히도 자주다니는 카페에서는 해당 현상에 대해 북리지라는 사람이 설명을 아주 잘 해놓았다. (깔끔한 벽면글자 출력하기 - 유튜브로 보기)

요약하자면 아래와 같은 설정을 사용하면 된다.

 

 

1. 현상확인

큐라에서 해당 현상에 대해 보자면 다음과 같다.

기본 설정으로 볼 때의 레이어뷰

레이어뷰를 잘 안보는데, 레이어뷰의 활용법을 이번에 깨우치기도 했다. 레이어뷰로 볼 때에는 저런 모양과 같이 표면이 울퉁불퉁하게 표시가 된다. 그럼 무엇이 문제일까. 문제가 된다고 생각되는 부분에 대해 레이어의 높이를 살펴보자.

 

216번째 레이어를 보게 되면, 화면의 중앙과 같은 지점에서 겉면이 시작됨을 알 수 있다.

 

217번째 레이어를 보게 되면, 화면의 하단과 같은 지점에서 겉면이 시작됨을 알 수 있다.

이와 같이 겉면 레이어의 시작점이 일정하지 않기에 생기는 현상으로 유추할 수 있다. 그렇다면, 이에 대한 해결책은 어떠할까?

 

북리지님의 유튜브를 간단히 요약하자면 다음과 같다. 겉면 레이어의 시작점을 일치시킨다. 그럼, 어떻게 일치시킬까?

 

2. Cura 설정

Cura 설정을 살펴보도록 한다. 해당 설명은 Cura 4.0 기준으로 설명하였으나, Cura 3.* 버전에서도 동일하게 설정이 존재한다.

 

위에서 빨간색으로 표시한 네 개의 설정을 모두 활성화 시켜준다. 그럼 다음과 같이 패널에서 확인이 가능하다.

 

여기에서 Z 솔기 X, Z 솔기 Y의 경우에는 Z Seam Alignment 항목을 사용자지정으로 활성화 하는 경우에 표시된다.

해당 항목은 솔기, 즉 Seam의 위치를 사용자가 설정하는 항목으로 X축 40mm, Y축 705mm위치에 Seam을 모아주겠다는 의미가 된다. 이는 출력물의 크기에 따라 변경 가능한 부분이다.

 

솔기 코너 환경 설정의 경우에는 솔기노출, 솔기 숨기기 등이 있는데 내 모델링에서는 크게 퀄리티가 좋아지지 않았다.

 

 

3. 결과

그렇게 적용한 결과, 다음과 같이 품질이 아주 좋아지게 되었다.

 

보다시피 아주 깔끔한 결과를 얻게 되었다. 모서리의 비어버린 부분과 함께 겉표면의 품질까지도 확연하게 좋아진 결과.

 

'어장 제품리뷰 > 어장 3D 프린터' 카테고리의 다른 글

[Ender-3] 재봉선 설정  (0) 2019.04.26
[Ender-3] 세 달 사용기  (0) 2019.04.07
[엔더3] 2주 사용기  (0) 2019.01.07
블로그 이미지

김생선

세상의 모든것을 어장관리

엔더3를 12월 말 무렵에 구매해서 지금까지 대충 120일 넘게 사용했다. 첫 한달은 진짜 24시간 내내 돌아가다시피 했고, 지금은 필요한 생활용품이나 덕질용품을 출력하는 용도로 사용하기에 1일에 4~5시간 정도 출력하는 수준에 그친다. 사용하면서 있었던 많은 일들과 나름의 노하우를 작성해보고자 한다.

 

1. PLA 필라멘트

필라멘트는 대충 세 회사의 필라멘트를 사용했었다. 가장 많이 쓰는 건 가성비가 좋은 손도리의 PLA+필라멘트이며, 손도리에서 검정색 필라멘트가 품절이기에 타 제조사의 필라멘트를 사용한적이 있었으며, 광빨이 죽여주는 실크 필라멘트를 알리익스프레스에서 구매했었다. NOULEI 라는 회사의 필라멘트는 가격이 상당히 사악한데 비해, 출력물의 품질이 아주 만족스러웠다. 그건 뭐 추후 사진으로.

 

ABS필라멘트는 후가공이 편하다고들 하는데 출력시 유해물질이 나온다는 말을 듣고 아기를 키우는 입장에서 절대 사용할 수 없는 물건이었다. 다른 사람들의 의견을 보아하니, 출력시에 나오는 유해물질로 머리가 아프다는둥 하는 말이 어마어마하다. 허나 PLA같은 경우에는 살짝 단내 비스무리한 냄새가 나는 정도. 분진이 발생한다고 하며, 실제로 챔버에 넣어두고 출력하니 분진이 쌓여가는게 보이긴 하는데 크게 염려될 수준까지는 아닌 것 같다. 그냥 집안의 생활먼지가 쌓이는 수준에 그치는 듯.

 

손도리의 필라멘트는 노즐온두 190~200도 정도에 베드온도 50~60도 정도로 설정하고 사용한다. 리트렉션이니 출력속도니 하는건 기본값만 줘도 출력이 꽤 잘 되는 편. 카페에 들어가보면 와블이네 뭐네 하면서 사람들이 온갖 신경질을 다 내는 현상을 볼 수 있는데 난 그런게 없어서 참 신기하다. 내가 조립을 잘 한건지 뭔지.

간혹 일부 구간에 대해 압출량이 살짝 부족한 경향을 보여주는데 이걸 어떻게 잡아야 할 지에 대해서는 감이 잘 안온다. 뭐 그래도 크게 문제있을 정도는 아니라서 다행.

 

쉽*이 라는 업체의 필라멘트를 두 롤(롤당 1kg)을 구매했었는데 검정색 한 롤을 사용하는 와중에 노즐막힘 문제가 발생했다. 내가 설정을 잘못해준건지 저 업체의 필라멘트가 문제인지는 불명. 덕분에 노즐 교체라는 귀중한 경험을 하게 되었으며, 필라멘트 교환 방법을 바꾸게 된 계기가 되었다.

 

NOULEI의 필라멘트는 진짜 배송비만 무료라면 잔뜩 사다가 사용하고 싶을 정도. 500g 세 롤을 구매했었는데, 각 롤당 9.9달러에 배송비가 약 5달러 정도 부과된다. 1kg롤의 경우에는 배송비 합산 약 26달러 정도 부과된다. 손도리의 금색 PLA를 사용했는데 누리끼리한 똥색이 나와버리고, 은색 PLA는 회색과 크게 다를바 없는 출력물에 실망을 느꼈었는데 NOULEI 필라멘트를 쓰고 암이 나았습니다... 정도. 매끄러운 출력표면을 위해 다림질 옵션을 주고 출력하는데, 이건 다림질 옵션을 주면 오히려 광빨이 죽어버리는 기현상이 발생한다. NOULEI의 다른 필라멘트도 사용해보고 싶을 정도.

 

 

2. 설정

큐라 3.X버전을 쓰다가 얼마전에 4.0 버전으로 업그레이드를 했었다. 크게 변한 건 없어보였는데 모델링 선택/설정등이 조금 손이 많이 가게 변해서 실망함. 기본적인 설정은 크게 건드리지 않는 편이나, 몇가지 설정은 나만의 설정으로 변경해서 사용하는 중. 그래봤자 나만의 설정이라는게 찾아보면 교과서적인 설정이나 다름이 없더라.

 

출력속도 - 60m/s

다림질 - 상황에 따라 다름

쿨링 - 95% (100%를 주면 시끄러움)

서포트 - 지그재그

리트렉션 - 사용함, 가속도나 기타 설정은 안건드림

콤바인모드 - 모두 설정으로 사용. 이 설정을 사용하지 않으면 출력시간이 꽤 많이 늘어난다. 사용하나 안하나 품질에 크게 차이가 없다고 느끼는 중

첫레이어 압출량 - 80%. 100%를 주면 코끼리발 현상이라고 첫 레이어가 조금 넓게 퍼지는 경향이 있는데 z축을 조정하라느니 말이 많아서 귀찮아서 그냥 압출량으로 퉁치는 중

 

 

3. 쿨링 및 챔버

울티메이트 쿨러가 가장 멋지고 부피가 작아서 이걸 출력해서 사용중. 정면에서 볼 때 오른쪽 부분이 살짝 녹아내리는 느낌이 있긴 한데 거슬릴 정도가 아니다. 처음에는 쿨러가 흘러내리는 현상이 있었는데, 새로 출력하면서 볼트를 꽉 조여줬더니 지금은 그런게 없다. 자작 애드온으로 LED바를 설치할 수 있게 모델링해서 LED바를 달고 출력한다.

5015 블로워팬을 두개로 달고 있어서 쿨링 100% 설정을 주면 챔버를 뚫고 나오는 소음을 경험하게 되는데, 95% 정도로 주면 크게 거슬릴 정도는 아니라서 다행이다.

 

챔버는 이케아 테이블 두개를 개조해서 사용하는 중이다. 두개까지 살 필요는 없었던 것 같은데 뭐 가격이 일단 저렴하니까. 각 면에 아크릴로 막아두고 정면과 왼쪽은 경첩을 달아서 문으로 만들었다. 남들은 정면에만 문을 다는데 이러면 필라멘트 삽입이라거나 프린터 손볼때 아주 힘들어진다.

PLA라서 챔버는 크게 필요가 없었으나, 난 소음을 막을 목적으로 만들었다. 가격은 프린터만큼 들다시피 했는데 뭐 크게 불만은 없음. 그리고 프린터의 하단에 설치하는 댐퍼는 무조건 필요하다. 댐퍼가 거시기하면 엔더3 살 때 같이 끼워준 압축스펀지 같은 포장재를 깔아놔도 된다. 프린터가 흔들리면서 내는 소음을 아주많이 잡아준다.

 

챔버를 만들고 출력하면 스마트폰 데시벨측정기 기준으로 약 30~40 데시벨 정도가 잡힌다. 이정도면 괄목할만한 수준.

 

 

4. 부가정보

노즐과 테프론 튜브, M3/M4 볼트와 너트들은 상시구비를 해두는게 좋다. 노즐은 자기가 자주쓰는 노즐 기반. 언제 어떻게 노즐이 막힐 지 모르니까 여분으로 두어개 구비해두면 안심이 된다. 나는 다행히도 사은품으로 껴준 노즐이 있었던 편. 노즐이 막히게 되면 달구고 바늘로 찌르라는둥, 토치로 태워서 필라를 없애라는 둥 말이 많은데 거 400~600원 정도밖에 안하는데 그냥 교체하는게 속편하다. 노즐 교체에 대해서는 추후 자세히 작성할 예정인데, 일단 한계치까지 노즐을 달구고 돌려야 노즐이 분해된다. 안그러면 노즐 속 필라멘트가 굳어있어서 분해가 안된다. 또한, 새 노즐목에 테프론 튜브를 한계치까지 넣어야 한다. 이게 눈으로 보이는게 아니라서 사실, 감으로 하는 수 밖에 없는듯. 노즐목에서 테프론튜브를 분해하는것도 빡센데, 테프론튜브를 노즐목에 삽입하는것도 좀 빡센 작업이긴 하다. 유튜브에서 분해영상 좀 보면 감이 올듯.

 

M3/M4 볼트너트는 엔더3 개조할 때 요긴하게 사용되는 부품들이다. 출력물들을 고정할 때에도 많이 사용되기도 하고.

 

최소한 쿨링개조와 익스트루더 핸들만큼은 개조해주는게 정신건강에 이롭다.

 

필라멘트 교체는 노즐온도를 200도 이상(PLA기준)으로 올리고 익스트루더 핸들을 연 상태에서 필라멘트를 잡아뽑으면 된다. 이 방법 전에는 지가 알아서 삽입되길 기다리며 필라멘트를 잘라내고 익스트루더에 새 필라를 끼웠었는데, 끼우는 것도 일이고 이러다가 엿차 하면 ㅈ되는거다. 그냥 편하게 하자 편하게. 중간에 프린터 pause걸면 되니까.

 

출력물이 아무리 단단하다고는 해도, 출력물의 결 방향은 아주 약하다.

 

이전 글에서부터 누차 강조하는 부분이긴 한데, 자신이 기계치다? 그럼 3D프린터는 안사는게 좋다.

이전 글에서부터 누차 강조하는 부분이긴 한데, 자신이 컴맹이다? 그럼 3D프린터는 안사는게 좋다.

 

 

'어장 제품리뷰 > 어장 3D 프린터' 카테고리의 다른 글

[Ender-3] 재봉선 설정  (0) 2019.04.26
[Ender-3] 세 달 사용기  (0) 2019.04.07
[엔더3] 2주 사용기  (0) 2019.01.07
블로그 이미지

김생선

세상의 모든것을 어장관리

개발하다보면, 특정 컬럼의 네이밍을 조회하는 경우가 있다. 가령 A 라는 컬럼을 어떤 테이블에서 더 쓰는지. 뭐 이런 경우. Oracle은 all_tab_column인지 all_object를 쓰면 되긴 하는데 mysql은 처음이다. 하지만 간단하다.


1
SELECT * FROM information_schema.columns
cs



이렇게 해주면 된다. 개꿀.

블로그 이미지

김생선

세상의 모든것을 어장관리

Tag mysql

스마트폰이 대중화된지 대충 10여년이 다 되어간다. 그사이에 우리는 수많은 스마트폰을 기기변경해왔고, 집안에는 어느정도 쓸만한. 하지만 실 사용하기에는 살짝 아쉬운 스펙의 스마트폰들이 넘쳐난다. 이번 글에서는 안드로이드 스마트폰 기반으로 IP WebCAM, 그러니까 인터넷에 연결된 CCTV를 설정하는 방법을 알아보도록 한다.


해당 글에서는 안드로이드 스마트폰을 기반으로 소개를 하고 있지만, 어플리케이션을 소개하는 것이 아니라 이 화면을 집 밖에서도 확인할 수 있도록 설정하는 방법을 작성할 예정이니 iOS 또는 그 외 다른 디바이스들도 응용할 수 있다.



1. 어플리케이션 설치 및 설정


요사이는 IP WebCAM 어플리케이션이 참 잘 나온다. 허나 내가 주로 사용하는 어플리케이션은 다음과 같다. 광고가 있긴 하지만 배너광고에 불과하며, 설정도 다양한데다가 스마트폰 카메라 센서들도 활용할 수 있다. 살짝 구식의 UI가 단점일 수 있겠지만 뭐 이건 크게 중요한 부분이 아니다.


https://play.google.com/store/apps/details?id=com.pas.webcam


IP WebCAM 이라는 어플리케이션이다. 이 어플리케이션 하나로 CCTV기능과 웹에서 확인할 수 있는 웹서버 기능까지 모두 다 포함되어있다.


설정은 다양한데, 무엇보다 필수로 해줘야하는 설정은 로그인 설정이다. 항목에서 로그인 설정을 하지 않은 경우에는 외부에서 주소만 알면 누구나 접속이 가능하다. 개인정보가 요사이 이슈가 되는 세상에서, 필수로 해주어야 하는 설정이라고 여겨진다.

"연결설정 - 로컬 브로드캐스팅" 메뉴로 접근하면 위와 같은 화면을 볼 수 있다. 로그인 아이디, 패스워드를 입력하자.



두번째로 HTTP 포트 설정이다. 포트설정은 우리 WIFI에 어떠한 포트로 접속할지에 대한 설정인데, 이걸 해줘야 앞으로 설정하는 부분에서 적용하기가 쉽다. 개인적으로 알아보기 쉬운 포트인 9000번을 입력했다.



여기까지 하면 어플리케이션에 대한 설정은 일단락된다. 가장 하단의 서버 시작을 클릭하게 되면, 아주 손쉽게 송출되는 화면을 볼 수 있다. 확인해야 할 점은 화면의 중앙부, 첨부된 사진에서 왼쪽 중간부분을 보면 흰 글씨로 접속중인 WIFI의 주소가 보인다. 192.168.55.203:9000 이 현재 스마트폰이 접속한 주소이다.



2. PC 및 스마트폰에서 화면 보기


아래의 주소는 현재 운영중인 3D Printer의 출력상태를 보여주는 주소로, 위의 예제와는 조금 다를 수 있다.



여기까지만 설정을 할 경우에는 동일한 WIFI에 접속중인 다른 디바이스에서 화면을 볼 수 있다. 가령, 같은 와이파이에 연결된 PC라거나 스마트폰이라거나. 인터넷 창에서 저 주소를 입력하면 설정할 수 있는 화면이 팝업된다. 물론, 로그인 설정을 한 경우에는 로그인을 해야 한다.




처음으로 볼 부분은 다음과 같다. 영상재생기에서는 브라우저를 선택하고, 오디오재생기는 소리를 듣고 싶은 경우에만 선택하면 된다. 소리는 4초정도의 딜레이를 가지고 있는데 뭐 설명하긴 복잡하고, 크게 의미가 없는 부분이라서 난 쓰지 않는다.

녹화제어 기능은 버튼을 클릭하면 현재 화면을 스마트폰에 저장하고, 인터넷 웹사이트에서 해당 영상을 돌려볼 수 있다. 블랙박스와 같은 기능이라고 볼 수 있다.

나머지 기능은 딱 보면 알 것이니 뭐 패스.




여기서도 설명할 부분은 크게 많지 않다.

확대는 스마트폰이 지원하는 4배줌까지 확대가 된다. 디지털 줌이기 때문에 확대를 할 경우에는 화질저하가 이루어질 수 있다.

스트리밍 품질은 해당 화면의 품질을 말해준다. 100%를 하게 되면 현재 스마트폰이 지원하는 최대화질로 영상을 뿌려주지만, 그만큼 기기가 고성능이어야 하며 무엇보다 인터넷 속도에도 크게 영향을 끼친다. 대충 낮에는 2~30%로 줄여도 크게 불만없는 화질을 보여준다.


기타 항목에서는 오토포커스 유지와 오버레이를 선택해주는 편이다. 오버레이는 현재 영상에 날짜정보와 배터리정보를 표시해준다. 오토포커스는 영상의 포커싱을 맞춰주는 역할을 하는데, 이게 오토포커스 유지가 안된다. 그래서 영상을 볼 때 마다 계속 클릭해주는 편.

전면카메라는 뭐 앞면 카메라를 보여줄지, 뒷면 카메라를 보여줄지 선택하는거고, 움직임 감지/좀더 민감하게 이거는 화면의 영역별로 동작을 감지 한 후 처리하는 과정을 나타내는데 크게 활용도는 없어보인다.


그밖에 나머지 항목은 의미가 없다.



3. 외부에서 볼 수 있도록 Wifi 공유기 설정하기(포트포워딩)


위의 1,2번 항목은 사실 크게 어려운 부분은 아니다. 대부분의 어플리케이션이 지원해주는 기능이기도 하고. 하지만 외부에서 보는 기능, 여기서부터는 조금 어려울 수 있다. 집안의 와이파이에 접속된 주소(정확히는 포트)를 외부에서 볼 수 있게 지원해주는 기술을 "포트포워딩" 이라고 한다.

간단히 기술에 대한 설명을 하자면, 집집마다 공인IP가 할당되고 이 공인IP가 와이파이 공유기(AP)가 가상IP(192.168.***.***)로 변환해서 사용할 수 있게 만들어주는 것이고, 이 가상 IP에 접속된 포트들을 공인IP:포트 형식으로 외부에서 접근이 가능하도록 연결시켜주는 기술이라고 볼 수 있다.

이 설정방법을 알아두면 192.168.***.*** 대역에 붙는 모든 포트들을 외부에서 접근할 수 있도록 만들 수 있다.


아래의 설명은 머큐리 AP를 기준으로 설명하되, IPTime과 같은 공유기도 동일한 기능이 존재하니까 메뉴 좀 뒤져보면 바로 알아차릴 수 있을것이다.

먼저 현재 접속중인 집안의 WIFI 주소를 알아보도록 하자. 윈도우키+C를 누른 후, 해당 창에서 cmd를 입력하여 커맨드 창을 뛰우자. 그리고 ipconfig 명령어를 입력하면, 첨부된 이미지와 같은 결과를 볼 수 있다.



현재 내 컴퓨터의 경우에는 192.168.55.204 주소로 접속을 한 상태이다. 대부분의 공유기는 192.168.***.1과 같은 형식으로 주소를 가져간다. 그러니까, 인터넷창에서 192.168.55.1을 입력하면 공유기 설정화면으로 들어갈 수 있다는 뜻이다.



굳ㅋ 계정과 암호의 경우에는 공유기에 스티커가 붙어져있을것이니까 그걸 보고 접속하자. 나한테 물어봐도 난 모른다.



접속에 성공하게 되면 다음과 같은 화면을 볼 수 있다. WAN 정보의 IP가 해당 공유기에 할당된 공인IP를 의미한다.

왼쪽 메뉴의 NAT-포트포워딩 항목을 클릭하자. 다시 말하지만, 아이피타임과 같은 공유기는 이름이 조금 다를 수 있다.



현재 해당 공유기에 설정된 포트포워딩 목록이다.

로컬 IP 주소가 현재 공유기에 접속한 디바이스의 주소를 의미하며, 설정된 로컬포트를 설정한 포트범위로 뿌려주는 의미를 나타낸다. 무슨말인지 모르겠으면, 그냥 따라하자.


로컬 IP주소는 아까 스마트폰의 CCTV에서 보여진 "왼편의 중앙에 위치한 IP주소"를 적는다. 나의 경우에는 IP 주소가 192.168.55.129였으니까 이걸 입력한다.

프로토콜은 건드리지 말자.

포트범위는 외부에서 접속할 포트들을 의미하는데 넓게 지정해줘봤자 의미 없다. 어떤 숫자를 입력하든 개인의 자유이다.

로컬포트는 어플리케이션에서 설정한 포트를 입력해주면 된다. 나는 CCTV 어플에서 9000을 입력했으니까, 포트범위도 9000을 입력하면 된다.

모두 입력하였으면 추가버튼을 누르면 된다.


정상적으로 설정이 되었다면 이제 LTE 환경에서 접속하면 된다.



4. 외부에서 접속하기


자 이제 외부에서, 회사컴퓨터든 PC방이든 LTE 스마트폰이든 3G 스마트폰이든. 인터넷 창에서 공인아이피와 포트를 입력하면 된다. 그럼 신기하게도 내가 설정한 CCTV를 볼 수 있다.

공인아이피는 3번 항목에서 설명한 "WAN 정보-IP주소"를 의미하며, 포트는 포트포워딩 설정에서 입력한 "포트범위"를 의미한다.

나의 경우에는 1.***.***.***:9000 로 접속을 하면 된다. 

그럼 보여지는 화면과 같이 볼 수 있다.




블로그 이미지

김생선

세상의 모든것을 어장관리

개발하다보면 해당 페이지의 table의 데이터들을 새로고침 없이 데이터를 붙여쓰는 경우들이 있다. 이는 대부분 리스트로 구성된 페이지에서 확인이 가능한데, 가령 오픈마켓의 주문배송리스트라거나, 뭐 카드사용 내역과 같은 페이지에서 주를 이룬다.

div태그를 쓰던 table태그를 쓰던 아마 과정은 비슷할 것이고, javascript에서 데이터와 html태그들을 어떻게 만들어서 jsp에 붙여주는지에 대한 예제를 작성해보고자 한다.


먼저 JSP에서는 다음과 같이 구성한다. 기본적으로 페이지가 로딩될 때, controller 단에서 modelAndView에서 데이터를 호출, List로 이루어진 객체들을 foreach 로 계속 붙여주는 구조로 되어있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!--결과 리스트-->
<div class="result-area">
  <h2 class="result-tit">거래결과 리스트</h2>
  <ul class="result-list" id="resultList">
      <c:forEach var="resultHistory" items="${resultHistory}" >
      <li class="result-item">
          <p class="result-day">${resultHistory.REG_DATE} <span>${resultHistory.ORDER_TYPE}</span></p>
          <dl class="result-detail">
              <dt>품명</dt>
              <dd>${resultHistory.PRODUCT_TYPE}</dd>
              <dt>금액</dt>
              <dd>${resultHistory.AMOUNT}</dd>
          </dl>
      </li>
      </c:forEach>
  </ul>
</div>
<div class="more-btn-wrap">
  <button type="button" id="btnResultMore">더보기</button>
</div>
cs


modelAndView 에서는 resultHistory라는 네이밍의 List 객체에 데이터들을 담아준다. 그리고 해당 jsp페이지가 호출되면, foreach로 객체들을 돌리면서(?) 각 항목들을 구성하게 된다. 이 때, btnResultMore를 클릭한다고 하자. 그럴 때 해당 페이지를 새로고침 없이, 리스트의 하단에 추가적으로 데이터가 붙는 방식이면 훨씬 보기가 좋을 것이다. 새로고침을 하게 되면 현재 입력되어있는 값들도 저장하지 않는 이상 사라질 것이고, 무엇보다 좀 더 자연스러운 화면을 뿌려줄 수 있을 것이다.


btnResultMore 버튼에 매핑되어있는 javaScript의 펑션을 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var pageNo = 0;
 
//결과 더보기
$("#btnResultMore").on("click"function () {
  $.ajax({
    type:'GET',
    url : '/resultMore.json',
    global : false,
    async : true,
    data : {
      pageNo: pageNo
    },
    success : function(json) {
      $('#resultList').empty();
 
      var html = '';
      pageNo = pageNo+1;
      json.resultList.forEach(function(item, index){
        html = $('<li class="result-item">' +
          '<p class="result-day">'+item.REG_DATE+' <span>'+item.ORDER_TYPE+'</span></p>' +
          '<dl class="result-detail">' +
          '<dt>품명</dt>' +
          '<dd>'+item.PRODUCT_TYPE+'</dd>' +
          '<dt>금액</dt>' +
          '<dd>'+item.AMOUNT+'</dd>');
        $('#resultList').append(html);
      });
    },error:function(json){
 
    }
  });
});
cs


자바스크립트에서는 ajax 호출을 통해, 데이터를 더 가져오기 위한 controller 와 매핑을 시켰다.

정상적으로 쿼리가 이루어지는 경우에는 success flag를 탈 것이고, 이 때부터 로직이 시작된다.


기본적으로 들어있는 row를 날리기 위해, 14번 라인에서는 resultList의 자식들을 모두 비워준다.

그리고 18번 라인에서 가져온 데이터를 기반으로 forEach를 돌리면서, HTML tag를 새로 만들어주는 방식으로 이루어져있다.

위의 jsp와 마찬가지로 같은 구성으로 html과 데이터를 매핑해준 후에, 26번 라인에서 append를 시켜주면 끝.


추가적으로 btnResultMore를 누르게 되면 5개씩 항목을 더 붙여주는 기능을 포함한 것인데, pageNo 변수를 추가하여 이를 쿼리에 응용했다.

기본값은 0으로 처리가 되어서 쿼리에서는 기본 5개, 1일 경우에는 10개를 가져오는 방향으로.


javascript 에서 append와 appendTo의 쓰임새가 확연히 다르다.

$('#a').append(b); 의 경우에는 a에 b를 넣는 것이고, $('#a').appendTo(b);는 b를 a에 넣는것이다.

블로그 이미지

김생선

세상의 모든것을 어장관리

내 취미가 상당히 덕력이 소비되는 취미이긴 한데, 그렇다고 해서 코스프레까지 할 생각은 없었다. 내 성격상 코스프레를 하려고 달려들면 퀄리티를 살린답시고 하나하나 만들어댄다거나 또는 기성품을 팔지도 않아서 직접 만들어야 하는 불상사(?)가 생기기 때문이다. 그리고 무엇보다도, 귀찮았다. 그런데 알리익스프레스를 접하고나서 생각이 상당히 많이 바뀌었다. 처음으로 우리 부부가 코스프레를 시도한 건, 내 아내의 만삭사진을 찍을 때 였다. 스타워즈를 이름만 들어보다가 어느날 블루레이로 클래식 6편을 사게 이르른다. 그러면서 종류별로 구입한 광선검들에, 내 아내가 한 아이디어를 내게 된다. "스타워즈 컨셉으로 만삭사진 찍는 거 어때?" 그리고 그렇게 시작되었다.



스타워즈 - 아나킨 스카이워커 & 파드메 아미달라 코스튬


생각은 좋았으나 문제는 어떠한 컨셉으로 어떠한 캐릭터를 선택할지. 부부이기 때문에 연인관계였던 아나킨 스카이워커와 파드메 아미달라? 새로운 여주인공인 레이?. 클래식의 주인공인 레아공주와 루크 스카이워커?. 또는 전혀 새로운 어떠한 캐릭터? 이 캐릭터들의 혼란에 빠져 허우적대고 있었다.


스타워즈? 그거 남매가 셐...


결국에는 연인이자 부부였던 커플인 "아나킨 스카이워커"와 "파드메 아미달라"를 컨셉으로 결정, 그렇게 알리익스프레스에서 의상을 주문했다. 겸사겸사 알리익스프레스에서 검색을 해 보니, 앵간한 영화들의 코스튬은 죄다 있었다. 앞으로 얼마나 구매하게 될 지는 모르겠지만 꽤나 도움이 될 지도.


아나킨 스카이워커의 의상은 주문한 후 5일 이내로 바로 배송이 되었으나, 파드메 아미달라의 의상은 주문 후 제작을 시작한건지 약 2주 후에 배송이 되었다. 퀄리티는 아주 좋았으며, 무사히 만삭사진을 촬영할 수 있었다.


Canon | Canon EOS 750D | Manual | Spot | 1/30sec | F/1.8 | 0.00 EV | 25.0mm | ISO-100 | Flash fired, compulsory flash mode | 2018:08:12 01:19:42

모자이크 하니까 조금 이상하긴 하지만 그렇다고 치자.


Canon | Canon EOS 750D | Manual | Pattern | 1/13sec | F/1.8 | 0.00 EV | 26.0mm | ISO-200 | Flash fired, compulsory flash mode | 2018:08:12 02:07:08

사실 타이머 촬영의 사진은 넘나 못나와서 이 사진을 사용할 일은 없었다고 한다...




스타워즈 - 요다 신생아 털모자


스타워즈 덕후인 만큼 우리 아이에게도 무언가 옷을 입혀주고 싶었는데, 찾아보니 괜찮은 아이템이 있어서 바로 결제를 했다. 셀러도 친절했고, 물건도 더없이 좋았다.


Canon | Canon EOS 750D | Manual | Pattern | 1/160sec | F/1.8 | 0.00 EV | 28.0mm | ISO-640 | Off Compulsory | 2018:10:09 23:26:50




해리포터 그리핀도르 망토 & 슬리데린 망토


영화로서의 덕질을 파자면 난 두루두루 많은 영화를 보는 주의라 뭔가에 크게 심취한 적은 거의 없었다. 마블 영화라고 하더라도 영화관에서 보고, 후에 IPTV로 다시 보는 것 정도. 설정을 나름 파고들지만 딱 거기까지가 끝인 부류였다. 허나, 우리 아내는 달랐다. 해리포터 영화를 너무나도 좋아했고 소설도 사려고 했으며(구판본은 이미 기증한 상태라 없음) 향후에 나오는 "신비한 동물 사전", "신비한 동물들과 그린델왈드의 범죄" 까지 IPTV로 보고, 이후에 4K 블루레이 한정판 까지 지르게 된다. 물론 옆에서 내가 꼬드기긴 했지만.


이후, 아이가 100일이 넘어가면서 좀 특별한 사진을 찍고싶어했다. 신생아 사진은 이미 요다사진으로 정점을 찍었고, 다음에 해리포터 컨셉으로 촬영할 아이템은 무엇이 있을까. 우리 아내가 고민하며 구글링을 한 결과 외국의 한 사진을 발견하게 이르른다.


죠타! 이번엔 너다!


만드레이크 사진을 컨셉으로 아이와 함께, 우리 부부가 모두 해리포터 교복(?)을 입고 촬영을 하게 되었다. 겸사겸사 해리포터 소품들도 준비를 하게 되었는데, 이는 이후 돌 즈음에 컨셉사진으로 찍을 예정.

그리핀도르/슬리데린 망토와 넥타이, 그리핀도르 목도리, 각 기숙사 브로치와 9와 3/4 승강장 티켓, 구조버스 티켓, 위즐리 형제의 비밀지도 등 수많은 소품들을 준비했고, 직접 만든 소품으로는 만드레이크의 경고문구가 되시겠다.


만드레이크 경고문구의 경우에는 A4 용지에 한글로 번역을 한 후, 가장 그럴듯하게 어울리는 폰트들을 사용해서 인쇄를 했으며, 커피를 뿌려(!) 오래된 양피지와 같은 효과가 나타나게 했다. 아주 만족스러운 소품이 되었다.


겸사겸사 설정상 최강의 지팡이 까지.



일단은 이정도까지 질렀고, 앞으로 또 코스프레 의상에 대해 무엇을 지를지는 모르겠다. 아주 재미난 경험이었다.


구매정보


품명 : 스타워즈 파드메 아미달라 드레스

가격 : 100.37달러 (9.49달러)

배송 : China Post Registered Air Mail 18.06.04~18.06.22 (결제일 포함 22일)

특이사항 : 주문제작 방식으로 주문시 약 2주간의 제작일정 소요


품명 : 스타워즈 아나킨 스카이워커 의상

가격 : 74.39달러 (Free Shipping)

배송 : China Post Registered Air Mail 18.06.04~18.06.18 (결제일 포함 14일)

특이사항 : 주문제작 방식으로 주문시 약 2주간의 제작일정 소요


품명 : 화관 - 2종류

가격 : 5.62달러 (Free Shipping)

배송 : China Post Registered Air Mail 18.06.04~18.06.20 (결제일 포함 약 16일)


품명 : 스타워즈 요다 신생아 털모자 & 털바지(?)

가격 : 7.13달러 (Free Shipping)

배송 : China Post Registered Air Mail 18.05.24~18.06.05 (결제일 포함 약 12일)


품명 : 해리포터 슬리데린 망토 , 그리핀도르 망토

가격 : 25.88달러 (FreeShipping

배송 : China Post Registered Air Mail 18.12.02~18.12.13 (결제일 포함 약 11일)


블로그 이미지

김생선

세상의 모든것을 어장관리

개발하다보면 DB의 날짜타입을 timestamp로 저장하는 경우가 있다. 개인적으로 이거 날짜 컨버팅 하고 뭐하고 하는것이 아주 귀찮아서 제일 끔찍하게 싫어하는 데이터 타입인데, 심지어 데이터가 저장되는것도 unix타임이야. 이거 한눈에 들어오겠냐고 제일 싫다.

여튼, 이걸 또 그냥 보면 15뭐시기로 시작하니까 사람이 제대로 읽을 수나 있겠냐, 이거지. 결국에는 사람이 읽고 쓸 수 있는 날짜타입(YYYY-MM-DD HH-MM-SS)으로 변환시켜줘야 하는데 일일히 찾아다가 만드는것도 귀찮고 펑션으로 하나 만들어놨으니까 앞으로 두고두고 좀 써먹어야겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//TimeStamp -> Date formatter
function unixToDateFormatter(date) {
  // yyyy-mm-dd hh:mm:ss.s
  var dateFormatt = new Date ( date );
  var year = dateFormatt.getFullYear();
  var month = 0;
  if ( dateFormatt.getUTCMonth() < 9 ){
    month = '0'+ ( dateFormatt.getUTCMonth() + 1 ).toString();
  } else {
    month = dateFormatt.getUTCMonth()+ 1;
  }
  var day = dateFormatt.getUTCDate();
 
  var hour = 0;
  if ( dateFormatt.getHours() < 10 ){
    hour = '0' + (dateFormatt.getHours()).toString();
  } else {
    hour = dateFormatt.getHours();
  }
 
  var minute = 0;
  if ( dateFormatt.getMinutes() < 10 ){
    minute = '0' + ( dateFormatt.getMinutes()).toString();
  } else {
    minute = dateFormatt.getMinutes();
  }
 
  var seconds = 0;
  if ( dateFormatt.getSeconds() < 10 ){
    seconds = '0' + (dateFormatt.getSeconds()).toString();
  } else {
    seconds = dateFormatt.getSeconds();
  }
 
  var milliseconds = dateFormatt.getMilliseconds();
  var fullDateFormatt;
  fullDateFormatt = year +'-'+month+'-'+day+' '+hour+':'+minute+':'+seconds+'.'+milliseconds;
  console.log ("DateFormatt : " + fullDateFormatt);
  return fullDateFormatt;
}
cs


일단 대강 만들긴 했는데, 몇가지 짚고 넘어갈 점이 있다.

getUTCMonth의 경우에는 0~11의 값으로 리턴해준다. 숫자는 뭐다? 0부터 센다. 0은 곧 1월이고, 이말은 리턴되는 값에 + 1을 해줘야 한다는 의미이다. 두번째로는 모든 자릿수를 맞춰줘야 한다는 것이다. 0~11로 리턴해주기 때문에 0은 +1을 해서 1월인데, 우리가 쓰는 데이트 포맷은 YYYY-MM-DD의 값으로 "월"의 자릿수가 맞지 않게 된다. 그런 고로 10월, 즉 리턴되는 값이 9보다 작은 경우에는 앞에 자릿수 '0'을 붙여주게 된다.

자릿수가 안맞는 부분은 month 뿐만 아니라 getUTCDate , getHours, getMinutes , getSeconds의 경우도 마찬가지가 된다. 그래서 각각의 경우에도 10보다 작은 경우에는 앞자리에 0을 붙이는 식으로 구성했다.


이거 하나 만들어놓으면 자바스크립트에서 두고두고 써먹을거고, 자바의 경우에는 simpledateformatter가 있으니까 그냥 이거 갖다 쓰면 된다.

블로그 이미지

김생선

세상의 모든것을 어장관리