개요 rust로 ocr 라이브러리를 사용해서 개발을 하려고 했다. 그러나 복잡하기도 하고 필요한 라이브러리들을 설치하기 위해서 로컬에 너무 많은 것을 설치해야 했고 ai 모델을 사용하는 거에 대해서 지식이 별로 없었기 때문에 어려웠다. 최근에 도커에 대해서 공부했고 편
rust의 tokio는 여러 비동기 채널을 제공해준다.https://docs.rs/tokio/1.47.1/tokio/sync/index.htmlmpsc 채널에서 bounded와 unbounded 채널의 차이점에 대해서 알아볼 예정이다. unbounded의 경우
개요 NameValue 속성에 대해서 파싱하는 방법을 알아보겠다. 내용 결론 syn::Meta::NameValue(metanamevalue) => { let Some(ident) = metanamevalue.path.get_ident()
derive 매크로를 사용 시 어떻게 파싱하고 TokenStream으로 반환하여 코드를 만드는지 알아보겠다. 매번 사용은 하지만 정확하게 짚고 넘어가고 싶다. attributes에는 종류가 크게 3가지 있다.1\. Path2\. List3\. NameValue테스트를
데이터 프레이밍이란?이 기술을 사용하는 이유는 TCP 통신의 메시지 경계 문제를 해결하기 위해서이다.TCP는 데이터 스트림을 연속적으로 전송하므로, 하나의 큰 데이터 덩어리를 여러 번에 나눠 보내거나, 여러 개의 작은 메시지가 합쳐져서 한 번에 도착할 수 있다. Len
개요 내용 위 코드는 정상적으로 컴파일되지 않는다. 소유권 문제가 발생한다. rust를 개발하면서 아주 자주 겪는 상황이다. 결론
개요 bevy의 ecs 프레임워크를 활용해서 websocket 통신을 구현하려고 한다. 특히 권위 서버(Authoritative Server) 형태로 만들 예정이다. 지속적으로 업데이트할 예정이다. 내용 간단하게 WebSocket을 tokio runtime을 통해서
스레드를 생성 시, spawn 메서드에 클로저를 넘겨주게 된다. spawn함수의 원형을 보면F 제네릭 타입이 Send + 'static이다. 여기서 중요한 것은 'static을 가진다는 것이다. 이 의미는 FnOnce가 호출 시 내부의 변수들은 모두 소유권을 가지고 있
여기서 incoming 변수의 메서드인 try_for_each를 호출하는데 이게 어떻게 가능한지에 대해서 분석하다가 정리를 해야 할 것 같아서 작성한다.일단 try_for_each의 원형은 아래처럼 생김매개변수로 F타입을 받음. 즉, 제네릭 타입임.그럼 F: FnMut
일반적으로 tokio를 사용할 때 \`그러나 특정 상황에서는 tokio 런타임을 수동으로 관리해야하는 경우가 생긴다. 이에 대해서 알아보도록 하겠다.기존의 거대한 동기 코드베이스를 한 번에 async로 바꾸는 것은 거의 불가능에 가깝다. 또한 main을 async로 바
블랭킷 구현은 특정 구조체 하나에 대해 트레잇을 구현하는 것이 아니라, 어떤 조건을 만족하는 모든 타입에 대해 포괄적으로 트레잇을 구현하는 기법을 말한다.이름처럼, 조건을 만족하는 모든 타입들을 하나의 blanket으로 덮어버리는 것과 같다고 해서 붙여진 이름이라고 한
Websocket? TCP 핸드쉐이크 WebSocket 핸드쉐이크 (Upgrade) 일반적인 HTTP프로토콜 -> WebSocket 프로토콜로 업그레이드 된다. 데이터 통신
Arc를 사용 시 주의할 부분에 대해서 포스팅을 하겠다.순환 참조 참조 횟수가 0이 될 때 메모리를 해제한다.두 개 이상의 arc가 서로를 순환하며 가리키게 되면, 참조 횟수가 절대 0이 되지 않아 메모리 누수가 발생한다.a와 b 변수는 힙에 할당된 각각의 객체를 가르
Bevy ECS Example 개요 MQTT와 ECS를 활용하여 주차장의 주차 공간에 대해서 출력하는 프로그램을 만들어 보려고 한다. 만드는 이유는, MQTT통신을 연습하고 이해하는 동시에 ECS에 대해 이해도를 높이고자 한다. ECS의 경우 분산 시스템이나, 실시간
bevy의 ecs에 대해서 관심을 가지게 되어서 Getting Start를 따라하면서 공부한 내용을 정리한다. 링크는 아래와 같다.https://bevy.org/learn/quick-start/getting-started/apps/Entity Component
OpenSource를 보다가 enum을 사용 시 깔끔한 방법이 있어서 간단히 정리한다.enum의 값을 확인하기 위해서는 match와 if를 활용한다. 위에서 사용한 enum의 경우 연관된 데이터가 없는 경우이다.만약에 연관된 데이터가 존재하는 경우는 어떻게 처리해야 하
딥러닝 프레임워크딥러닝 모델을 만들고, 학습시키고, 사용하는 데 필요한 도구 모음이라고 생각하면됨.Caffe의 핵심: .prototxt, .caffemodel.prototxt 역할: 신경망의 설계도 또는 구조를 정의하는 텍스트 파일내용: 신경망이 어떤 계층(layer)
이미 딥러닝 학습이 완료된 모델을 OpenCV의 DNN 모듈에서 로드하여 사용하는 방법을 알아보겠다.사용하는 딥러닝 모델이 OpenCV DNN 모듈이 지원하는 특정 형식의 모델 파일이어야 한다.지원하는 모델은 아래와 같다.1\. Caffe 모델2\. TensorFlow
개요 opencv 라이브러리를 linux 환경에서 사용해보고자 한다. 설치 과정부터 사용 예제까지 작성해볼 예정이다. 내용 필요 라이브러리 설치 libgtk2.0-dev OpenCV의 GUI 모듈 (highgui)을 사용하기 위한 의존성입니다. pkg-config