반응형

 

벼락치기로 공부했던 SQLD에 대한 생각을 짧게나마 남기려 합니다.

 

1. 생각보다 몇가지 개념이 반복적으로 나온다. 즉 범위가 넓은 시험이 아니라는 것.

    공부했던것들만 제대로 보면은 합격을 할수가 있을듯하다.(난 해당 사항 아님)

2. 노랭이와 SQL 개발자 과외노트라는 책 두권을 봤는데, 노랭이에는 너무 어려운 문제가 많아서 쫄았는데 실제 시험 난이도는 그정도까지는 아님.(그렇다고 내가 잘했다는 것은 아님)

 

3. 만약 떨어져서 다시 시험을 보게된다면, 실제로 함수들이나 sql구문들을 mysql로 쳐보면서 해볼듯.

4. 여러가지 DB들에 대한 시험문제가 나오는데...ms-sql , oracle등등... 이것들에 대해서 다 제대로 알아야 되나 싶음

 

5. 그래도 sql 기본적인 이해를 목표로 진행했던터라 잘했다고 생각이 든다.

 

6. 만약 sqld 시험을 준비하시는 분들이라면, 전 3일전부터 공부했는데, 노베이스 2주간 하루 3시간씩 공부하면 충분히 합격 가능할듯 합니다.

 

7. 화이팅!

반응형
반응형

이터레이터(Iterator)가 무엇인가?

파이썬을 사용하다보면은 흔히 만나는 예제가 있다

for i in range(0,10):
	print(i)

 

위와 같이 range 를 사용해서 값을 하나씩 가져다 오는 구문인데,

이는 파이썬 내부적으로 iterator를 만들어서 하나씩 호출하는 구조를 가진다

 

그렇기에 파이썬을 조금 더 파이썬 답게 사용하기 위해서는 이터레이터에 대해서 알아두면

간지가 조금 더 있어보일것이다 (pythonic하게)

 

 

 

 

이터레이터(Iterator)의 구조 

일단은 iterator (이터레이터)의 구조를 살펴보자

 

list1 = ["안녕","Hello","니하오"]

 

이러한 리스트가 있고,

 

for x in list1 :

    print(x)

 

이 리스타가 for문에서 어떻게 작동하냐면 내부적으로는 next(list1) 이라는 함수로 계속 다음번의 원소를 호출하는 구조를 가진다. 그리고 다음번 원소가 없을때에는 StopIteration이라는 예외가 발생하면서 for문이 종료를 시켜준다.

 

 

 

 

클래스로 이터레이터(Iterator) 만들기 

 

내가 직접 이터레이터를 만들기 위해서는 클래스로 구현을 하여야 한다

클래스에다 __init__()메서드 구현, __iter__() 메서드 구현, __next__()구현 을 하면 해당 클래스를 이터레이터로 사용을 할수가 있다

 

우리가 자주쓰는 Range 함수를 직접 클래스로 만들어서 사용을 해보자

아래와 같이 구현을 하게되면 Range를 사용하지 않아도 우리가 만든 MyRange 클래스로 사용이 가능하다

class MyRange():
    def __init__(self, begin, stop):
        self.current = begin
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.stop:
            temp = self.current
            self.current += 1
            return temp
        else:
            raise StopIteration
        

for i in MyRange(1, 5):
    print(i, end=" ")

기존 클래스를 구현하는데에다

__iter__메서드와 __next__메서드를 추가적으로 구현한다고 생각하면 간단하다

반응형

'CS > 파이썬' 카테고리의 다른 글

파이썬 - async io 에 대해서 알아보자  (0) 2022.08.17
동시성과 병렬성에 관한 정리  (0) 2022.08.11
반응형

 

 

async io의 단어적 뜻은 Asynchronous IO 라는 단어적 뜻을 가지고 있다

동시성으로 여러개의  비동기 IO-Bound 작업들을 관리하는 것을 그 목적으로 가진다

 

AsyncIO를 사용하기 위해서는 기본적인 키워드 2개에 대해서 알고 있어야 한다

 

async, await 가 바로 그 두개의 키워디 인데,

 

함수 앞에 async 를 붙이게 되면, 해당 함수가 코루틴 객체로 바뀌면서 async io에서 사용이 가능하다

그리고 await 키워드는 뒤에 특정 작업 ( awaitable 속성을 가진 객체) 을 넣어주면 실행이 가능한 상황이다.

 

import asyncio

async def test_task():
    print("Hello World!")
    await asyncio.sleep(2)
    
    print("end")
    return "OKAY"
    


async def main():
    task1 = asyncio.create_task(test_task())
    task2 = asyncio.create_task(test_task())
    
    result = await asyncio.gather(task1, task2)


if __name__ == "__main__":
	await main()

 

 

 

 

async 키워드가 붙지 않는 함수에서도 asyncio를 사용하고 싶을 순간이 있을것이다.

그럴때는 쓰레드를 이용해서 asyncio를 구현을 하면 가능해진다

 

import asyncio
import time
import threading

lock = threading.Lock()


def block_task(task):
    with Lock:
        print(task, "Hello")
    
    time.sleep(1)
    
    with Lock:
        print(task,"World")
    return "OK"


async def main():
    loop = asyncio.get_running_loop()
    
    r1 = loop.run_in_executor(None, blocked_task, "Task1")
    r2 = loop.run_in_executor(None, blocked_task, "Task2")
    
    
    result = await asyncio.gather(r1,r2)
    
    print(result)


if __name__ =="__main__":
    await main()

 

 

 

일반적으로 파이썬에서 http 통신을 위해서는 request 패키지를 임포트해서 사용을 하는데, 이 패키지를 사용하면서 asyncio를 사용하기 위해서는 쓰레드를 위한 코드도 생성해야지 사용이 가능하다. 따라서 번거로움이 많아지는데,

aiohttp라는 패키지를 사용을 하면 번거로움이 사라진다.

 

 

반응형

'CS > 파이썬' 카테고리의 다른 글

파이썬 이터레이터 만들기 ( python iterator )  (0) 2022.09.01
동시성과 병렬성에 관한 정리  (0) 2022.08.11
반응형

 

반응형

 

파이썬을 사용하다보면은 성능에 대한 생각을 자주 하게된다. 느린 언어이지만 개발의 편의성 때문에 파이썬을 버릴수도 없기에 계속 사용을 하게 되는 뫼비우스의 띠를 직접 몸으로 겪는다. 이에 대한 여러가지 나름의 해결책들이 있기에 그것들에 대한 정리의 필요성을 느끼게 되었다.

 

동시성과 병렬성이라는 단어의 뜻부터 알아보자.

 

동시성이라는 것은 여러개의 일들을 동시에 진행되는 것처럼 하는 것이다. 예를들어 우리가 한꺼번에 일을 처리를 하는것을 들수가 있다. n잡러들에게는 여러개의 일을 같이 진행을 하는데, 이것이 현실상의 동시성을 얘기를 하는것이라고 생각이 든다. 프로그래밍에서는 io-bound의 문제들을 일컫는다.

 

 

병렬성이라는 것은 동시성과는 다르게 하나일을 여러가지 코어가 나누어서 집중적으로 진행한다는 것이다. 하나의 큰 작업 ( ex: 고시공부) 를 공부할때에, 오전에는 A과목을, 오후에는 B과목을.. 등등 하나의 큰 목표를 위해 그 작업을 잘게 쪼개서 진행을 한다.  이것을 병렬성이라고 생각할수 있음. 프로그래밍에서는 cpu-bound의 문제를 말한다.

 

문제 예시 전략 멀티쓰레딩 멀티프로세싱 Asyncio
 IO-BOUND 이미지 다운로드 동시성 O O
CPU-BOUND 행렬계산 병렬성 X(GIL) O X

 

 

여기서 잠깐 동기식(synchronous)과 비동기식(asynchronous)라는 단어도 자주 나오는데, 개념을 알고가야지 해당부분에 대한 헷갈림이 덜해진다

비동기식은 : 완전히 독립적으로 진행이 되고, 대기하지 않아도 되는 작업들을 말한다.

동기식은 서로 데이터들을 주기적으로 모아주고, 공유하는 작업을 진행을 할때에 말한다.

 

동시성이나 병렬성을 구현을 할때에 비동기식과 동기식으로 둘다 구현이 가능하지만, 당연히 비동기식으로 구현하는게 효율이 더 좋다. 하지만 풀려는 문제에 따라서 알고리즘을 동기식으로 구현을 해야할수도 있다는 것을 알아두어야 한다.

 

결국에는 단어가 가지고 있는 뜻이 헷갈려서 어렵다고 생각을 하는 것인데,

다음의 단어의 뜻을 정확히 알고 있으면 해결이 된다

 

1) 동기식 vs 비동기식 (synchronous vs asynchronous)

2) IO-BOUND vs CPU-BOUND

3) 동시성 vs 병렬성

4) 멀티쓰레딩 vs 멀티프로세싱 vs Async io

 

 

 

반응형
반응형

 

카페24와 아임웹에서 iframe을 사용하려 했더니,

보안 문제상으로 https로 접근을 해야된다고 함.

그래서 ec2에서 로드밸런스 붙이고, 거기다가 https로 접근해서 진행하는 순서를 함.

 

https로만 접근을 하는것이여서,

로드밸런스 리스너에 HTTPS:443 만 열어서 설정을 함

 

 

로드밸런스에 타겟을 설정을 하는데, 타겟은 포트 80번을 열어서 진행을 함. (아마도 ec2랑 포트 80으로 연결이 되는듯함) ec2에서는 gunicorn의 포트를 80으로 열어놔야함

 

 

 

 

sudo gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log testserver:app --bind 0.0.0.0:80 --workers 2 --daemon

반응형

'CS > AWS' 카테고리의 다른 글

[AWS] 도메인과 서버(EC2) 연결하기  (0) 2022.04.23
반응형

서비스를 배포하기 위해서는 도메인이 필수입니다

 

도메인을 통해 IP로는 나타낼 수 없는 자신의 서비스에 대한 아이덴티티를 도메인을 통해 나타내는 것은 물론

 

사용자들도 편하게 서비스에 접근할 수 있습니다

 

이 글에서는 AWS의 EC2인스턴스와 도메인을 연결하여 보겠습니다

 

순서는 다음과 같습니다

1. 도메인 취득

2. Route53을 이용하여 도메인과 EC2 인스턴스 연결

도메인 취득하기

도메인은 기본적으로 비용이 들어갑니다

 

다만 무료로 도메인을 취득할 수 있는 곳들도 있으나 해당 도메인들은 불안정하므로

 

toy-project가 아닌 실비스를 생각중이시라면 유료 도메인을 사용하시기를 권장드립니다

 

유료 도메인은 가비아, 카페24, 고대디 등 유명한 도메인 구매 사이트에서 손쉽게 구매하실 수 있습니다

 

또한 AWS에서도 도메인 취득을 지원하지만 국내 도메인 판매업체에서 구입하는 것이 좀 더 쉽습니다

 

AWS에서 취득하는 방법은 아래에 자세하게 나와있습니다

https://aws.amazon.com/ko/getting-started/tutorials/get-a-domain/

 

마음에 드는 업체를 선정하셔서 회원가입 및 도메인 검색을 통해 해당 도메인 사용이 가능한지 체크를 하고

 

구입 절차를 밟으시면 됩니다

 

단, 구입시 소유자 정보를 작성할 때  실수가 없도록 주의하셔야 합니다

 

특히 이메일은 도메인 소유를 증명할 때 자주 사용되니 반드시 구매자가 실제로 사용중인 이메일을 작성하셔야 합니다

 

또한 네임서버를 입력하는 부분은 우선 해당 도메인업체의 네임서버를 이용한다고 표시해놓고

 

이후에 AWS에서 네임서버를 받아 다시 수정해주면 됩니다

 

Route53을 도메인-EC2 연결

도메인 구입을 한 후에 해당 도메인과 AWS의 EC2 인스턴스를 Route53 서비스를 통해 연결해 보겠습니다

 

- Route53 : 도메인 등록(구입) / DNS 라우팅(IP를 Domain과 연결) / 상태 및 트래픽 확인을 제공하는 AWS 서비스입니다

 

AWS에 로그인을 한 후 [Route 53] 서비스를 선택합니다

 

왼쪽 사이드바의 [호스팅 영역]을 선택한 후 [호스팅 영역 생성]을 클릭합니다

 

오른쪽에 다음과 같은 화면이 뜨면 구입한 도메인 이름을 입력합니다

 

생성을 누르면 다음과 같이 레코드세트가 만들어 지는 것을 확인하실 수 있습니다

 

생성된 레코드 세트 중 NS 유형을 선택하고 해당 값들을 복사합니다

 

도메인을 구입한 업체에 다시 들어가 해당 도메인관리에서 네임서버(NS)를 앞서 복사한 값으로 변경하여 줍니다

 

위의 과정을 마치면 도메인과 Route53의 연결이 완료된 것입니다

 

잘 연결되었는지 확인하시려면 다음 사이트에 방문하셔서 연결하신 도메인을 검색하면 NS 항목에

 

Route53에서 복사한 값들이 입력된 것을 확인하실 수 있습니다

https://www.ultratools.com/tools/dnsLookup

 

혹은 cmd에서 다음과 명령어를 사용하셔도 됩니다

nslookup domainname.com

 

이제 EC2 인스턴스와 해당 도메인을 연결해 보도록 하겠습니다

 

[Route 53]으로 돌아와 [레코드 세트 생성]을 통해 [A 유형]을 생성해줍니다

A유형의 레코드를 통해 EC2의 IP와 도메인을 연결할 것입니다

 

그림과 같이 설정한 후에 값에는 EC2의 탄력적 IP를 입력합니다

(탄력적IP IP만들기)

 

만약 도메인앞에 www. 를 붙여서 접속되기를 원한다면 다음과 같이 레코드세트를 하나 더 생성해주시면 됩니다

 

[레코드 세트 생성] 클릭 후 [이름]에 www 입력, [값]에 www를 제외한 해당 도메인 입력

 

만약 등록하고자 하는 도메인이 www.example.com 이라면

이름 칸에는 www를, 밑의 값에는 example.com 만 입력해주시면 됩니다

 

이제 도메인-EC2 인스턴스의 연결이 모두 끝났습니다

 

잘 등록이 되었는지 다시 아래 사이트 방문 혹은 cmd를 이용하여 도메인을 검색한 후 결과를 확인합니다

https://www.ultratools.com/tools/dnsLookup

등록한 도메인 연결정보 확인

 

반응형

'CS > AWS' 카테고리의 다른 글

EC2 https 설정  (0) 2022.04.28
반응형

**들어가기

- 해당 문서는 qiita.com/shu223/items/722077b4bbe868f58ddc 의 번역 글입니다

- 더 자세한 내용은 추가적으로 찾아보길 바랍니다

 

 

** 번역시작

 

제목 : ARKit 4 LiDAR Depth API 

 

iOS 기기에서 처음 LiDAR 스캐너를 탑재 한 iPad Pro의 발매와 동시에 출시 된 ARKit 3.5에서는 LiDAR를 이용하여 reconstraction 한 3D 메쉬는 얻을 수 있었지만, 그 계산에 이용되고있는 것 뎁스 (깊이) 데이터에 액세스 할 수 없었다.

 

 

이후 발표 된 ARKit 4 / iOS 14 (/ iPadOS 14)에서 드디어 LiDAR에서 측정 한 깊이를 얻을 수있게되었다. 기존의 깊이와 구별하기 위해 "장면 깊이 (Scene Depth) '이라고도하는 것 같다.

 

LiDAR 깊이의 취득 방법

 

LiDAR 유래의 깊이 데이터는 ARWorldTrackingConfiguration 이용시 frameSemantics 속성에 .sceneDepth 옵션을 지정하여 검색 가능하게된다.

 

let session = ARSession()
let configuration = ARWorldTrackingConfiguration()

// sceneDepth 옵션을 사용할 수 있는지 확인
if type(of: configuration).supportsFrameSemantics(.sceneDepth) {
   // Activate sceneDepth
   configuration.frameSemantics = .sceneDepth
}
session.run(configuration)

 

ARFrame에 새롭게 추가 된 sceneDepth 속성보다 LiDAR에서 측정 한 깊이 데이터를 얻을 수있다.

 

func session(_ session: ARSession, didUpdate frame: ARFrame) {
   guard let depthData = frame.sceneDepth else { return }
   // Use depth data
}

 

사용 가능한 구성

ARConfiguration 프로토콜에 정의 된 frameSemantics 속성에 sceneDepth을 설정하기 때문에 API으로 사용할 수는 있지만, API 레퍼런스의 sceneDepth 절에 설명보기 한 월드 추적 이외의 구성에서 사용할 수없는스러운

 

developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth

 

Apple Developer Documentation

 

developer.apple.com

 

If you enable this option on a world-tracking configuration's frameSemantics,  ARKit includes depth information for regions of the current frame's capturedImage. The world-tracking configuration exposes depth information in the sceneDepth property that it updates every frame.

하드웨어적인 제약

마찬가지로 sceneDepth 참조 페이지를 보자.

ARKit supports scene depth only on LiDAR-capable devices

 

칩이 A12 이상이나 조건은 아닌 것 같다. (LiDAR이 실리 → 필연적으로 고성능 칩이기 때문 일까)

 


<종래의 깊이 데이터와의 차이>

 

지금까지도 (특정 조건에서) ARKit 이용시 깊이 데이터 액세스하는 것은 가능했다. ARFramecapturedDepthData 속성 estimatedDepth 종래부터 있던 깊이 API입니다. 이번에 추가  깊이 API와 무엇이 다른가.

 

 

 

깊이 데이터의 종류와 취득 조건

 

우선 물론 깊이 데이터 종류가 다르다. 그리고 이에 따라 얻을 수있는 조건도 다르다. capturedDepthData True-Depth 카메라 유래 깊이 데이터에서 페이스 트래킹 이용시에만 얻을 수있다.

 

estimatedDepth는 frameSemantics에 personSegmentationWithDepth 옵션을 지정한 경우에 얻을 수있는 것으로, 듀얼 카메라와 True-Depth 카메라 유래의 깊이가 아니라 그 속성 이름에서 알 수 있듯이 추정 깊이 데이터이다. 요 A12 칩 이상.

 

sceneDepth는 상술 한 바와 같이 frameSemantics에 sceneDepth를 지정한 경우에 취득 할 수있어 AR 구성으로는 월드 추적에만 장치로 LiDAR를 탑재하고있을 필요가있다

 

 

프레임 레이트 / 생성 알고리즘의 차이

 

capturedDepthData는 True-Depth 카메라 유래의 깊이 데이터이기 때문에 ARFrame 컬러 데이터 (capturedImage 속성)보다 업데이트 빈도가 낮고, 깊이를 이용한 효과 등을 걸고있는 피사체 (페이스 트래킹이므로 자신)이 빨리 움직일 경우에 추종 할 수없는 것이 있었다.
한편 estimatedDepth은 기계 학습 기반으로 추정되며, A12 이후의 고성능 칩을 조건으로하고 있기 때문에 카메라 프레임과 동일한 프레임 속도로 업데이트된다.
sceneDepth도 LiDAR로 취득한 깊이 데이터와 광각 카메라에서 가져온 컬러 데이터를 기반으로 기계 학습 알고리즘을 이용하여 생성된다. 60fps로 동작하는, 즉 이쪽도 ARFrame를 얻을 때마다 업데이트되고있다.
(WWDC 2020의 "Explore ARKit 4"세션에서)

 

The colored RGB image from the wide-angle camera and the depth ratings from the LiDAR scanner are fused together using advanced machine learning algorithms to create a dense depth map that is exposed through the API.
(광각 카메라의 컬러 RGB 이미지와 LiDAR 스캐너에서 심도 정격이 고급 기계 학습 알고리즘을 사용하여 융합 된 API를 통해 공개되는 고밀도의 깊이 맵이 생성됩니다.)

This operation runs at 60 times per second with the depth map available on every AR frame. 
(이 작업은 초당 60 번 실행되며 AR 프레임마다 깊이 맵을 사용할 수 있습니다.)

 

형식의 차이

 

capturedDepthData AVDepthData , 

estimatedDepth CVPixelBuffer , 

그리고 sceneDepth ARDepthData 얻을 수있다.


 

<ARDepthData>

상술 한 바와 같이 sceneDepth 속성에서 얻을 수 LiDAR 유래의 깊이 데이터는 ARDepthData 형 얻을 수있다. 이곳은 iOS 14에 추가 된 새로운 클래스.

developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth

 

Apple Developer Documentation

 

developer.apple.com

이것을 잘 이용한 공식 샘플이 나와 있으므로 자세한 설명은 샘플을 읽으면서 다른 기사에 쓴다.

 

 

LiDAR의 정확도 / 측정 가능한 거리는?

WWDC 2020은 아니지만, ARKit 3.5 릴리스되었을 때 "Advanced Scene Understanding in AR"라는 Tech Talk가 공개되어 있으며, 그 중 LiDAR의 정확성에 대해 언급했다.

 


The new iPad Pro comes equipped with a LiDAR Scanner. This is used to determine distance by measuring at nanosecond speeds how long it takes for light to reach an object in front of you and reflect back. This is effective up to five meters away and operates both indoors and outdoors. 

(새로운 iPad Pro는 LiDAR 스캐너가 탑재되어 있습니다. 이것은 눈앞의 물체에 빛이 도달하여 반사되어 돌아올 때까지의 시간을 나노초의 속도로 측정하여 거리를 판단 하는 데 사용됩니다. 이것은 5 미터까지 유효, 실내에서도 야외에서도 사용할 수 있습니다.)

 

LiDAR에서 몇 미터 앞까지 측정 할 것인가라는 질문을받은 적이 몇 번 있지만, 이런 것은 공식적으로 언급되지 않은 느낌 이었기 때문에, "샘플에서 실제로 시도해 보면 좋아요"라고 답변을했다. 기준해라 귀중한 공식 정보가 있으므로 참고.


 

personSegmentationWithDepth과 장면 깊이

 

ARConfiguration의 frameSemantics 속성에 personSegmentationWithDepth 옵션을 지정하는 경우, 씬 깊이를 얻을 수있는 장치라면 자동으로 장면 깊이를 얻을 수있는 것 같다.

 

let session = ARSession()
let configuration = ARWorldTrackingConfiguration()

// Set required frame semantics
let semantics: ARConfiguration.FrameSemantics = .personSegmentationWithDepth

// Check if configuration and device supports the required semantics
if type(of: configuration).supportsFrameSemantics(semantics) {
   // Activate .personSegmentationWithDepth
   configuration.frameSemantics = semantics
}
session.run(configuration)

 

게다가 추가 전력 비용도 들지 않는 것.

 

Additionally if you have an AR app that uses people occlusion feature, and then search the personSegmentationWithDepth frameSemantic, then you will automatically get sceneDepth on devices that support the sceneDepth frameSemantic with no additional power cost to your application.

 

 

smoothedSceneDepth

상술 한 sceneDepth은 WWDC 2020 개최 시점 (iOS 14 beta 1 때) 이미 공개되어 있었지만, iOS 14 beta 5에서 갑자기 smoothedSceneDepth되는 API가 추가되었다.

 

 

Shuichi Tsutsumi on Twitter

“iOS 14 beta 5でARKitにデプス系のAPIがさらに追加されたのか! 確かにARFrameにsmoothedSceneDepthなるプロパティが増えている👀 https://t.co/TwvgQ5YThr”

twitter.com

 

 

이 때 (2020 년 8 월) 문서를 바로 보러 갔는데 자세한 내용은 아무것도 쓰여지지 않았다.
지금 보러 가면 제대로 설명이 적혀있어 sceneDepth의 차이도 명기되어있다. DeepL 이용의 일본어 번역을 병기하여 여기에 정리해 둔다.

 

smoothedSceneDepth: ARConfiguration.FrameSemantics

ARConfiguration.FrameSemantics 유형 속성

developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth

 

Apple Developer Documentation

 

developer.apple.com

 


An option that provides the distance from the device to real-world objects, averaged across several frames.
(장치에서 실제 객체 사이의 거리를 제공하는 옵션으로 여러 프레임에서 평균화됩니다.)

 

 

Declaration

static var smoothedSceneDepth: ARConfiguration.FrameSemantics { get }

 

Discussion

 


Enable this option on a world-tracking configuration (ARWorldTrackingConfiguration) to instruct ARKit to provide your app with the distance between the user’s device and the real-world objects pictured in the frame's capturedImage. ARKit samples this distance using the LiDAR scanner and provides the results through the smoothedSceneDepth property on the session’s currentFrame.

(월드 추적 설정 (ARWorldTrackingConfiguration)에서이 옵션을 사용하면 사용자의 장치 및 프레임 캡처 사진에 찍혀있는 실제 객체와의 거리를 응용 프로그램에 제공하도록 ARKit에 지시합니다 .ARKit은 LiDAR 스캐너를 사용하여이 거리를 샘플링 세션 currentFrame의 smoothedSceneDepth 속성을 통해 결과를 제공합니다.)

LiDAR 스캐너를 사용할 수 여기에 명기되어있다.

 


To minimize the difference in LiDAR readings across frames, ARKit processes the data as an average. The averaged readings reduce flickering to create a smoother motion effect when depicting objects with depth, as demonstrated in Creating a Fog Effect Using Scene Depth. Alternatively, to access a discrete LiDAR reading at the instant the framework creates the current frame, use sceneDepth

(프레임 간의 LiDAR 측정 값의 차이를 최소화하기 위해 ARKit은 데이터를 평균으로 처리합니다. 평균화 된 판독 값은 "장면 깊이를 사용한 안개 효과 만들기"에서 입증 된 같이 깊이있는 개체를 묘사 할 때 깜박임을 줄이고 더 부드러운 모션 효과를 만들어냅니다. 또한 프레임 워크가 현재의 프레임을 만든 순간에 개별 LiDAR 판독 값에 액세스하려면 sceneDepth를 사용합니다.)

 

여기가 제일 중요하다. sceneDepth의 차이가 명기되어 있으며, 장점과 구분도 적혀있다.

 


ARKit supports scene depth only on LiDAR-capable devices, so call supportsFrameSemantics(
:) to ensure device support before attempting to enable scene depth.

(ARKit은 LiDAR 지원 장치에서만 장면 심도를 지원하고 있기 때문에, 장면 심도를 사용하기 전에 supportsFrameSemantics (:)을 호출 해 디바이스의 지원을 확인하십시오.)

smoothedSceneDepth: ARDepthData

ARFrame의 smoothedSceneDepth 속성

 

 

Apple Developer Documentation

 

developer.apple.com


An average of distance measurements between a device's rear camera and real-world objects that creates smoother visuals in an AR experience.
(장치의 후면 카메라와 실제 객체 사이의 거리 측정의 평균치에서 AR 체험으로 더 부드러운 영상을 만들 수 있습니다.)

Declaration

var smoothedSceneDepth: ARDepthData? { get }

 

Discussion

 

his property describes the distance between a device's camera and objects or areas in the real world, including ARKit’s confidence in the estimated distance. This is similar to sceneDepth except that the framework smoothes the depth data over time to lessen its frame-to-frame delta

(이 속성은 장치의 카메라와 실제 객체와 지역과의 거리를 설명합니다. 이것은 sceneDepth와 비슷하지만 프레임 워크는 프레임 간의 차이를 줄이기 위해 심도 데이터를 시간이 지남 부드럽게합니다.)


This property is nil by default. Add the smoothedSceneDepth frame semantic to your configuration’s frameSemantics to instruct the framework to populate this value with ARDepthData captured by the LiDAR scanner.

(이 속성은 기본적으로 nil입니다. 프레임 워크에 LiDAR 스캐너에 의해 캡처 된 ARDepthData에서이 값을 입력하도록 지시하기 위해 설정 frameSemantics에 smoothedSceneDepth 프레임 시맨틱을 추가합니다.)

Call supportsFrameSemantics(:) on your app’s configuration to support smoothed scene depth on select devices and configurations.

(앱 설정에서 supportsFrameSemantics (:)을 호출하여 선택한 장치 설정에서 평활화 된 장면 심도를 지원합니다.)
반응형
반응형

1. VM에서 빅쿼리 플러그인 깔려다가, 오류가 나면

# for Ubuntu/Debian
$ sudo apt-get install build-essential
$ sudo apt-get install libgeoip-dev
$ sudo apt-get install libmaxminddb-dev
2. nginx log를 빅쿼리가 못 받을때 

**td-agent 설정에서 field_*(Integer, string, float, 등) 속성이 fluentd 버전이 올라가면서 deprecated되어 작동되지 않는다. td-agent 설정 마지막 줄 옵션  field_integer time을 삭제해야 동작된다. 


3. time이 제대로 안들어가는 것

=> time이 자체적으로 뭔가 파싱이 안되는게 있다고 함. 그래서 칼럼을 다른이름으로 (예:timestamp) 하고,

칼럼속성을 string으로 구성을 해주면 됨. 그리고 이것을 fluentd가 알 수있게끔 해줘야 하는데, apache형식으로 하기

위해서는 parser_apache.rb 파일에 있는 정규식을 건드려줘야 함.

이 파일의 위치는 locate parser_apache.rb 명령어를 사용하면 찾아줌. 그리고 거기서 <time>이라는 부분을 <timestamp>로

바꿔주면 해결이 된다.



반응형
반응형

1.

타이젠에서 외부 application을 실행시키고 싶을때가 있다.

예를들어 카메라의 기능이 필요하다던지 , 갤러리를 실행하고 싶을때가 있다.

그럴때에 사용할 수 있는 방법이 있는 appcontrol이다


이에 관한 기본적인 방법은 tutorial에 잘 나와있다.

https://developer.tizen.org/development/guides/native-application/application-management/application-controls?langredirect=1


그런데 문제는 다음과 같다.


내가 작성하지 않은 application을 작동을 시키고 싶은데,

그 application 의 ID를 찾아야 실행이 가능하다.

그런데 어떻게 찾을지 몰라서 오늘도 삽질을 엄청했는데

다행이도 그 해결점을 찾았다.


packagemanager라는 모듈이 타이젠에 존재하였다.

packagemanager라는 Sample 소스도 존재하는데,


해당 소스에다 몇가지만 추가해주면 우리가 원하는 application ID를 찾을수가 있다.


bool package_info_cb(package_info_h package_info, void *user_data)

{

    char *label = NULL;

    char *package = NULL;

    package_info_get_label(package_info, &label);

    package_info_get_package(package_info, &package);

    PRINT_MSG("label = %s", label);

    PRINT_MSG("package = %s", package);

    free(label);

    free(package);


    return true;

}



아래의 부분이 그 해결법에 해당한다.

이 방법으로 찾은 갤러리ID는 com.samsung.gallery-lite 이었다.


이상.끝

반응형

'CS > 타이젠' 카테고리의 다른 글

[타이젠] 좋은 블로그  (0) 2017.01.11
[타이젠] 슬라이드  (0) 2016.12.27
반응형

윈도우

다음과 같이 가상환경을 실행하세요.

C:\Users\Name\djangogirls> myvenv\Scripts\activate


반응형

+ Recent posts