Docker Storage

도커 스토리지를 다루기 전에 도커 이미지와 컨테이너의 관계를 살펴봐야 할 것 같다. 도커는 하나의 이미지로 부터 하나 이상의 컨테이너가 실행 될 수 있다. 하나의 프로그램 이미지(프로그램 파일)로 부터 하나 이상의 프로세스가 실행되는 것과 같은 이치다. 아래는 프로세스의 실행을 묘사한 그림이다. 프로그램에서 프로세스가 실행되지만 원본 프로그램은 변경이 되지 않는다. 원본 프로그램이 변경되면, 프로그램의 동작이 달라지기 때문에 당연히 변경되면 안된다. 변경되는 데이터들은 원본 프로그램과 독립된 다른 파일의 형태로 저장이 된다.

Logistic (regression) classification

선형회귀를 이해하면 Logistic classification을 더 쉽게 이해 할 수 있다. 그래서 복습한다. 복습해야 할 내용은 아래와 같다. Hypothesis Cost Function Gradient decent아래와 같은 데이터가 있다고 가정해보자.|| x1(hours) || x2 (attendance) || y(score) |||| 10 || 5 || 90 |||| 9 || 5 || 80 |||| 3 || 2 || 50 |||| 2 || 4 || 60 |||| 11 || 1 || 40 ||예측(Hypothesis)는 선형함수 H(X)=WX로 나타낼 수 있다. 코스트(Cost Function)는 학습 데이터와 예측에서의 차이를 계산하기 위한 함수다. 함수는

Crypto

성능은 아래와 같다. getRandom(100)을 10000회 실행한 결과다.컴퓨터는 입력에 따라 출력이 정해진다. 따라서 컴퓨터는 의사난수만을 만들 수 있다. 이 입력 값을 Seed라고 한다. Seed 값에 따라서 난수표가 달라진다. Seed를 이용하는 난수 발생기는 Seed를 예측 할 수 있기 때문에, 시간을 이용해서 Seed를 예측하기 힘들게 한다. 보통은 밀리초 단위로 설정하기 때문에 인간 레벨에서 같은 seed를 찾는 건 불가능에 가깝다.

  • yundream
  • 2016-10-29 06:47:07
  • 171598
  • tags:

Consistent Hash 기반의 대량 메시지 처리 인프라

IoT 플랫폼에서 사용 할 수 있는 대용량 메시지 처리 시스템 개발에 대한 아이디어를 정리한다. 크게 두 가지 아이디어가 있을 건데, 그 중 consistent hash를 이용한 방법을 살펴본다. 이 메시지 처리 인프라는 아래의 특징들을 가지고 있다. 1. 유저간 채팅 서비스가 목적이 아니다. 유저간 채팅 서비에도 사용 할 수 있긴 하지만, IoT를 구성하는 디바이스 들간의 메시지 교환을 목적으로 한다.

알고리즘

심심해서 알고리즘 문제들 풀어보기로 했다.

배열 회전

n개의 원소를 가진 배열을 k번 만큼 오른쪽으로 회전하라. 예를 들어 n=7, k=3 이라면, 배열 가 된>다.원본 배열과 동일한 크기의 배열을 만들어서, 순환된 결과를 복사한다. 공간복잡도 O(N), 시간복잡도 O(N)이다.버블소트를 응용해서 공간 복잡도를 O(1)로 줄일 수 있다.공간 복잡도는 O(1)이지만 시간 복잡도는 O(nk)다. 예제의 경우 시간복잡도는 8(length) 3 이 될 것이다.반전(Reversal)을 이용해서 O(1) 공간, O(n) 시간으로 회전 할 수 있다. 현재 코딩 중...

배열 뒤집기

n개의 원소를 가진 배열을 뒤집는다. n=7 때, 배열 로 회전하기 위한 몇 개의 방법이 있는가.아마도 가장 간단하게 생각 할 수 있는 방법일 것이다. 원본 배열과 같은 크기의 배열을 만들고, 원본 배열의 맨 뒤에서 부터 순환하면서 값을 복사한다. O(n) 공간과 O(n) 시간이 필요하다. O(1) 공간을 사용하는 방법을 찾아보자.O(1)이며 공간 복잡도는 O(n)이다.

Reverse Polish notation

역폴란드 표기법(Reverse Polish notation - RPN) 혹은 후위 표기법은 연산자(operator)를 연산대상(operands)의 뒤에 쓰는 연산 표기법이다. 예를 들어 "3 + 4"의 경우 "3 4 +"로 표기한다. 연산자가 두 개 이상이라면 연산자 바로 뒤에 다음번 연산대상을 표기한다. "3 - 4 + 5"가 있다면 "3 4 - 5 +"가 된다.곱하기와 나누기 같이 연산자의 위치에 따라 달라지는 계산이 있다고 가정해보자. 예컨데 "3 - 4 5"는 "3 - (4 5)"로 표기 할 수 있지만 계산 결과는 전혀 다르다. RPN에서 전자는 "3 4 - 5 "로 후자는 "3 4 5 -"로 표기 할 수 있다.

역폴란드 표기 수식 평가

를 따르는 수식을 평가하는 코드를 작성하라. 사용 할 수 있는 연산자는 +, -, , /이다. 연산대상으로는 int를 사용 할 수 있다.예제 -> ((2 + 1) 3) -> 9 -> (4 + (13 / 5)) -> 6역폴란드 표기법 자체가 스택에 최적화 돼 있다.코드를 단순화 하기 위해서 에러처리는 하지 않았다.

알고리즘 기반 지식 : 복잡도 측정

알고리즘은 문제를 정확하게 해결하는 것이 중요하다. 이때 정확하게 해결한다는 의미는 답을 얻기만 하면 된다는 의미가 아니다. 적당한 시간내에 답을 얻을 수 있어야 한다는 것을 의미한다. 어떤 알고리즘은 컴퓨터를 동원하더라도 수십년 혹은 수백만년이 걸릴 수 있다. 반면 동일한 문제를 푸는데, 하루 혹은 몇 시간이 걸리는 알고리즘을 만들 수도 있다. 아주 간단한 문제가 아니라면, 문제를 풀기 위한 두 개 이상의 알고리즘이 존재하기 마련이다. 소프트웨어 개발자는 어느 알고리즘이 더 나은지를 판단하기 위해서 알고리즘에 필요한 시간을 측정 할 방법이 필요하다.