목록AI (114)
기록하는삶
지난 글에서 구현했던 함수를 뜯어보자. usizeRust는 함수의 output type을 꼭 지정해주어야 한다. "unsigned size"의 준말로, 시스템 포인터 크기와 동일한 크기를 가지는 unsigned integer다. 요즘엔 거의 다 64bit 시스템을 사용하니 8바이트라 보면 되겠다. hyp.chars().filter(|c| !c.is_whitespace()).collect(); 굉장히 파이써닉한.. 표현이 놀랍다. 하나씩 뜯어보면 아래와 같다.hyp.chars():hyp 문자열을 문자(char) 단위로 분리하여 이터레이터를 생성합니다.예: "hello world" -> ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'].filter(|c| ..
세부 목표 설정Rust 언어를 보다 재밌고 효율적으로 공부하기 위해 아래의 기능을 가진 안드로이드 앱을 만들어 볼 예정이다.두 개의 빈 텍스트를 입력할 수 있는 공간을 가짐셋 중 하나의 eval metric을 설정 가능(CER / WER / ALL)두 개의 문장을 입력 후, "calculate"을 누르면 두 문장의 metric을 연산 후 TMSID를 포함해 출력간단한 기능이지만 난 안드로이드의 a도 모르기 때문에.. 험난한 여정이 될 것이다. CER / WER 연산하기Copilot에게 CER에 대해서 설명하고, 띄어쓰기의 경우 음절에서 배제해야 한다는 사실을 말해주었더니 그럭저럭 기능하는 코드를 주었다.use std::io::{self, Write};struct CerResult { total: u..
Rust의 기본적인 조건문과 반복문은 C 계열 언어와 거의 동일하다. 일부 C와 python이 조합된 것 같은.. Rust 만의 특성을 가지는 몇 가지를 살펴본다. let if변수를 지정하는 let과 조건 분기를 조합해서 아래와 같이 사용할 수 있다.use std::io;fn main() { println!("Please enter the temperature:"); let mut input = String::new(); io::stdin().read_line(&mut input) .expect("Failed to read line"); let temperature: i32 = input.trim().parse() .expect("Please type a n..
Rust가 가지는 특별한 개념인 소유권에 대해 Copilot에게 물었을 때 아래의 답을 얻을 수 있었다. 소유권Rust의 소유권 시스템은 메모리 안전성을 보장하기 위해 설계되었습니다. 주요 개념은 다음과 같습니다:소유권(Ownership): 각 값은 특정 변수에 소유권이 있습니다. 한 번에 하나의 변수만 값을 소유할 수 있습니다.이동(Move): 소유권이 다른 변수로 이동할 수 있습니다. 이동 후 원래 변수는 더 이상 값을 사용할 수 없습니다.빌림(Borrowing): 소유권을 이동하지 않고 값을 참조할 수 있습니다. 빌림에는 불변 참조와 가변 참조가 있습니다.불변 참조(&): 값을 읽기만 할 수 있습니다.가변 참조(&mut): 값을 변경할 수 있습니다.라이프타임(Lifetime): 참조가 유효한 범위를..
오늘은 첫 글에서 hello Rust 프로젝트를 생성하고, 이를 컴파일 및 실행하면서 자동으로 생긴 리소스들 중 관심이 가는 것들을 살펴본다. Cargo.tomlCopilot에게 Cargo.toml에 대해 물으니 아래와 같은 답변을 받을 수 있었다.Cargo.toml 파일은 Rust 프로젝트의 설정 파일로, 프로젝트의 메타데이터와 의존성을 관리하는 중요한 역할을 합니다. 이 파일은 TOML (Tom’s Obvious, Minimal Language) 형식으로 작성되며, 다음과 같은 주요 섹션으로 구성됩니다 [package]name = "my_project"version = "0.1.0"authors = ["Your Name "]edition = "2021"[dependencies]my_other_proj..
목표 설정블로그에 글을 쓰며 공부한 게 언제인지.. 짬을 내서 퇴근 후에 도커와 쿠버네티스 강의를 들으면서도, 사실 짬을 내 정리하는 게 여간 어려운 일이 아니었다. 뒤쳐지지 않기 위해, 그리고 배우는 재미를 잊지 않기 위해 다시 한 번 시작해야 할 때다. 아래의 목표를 가지고 공부를 해보려 한다.생성형 AI 활용법 익히기코드도, 글도, 브레인스토밍도 이제는 생성형 AI 없이 진행하는 것이 바보다 싶을 정도로 훌륭한 초안 짜기 도구가 되었다고 생각한다. 실제 업무에서도 객체 구조를 잡거나 코드 초안의 작성, 규칙이 있는 변경사항에 대한 일괄 적용 등에 자주 활용하고 있다. 글을 쓰는 데에 Copilot을 사용해보며 chatGPT와의 차이도 느껴보고, 그 한계도 더 많이 체험해보고 싶다. 살재로 글의 뼈대..
학습 서버가 제대로 동작하고 있는지 확인하는 것은 모델링 과정에서 필수적이고, 꽤나 중요한 작업이다. 최근 사양이 좋은 서버를 담당하며 그 중요성이 더 커져서 주말에도 모니터에 로그를 띄워놓고 확인하곤 했는데, 늘 서버를 들여다 보고 있어야 한다는 것은 꽤나 고역이고,, 주말에 모니터링을 한다는 건 사실 없어야 하는 일이다. 따라서 해당 문제를 해결하고자 아래 작업을 수행했다. 현황 파악 및 목표 설정현황현재 빌더는 docker container 기반으로 실행한다. 컨테이너를 띄워놓고 그 안에서 작업이 이루어지는게 아니라, 일회성으로 (--rm 옵션) 컨터이너를 띄우고 내리기 때문에 그 프로세스가 종료 되었는지 여부가 곧 작업이 정상적으로 진행되고 있는지에 해당한다. 즉, 프로세스가 잘 살아 있는지를 알..
부스트 캠프 교육에서 잠깐 배웠고, 입사 후에는 도커 기반으로 빌더를 실행하고 있으나 정작 그 개념에 대해 제대로 이해하고 있지 못한 부분이 많았다. 도커는 효과적인 가상화 도구다,, 정도의 개념만 가지고 있었다. 이 참에 실무에 도움이 되는 선에서, 주요 개념과 활용 방법에 대해 하나씩 정리하고자 한다. What is Docker(Container)? (vs Virtual machine)Docker는 컨테이너 기반의 어플리케이션을 생성, 동작, 관리할 수 있게 해주는 오픈소스 프로젝트로, 이제는 일종의 플랫폼이자 컨테이너 기반 가상화 기술의 고유 명사가 되었다. Docker의 정의에 "컨테이너"를 언급해야만 하므로, 컨테이너가 무엇인지 이해하는 것이 결국 Docker 이해의 출발점이다. 도커 공식 문..
Redhat/CenOS 기반 업데이트 중 목차: 클릭하면 이동 1. 도움말 2. 가상환경 3. 패키지관리 4. 백그라운드 실행 5. 음성 변환 6. 파일 다루기 7. 권한 8. 명령어 [도움말/편의성] (돌아가기) # [가상 환경] (돌아가기) # [패키지 관리] (돌아가기) # [백그라운드 실행] (돌아가기) # [음성 변환] (돌아가기) # [파일 다루기] (돌아가기) # 하위 모든 txt 파일을 하나로 취합 Get-ChildItem -Recurse -Filter *.txt | Get-Content | Out-File -FilePath concatenated.txt # 하위 모든 wav, txt file 중 이름에 '@'가 들어가는 파일 이동 Get-ChildItem -Recurse -Include ..
포인터 메모리 주소를 가리키는 변수. 프로그래밍에서 모든 변수는 특정 메모리의 '주소'에 저장된다. 위와 같이 자료형 뒤에 *를 붙여 선언할 수 있고, 'float*'는 "해당 포인터가 가리키는 주소에 저장된 값을 float로 바라보겠다"는 것을 의미한다. 특정 변수에 대해 &을 붙여 할당해주면, 해당 변수의 값이 아닌 변수가 저장된 주소를 포인터에 전달할 수 있다. 포인터 변수 자체는 주소를 저장하고, *를 붙이면 해당 주소에 저장된 값을 바라보았을 때 결과를 받아올 수 있다. float* 라 선언했으니, pint는 크기가 4byte인 실수 자료형이구나! (x) 포인터 변수는 정수형 자료형이다. 또한 그 크기는 어떻게 선언하느냐가 아니라, 해당 소스가 실행되는 환경의 OS의 자료 처리 단위에 의해 결정..