뜬금없이 이녀석이 왜 있냐면은~!
sampling시에는 샘플링이 완료 된 후 데이터가 넘겨지기 때문에,
과거 시점의 파장이 녹음되어 있게 된다. 그렇기에 빛의 속도에 근접하게 전송되는 전기신호에 의해서
처리속도, sampling 속도 등을 감안해서 어느정도 거리에서 출력을 해주는 약간의 보정이 필요 하지 않을까? 라는
생각이 들어서 찾아 본것이다. (머 그렇다고 -ㅁ-)
만약
플레이시에 딜레이가 없고,
반대파장을 만들어 내는데 시간이 걸리지 않는다고 가정하고,
전기가 흐르는 속도가 무한대라서 전파속도가 0라고 가정하고,
순수하게 녹음에 대한 딜레이만 존재한다고 할 때 스피커와 마이크는 대략 1cm 정도의 간격이 필요 하다
(다르게 말하면, 변환에 필요한 시간, 신호전달 시간을 감안하면 1cm 이상의 거리를 벌려놔야지
반대파장으로 소리가 중화될 수 있을 것으로 보인다)
연쇄살인범 주요 특징
일정한 직업이 없거나 직장에서 인정받지 못한다
결혼하지 않았거나 결혼에 실패한 독신자다
사생활을 철저히 감춘다
친하게 지내는 사람이 없다
떄로 다른 세상사람처럼 느껴진다
좋아하는 일이나 취미에 놀랄만큼 집중력을 보인다
이성에 대해 과도하게 집착한다
폭력, 절도, 성범죄 등의 전과가 있다
거짓말을 능숙하게 한다
간혹 싸늘하게 돌변한다.
<출처 : 경찰대 표창원 교수의>
일정한 직업이 없거나 직장에서 인정받지 못한다 -> 백수나 능력없음 잠재적 연쇄살인범
결혼하지 않았거나 결혼에 실패한 독신자다 -> 이혼하거나 미혼인 사람도 잠재적 연쇄살인범
사생활을 철저히 감춘다 -> 사생활을 감춘다고 연쇄살인범이면 난 어쩔?
친하게 지내는 사람이 없다 -> 사회생활하면 필요에 의해서 만나게 되는데,
그러다 보니 다들 친하게 지내기 보다는 적당한 거리를 두게 된다.
그러면 모든 사회인들은 잠재적 연쇄살인범?
떄로 다른 세상사람처럼 느껴진다 -> 허구한날 4차원 소리 들으면 잠재적 연쇄살인범?
좋아하는 일이나 취미에 놀랄만큼 집중력을 보인다 -> 좋아하는 일이나 취미에 집중력 안보이는 사람이 어디 있던가?
이성에 대해 과도하게 집착한다 -> 성적소주자를 제외하면 이성에 대한 관심없는 사람이 얼마나?
폭력, 절도, 성범죄 등의 전과가 있다 -> 주홍글씨 / 낙인 찍어서 아주 격리하자고?
거짓말을 능숙하게 한다 -> 인간은 살아온 날만큼 뻥을 치고 나이가 먹을수록 숙련되는데!!
간혹 싸늘하게 돌변한다. -> 기분나쁘거나 그냥 이유없이 혼자있고 싶은데 그것도 안돼?
도대체.. 저 교수의는 머하는 사람이여?
마치.. A형 여자 B형 남자 이런식의 분류나
점보면서 "외동딸입니다" 라고 하면, "부모님의 사랑을 듬뿍 받았겠구만" 이러는 거랑 무슨차이래?!
오늘이 마지막날 이라서 어쩔수 없이 KT와 쇼부를 치기 위해 전화를 했다.
최대한 굽신굽신 모드. OTL
일단 KT에서 요구 하는 사항은 서비스 번호
그리고 내가 물어 보는 것들은
1. 우리가 사용중인 단말이 몇대냐?
2. 사용중인 단말의 기준은 무엇이냐? 인터넷 사용이냐?
3. 그 단말은 어떻게 검출해 내냐?
였는데.. 그쪽 상담원의 말을 빌리자면
"MAC 어드레스 라는 것이 있어서 그것을 통해서 사용중인 단말을 검사합니다. 그리고 사용중인 단말기는 인터넷을 사용하는 것을 기준으로 산정됩니다"
라고는 하는데.. 솔찍히 MAC 어드레스로 어떻게 검출을 하는지 넌저시 물어 봤더니 딴소리 ㄱ-
어떠한 방법을 사용하여 검출을 하던, 결국에는 패킷 변조가 동원되는게 아닐까 생각이 되는데..
머 기업비밀이니 패킷을 변조하거나 위조하면 불법이라는 건 기업에게는 안통하는건가?
한가지 희한한 점은.. FireFox나 Chrome 으로 할 때는 인증 수 제한조치 관련 팝업이나 redirection이 통하지 않는다는 것이다.
웬지.. 이 부분이 상당히 찜찜하다...
다르게 말하자면 IE를 사용하지 않고 다른 브라우저로 사용하면 검출이 안될 가능성도 있고,
혹은 IE에 특화된 어떠한 backdoor code를 이용하여 불법하게 검출을 해낸다는 이야기가 아닐려나?
An object
is a data structure that represents a system resource, such as a file,
thread, or graphic image. An application cannot directly access object
data or the system resource that an object represents. Instead, an
application must obtain an object handle, which it can use to examine or modify the system resource.
typedef struct tagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
WORD bfType; // 위의 첫 바이트 BM 으로 Bitmap 이라는 의미를 지닌 헤더
DWORD bfSize; // 0x00075736 = 481078 bytes, 파일 전체 크기(헤더 포함한 전체 파일)
WORD bfReserved1; // 0x0000 으로 사용하지 않는 부분
WORD bfReserved2; // 0x0000 으로 사용하지 않는 부분
DWORD bfOffBits; // 현재 위치로부터 실제 데이터가 존재하는 곳 까지의 거리
bfOffBits는 약간의 설명이 필요하다. 일단 256색상 이하의 비트맵은 indexed color 방식으로
팔레트를 이용하게 된다. 팔레트 이후에는 1pixel = 1byte로 연결된 인덱스들이 나열되어 있다.
그런 이유로, 팔레트에 저장된 색상의 갯수가 다르거나, 팔레트를 사용하지 않는다면 이 값은 상당히 다른 값을 보이게 된다.
자세한 내용은 아래의 팔레트를 참고하면 된다.
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;
256 색 이하의 이미지라면, RGBQUAD는 팔레트로 사용되고,
16bit 이상의 이미지라면 이 내용에 바로 pixel별 색상이 들어간다.
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
DWORD biSize; // BITMAPINFO 헤더의 크기
LONG biWidth; // 이미지의 넓이(화면상에 보이는 크기)
LONG biHeight; // 이미지의 높이(화면상에 보이는 크기)
WORD biPlanes; // 이미지의 장수(bitmap은 layer가 존재하지 않으므로 항상 1)
WORD biBitCount; // 한 픽셀의 컬러 비트수(256컬러는 2^8 이므로 8이 표기됨)
DWORD biCompression; // 비트맵이 압축이 되었는지 어떠한 방식으로 압축이 되었는지 표시
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
BYTE rgbBlue; // RGB 중 파랑(Blue)에 대한 값
BYTE rgbGreen; // RGB 중 녹색(Green)에 대한 값
BYTE rgbRed; // RGB 중 빨강(Red)에 대한 값
BYTE rgbReserved; // 사용하지 않음
---------------------------------------------------------------------------------------------------
1.
bitmap은 단순하게, 하나의 pixel에 대한 RGB 정보나 index 정보를 이용하여 이미지를 표시한다. pixel은 Picture Element의 약자이며, 우리가 말하는 점 하나를 의미한다.
2. 비트맵은 4사분면을 기준 좌표로 사용하며,
좌상단이 (0.0)이다. 하지만 pc에서는 1사분면을 기준 좌표로 사용하므로 우하단이 (0,0)이다.
그런 이유로, 좌표대로 출력을 하면 비트맵은 상하가 뒤집힌 채로 나오게 된다.
(다르게 말하면, 저장시에 데이터는 상하가 뒤집힌 채로 저장되어 있다)
3.
비트맵은 특정 크기의 데이터를 한번에 전송하기 위해 DMA(Direct Memory Access)나 BLIT(Bit-Block Transfer)를
사용한다. 그런 이유로 특정 블럭을 맞추어 주어야 하고, 그렇기 때문에 이미지는 byte align이나 DWORD align을
사용하게 된다(DWORD = 4bytes = 64bit) 이 방법은 몇 비트 이미지냐에 따라 달라지게 되는데,
기본적으로는 4byte align을 맞춰준다.
예를들어 256색 이미지라면, 각각은 1byte로 표시되며, 이미지가 309 x 200 이라고 한다면, 309은 4의 배수가 아니므로
4의 배수가 되어 포함할 수 있는 312 의 width를 사용해야 하고 남는 3pixel은 padding으로 무시하거나 0값을 갖는다.
그리고 24bit의 경우 RGBQUAD가 아닌 RGBTRIPLE을 이용함으로, 309pixel의 width를 지닐경우
927byte를 사용하게 되고, 927을 포함하는 가장 작은 4의 배수는 928 이므로, 1바이트의 padding을 가지게 된다.
4. 256색 미만의 비트맵은 팔레트라는 것을 사용한다. (팔레트는 RGBQUAD 구조체 사용)
이러한 팔레트는 8bit로 표현이 가능하므로, 256가지의 색상을 팔레트로 주로 사용가능하다.
예를 들어
이러한 팔레트를 만들고, 번호만으로 각 픽셀별로 색상을 지정해준다. 그렇다면 상당한 저장 공간을 아낄 수 있다.
그런 이유로, 팔레트를 사용하는 경우에는 팔레트를 Lookup(참조) 하여 변환을 해야하는 작업이 추가되게 된다.
300x200 크기의 이미지를 저장한다고 할 때, 팔레트를 사용하지 않고 RGBQUAD를 이용한다면
sizeof(RGBQUAD) = 4 이고, 이로 인해 60,000개의 픽셀을 각각 4바이트가 필요하게된다.
60,000 * 4 = 240,000 대략 240KB의 용량을 필요로 하게 된다.
하지만 팔레트를 이용하여 256새가지의 색상만을 사용하는 비트맵이라면
256 * 4 = 1024의 용량과 300 * 200 * 1의 용량을 계산하면
60,000 + 1024 = 61,024 대략 62KB의 용량을 필요로 하게 된다.
이러한 이유로 색상수가 적을 경우에는 팔레트를 사용하게 된다.
grayscale의 경우에는 256color RGBQUAD 구조체
팔레트가 없을 경우(jpeg 변환등) for(i=0;i<256;i++) ; 을 이용하여 생성하면 된다.
5.
이유는 모르겠지만, 24bit 비트맵의 경우는 RGBQUAD가 아닌 RGBTRIPLE이라는 구조를 사용한다.