[데이터 통신] Block coding과 Analog to Digital 변환
·
CS/데이터 통신
Block codingBlock coding은 동기화나 오류 검출을 하는 것에 특화된 방법이다. 동기화나 오류 검출을 위해 line coding과 다르게 여분의(redundancy) 정보를 더 포함한다. 당연히 자원이 더 들 수 밖에 없다는 것을 어렵지 않게 알 수 있다.  일반적으로, block coding은 m개의 비트로 이루어진 데이터를 n개의 비트로 변환한다. 그럼 $m > n$ 인거면 이득 아닌가? 라고 생각했다면 여분의 정보를 포함한다는 소개를 안 읽었으니 마음이 좀 아플거 같다. 기존 $m$개의 비트의 여분의 비트를 더했으니 항상 $m  그리고 $m        4B/5BBlock coding의 예시로 4B/5B 방식을 소개하려 한다. 우선 이 방식이 왜 나왔는 가를 먼저 이해해보자.   4..
[데이터 통신] Line coding에 대해
·
CS/데이터 통신
Line coding Line coding은 디지털 데이터를 디지털 신호로 바꾸는 것을 말한다.  디지털 데이터는 당연히 혼자 쓸거면 굳이 신호로 만들 이유가 없지만 다른 사람에게 보낸다고 생각하면 어쩔 수 없이 전기신호로 바꾸는 과정을 거쳐야한다.   따라서 데이터를 보내는 쪽에서는 신호로 encoding 해서 보내고 받는 쪽은 반대로 decoding 해서 다시 데이터로 복원하는 과정을 거친다. 데이터가 돌아다니는 선(Line)에 대해 encoding과 decoding 규칙을 정하는 것이기 때문에 Line Coding 이라고 한다.   자원이 그렇게 많지 않던 시절에는 신호하나 보내는데에도 많은 최적화를 거쳐야했다. 원본 데이터를 빠르게 보낼수만 있다면 얼마나 좋을까..! 극한의 효율을 추구하기 위해,..
[데이터 통신] 데이터와 신호
·
CS/데이터 통신
Analog & Digital데이터는 그 형태가 연속적인지(continuous), 이산적인지(discrete)에 따라 각각 아날로그 데이터 그리고 디지털 데이터라고 부른다.  신호도 마찬가지로 아날로그 신호와 디지털 신호가 존재한다.   아날로그 신호는 모든 데이터들이 서로 굉장히 가깝게 붙어있기 때문에 어느 지점을 찍어도 그 지점에 대한 값을 알 수 있다.  그에 반해 디지털 신호는 아날로그 신호에 비하면 셀 수 있을만큼의 데이터들이 존재한다.  위의 그림에서 디지털 신호부분은 데이터를 일부러 파란 원으로 표시했다. 디지털 신호가 빨간 선으로 이어진건 그냥 보기 편하라고 저렇게 해놓은 것이지, 데이터들이 저렇게 분포해있지 않다.        Periodic & Nonperiodic신호는 주기적(peri..
[Ocaml] Pattern matching
·
언어/Ocaml
대부분 Switch - case문은 특정 패턴에 대해 어떤 동작을 수행해야하는 지를 표현한다. Ocaml에서는 match-with 표현식을 통해 구현할 수 있다. Match-with match-with 표현식은 반환값이 존재한다. 왜냐면 Ocaml에서 대부분 표현식이며, match-with도 예외는 아니기 때문이다. match-with문은 다른 언어의 패턴 매칭과 정확히는 유사하다고 할 수 있는데, 이유는 더 강력하기 때문이다. 뭐 얼마나 강력하길래 이럴까? 함께 알아보자. match-with문은 한마디로.. 좀 깐깐하다. 내가 int형 변수에 대한 pattern matching을 하겠다고 match-with문을 사용하면 모든 정수에 대해 어떻게 처리해야하는 지를 명시해야한다. (* int -> unit..
[Ocaml] 함수의 타입에 대해
·
언어/Ocaml
함수의 타입은 화살표 형태로 표기한다. (* increase : int -> int *) let increase x = x + 1 화살표 앞의 타입은 매개변수(parameter)들의 타입이고, 맨 뒤의 타입은 함수의 반환값이 무슨 타입인지가 적힌다. 굳이 앞과 맨 뒤로 나눈 이유는 매개변수가 여러개 올 수 있기 때문이다. 예를들어 변수 3개를 받아 모두 더해서 넘기는 함수를 만든다고 하자. let sum x y z = x + y + z 이런 함수는 타입을 어떻게 적어야할까? 그냥, int,int,int -> int 이렇게 하면 되는걸까? 아쉽게도 Ocaml에서는 매개변수가 2개 이상인 경우 curried form으로 표시한다. Curring은 N개의 매개변수를 갖는 하나의 함수가 있을때, 1개의 매개변수..
[Ocaml] Ocaml의 컨셉에 대해
·
언어/Ocaml
Ocaml은 Caml이라는 언어에 객체지향을 섞은 ML family에 속하는 언어이다. 함수형 언어인 여러 언어들이 그렇듯 함수는 first-class value로 값으로 사용된다. 함수가 값으로 사용된다는게 무슨말이냐고 할 수 있는데, 그건 차차 느끼자. 처음부터 파고들면 머리아프다. Statement와 Expression에 대해 Statement(구문)와 Expression(표현식)에 대해서 잠시 소개할 예정이다. 구문의 정의란 이렇다. Statement : 실행시 프로그램의 상태전이를 수행하는 언어의 구성요소. ex) int x = 3; 한줄 전부가 구문이다. 메모리 상태를 변경하면 상태 전이가 일어났다고 한다. 메모리에 공간을 잡고 값을 할당하는 짓이 상태전이의 한 형태이다. 또는 이미 할당된 변..
[오류해결] vscode에서 ssh 연결시 비밀번호 무한번 입력하는 경우
·
기타/오류해결
돌아버릴뻔!!! 서버에 깔린 .vscode-server 폴더를 삭제하면 해결된다. deleting the lock file manually or running Kill VS Code Server on Host 이슈에서 어떤분이 저렇게 말했는데 Lock file이 뭔지도 모르겠고, vscode 서버를 끄라는데 이해를 못했었다. 참조 https://github.com/microsoft/vscode-remote-release/issues/4613 Remote-SSH continuously reprompting for password · Issue #4613 · microsoft/vscode-remote-release VSCode info: Version: 1.54.1 (Universal) Commit: f30..
[컴퓨터 비전] Histogram Equalization
·
컴퓨터 비전
서론이미지는 때때로 대비(contrast)가 낮다.위와같은 이미지의 경우 픽셀 값의 빈도수를 히스토그램으로 나타내면 다음과 같은데0~50과 100~200 사이의 값들이 빈도가 많다는 것을 알 수 있다. 이와같은 이미지의 대비를 높이기 위해서 histogram stretching(특정 구간을 1차 함수를 통해 늘리는 것)을 통해 개선할 수 있다. 하지만 stretching 방법은 특정 구간을 매번 잡아줘야하는 귀찮음이 크다. 0~50을 0~200으로 늘려준 후, 다시 늘려야하는 구간이 보일 수밖에 없으므로 또 다시 늘려주고.. 이걸 알고리즘으로 만들어볼 수도 있겠지만 상당히 귀찮은 작업이 아닐 수 없다. 이제 이를 한번에 해결해줄 equalization 방법을 소개하고자 한다.          Histog..
[운영체제] 프로세스의 상태
·
CS/OS
개요 우리가 작성한 코드는 디스크에 저장된 하나의 파일로 존재한다. 이를 프로그램이라고 할 수 있다. 우리는 프로그램을 작성하고 산다. 이 프로그램을 실행하려면 메인 메모리에 올려야하고, 이 메모리 공간이 생각보다 작다면 무방비 상태에서 저장도 못한채로 에디터가 꺼진다던가 컴퓨터가 죽는다던가 하는 상황이 발생한다. 아찔한 상황이 아닐 수 없다. 프로세스라고 하는 건, 프로그램이 실행중인 상태에 임을 말한다. 만약 우리가 서버를 하나 만들어서 돌리면, 실행중인 서버는 하나의 프로세스라고 부를 수 있다. 앞으로 돌고있는 서버를 프로그램이라고 하는 친구가 있다면, 귀에 대고 프로세스라고 정정해주자. 운영체제는 수많은 프로세스들을 관리한다. 물론 프로그램도 관리하지만, 이는 파일을 다루는 부분이지 오늘 주제와는..
[안드로이드 Compose] TextField, 완료시 다음 TextField로 이동
·
안드로이드
먼저 keyboardOption에서 ImeAction.Next를 인자로 넘겨주자. OutlinedTextField( ... keyboardOptions = KeyboardOptions( keyboardType = type, imeAction = ImeAction.Next ) ... ) 처음에는 옵션만 지정해주면 되는줄 알았는데, Action도 같이 지정해줘야한다. ImeAction.Next를 지정했으므로 Next에 대한 행동을 정의해줘야한다. 먼저 FocusManager를 통해 포커싱된 TextField의 위치를 잡고, 그 아래 방향으로 포커싱을 맞춰야한다. OutlinedTextField( ... keyboardOptions = KeyboardOptions( keyboardType = type, ime..