2011년 8월 31일 수요일

Square Root of Complex Number

As before, r = sqrt(a * a + b * b)

sqrt(a + J*b)
 = sqrt(r) * (sqrt((1 + a / r) / 2) (+ or -) J * sqrt((1 - a / r) / 2))
 = sqrt((r + a) / 2) (+ or -) J * sqrt((r - a) / 2)
 = sqrt((sqrt(a * a + b * b) + a) / 2) (+ or -) J * sqrt((sqrt(a * a + b * b) - a) / 2)

caution ! (+ or -) should be chosen to be the same as the sign of b

example:

sqrt(3 - J * 2) = sqrt((sqrt(3 * 3 + 2 *2) + 3) / 2) - J * sqrt((sqrt(3 * 3 + 2 * 2) - 3) / 2)

2011년 8월 23일 화요일

정부, 삼성, LG의 독자 OS 개발에 대한 생각

아마 예전에도 있었던 행태가 아닌가 기억한다. 보도에서 600억이라는 금액을 투자한다고 하는데 우선 드는 생각이 연구비 사냥꾼에 좋은 먹이감이 아닌가 생각이 든다. 누군가의 펀딩 욕심이거나 누군가의 실적올리기용 꼼수이 아닌가 한다.

아이폰에서 안드로이드폰으로 이어지는 OS 와 제조사의 결합이 이루어 졌다. 뭐 그렇다고 안드로이드가 개방정책을 철회하는것은 아니지만 (혹 그럴지도 모른다) 이 결합에 많이들 걱정하는 것 같다. 뭐 사용자 입장에서 나쁜 것 보다 좋은 점이 더 많다. 우후 죽순처럼 양산되는 완벽하지 못한 안드로이드 폰들을 사용하는 것보다 잘 정돈된 안드로이드폰이 훨씬 쓸만 하니깐. 그런 의미에서 삼성과 LG는 안드로이드 OS자체를 자신의 용도에 맞게 고쳐 쓸 수 있는 혹은 수정할 수 있는 인력의 확보가 더 중요할 지도 모른다. 한 발 더 나아가서 안드로이드 OS에서 파생되는 자체 OS를 개발 할 수도 있다. 안드로이드의 OS의 라이센스를 잘 모르겠지만 물리적으로 얼마든지 가능하다.

그렇지 않고 이 두 OS와 경쟁하기 위해서 지금 당장 처음부터 개발한다는 것은 무모하다. 일정 수준의 완성도를 갖기 위해서 두 회사가 거쳐온 기간과 자금, 지금 현재 유지, 보수되고 있는 노력들을 살펴보면 이해가 쉽다. 만약 안드로이드의 라이센스정책이 그러한 파생 OS를 허용하지 않거나 공개를 철회할 경우, 비슷한 부류의 GNU프로젝트에 투자를 한다던가 개발자를 고용해서 그 프로젝트에 기여하는 방식을 생각해 볼 수 있다. 물론 GPL 라이센스 형식으로 말이다. 그게 유지, 보수 및 개발에 훨씬 유리할 지도 모른다. 안드로이드의 태생도 이러한 방식의 소프트웨어를 기반으로 탄생한 것이었으니깐 말이다. 물론 사적이익 창출이 목표인 삼성이나 LG에서 못마땅 할 수 있지만 공공의 이익을 생각하는 정부 입장에서는 충분히 고려해 볼만한 가치가 있다. 반면 삼성이나 LG의 입장에서는 노키아에 팽당한 인텔의 MiGO프로젝트에 참여하는 방식도 충분히 고려해 볼만한 사항이다. RIM이나 HP를 염두해 두는 목소리도 많은데 내가 보기엔 이 둘과 손을 잡으면 지금 현재 상태의 구글과의 관계보다 더 어려울 수 있다. 이미 OS와 제조를 다 가지고 있기 때문이다.

사용자들은 아무런 걱정을 할 필요가 없다 좋은 것만 잘 골라서 쓰기만 하면된다. 개발자들도 마찬가지로 편한 환경을 골라서 개발하면 아무 문제 없다. 그저 이익이 줄어들어서 걱정하는 삼성과 LG가 문제이지. 그리고 안드로이드가 이상해 지더라도 걱정할 것 없다. 비슷한 목표를 가진 GNU프로젝트는 얼마 든지 많으니깐 당장 쓸정도가 아닌지 모르겠지만 스마트폰의 명세만 잘 공개 된다면 그 누군가의 그룹들이 뚝딱뚝딱하면서 쓸모 있게 만들테니깐 자원들은 풍부하다. 안드로이드도 많은 부분 이러한 자원들에 의존하고 있다. 그러니깐 대부분의 사람들은 삼성, LG 걱정할 필요없다.

2011년 8월 16일 화요일

OpenGL 프로그래밍에 대해서

OpenGL은 하드웨어 독립적인 2D/3D 그래픽 라이브러리이다. SGI사의 IRIS GL라이브러리를 기초로 개발되었지만 개방형이다. 그래픽 라이브러리이기 때문에 기본적인 창관리와 입력처리에 대한 부분이 없다. 그래서 GLUT이라는 보조 도구를 이용해서 창을 관리하고 입력을 관리하는 방법을 제공한다. 이것도 역시 시스템 독립적이기 때문에 OpenGL과 GLUT의 조합이면 어떤 시스템에서도 동일한 결과를 갖는 프로그램을 개발 할 수 있다.

GLUT: OpenGL 유틸리티 툴킷을 줄인 말인 것 같다. 내부에 많은 상태 변수들을 관리하고 있단다. 간단히 초기화하고 창에 점과 선만 그릴 수 있었음 만족한다. 간단히 초기화 하는 법은 다음과 같다.


#include  

void MyIdle(void)
{
   /* 사용된 변수값을 다음 프레임의 상태로 수정해 주는부분*/
};

void MyDisplay(void)
{
   /* 프레임에 실제 그림을 그리는 OpenGL명령어들이 들어간다. */
   /* 프레임이 다 그려진 다음 버퍼를 교체한다. */
   glutSwapBuffers();
};

void main(int argcp, char **argv)
{
   /* GLUT상태를 초기화 한다. */
   glutInit(&argcp, argv);
   glutInitWindowSize(640, 480);
   glutInitWindowPosition(0, 0);

   /* 창을 연다. */
   glutCreateWindow("My OpenGL Application");

   /* 디스플레이모드를 선택한다.:
      이중버퍼 & RGBA색상 */
   glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

   /* 콜백함수들을 등록한다. */
   glutDisplayFunc(MyDisplay)
   glutIdleFunc(MyIdle)

   /* 이벤트 처리엔진을 시작한다 */
   glutMainLoop();
};


2011년 8월 8일 월요일

카메라 신호 분석하기

카메라 센서 설정을 보게 되면 Active High혹은 Active Low라는 설정이 있다. 회사마다 다르겠지만, 아래의 두가지 경우를 설정하는 방식을 다양하게 제공하고 있을 꺼다.

 설명하자면 바로 아래의 사진은 Active Low로 설정된 HREF신호이다. 초기 상태는 이와 같은 상태 일 것이다. 대부분이. HREF신호가 Rising edge로의 변경은 PCLK의 Low edge에서 발생한다. 즉 PCLK 의 rising edge에서 화소값을 읽어 들이면 된다.


이와는 반대로 Active High는 정반이다. 마찬가지로 HREF신호의 HIGH상태로의 전이는 PCLK의 Rising Edge에서 잃어난다. 그럼 동일한 방식으로 화소값은 Falling edge에서 읽어 들이면 된다.


문제는 무엇이냐 하면 둘 중 어떤 것으로 설정해도 화면은 나온다. 읽어 들이는 시점이 이전 상태를 읽어 들여서 문제지. 이상하게 좌측에 검은 줄이 생긴다면 의심해 볼 필요가 있다. Active Low 인지 High인지 읽어 들이는 시점은 정확한지.

비오는 날

비가 와서 산책은 하고 싶고 산에는 못가도 언덕 비슷한 것은 가고 싶다.


비가 많이 와도 나무가 어느 정도 막아 주었다.


이 곳을 내려가면 산에 바짝 붙은 아담한 집이 있다. 보기엔 좋은데 왕래하는 사람이 많아져서 실상 좋은 집은 아닐꺼다.

밤깍는 기계



농기계 전시회에서 구경한 것중 가장 유용한 것 아니었나 싶다. 간단하면서 가장 유용한 것이 진리다.

우기의 자전거 나들이

 장마가 너무나도 길었다. 잠시 소강상태 일때 간만에 열대야가 시작되었을때 방구석에 있는 녀석을 데리고 나갔다. 약간 질퍽하겠거니하고 생각했다. 너무 일찍 나왔다 갯벌 수준이었다. 오자마자 분해 할 수 있는 부분은 분해하고 휠먼저 딱았다.


그리고 사무실에 있는 크랭크 분해 공구들을 빌려서 휠 다음으로 더러워진 크랭크를 딱아 주었다.




지금도 비가 온다. 아무래도 여름내내 이럴거 같다. 느긋하게 생각하고 기다려야지.

메모리 이식 ㅋㅋ

처음엔 메모리가 필요없다고 느꼈다. 심지어는 USB 전용 칩같은건 필요없다고 생각해서 MCU에 딸려 있는 USB를 그냥 사용할 목적으로 사용했었다. 모든 게 잘못된 생각이었다. 결국은 MCU가 CPLD로 바뀌고 USB전용 칩을 달아야만 했다.


하지만 그래도 여전히 부족했다. 그래서 추가적으로 SRAM을 달고 CPLD에 코딩이 추가되었다. 결국은 동작하였지만, 여전히 불안하다. 도망가고 싶을 정도로 걱정 스럽다. 그래도 시간이 지나 니깐 해보아야 겠구나 하는 곳들이 생겨난다. 그냥 들여다 보고 스트레스 받지 말고 멀리서 보자. 이젠 하드웨어는 해볼데로 해보았으니 소프트웨어를 점검해 봐야 겠다.