시리얼 포트로 데이터가 안나온다!
1. 크로스/다이렉트 케이블의 문제 이거나, 끊어진 케이블이 문제였던 경우가 많았음
2. 가끔 황당하게, 동일 포트로 터미널을 두개 열고 두번째 연결한 터미널을 띄워 놓은 경우가 있었음

시리얼 포트로 데이터는 나오는데, 외계어?!
1. 받는쪽의 baud rate 확인! (은근히 이런 실수를 ㅠ.ㅠ)


그 외에 드물게 하는 실수
1. 드물지만 Flow control 을 설정해서 쓰는 경우
2. 알고봤더니 이 케이블이 아니네~ 경우

Posted by 구차니
집에 웹캠도 있겠다 한번 분해해봐?

문득, 자동차에 나이트 비전이나,
게임의 엘프족들 처럼 밤에도 잘 볼수 있는 능력을
저렴한 가격으로 인간이 사용할 수 있지 않을까 라는 망상이 들었다.

카메라 + 피코 프로젝터(혹은 반투명 고해상도 LCD) + 안경

이러한 조합으로 증강현실을 통해 위험지역에서 좀더 안전하게 할 수 있지 않을까 라는 생각을 한다.
(자동차는 아마도 전면 스크린의 조함으로 유리창 없는 시대가 올지도..)

[링크 : http://t9t9.com/360]
[링크 : http://t9t9.com/361]
[링크 : http://scripter.egloos.com/1695125]
Posted by 구차니
음.. 아직은 정식 릴리즈는 아니지만..
초기 설정이 제대로 안되고(기본 기지 인원이라던가..)

그리고 이 미칠듯한... 외계인의 전투능력은... ㄱ-
가장 쉬운걸로 하는데도 전투를 이끌어 나가질 못하겠다 ㅠ.ㅠ


게임은 둘째 치고 일단 번역이나 -ㅁ-

'모종의 음모 > UFO:AI 한글화' 카테고리의 다른 글

UFO:AI SLI 시스템에서의 문제점  (5) 2011.01.08
UFO:AI 관련 프로젝트  (0) 2011.01.07
UFO:AI 2.3 용 po 파일  (2) 2009.11.27
UFO:AI 2.3 개발자 버전  (0) 2009.11.27
언어명에 대한 고찰?  (1) 2009.03.17
Posted by 구차니

2.3 번역하려고 문서 병합하다가 죽는줄 알았다 ㄱ-
머가 이리 많이 바뀐겨 ㅠ.ㅠ



대책따윈 안드로메다로...



남은일 : 영문버전 fuzzy 동기화
            한글번역
            병합오류 확인

'모종의 음모 > UFO:AI 한글화' 카테고리의 다른 글

UFO:AI 관련 프로젝트  (0) 2011.01.07
UFO:AI 2.3  (6) 2009.11.29
UFO:AI 2.3 개발자 버전  (0) 2009.11.27
언어명에 대한 고찰?  (1) 2009.03.17
번역의 어려움  (5) 2009.03.12
Posted by 구차니
2.2에 비해서 달라진점은,
일단 Geoscape가 완전 버전업! 화려한 그래픽과
전버전에서 불편했던 radar range 표기 on/off
그리고 국가별 국경 표시 기능!



일단 각설하고, 가장 좋은점은
한글 선택시 재시작 안해도 된다는 점과,
2.2 때 처럼 한글이 많으면 버벅대지 않는다는 점이다!!!


한글화가 솔찍히 요즘에 시들해졌었는데, 다시 불타오르고 있다 ㅋㅋ


4096x2048

2048x1024


[다운로드 : http://www.destructavator.com/92dl/ufoai_2_3dev_r26960.exe]

'모종의 음모 > UFO:AI 한글화' 카테고리의 다른 글

UFO:AI 2.3  (6) 2009.11.29
UFO:AI 2.3 용 po 파일  (2) 2009.11.27
언어명에 대한 고찰?  (1) 2009.03.17
번역의 어려움  (5) 2009.03.12
보안등급 - Clearance  (0) 2009.03.09
Posted by 구차니
신기하다고 해야겠지만..
파형을 뒤집는다고 해서 소리가 달라지지 않는다라는 신기한 사실이 발견되었다.

당연히 뒤집으면 값이 달라지니, 주파수 쪽에서도 변동이 생길 것이고,
그러다 보면 당연히 일반적인 사람의 목소리가 아니거나 다른 소리로 변한걸이라고 생각했는데
그대로 나오는 현상이 있었다.

완전히 같은 위치는 아니지만
"in.wav"에서는 2채널에서는 파형이 나오는데 반해

"outout.wav"에서는 파형이 전혀 나오지 않음에도 불구하고 소리는 나온다.

왼쪽 파형을 뒤집어서 오른쪽에 덮어 씌운 결과물이 "output.wav"인데
왜 소리가 나오는지도 애매하다..

void main()
{
	short s16temp;
	FILE *fp;
	FILE *output;
	char filename[] = "in.wav";
	RIFF_HEADER riff;
	FMT_CHUNK fmt;
	DATA_CHUNK data;
	char *wave = NULL;
	unsigned int idx, maxloop;
	unsigned int ch_idx, ch_maxloop;

	fp = fopen(filename, "rb");
	output = fopen("output.wav","wb");
	fread(&riff, 1, sizeof(RIFF_HEADER), fp);
	fwrite(&riff, 1, sizeof(RIFF_HEADER), output);
		printf("riff.file_length[%d] bytes\n",riff.file_length);

	fread(&fmt, 1, sizeof(FMT_CHUNK), fp);
	fwrite(&fmt, 1, sizeof(FMT_CHUNK), output);
		printf("fmt.fmt_length[%d] bytes\n",fmt.fmt_length);
			printf("fmt.format[%d]\n",fmt.format);
			printf("fmt.channels[%d] channels\n",fmt.channels);
			printf("fmt.khz[%d] kHz\n",fmt.khz);
			printf("fmt.bps[%d] Bps\n",fmt.bps);
			printf("fmt.blockalign[%d] bytes/block\n",fmt.blockalign);
			printf("fmt.depth[%d] bits/sample\n",fmt.depth);

	fread(&data, 1, sizeof(DATA_CHUNK) - 4, fp);
	fwrite(&data, 1, sizeof(DATA_CHUNK) - 4, output);
		printf("data.data_length[%d]\n",data.data_length);
		printf("playtime %02d:%02d\n",
			data.data_length/fmt.bps/60,
			data.data_length/fmt.bps);
		printf("samples %02d\n",
			data.data_length/fmt.blockalign);

		wave = malloc(data.data_length);
		fread(wave, 1, data.data_length, fp);
	
		maxloop = data.data_length / 2;
		ch_maxloop = fmt.channels;
#if 1
		for(idx=0; idx < maxloop; idx+=fmt.channels)
		{
			memcpy(&s16temp, (short*)wave + idx + 1, fmt.depth / 8);
			fwrite(&s16temp, 1, fmt.depth / 8, output);

			if(s16temp == -65536)
			{
				s16temp = -65535;
			}
			s16temp = -s16temp;
			fwrite(&s16temp, 1, fmt.depth / 8, output);
		}
#endif
		free(wave);
	fclose(fp);
	fclose(output);
}

'모종의 음모 > noise cancelling' 카테고리의 다른 글

wave multi channel order  (0) 2010.05.01
WAVE format  (0) 2009.08.12
Active Noise Control - ANC  (0) 2009.08.12
WAVEFORMATEX structure  (0) 2009.04.01
음속  (0) 2009.03.30
Posted by 구차니
WAVE 파일은 RIFF / FMT / DATA chunk로 구성된다.
chunk는 데이터 덩어리 혹은 패킷이라고 생각하면 될 듯 하다.

아무튼 각 chunk에는 식별을 위한 MAGIC WORD가 있으나, 몇개의 파일만 확인해서
저 순서가 아닌 다른 순서로도 있는지는 확인하지 못하였다.
그냥 순서대로 읽어오면 된다.

typedef struct _RIFF_HEADER_
{
	unsigned char magic_RIFF[4];
	unsigned int file_length;
	unsigned char magic_WAVE[4];
} RIFF_HEADER;

typedef struct _FMT_CHUNK_
{
	unsigned char magic_FMT[4];
	unsigned int fmt_length;
	unsigned short format;
	unsigned short channels;
	unsigned int khz;	// sample rate
	unsigned int bps;	// bytes per second
	unsigned short blockalign;
	unsigned short depth;	// bits per sample
} FMT_CHUNK;

typedef struct _DATA_CHUNK_
{
	unsigned char magic_DATA[4];
	unsigned int data_length;
	unsigned char *data;
} DATA_CHUNK;

'모종의 음모 > noise cancelling' 카테고리의 다른 글

wave multi channel order  (0) 2010.05.01
파형 뒤집어 플레이 하기  (6) 2009.08.12
Active Noise Control - ANC  (0) 2009.08.12
WAVEFORMATEX structure  (0) 2009.04.01
음속  (0) 2009.03.30
Posted by 구차니
능동 소음 제어는, 들어오는 소리의 반대파형을 출력함으로
소음을 사라지게 하는 기술이다.


[링크 : http://www.themotorreport.com.au/5928/toyota-to-fit-active-noise-cancelling-to-crown-hybrid/]

[링크 : http://en.wikipedia.org/wiki/Active_noise_control]

'모종의 음모 > noise cancelling' 카테고리의 다른 글

파형 뒤집어 플레이 하기  (6) 2009.08.12
WAVE format  (0) 2009.08.12
WAVEFORMATEX structure  (0) 2009.04.01
음속  (0) 2009.03.30
waveInOpen() waveOutOpen()  (0) 2009.03.26
Posted by 구차니
적절한 제목이 안떠오르는데..
아무튼, 특정 이미지를 특정 사이즈의 사각형(Rectangle) 에 맞도록 출력해주는 일이 있는데
예를들면 탐색끼의 미리보기처럼, 100x100사이즈의 미리보기에 어떠한 크기의 이미지가 오더라도
벗어나지 않도록 적절한 크기의 이미지를 출력해주는 함수가 필요했다.

한달정도 깔끔한 알고리즘을 고심하다가 GG치고 다른 방법으로 구현했었는데
약간의 오작동을 보여서, 또 다시 고민을 하다가 어제 퇴근길 지하철에서 !! 했다.


#define min(a,b)    (((a) < (b)) ? (a) : (b))
#define max(a,b)    (((a) < (b)) ? (b) : (a))
#define FALSE               0 
#define TRUE                1 

#define CALC_MULTIPLIER	1000

typedef struct tagRECT {
	int		x1, y1, x2, y2;
} RECT;

RECT getRectsize(RECT dispRect, RECT imgRect)
{
	RECT ret;
	unsigned int Rx, Ry;
	unsigned char bhorAxis = FALSE;
	unsigned char bscale = FALSE;
	
	Rx = imgRect.x2 * CALC_MULTIPLIER / dispRect.x2;
	Ry = imgRect.y2 * CALC_MULTIPLIER / dispRect.y2;
	if(min(Rx,Ry) > CALC_MULTIPLIER)
	{
		if(Rx > Ry)
			bhorAxis = TRUE;
		else	bhorAxis = FALSE;
		bscale = TRUE;
	}
	else if(max(Rx,Ry) > CALC_MULTIPLIER)
	{
		if(Rx > Ry)
			bhorAxis = TRUE;
		else	bhorAxis = FALSE;
		bscale = TRUE;
	}

	if(bscale == TRUE)
	{
		if(bhorAxis == TRUE)
		{
			ret.x2 = dispRect.x2;
			ret.y2 = imgRect.y2 * dispRect.x2 / imgRect.x2;
			ret.x1 = dispRect.x1;
			ret.y1 = dispRect.y1 + (dispRect.y2 - ret.y2) / 2;
		}
		else
		{
			ret.y2 = dispRect.y2;
			ret.x2 = imgRect.x2 * dispRect.y2 / imgRect.y2;
			ret.x1 = dispRect.x1 + (dispRect.x2 - ret.x2) / 2;
			ret.y1 = dispRect.y1;
		}
	}
	else
	{
		ret.x2 = imgRect.x2;
		ret.y2 = imgRect.y2;
		ret.x1 = dispRect.x1 + (dispRect.x2 - imgRect.x2) / 2;
		ret.y1 = dispRect.x2 + (dispRect.y2 - imgRect.y2) / 2;
	}
	return ret;
}


간단한 구현원리는

1. 가로길이의 비율, 세로길이의 비율을 얻는다. (원본 크기 / 넣어야 할 크기)
   Rx, Ry - 가로 세율의 비율
   Ix, Iy - 원본 이미지의 가로세로 크기
   Dx, Dy - 표시할 사각형의 크기
   Rx = Ix / Dx
   Ry = Iy / Dy
2. 만약에 축소가 필요 하다면, 위의 비율은 1을 넘게 되고, 축소가 필요 없으면 1 이하가 나온다.
3. 비율값들이 모두 1을 넘으면 어느 방향이던지 간에 축소를 해주어야 함
4. 비율값들이 둘다 1이하면 그대로 출력하면 됨
5. 비율값이 하나만 1보다 크면, 작은쪽 값이 맞추어 축소함

'모종의 음모 > Bitmap 조작' 카테고리의 다른 글

완전 날로먹는 Bitmap 구조분석하기  (6) 2009.03.28
Posted by 구차니
바코드 리더 관련 정보는 정말 눈 씻고 뒤져봐도 안나온다.
이유는 간단하다.

바코드 리더 = 특화된 키보드

메뉴얼을 읽어 보면
prefix / suffix가 존재하고, 이에 따라서 처리방법이 조금씩 달라지지만,
PS/2 방식의 바코드 리더의 경우에는 실질적으로 키보드와 다를바가 전혀없다.
그렇게 때문에, 바코드 리더 프로그래밍이란 것은 실질적으로 존재하지 않는 것이다.


prefix - 접두어(잘 쓰이는지는 모르겠지만, STX 가 있는것 봐서는 RS-232 시리얼 통신 표준을 맞추는데 사용하는 것 같다)
suffix - 접미어 (예를 들어 엔터 몇번이냐, 엔터를 어떤걸로 - CR/LF - 처리하냐 정도의 차이)


[링크 : http://www.iepos.com/support/symbol/ls1004userprogrammermanual.pdf]

'모종의 음모 > 바코드 리더' 카테고리의 다른 글

MFC 에서 바코드리더 메시지, 버츄얼 키  (0) 2009.06.17
바코드 폰트 (code 39)  (0) 2009.06.15
barcode reader - PS/2 type  (2) 2009.06.12
Posted by 구차니