Github에 있는 tensorflow models 중 나에게 필요한 object_detection 디렉토리만 가지고 오고 싶어

아래와 같은 방법으로 해당 디렉토리만 가져왔다.

    $ mkdir test
    $ cd test
    
    # git 생성
    $ git init
    
    # sparse checkout : 저장소에서 특정 디렉토리나 파일만 보이도록 체크아웃하는 기능
    # sparse checkout기능 활성화 (default : false)
    $ git config core.sparsecheckout true
    
    # remote 추가 
    $ git remote add origin https://github.com/tensorflow/models.git
    
    # 해당 디렉토리 정보를 sparse-checkout에 추가
    $ echo research/object_detection/* > .git/info/sparse-checkout
    
    # pull
    $ git pull origin master
    
    # research/object_detection만 가지고 왔는지 확인

 

'work' 카테고리의 다른 글

Jupyter에 kernel 추가  (0) 2020.04.14
maven 빌드 시 테스트 건너뛰기  (0) 2020.02.17
maven - scope / goal 정리  (0) 2020.02.17
MAC OS Dock 이동하기  (0) 2020.01.29
[Elasticsearch] 특정 필드 삭제  (0) 2020.01.28

 

주피터의 kernel 리스트 확인

# jupyter kernelspec list
Available kernels:
  python3    /opt/venv-python3/share/jupyter/kernels/python3

 

추가할 가상환경에 들어가서 ipykernel 설치 후 kernel 추가

# source ./bin/activate
(venv3.6) root@****:****# pip3.6 install ipykernel
(venv3.6) root@****:****# ipython kernel install --user --name venv3.6 --display-name "이름"

 

추가되었는지 확인

# jupyter kernelspec list
Available kernels:
  venv3.6    /root/.local/share/jupyter/kernels/venv3.6
  python3    /opt/venv-python3/share/jupyter/kernels/python3

 

 

삭제 방법

(venv3.6) root@****:****# jupyter kernelspec uninstall venv3.6
Kernel specs to remove:
  venv3.6             	/root/.local/share/jupyter/kernels/venv3.6
Remove 1 kernel specs [y/N]: y
[RemoveKernelSpec] Removed /root/.local/share/jupyter/kernels/venv3.6

(venv3.6) root@****:****# jupyter kernelspec list
Available kernels:
  python3    /opt/venv-python3/share/jupyter/kernels/python3

 

 

참고사이트)

 

 

virtualenv jupyter notebook 커널 추가 및 삭제

도움이 되셨다면, 광고 한번만 눌러주세요. 블로그 관리에 큰 힘이 됩니다 ^^ Conda로 하는 경우는 아래 URL 참고 https://data-newbie.tistory.com/113 anaconda로 설치한 가상 환경 jupyter notebook kernel에..

data-newbie.tistory.com

 

 

Jupyter에서 kernel 다루기 (+ 다중커널) - YA-Hwang 기술 블로그

jupyter에서 kernel관련 발생할 수 있는 오류와 다중커널에 대해 다룬다.

yahwang.github.io

 

'work' 카테고리의 다른 글

[git] 특정 하위 디렉토리만 clone  (0) 2020.05.26
maven 빌드 시 테스트 건너뛰기  (0) 2020.02.17
maven - scope / goal 정리  (0) 2020.02.17
MAC OS Dock 이동하기  (0) 2020.01.29
[Elasticsearch] 특정 필드 삭제  (0) 2020.01.28

프로젝트 초반에는 테스트케이스를 만들며 호기롭게 시작하지만

후반으로 갈 수록 테스트케이스를 꾸준히 관리하는 일은 너무나 어려운 일인 것 같다.

그렇게 테스트케이스가 정상적으로 관리되지 않다보면

변경된 부분이 테스트케이스에 적용되어 있지 않아 메이븐 빌드 시 에러가 발생하게 된다.

테스트케이스를 모두 수정하기엔 턱없이 모자른 시간..

결국은 테스트케이스를 건너뛰는 방법으로 마무리 ㅠㅠ

 

1. 커맨드라인에 옵션 추가 (두가지 중 하나 사용)

-Dmaven.test.skip=true

-DskipTests

 

2. pom.xml에서 plugin을 사용하여 skip ( maven surefire plugin - test 단계를 위한 플러그인 )

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
    	<skipTests>true</skipTests>
    </configuration>
 </plugin>

'work' 카테고리의 다른 글

[git] 특정 하위 디렉토리만 clone  (0) 2020.05.26
Jupyter에 kernel 추가  (0) 2020.04.14
maven - scope / goal 정리  (0) 2020.02.17
MAC OS Dock 이동하기  (0) 2020.01.29
[Elasticsearch] 특정 필드 삭제  (0) 2020.01.28

maven관련해서 매번 검색하는 scope와 goal

정리해놓고 보면 간단한데 매번 헷갈린다. 특히  goal ㅠㅠ

더 이상 검색을 하지 않기 위해 기록으로 남겨본다.

 

  • scope
    • compile : 컴파일 및 배포시 같이 제공되어 집니다. scope를 설정하지 않았을 때의 기본값입니다.
    • provided : WAS(외부 컨테이너)에서 제공되어 지므로 컴파일 시에는 필요하지만, 배포시에는 빠지는 라이브러리 입니다.
    • runtime : 컴파일 때는 사용되지 않고, 실행시에만 사용되어지는 라이브러리 입니다.
    • test : 테스트 할때만 사용하는 라이브러리 입니다.
    • system : 저장소에서 관리하지 않고 직접 관리하는 jar 파일을 지정합니다.
    • import : 다른 pom 설정파일에서 정의되어 있는 의존 관계를 이 프로젝트로 가져옵니다.
  • goal
    • clean : 컴파일 결과물인 target 디렉토리 삭제
    • compile : 모든 소스코드 컴파일, 리소스파일을 target/classes 디렉토리에 복사
    • package : compile 수행 후, 테스트 수행, <packaging> 정보에 따라 패키징 수행
    • install : package 수행 후, local repo에 install 수행
    • deploy : install 수행 후, 배포 수행, 여기서 배포는 웹서버에 배포가 아니다. 회사 repo에 배포다. 
      • 아래와 같이 distributionManagement 항목이 기술되어야 한다.
    <distributionManagement>
        <repository>
            <id>releases-repo</id>
            <name>Releases Repository</name>
            <url>회사repository주소(넥서스)</url>
        </repository>
        <snapshotRepository>
            <id>snapshots-repo</id>
            <name>Snapshots Repository</name>
            <url>회사repository주소(넥서스)</url>
        </snapshotRepository>
    </distributionManagement>

 

출처)

https://offbyone.tistory.com/163

https://wikidocs.net/18341

듀얼모니터를 사용하다보면 dock이 다른 모니터로 이동하곤 했습니다.

제가 한 어떤 행동때문에 dock이 이동되었을텐데 원인을 몰라 검색을 해 본 결과

아래와 같이 원인을 찾았습니다.

마우스포인터를 dock이 없는 모니터의 제일 하단으로 가져다 놓으니 dock이 움직이네요.

 

아래와 같은 방법으로도 dock을 이동할 수 있습니다.

" option + command + d (dock 가리기 켬)"를 눌러 dock을 숨긴 뒤

dock을 표시하고 싶은 모니터의 최하단으로 마우스 포인터를 이동하여 dock이 올라오는 것을 확인합니다.

다시 " option + command + d (dock 가리기 끔)"을 누르면 해당 모니터에 dock이 표시됩니다.

test1 인덱스에서 tags, persons 필드를 삭제하고자 할 때 

Elasticsearch 초보자라 제대로 한 건지는 모르겠지만 저는 아래와 같이 처리하였습니다.

 


1. 기존 인덱스의 데이타를 새 인덱스에 reindex

[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
{
  "source": { "index": "test1" },
  "dest": { "index": "test-tmp" }
}'



2. 특정 필드들 삭제

[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/test-tmp/_update_by_query?pretty" -H 'Content-Type: application/json' -d'
{
  "script": {
    "inline": "ctx._source.remove(\"tags\");ctx._source.remove(\"persons\");",
    "lang": "painless"
  }
}'

/*
참고) 특정 조건에 부합하는 경우에만 삭제해주려면 아래와 같이 query를 만들어서 실행
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/test-tmp/_update_by_query?pretty" -H 'Content-Type: application/json' -d'
{
  "script": {
    "inline": "ctx._source.remove(\"tags\")",
    "lang": "painless"
  },
  "query": {
    "bool": {
      "must": {
        "exists": {
          "field": "tags"
        }
      }
    }
  }
}'
*/



3. 삭제된 필드가 없는 인덱스 새로 생성

tags 필드를 remove했지만 test-tmp 인덱스 정보를 확인해보면 properties 항목에 tags 필드가 보여져서 아래와 같이 reindex를 한번 더 진행하였습니다.
더 좋은 방법이 있을 것 같지만, 지금 아는 지식 내에서는 이 방법밖에 생각이 나지 않아 reindex로 처리하였습니다.
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
{
  "source": { "index": "test-tmp" },
  "dest": { "index": "test2" }
}'

 

 

4. 불필요한 인덱스 삭제

[root@localhost ~]# curl -XDELETE "http://192.168.0.203:9200/test-tmp?pretty"

 

 

참고) tag 필드에 있는 데이타를 tags 필드에 넣고 tag 필드 삭제 

[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/test-tmp/_update_by_query?pretty" -H 'Content-Type: application/json' -d'
{
  "script": {
     "inline": "ctx._source.tags = ctx._source.tag; ctx._source.remove(\"tag\");",
     "lang": "painless"
  },
  "query": {
    "bool": {
      "must": {
        "exists": {
          "field": "tag"
        }
      }
    }
  }
}'

매번 프로젝트때마다 하는 작업이지만 Flask에서는 처음 처리해보는 거라 기록으로 남겨봅니다.

 

현상

앞단은 로컬에서 개발 중이었고, 뒷단은 개발서버에 있는 Flask 사용 중이었는데

앞단에서 Flask에 정의된 request를 던지면 아래와 같은 에러가 발생하는 것을 확인하였습니다.

Access to XMLHttpRequest at 'http://192.168.****' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

 

원인

에러 문구에서 보이는 것처럼 CORS (Cross-Origin Resource Sharing) 정책에 의해 block됨

CORS (Cross-Origin Resource Sharing)
타 도메인 간 자원 호출을 승인하거나 차단하는 것을 결정하는 것
출처) https://developer.mozilla.org/ko/docs/Glossary/CORS

동일 출처 정책(same-origin policy)
어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식
여기서의 동일한 출처는 두 URL의 프로토콜포트(명시한 경우), 호스트가 모두 같아야 
출처) https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy

즉, 동일한 출처가 아니어서 위와 같은 에러 발생

 

처리방법

Cross-Origin을 허용해주어 다른 도메인에서 호출하는 것을 가능하게 함 

# 출처) https://flask-cors.readthedocs.io/en/latest/
# flask-cors 설치는 pip install flask-cors
from flask_cors import CORS, cross_origin

...
app = Flask(__name__)
#CORS(app) 전체에 적용해주려면 사용 
...

@app.route('/test', methods=['POST'])
@cross_origin() # 해당 request에만 적용해줄 때 사용
def test():

 

참고

1. 동일 출처 정책(same-origin policy)은 브라우저의 보안 정책이므로 브라우저마다 조금씩 다름

IE의 경우 포트가 달라도 same-origin으로 판단

 

2. 브라우저의 정책이므로 브라우저를 사용하지 않는 경우에는 상관없음

curl로 호출 시에는 무관

 

3. 헤더값 확인 

- request header
Host: 192.168.***.***:5000
Origin: http://localhost:3000
=> 요청을 보낸 host(Origin)와 요청을 처리할 host(Host)가 다르다 (Cross-Origin)

- response header
Access-Control-Allow-Origin: http://localhost:3000
...
Vary: Origin
=> Cross-Origin이어도 http://localhost:3000은 허용해주라고 서버에서 정보를 줌

 

 

4. Origin헤더는 항상 생길까?

Cross-Origin일 경우에만 request 헤더에 Origin헤더가 자동으로 생성되는 것을 확인함 

 

출처) https://kamang-it.tistory.com/entry/Web동일-출처-정책-CORS-도대체-뭘까

 

 

'work' 카테고리의 다른 글

MAC OS Dock 이동하기  (0) 2020.01.29
[Elasticsearch] 특정 필드 삭제  (0) 2020.01.28
신뢰할수 있는 루트 인증서 등록  (0) 2020.01.14
[CentOS7] nginx 설치  (0) 2019.11.05
[Unix] 파일시스템 관련 명령어 dd  (0) 2019.09.10

똥손인 나에게 필요한 스티커 ㅎㅎ

 

 

고양이 인쇄소스티커 인스 컷팅스티커 : 저스트 스마일

[저스트 스마일] 저스트 스마일

smartstore.naver.com

 

+ Recent posts