React native camera + google vision barcode detection (android)

0. 테스트 스펙 - React 16.3.0 - React native 0.55.4 - Android studio 3.2.1 - Galaxy S8 + SDK 26 - Gradle 3.1.3 1. React native camera https://github.com/react-native-community/react-native-camera 이 페이지에 상세히 나와있으니 설치하면 된다. 2. 기본 바코드 읽기(onBarcodeReaded) React native camera에서 자체적으로 지원하는 바코드 읽기 기능. { data: ...,  rawData: ..., type: ..., bounds: ... } 형식의 object로 결과가 리턴된다. https://github.com/react-native-community/react-native-camera/blob/master/docs/RNCamera.md 상세는 이 페이지 참조. 리턴되는 bounds가 문서와 좀 다른 것 같다. 3. Google vision 사용한 바코드 읽기(onGoogleVisionBarcodesDetected) Google mobile vision을 사용한 바코드 읽기 기능. 읽어오는 바코드는 https://developers.google.com/android/reference/com/google/android/gms/vision/barcode/Barcode 이 페이지 참조. 기본 기능보다 빠르고 정확하지만 위치정보(이미지 내에서)를 알려주지 않는다. 그래서 위치정보를 숫자 배열로 받아오도록 수정. 1) node_modules\react-native-camera\android\src\main\java\org\reactnative\camera\BarcodesDetectedEvent.java의 serializeEventData method가 이벤트 발생 시 callback으로 리턴하는 데이터를 serialize하는 것 같다. ...

React-native 0.54 + OpenCV 3.4.3 + Android studio 3.2.1

1. 테스트 스펙 - Windows 10 - React-native 0.54 - OpenCV 3.4.3 - Android studio 3.2.1 - 갤럭시 S8(실기기) 2. React-native-opencv https://github.com/brainhubeu/react-native-opencv-tutorial 에서 소스를 clone 혹은 다운로드. 3. 2.의 페이지에서 시키는대로 한다. + openCVLibrary341을 openCVLibrary343으로. 다른 버전이라면 버전에 맞게 변경. + android\gradle\wrapper\gradle-wrapper.properties의 distributionUrl을 https\://services.gradle.org/distributions/gradle-4.4-all.zip 정도로 바꿔준다. + android\build.gradle > dependencies > classpath를 'com.android.tools.build:gradle:3.1.3' 정도로 바꿔준다. 4. 안된다. * react-native command가 없다. - npm install -g react-native-cli * google()이 없다.  - android\build.gradle의 buildscript > repositories, allprojects > repositories,에 google() 추가. google()이 jcenter() 보다 위에 와야한다는 말이 있다. * android.support.v4 has different version for the compile (에러 메시지 정확하지 않음)  - android\app\build.gradle > dependencies > implementation 'com.android.support:appcompat-v7:27.1.0' 정도로 수정 * Mod...

jsp:attribute must be the subelement of a standard or custom action 문제

이번 경우 <tag:base>   <c:set ......./>   <jsp:attribute><.jsp:attribute>   <jsp:attribute><.jsp:attribute>   <jsp:attribute><.jsp:attribute> </tag:base> 구조로 되어있어서 발생했다.(tag는 custom tag file) 아마 <jsp:attribute> 와 같은 레벨에 다른 태그가 있으면 안되는 듯 하다?   <c:set ......./>을 <jsp:attribute> 안으로 옮기니 해결되었다.

Linux screen 명령어 정리

1. screen -list : screen 목록 2. screen -S [name] : screen 생성. 중복된 이름도 가능하다. 그럴 경우 -list로 정확한 이름을 확인하고 접속 3. screen -x [name] : screen 접속(다중접속 가능). 다중 접속 중이면 보이는 크기가 작아진다. 이유는 모르겠음 4. screen -r [name] : screen 접속(다중접속 불가) 5. screen -X -S [name] quit : screen 삭제 6. (접속중) ctrl + a + d : 현재 screen 나오기 7. (접속중) ctrl + a, shift +f : 현재 screen 전체 화면으로 보기 8. (접속중) ctrl + a + [ : copy mode

Postgresql에서 5432 port가 열려있냐는 문제(Ubuntu 기준)

1. 에러 각종 서비스에서 5432 port가 열려있느냐를 묻는 에러가 발생한다. django는 이런 식. Is the server running on host XXX and accepting TCP/IP connections on port 5432? 어쨌든 connection이 안되면 서비스가 실행되는지, port가 열려있는지 확인해보는게 좋다. 2. 확인 1) htop 에서 postgresql이 있는지 본다. 혹은 ps -el. 2) netstat -ntl로 5432가 열려있는지 본다. 3) service postgresql status로 서비스가 active 상태인지 본다. 3. 해결방법 1) postgresql이 실행되어 있지 않다. sudo service postgresql start. 2) 5432 port가 열려있지 않다. - /etc/posgresql/VERSION/main/pg_hba.conf에서 # IPv4 local connections 아래   host    all             all             0.0.0.0/0           md5 를 추가(혹은 수정) - 외부에서 접속하는 경우 방화벽이 막혀있는 경우가 있다. 열어도 되는 서버라면   iptables -I INPUT 1 -p tcp --dport 5432 -j ACCEPT   iptables -I OUTPUT 1 -p tcp --dport 5432 -j ACCEPT AWS EC2는 EC2 콘솔에 가서 열어야 하는 것 같다. 3) 실행도 되어있고 port도 열려있다. 이전 실행에서 비정상적으로 종료된 경우가 가끔 있다. /var/lib/postgresql/VERSION/main/pos...

Pycharm에서 PEP8을 선택적으로 적용하는 방법

1. PEP8? Python code style guide. Pycharm을설치하면 기본적으로 지키게 되어있다. Warning level(회색 밑줄)이지만 안지키면 거슬리므로 지키게 된다. 자세한 내용은 이 페이지 참조 2. 선택적으로 적용하는 방법 (2017.2.3 버전) 1) File > Settings( ctrl + alt + s)을 연다. 2) 왼쪽 리스트에서 Editor > Inspections. 3) 나오는 리스트에서 Python 더블클릭. 4) 아래로 내려서 PEP 8 coding style violation을 선택. 5) 오른쪽 입력창 > Options > Ignore errors의 + 버튼 클릭. 6) 이 페이지 에서 무시하고 싶은 에러 코드를 찾아 입력. ex> E501

AWS lamda + api gateway + step function

1. 하고 싶은 것 - 클라이언트 요청 -> (1) 무조건 성공값을 반환 -> (2) 실제 계산, DB 입출력 등 - 이유 : 실제로 하고 싶은 연산이 꽤 오래 걸리고 사용자는 그 결과를 바로 볼 필요가 없음 2. 1차시도 : API gateway -> Lambda1 -> Lambda2   1) lambda2를 실행시키고 바로 "ok"를 반환하는 lambda1 함수를 만듦(둘 다 node.js 8.1) 2) API gateway를 만들고 method로 Post를 추가, CORS 설정, lambda1을 end point로 설정. -> CORS 설정했는데 테스트하니 안됨. -> lambda1에서 CORS 헤더를 설정해서 이런식으로 return해야 함 return {   "statusCode": 200, "headers": { "Access-Control-Allow-Origin": "*" } } 3) CORS 문제는 발생하지 않으나 lambda2에 진입하지 않음 -> handler에서 return 하는 순간 함수가 종료되고 실행중인 연산을 종료해서 발생하는 문제. -> callback() 사용. 4) lambda2에서 실제로는 10초 정도면 끝나는 연산을 lambda1에서 설정한 대기시간(30초였음)만큼 기다림 -> lambda1의 대기시간을 10초로 줄였더니 lambda2에서 10초 이상 걸리는 경우 마지막까지 수행하지 못함. (기나긴 삽질의 시간) 3. 2차시도 : API gateway -> Step function(Lambda1 -> Lambda2) 1) Step function(state machine과 비슷하다고 느꼈다)을 사용하면 될 것 같아서 API gateway가 step function을 호출, step function에서 시작 ->...