전체 글 50

명시적 API vs 묵시적 API

Vulkan에 관해 공부를 시작했다. 여기에서 처음 보는 용어(Explicit API)가 등장해 이에 대해 정리한다. 명시적(explicit) API 내가 시킨 일 이외에는 하지 않는 것을 명시적 API라고 한다. 예를 들어, 술을 사 와라! 라는 명령을 내렸을 때, 정말 술만 사 오면 명시적인 API이다. 묵시적(implicit) API API를 호출할 때마다 혹은 주기적으로, API를 지원하는 드라이버 혹은 플랫폼에서 내가 시킨 일 이외의 것들을 알아서 수행하는 것을 묵시적 API라고 한다. 예를 들어, 술을 사 와라! 라는 명령을 내렸을 때, 술뿐 아니라 간식도 알아서 사 온다면 묵시적인 API이다. 개인적인 감상 마치 Java 언어와 C 언어 같다는 생각이 든다. 메모리 관리 측면에서 C언어는 사..

술(述)/비교 2021.06.19

Rust 2장 - 2. 기본 데이터 타입

Rust의 기본 데이터 타입은 크게 Scala 타입과 Compound 타입으로 이루어져 있다. Scala 타입은 하나의 값만을 가지며, Compound 타입은 여러 개의 값을 가진다. Scala 타입 정수형, 실수형, 불(Bool)형, 문자(char)형이 있다. 분류 표현 크기(byte) 정수형 부호 있는 i8 1 i16 2 i32 4 i64 8 i128 16 isize 아키텍쳐 32bit => 4 64bit => 8 부호 없는 u8 1 u16 2 u32 4 u64 8 u128 16 usize 아키텍쳐 32bit => 4 64bit => 8 실수형 f32 4 f64 8 불형 bool 1 (1바이트다!) 문자형 char 4 (유니코드 지원) 정수형의 표현 방식 fn main() { let decimal1 ..

잡학(雜學) 2021.06.17

Rust 2장 - 1. 변수와 상수

변수 Rust는 정적 타입(Statically Typed) 언어이다. Rust의 변수 선언은 let 키워드 사용하며, 기본적으로 불변(immutable)이다. 변수는 변하는 수를 말하는데 불변이라고 하니 뭔가 이상하다. 근데 그냥 그렇다고 치고 넘어가자. fn main() { let x = 10; x = x + 1; println!("{}", x); } 위와 같이 변수를 사용할 경우, 아래와 같은 에러가 발생한다. error[E0384]: cannot assign twice to immutable variable `x` --> src/main.rs:3:5 | 2 | let x = 10; | - | | | first assignment to `x` | help: make this binding mutabl..

잡학(雜學) 2021.06.15

정적(Statically) vs 동적(Dynamically) 타입 언어

용어 설명 정적 변하지 않는다. 동적 변한다. 타입 변수의 데이터 타입을 통틀어 이른다. 정적 데이터 타입 변수의 한번 정해진 데이터 타입은 변하지 않음을 말한다. 대표적으로 C언어가 정적 데이터 타입 언어이다. 아래와 같이 코드를 작성하면 에러가 발생한다. { int some = 157; some = "string" } 동적 데이터 타입 변수의 데이터 타입은 변할 수 있음을 말한다. 대표적으로 Python언어가 동적 데이터 타입 언어이다. 아래와 같이 코드를 작성해도 에러가 발생하지 않는다. value :int = 123 value = "string"

술(述)/비교 2021.06.13

억지 기법

억지 기법(brute force)은 가장 단순한 알고리즘 기법이다. 이 기법은 "문제 정의를 가장 그대로 반영한 알고리즘" "무식하게 모든 경우의 수에 대해 처리를 하는 알고리즘" 정도로 정의할 수 있다. 아래와 같은 간단한 문제가 있을 때, "1부터 10까지의 합을 출력하라" 아래와 같이 간단하게 푸는 방법이 존재한다. fn main() { let mut sum = 0; for i in 1..=10 { println!("{}", i); sum += i } println!("{}", sum); } 이처럼 문제의 정의를 그대로 적용하는 것을 억지 기법이라고 한다. 이러한 문제는 10회만 반복하지만, 만약 10억 회를 반복하는 경우라면? 점점 수행속도가 느려지게 될 것이다. 이러한 문제는 수학적 정의를 사용..

잡학(雜學) 2021.06.13

Rust 1장. Hello World!

누군가에게 사상 주입을 당한 것 같긴 한데, 모든 언어의 시작은 Hello World부터다. 이 장에서는 Rust로 작성한 Hello World에 관해서 설명하겠다. 새로운 패키지를 만들기 위해서 Rust에서는 Cargo 사용을 권장(혹은 추천)한다. $ cargo new rust_hello 위의 명령어는 "rust_hello"라는 이름의 새로운 패키지를 생성하는 명령어이며, 아래와 같은 디렉터리와 파일이 생긴다. rust_hello ├── Cargo.toml └── src └── main.rs Cargo.toml 파일은 매니페스트 파일이라고도 불리며, 간단히 말하면 해당 패키지를 위한 메타데이터 파일이다. 파일의 내용은 아래와 같다. [package] name = "rust_hello" version ..

잡학(雜學) 2021.06.12

일 잘하는 사람은 글을 잘 씁니다:글쓰기가 직장인을 전문가로 만든다

김선, 북스톤 출판, [초판 발행] 2021/03/22 이 블로그는 IT 관련 글을 위주로 올리지만, 프로그래밍은 논리력이 필요하므로 글을 조리 있게 잘 쓴다 == 코드 구조를 잘 짠다. 라는 생각으로 이 책에 대한 리뷰를 적습니다. 이 책은 일단 굉장히 빨갛고, 네이버에서 광고를 아주 많이 해줘서 사서 읽게 됐습니다. 일단 이 책을 추천하는가에 대한 답부터 하자면 노, 네버, 절대 보지 마! 평가 ★☆☆☆☆ 음. 어디서부터 잘못된 걸까요? 초반부에 코로나 시대가 도래하면서 재택 근무자들이 증가함에 따라 업무의 처리를 메일 혹은 문서로 하게 됐고, 이로 인해 글을 잘 쓰는 사람이 인정을 받는 시대가 왔다. 라는 말이 나오는데, 이건 아무리 봐도, 글을 다 쓰고, 마지막에 끼워 넣기 한 기분이 듭니다. 뭐..

편(編)/책 2021.05.26

프로그래밍 언어

프로그래밍 언어는 사람이 컴퓨터에게 일을 시키기 위한 도구 일 뿐이다. 사람들은 이 프로그래밍 언어를 통해서 컴퓨터에게 할 일을 전달하는 것뿐이지만 생각보다 전달하는 방법이 쉽지가 않다. 사람과 사람사이에서도 대화를 위해서 수많은 언어(한국어, 영어 등등)들과 대화 방법론들이 탄생한 것처럼 프로그래밍 언어도 수많은 언어가 탄생하고, 방법론들이 탄생을 했다. 프로그래밍 언어로는 C, Java, Python, Go, Rust 등이 탄생했고, 지금 이 순간에도 새로운 프로그래밍 언어들이 탄생하는 중이다. 방법론으로는 절차지향형, 객체지향형, 함수 지향형 방법론 등이 탄생했다. 이렇게 다양한 언어가 있고, 다양한 방법론이 있지만 "사람이 컴퓨터에게 일을 시키기 위한 도구" 라는 전제조건이 바뀌지 않는 이상 서로..

잡학(雜學) 2021.05.23

RabbitMQ

회사에서 RabbitMQ를 사용하는 일을 담당하게 되었다. Go언어로 특정 토픽을 subscribe 하여 가져와 파싱 하는 것인데... 그런데 응? Exchange? Bind? Durable? Routing key? 처음 보는 용어가 등장했다. 이 포스트는 이러한 용어가 무엇을 뜻하고, 왜 존재하는 것인지에 대한 것들을 정리하겠다. RabbitMQ 개요 rabbit message queue, 직역하자면 "토끼 메시지 큐"이다. 토끼? 빠르다는 의미인 줄 알았는데.. 빠른 메시지 큐를 의미하는 줄 알았는데 그냥 Rabbit Technologies Ltd.라는 곳에서 만들기 시작해서 Rabbit이 들어간 거였다. 자 그러면 Message Queue 라는 것만 남는다. 다른 사이트에서 보면 장점 단점 이러한 ..

잡학(雜學) 2021.05.14

오픈스택 설치

Centos 7 에서 Openstack 을 Packstack 방식으로 설치하는 방법을 기술한다. Openstack Release 는 train 으로 한다. 권장 사양 종류 사양 CPU core 2개 이상 RAM 8기가 이상 Storage 40 기가 이상 준비 Host OS(Linux) host OS 에서 가상화 가능여부 확인 egrep '(vmx|svm)' /proc/cpuinfo 출력이 없으면 openstack 설치 불가 KVM nested 설정 host OS 에서 KVM nested를 설정해야 함 host의 CPU가 AMD 인 경우 modprobe -r kvm_amd modprobe kvm_amd nested=1 sudo vim /etc/modprobe.d/kvm.conf options kvm_amd..

편(編)/설치 2021.05.03