2017년 4월 28일 금요일

다음 Toy Project 는???

  라즈베리파이 탱크 제작이라는 첫 Toy Project 를 끝내고, 아이디어를 모아 놓은 에버노트의 노트를 뒤적거리며 몇일 간 고민하다가 일단 두번째 Toy Project 의 컨셉을 정했다.

  이번엔 웹 서비스!!! 를 하나 만들어 보려고 한다. 
한마디로 이야기하면 '삼행시 대결' 서비스? 커뮤니티? 라 할까? 
매일 랜덤하게 삼행시 주제가 선정되어 유저에게 노출되고 유저는 삼행시를 지어 서로 평가하고 짱 뽑고 이런 커뮤니티를 만들어 보려고 한다.

아무튼 이번 프로젝트는 웹서비스를 만드는 거라 아주 느리게 진행될 것 같다.
웹에 관련된 내 실력도 형편없을 뿐더러 디자인, 기획 모두 나 혼자 해야되기 때문이다. OTL

첫 삽은 인프런, 책등으로 파이썬을 배우며 백엔드를 구성하는 것으로 떴다.
빨리 빨리 페이지를 만들고 진행해야하는 나에게는 Python + Django 조합이 생산성이 좋다는 이야기가 플러스 요인이 되었고, 요즘 빅데이터, 코딩교육 열풍으로 인기가 엄청 좋길래 한번 직접 써보자라는 마음으로 선택했다.

  아직 Django 의 기본 중에 기본을 배우며 머릿속으로 기획을 하고 있는데, 프로젝트의 밑그림이라도 그려지면 글로 진행사항을 알리겠다. 





 

2017년 4월 25일 화요일

파워빌더 DB Profile 설정 시 오류 발생 조치 방법

파워빌더에서 DB profile 을 만들다보면 아래와 같은 메시지가 발생하는 경우가 있다.

Please connect as the PowerBuilder Catalog Owner. This is necessary for the initial connection to Oracle to GRANT privileges on the repository. 오류 발생


이 때 해결책은 아래와 같다.


Database profile 에 DB 연결하는 곳에 System 이라는 tab 을 선택.
catalog owner 가 default 값인 system 으로 되어 있을 것이다.
이 system 을 접속하려고하는 user로 변경하면된다.

파워빌더가 갑자기 다운될 때 조치방법

  회사에서 파워빌더로 프로그래밍을 하다보면 파워빌더를 실행해서 특정 오브젝트나 윈도우를 열면 아무런 이유없이 응답없음으로 변경되다가 다운될 때가 있다.

이 때 열려고 하는 오브젝트나 워크스페이스에 문제가 있는 것으로 아래와 같이 조치를 해주면 된다.


1. DataWindow 및 특정 오브젝트를 열면 다운됨.


  '실행' 에서  regedit 입력하여 레지스트리 편집기 실행
HKEY_CURRENT_USER - Software -Sysbase - PowerBuilder - Layout -Default - 열리지 않는 오브젝트 삭제


2. 파워빌더를 실행함과 동시에 다운됨.


  '실행' 에서  regedit 입력하여 레지스트리 편집기 실행
HKEY_CURRENT_USER - Software -Sysbase - PowerBuilder - Workspace - 다운되는 workspace 를 삭제

파워빌더를 실행해서 workspace를 다시 열면 됨.


원격에서 조정하는 라즈베리파이 탱크 만들기

  드디어 첫 Toy Project의 완성이다.
첫 Toy Project는 '와이파이로 원격에서 조정하는 장난감'을 만들어 귀여운 딸내미 앞에서 시연을 보이는 게 목표였다.
  그런데, 매번 퇴근시간은 늦고, 퇴근해서도 딸과 놀고 가족들과 함께하다보니 만들 시간이 없어 진도를 나가지 못했는데, 다행히 어제 오늘 와이프와 딸이 여행을 가게되어 이틀동안 그 동안 나가지 못했던 진도를 쭈욱 뽑아 진행했다.

  제작 기간에서 알 수 있듯이 프로그래밍 입문자도 만들 수 있는 수준이고, 조금만 아래글을 참조하고, 관련 지식을 인터넷으로 검색한다면 금방 만들 수 있을 것이다.



1. 시연동영상



추가 영상 : https://drive.google.com/file/d/0B3JOIwcH2MyHdTRwT0JFSV9OSTg/view?usp=sharing


2. 구성


1) 원격제어 기기

  휴대폰이나 노트북 중 하나 선정.  PC에서 테스트 용으로 자바용 프로그램을 만들었는데, 다시 안드로이드로 프로그램하기가 번거로와 노트북으로 진행하기로 결정.

2) 라즈베리파이2 

  라즈베리파이에서 코딩하기는 어렵고, PC에서 코딩 후 실행 하기로 함.  익숙한 JAVA 로 코딩하고 시리얼 통신은 JAVA RxTx 라이브러리 이용.

3) 아두이노 

 아두이노 IDE 로 프로그래밍.

라즈베리파이 탱크의 블록 다이어그램

4) 부품 결합 사진



3 소요부품 리스트


부품명 가격 구입 사이트
 테이터탱크모바일 플렛폼 (DC모터2개 포함)  95,400  http://eleparts.co.kr/EPXF79ND
 ipTIME N100mini-AP  7,130  http://eleparts.co.kr/EPXDUA43
 Arduino Leonardo  30,000  http://eleparts.co.kr/EPXCKAWT
 Motor Control Shield for Arduino  10,000  http://eleparts.co.kr/EPXDPVTN

  위 부품 말고 그외 라즈베리파이2, 외장베터리, 건전지 등이 필요한데 이 것들은 새로구입하지 않고, 가지고 있던 부품이라 따로 가격과 구입처를 표기하지 않았다.
  참고로, 예전에 위 부품들은 구입했는데 내가 자동차 프레임을 알아볼 때는 좀 괜찮다고 생각되는 프레임이 탱크모바일 플랫폼 밖에 없었는데, 최근에는 싸고 다양한 프레임이 많으니 굳이 위 프레임을 선택하지 않아도 된다. 위 '데이터탱크모바일 플렛폼' 프레임은 가격이 비싼 편이다.



4. 소스코드


1) 패킷설계

  https://docs.google.com/spreadsheets/d/1ndbYWWHjeeoWnz1pjjBvyKgjJ1QvRIFSr7w-CcjtMFY/edit?usp=sharing

2) 클라이어트 (노트북 - JAVA)

  https://github.com/JunpilPark/TANK_CLIENT_RASPBERRY

3) 서버 (라즈베리파이-JAVA), 아두이노 IDE (아두이노)

  https://github.com/JunpilPark/TANK_SERVER



5. 이슈리스트


1) 라즈베리안(리눅스) 환경에서 구동되는 RxTx 라이브러리 검색 및 설정

  라즈베리파이에서 동작할 JAVA 프로그램을 윈도우PC에서 프로그래밍한 뒤에 테스트를 하고, 라즈베리안 환경에서 다시 컴파일해서 동작시킬려고 진행했다.
개발PC의 윈도우 환경에서는 '클라이언트 - 라즈베리파이 - 아두이노 ' 모두 정상적으로 동작하였다. 그래서 라즈베리안 환경에서 컴파일하고 실행했는데, 아두이노와 시리얼 통신하기위해 Serial port 연결하는 부분에서 계속오류가 발생했다.
  확인해보니 윈도우 환경은 i386 CPU 환경이고, 라즈베리 환경은 ARM CORE 라서 오류가 발생하는 것이었다.

-. 해결책

아래 주소에서 JMRI 라이브러리를 다운받는다.
http://jmri.sourceforge.net/
리눅스용을 다운받아 파일을 보면 lib\linux\armv6l\ 폴더내 librxtxSerial.so 파일이 있다.
이 라이브러리 적용은 아래와 같이 입력하면 된다.

mv librxtxSerial.so librxtxSerial.so.jmri
 -> 파일 이름의 변경
cp /usr/lib/jni/librxtxSerial.so.jmri
 -> 이름을 변경한 파일을 jni 폴더에복사
ln -s /usr/lib/jni/librxtxSerial.so.jmri /usr/lib/jni/librxtxSerial.so
 ->librxtxSerial.so 로 심볼릭링크 생성

2) 콘솔 환경에서 JAVA 컴파일 기초지식 부족

  평소에 주로 IDE 환경에서 개발하고 컴파일, 실행을 하다보니 콘솔에서 명령어로 컴파일을 하려하니 JAVA 파일을 컴파일하고 실행하는 방법이 기억나지 않아 헤매는 일이 발생했다.
생각해보니 대학교 학부 JAVA 과정 이 후로 콘솔작업은 처음인 것 같았다.
다음에 또 콘솔환경을 만났을 때 헤매는 시간을 줄이고, 다른 분들도 참조할 수 있도록 기록해둔다.

  사전에 라즈베리파이에 JDK가 설치되어 있어야한다.
그리고, 아래와 같이 입력하여 자바파일을 컴파일 한다. 입력 시에 Main.java 파일이 있는 위치에서 입력해야한다.

root@raspberrypi::~/Downloads/src/com/toyproject/tankjavac -cp /root/Downloads/lib/RXTXcomm.jar -d /root/Downloads/classes/ *.java ./server/*.java

-cp : 빌드시 사용할 라이브러리 class path 를 지정한다.
-d : class 파일들이 생성될 경로를 지정한다.

입력 후 컴파일이 완료되면 /root/Downloads/classes 경로에 패키지 경로대로 class 파일이 생성된 것을 볼 수 있을 것이다.

실행은 class가 생성된 경로(/root/Downloads/classes)에서 아래와 같이 입력하면된다.
단, /dev/ttyACM0 는 시리얼 포트로 시스템마다 다를 수 있으니 직접시스템에서 확인하고 입력하는 것이 좋다.

root@raspberrypi::~/Downloads/classesjava -Djava.library.path=/usr/lib/jni -cp /root/Downloads/lib/RXTXcomm.jar:. com.toyproject.tank.Main "/dev/ttyACM0"  com.toyproject.tank.server 

-Djava.library.path : JNI 네이티브 라이브러리를 사용할 수 있도록 JVM 에 알려주는 옵션
-cp : 빌드시 사용할 라이브러리 class path 를 지정한다.

  위와 같이 입력했는데 시리얼 포트를 못찾는다고 에러메시지 가 뜨면
아래와 같이 심볼릭 링크를 만든 후 /dev/ttyACM0 대신에 심볼릭링크명을 넣으면 정상적으로 된다.

ln -s /dev/ttyACM[x] /dev/ttyS8[x]

([x] 는 시스템에서 나오는 숫자를 입력하면된다. /dev/ttyACM[x]의 심볼릭 링크를  /dev/ttyS8[x]로 만들겠다는 뜻이다.)


6. 향후 개선사항


향후 여유가 생긴다면 아래 내용들을 추가 개선하고 싶다.

1) 모바일에서의 동작 

  안드로이드로 클라이언트를 만들어서 게임패드처럼 조정하고 싶다.

2) 정밀한 모터 컨트롤 

  좌회전, 우회전을 할 때 지금은  한쪽모터만 돌게해서 좌/우로 움직이고 있다.
이러다 보니 약간은 어색하게 좌/우회전을 하게 된다. 좌/우 회전 할 때 한쪽 모터만 아닌 두 모터다 컨트롤을 잘해서 좌/우회전을 자연스럽게 하도록 구현하고 싶다.

3) 모터의 파워 조절 

  DC모터는 강약조절이 안된다고 생각했는데,  모터드라이버 메뉴얼을 보니 PWM 이라는 개념이 있더라 이걸 이용하면 DC 모터도 강약조절이 가능한 것으로 보인다. 그러면 원격제어 탱크에 속도 변화를 줄 수 있어 더 재미있을 것 같다.


7. 참조사이트

라즈베리파이에 자바 RXTX 이용
http://blog.naver.com/sky200go/220596887650

라즈베리파이에 자바 설치
http://makeshare.org/bbs/board.php?bo_table=raspberrypi&wr_id=21

시리얼통신으로 자바와 아두이노 연동하기 (윈도우 환경에서 RxTx 설정법)
https://www.kocoafab.cc/tutorial/view/596
http://blog.naver.com/sky200go/220595712108

자바 컴파일 및 실행관련 참조
http://jryupw.blogspot.kr/2015/11/blog-post_25.html
http://egloos.zum.com/penta82/v/4098935

라즈베리파이 시리얼포트 확인
http://creamp.tistory.com/3


2017년 4월 24일 월요일

GIT의 기초

회사스터디에서 간략하게 GIT에 대해 발표한 자료 입니다.


Windows Server 비밀번호 변경 후 확인 사항

  몇 일전 회사 내 보안 강화를 위해서 모든 서버의 비밀번호를 주기적으로 변경하기로 결정하고 비밀번호를 변경했다. 비밀번호를 변경하자 사용하고 있는 몇몇 윈도우 서버에 몇 가지 오류가 나타났다.
  구글링과 협력업체 문의를 통해 해결을 한 내용을 공유하니 혹 윈도우 서버의 비밀번호를 변경했는데 같은 증상이 나타나는 분들께 도움이 되었으면 한다.


1.  연결 된 네트워크 드라이브의 단절


  패스워드를 변경한 서버쪽으로 타부서가 네트워크 드라이브를 연결하여 파일을 복사, 수정하고 쓰고 있었는데 패스워드 변경으로 연결된 네트워크 드라이브가 모두 끊어지는 현상이 발생했다.
  이 문제는 네트워크 드라이브를 연결한 클라이언트 쪽에서 윈도우 탐색기에서 네트워크 드라이브(Z: 따위) 를 더블클릭하면 사용자이름과 패스워드를 입력하는 팝업이 뜨는데 변경된 패스워드를 입력해서 다시 연결해주면 해결된다.


2.  윈도우 작업스케쥴러(예약된 작업) 의 실행 실패


  윈도우 서버의 작업스케쥴러를 이용하여 매일 소스파일 및 DB의 덤프파일을 다른드라이브에 백업을 하는데 이 작업이 패스워드 변경때문에 실패가 되었다.

작업 스케쥴러를 들어가면 아래 [그림1] 과 같이 설정된 스케쥴 내용을 볼 수 있다. 이 스케쥴을 '더블클릭'하면 [그림2] 와 같이 스케쥴에 대한 속성창이 뜬다.

[그림1] 작업스케쥴러의 작업내용

아래 [그림2] 속성 창에서 그냥 확인 버튼을 누르면 사용자이름과 암호를 묻는 팝업이 뜨고 변경된 패스워드를 입력하면 설정이 끝이 난다.

[그림2] 작업스케쥴의 속성


3. IIS 가 실행되는 웹서버 중 가상디렉토리가 있는 웹페이지의 접속 실패


  회사 내에 사용하고 있는 웹 서비스 중 이지젠(Ezgen) 을 사용하는 웹페이지가 접속이 안되는 현상이 발생했다. 처음에는 이지젠(Ezgen) 서버의 문제인 줄 알았으나 확인결과 IIS 에 가상디렉토리 부분에 administrator 계정으로 인증 하는 부분이 있었다.  만약 이지젠(Ezgen) 서버가 아닌 다른 서버에서도 가상디렉토리를 이용하고 있었다면 웹페이지 접속이 안되는 현상이 발생했을 것이다.

아래 [그림3]과 같이 IIS 관리자를 실행시켜 '사이트'에서 '가상디렉토리'를 찾아 오른쪽 마우스 클릭을 하면 메뉴가 나온다. 그 메뉴에서 '가상디텍터리 관리 > 고급설정'을 선택한다.

[그림3] IIS 관리자 화면

  가상디텍터리관리의 '고급설정'에 들어가면 아래 [그림4]와 같이 나온다. 그림에서도 확인 할 수 있듯이 자격증명이 administrator 계정으로 되어 있음을 확인 할 수 있다. '설정' 버튼을 눌러 변경된 패스워드로 암호를 변경해준다.

[그림4] 가상디텍터리 관리의 고급설정




2017년 4월 23일 일요일

네이버의 웨일 브라우저 사용기

  몇 일전 오랜만에 출근 길에 '나는 프로그래머다' 팟캐스트를 들었다. 게스트로 네이버 웨일브라우저 팀의 김효 님이 나왔다. 방송으로 웨일이 만들어진 과정과 이런저런 개발 에피소드를 들으니 예전에 베타테스터를 신청 해두고, 사용해보지도 못한 웨일이 몹시 사용해보고 싶었다.

  -- 카스퍼스키(회사에서 사용하는 백신)에서 설치못하도록 하는 바람에 사용하지 못하고 설치파일만 다운받아 두었었다.  아마, 베타테스트 버전엔 원격으로 시스템 정보나 피드백등을 모으는 로직이 들어가 있지 않았나 생각된다. --

  아무튼,  또 설치 못하게 카스퍼스키에서 막으면 보안담당자에게 이야기해서 설치하리라 라는 굳은 의지를 가지고 회사에 출근하자 마자 웨일 브라우저를 다운받고 써보았다. 다행히 이번엔 한번에 설치가 되더라.

설치 후 사용해본 결론부터 이야기하면 "네이버에서 괜찮은 브라우저를 만들었다." 라고 이야기 할 수 있다.

1. Chrome 보다 빠른 속도

  몇일 동안 써보니  구글의 Chrome 보다 웹페이지의 로딩속도가 빠르게 느껴진다. 
아~ 이 것만으로도 칭찬한다. 

2. Chrome 의 확장성을 수용

  팟캐스트 방송 중에 Chrome 의 확장프로그램 생태계 때문에 고민을 많이 했다라는 내용이 나오는데 방송의 말씀이 이런 것들을 수용하기 위함이구나라는 것이 느껴진다. 내가 사용하는 Chrome과 동일하게 Chrome 확장프로그램을 설치 해놓았다. 다만,  난 거의 에버노트클리핑 만 써서 설치된 확장프로그램 중 에버노트의 클리핑만 써보았는데, 현재까지는 사용하는데 오류나는 부분은 없었다.
  Chrome 의 확장프로그램이 호환되어 사용가능하니 Chrome 사용자의 유입이 많지 않을까 추측해본다.

3. 편리한 기타 기능들

  뭐 많은 기능들이 있지만 개인적으로 대박인데 라는 기능이 두가지 있다.
하나는 '사이드바'이고, 하나는 '스페이스 열기' 이다.
사이드바는 웹이 출력되는 본화면 오른쪽에 작은 사이드바가 생기는데 여기서 네이버나 다른 사이트를 열고 본 화면과 독립적으로 웹서핑을 할 수 있다.
       
  이 기능은 회사에서 몰래 페이스북 하기에 너무 좋다. ^_________^
   
  내 뒷자리 오른쪽에 문이 있어서 화면전체에 페이스북을 열면 다 보여서 눈치보이는데, 네이버에서 이 문제를 해결해주었다. ㅋㅋ  페이스북으로 딴짓 뿐만 아니라 사전이나 참고문헌 보는데도 꽤나 융용하다.

  그리고 또하나는 스페이스열기 기능인데 이건 웹을 목차 형태로 만드는 기능이라고 해야할까 왼쪽창에서 선택한 링크가 오른쪽에 보인다. 팟캐스트에서도 쇼핑할 때 완전편하다라는 이야기를 하시는데, 실제로 진짜 괜찮다. 웹사이트를 목차형태로 볼 수 있어서 쇼핑할 때 물건을 클릭해서 보고 다시 Back 키 누르는 등의 번거러운 행동을 안해도 된다.

 

  이 정도가 내가 괜찮은 브라우저라고 칭한 이유들이다. 다만, 웨일 연구소(?) 인가 웨일 프로젝트 팀에서 운영하는 블로그 같은 것들이 있던데 거기서 보니 아직 국내 은행과 공공사이트를 접속할 때는 아직 몇몇 오류들이 발생하는 것으로 보인다. 저처럼 우리나라 공공사이트, 금융사이트는 익스플로러, 나머지는 웨일을 사용하는 유저들이라면 다들 꽤 만족할 것 같다라는 생각이 든다.

 *. 참고로 네이버에서 금품이나 이익 눈꼽만큼도 받은 거 없이 순수의견으로 작성했습니다.