달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

이건 좀.. 부크러운 정보이긴 합니다

제가 엄청 삽질하다가 MSDN보고 아...  한거 였으니깐요

다들 아시는 분들도 많으시겠지만..

저처럼 부끄러운일 안당하시도록 제가 총대 매고 적어 올립니다

 

스마트폰개발이 활성화 되면서 무엇보다 중요한 것은 UI입니다

(요즘은 사용자의 경험을 중요시한다고 해서 UX라고 부르기도 한답니다)

그러다보면 가장 쉽게 할 수 있는 것이 바로 이미지로 작업 하는 것 인데요

 

이렇게들 많이 사용하실 것 입니다

Bitmap imgBuf_Title = new Bitmap(480,800);

 

VWGA급 같은 경우 같은 WQVGA에 비해

같은 이미지의 영역에 표현하려면4배의 용량을 갖게 됩니다

이러다보면 무턱대고 Bitmap 객체 잔뜩 생성해서 이미지를 열심히 넣다보면

단말기의 실행메모리는 아직 여유가 있는데 프로그램이 죽어버리는 것을 보실 수 있는데요

 

이건 WinCE 단말기에서 그래픽 입출력을 담당하는 (간단하게 표현한 것 입니다) GWES.exe 프로세스가

20M정도 넘어가면 프로세스 자원 확보를 위해 자체적으로 관련 어플리케이션을 종료시키 때문 입니다

GWES.exe의 역할은 이곳에서 확인하세요 http://blog.naver.com/kri7001?Redirect=Log&logNo=30043684638

이런 상황이 오게 되는 것 이지요...

더 정확하게는 User Application에서 Data Abort에러가 발생하지만  watson에서 그 에러를 GWES에서 처리할 수 있도록 해주기 때문에 GWES.EXE에서 문제가 보이는 것처럼 되는 것 입니다

 

아무래도 장치 드라이버와 입출력 관련 디바이스를 직접적으로 제어하는 것 이다보니

많은 양의 데이터가 누적되어 있는 경우 안전을 위하여 자체적으로 어플리케이션을 종료 시킵니다

사용자가 원치 않는데 종료되는 원인 중 하나 이기도 하구요

 

재미있는것은 예전에 나온 단말기인 Axim X51v에서는 GWES.EXE의 누적이 거의 없는데

옴니아1, 옴니아2에서는 심각하게  누적되는 것이 눈에 보이네요

 

잡설이 좀 길었습니다만.. 결론은 간단합니다

 

Bitmap을 선언하실 때 다음처럼 선언해 주세요

Bitmap imgBuf_Title = new Bitmap(480,800,  PixelFormat.Format16bppRgb565 );

http://msdn.microsoft.com/ko-kr/library/system.drawing.imaging.pixelformat(VS.80).aspx

 

간단하게 32bit에서 16bit로 내려주는 것 만으로도 충분한 효과를 볼 수 있습니다

가장 좋은 것은 최대한 사용을 줄이고, 따로 관리하는 방법이겠지만..

어쩔수 없이 사용해야 한다면 저렇게 낮춰 주는게 명답이겠네요

 

그냥 책에 있는 예제만 보고 만들다보니 저런 간단한 곳에서 실수를 해버리네요..


:
Posted by Lunaness

이번에 옴니아2에서 프로그램 실행 도중 하드웨어 키 입력 시 변경되는 문제 때문에

고민고민하다가 찾아둔 내용이라 백업 겸 작성합니다

 우선 출처는 데브피아 입니다 (http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=7083&MAEULNo=911&no=41648&ref=41520)

하드웨어 키를 입력 받기 위해서 .Net CF에서는 Hardware 컨트롤이 존제합니다만...
옴니아2에서 사용자가 변경할 수 있는 키는 단 한개로
(물론 직접 레지스트리를 수정하거나 해서 하드웨어 키를 지정할 수 는 있지만요)

HardwareButton bt;
bt.HardwareKey = HardwareKeys.ApplicationKey1;

이런식으로 선언하여 KeyDown에서 감지하기에는 통화버튼, 종료버튼, 볼륨조절, 잠금버튼, 카메라 버튼 과 같은 키 입력은 감지를 하지 못합니다

또한 키 입력을 막기 위해서

AllKeys(TRUE);

라는 것을 사용하지만, 이렇게 하면 모든 하드웨어 키 이벤트가 막히는 상황인지라...
찾다보니 API를 이용한 키보드 후킹으로 조건을 분리하여 처리하는 것을 찾았습니다

 

이예찬 (blackmagic2) 

네이티브 메소드를 이용했습니다^^

Sunscape 라는 프로그램에서 발췌(?) 했는데요,,


        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

        [DllImport("coredll.dll")]
        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

        [DllImport("coredll.dll")]
        public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

        public struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public IntPtr dwExtraInfo;
        }

 

이 소스를 추가해 주시교요,,


        private readonly NativeMethods.HookProc HookProcedure;
        private readonly int hHook;

이 소스를 선언부에 선언 해 주시구,,

 

Form 클래스의 생성자 메소드에


            HookProcedure = KeyboardHookProc;
            hHook = NativeMethods.SetWindowsHookEx(20, HookProcedure, IntPtr.Zero, 0);

를 추가해 주세요

 


        private static int KeyboardHookProc(int code, IntPtr wParam, IntPtr lParam)
        {
            NativeMethods.KBDLLHOOKSTRUCT hookStruct = (NativeMethods.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(NativeMethods.KBDLLHOOKSTRUCT));
            if (code >= 0)
            {
            }
            return 1;
        }

그다음 이 함수를 추가해 주시면 됩니다^^
if문 사이에 특정한 키가 눌리면 이벤트를 발생시키는 구문을 넣으면 될 것 같군요^^;

 

잠기기는 하다만,,, 확실히 완벽한지는 잘 모르겠군요^^

완벽한지는 모르겠다고 하셨지만..  정말 잘 됩니다
KeyboardHookProc에 모든 코드를 처리하지 않고 return 1;로 하였기 때문에 전부 키가 막히는데요
이걸 약간 고치면 하드웨어 키 마다 각각 다른 작업을 처리할 수 있게 변경이 가능합니다

/// 0x72 : call button
/// 0x73 : end button
if (hookStruct.vkCode == 0x72 || hookStruct.vkCode == 0x73)
{
     SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;
}
/// 0x5b : Home Button
else if (hookStruct.vkCode == 0x5b)
{
     SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;
     main_VisibleForm();
}

return 0;

저는 이런식으로 고쳤는데요, 분기점이 많은 것 도 아니라서 그냥 if문으로 분리 했습니다
hookStruct에 있는 vkCode를 참조하시면 입력받는 하드웨어 버튼의 키가 나오네요
일단 옴니아1, 옴니아2에서 정상 동작 합니다
마지막에 return 0를 해준 것은 1로 해주면 통화버튼을 눌렀을 때, 키패드창이 안나타나서 return 0로 변경한 것 입니다

:
Posted by Lunaness
2009. 11. 19. 11:03

PDA에서 스마트 폰 까지 Smart Phone Story/Windows Phone2009. 11. 19. 11:03

스마트 폰은 참 매력적인 기계 입니다

지금은 경계가 애매모호하게 되어 스마트폰과 PDA를 동일하게 인식하고 있는 상황입니다만

엄밀히 따지면 PDA –> PDA+Phone –> 스마트 폰  으로 진화를 한 것이라 생각 됩니다

 

90년대 중반 PDA가 활성화 되기 시작하면서 처음 접해본 단말기가

국내제품인 Cellvic이었습니다

bunnylub_3

 

물론 그 전에도 제품들이 많이 나왔었지만

금전적으로 여유도 없었고, 아직은 고가의 제품들이라 쉽게 접하기 어려웠기에

정보만 수집하면서 나름 상상을 가지며 설래였던 기억들이 많이 있네요

 

Cellvic을 사용하면서 개조도 많이 하고, 한번 도둑 맞기도 했고,

다시 구입해서 개조하다 부셔먹고, 단종 이후에 Cellvic i를 구입해서 쓰다가 결국은 책상속에서 잘 자고 있습니다

KCUG에서 SDK를 받아서 개발도 해보려고 했었으나 그 당시 실력이 안되어 좌절했던 적이 있었네요

당시 플랙시스 키보드 제조사에서 okada라는 닉네임을 사용하시는 분께 초대받아서 간 적도 있었던

추억이 많은 제품입니다

 

그 이후로 Symbian 플랫폼을 탑재한 Diamond사의 mako를 구입해서 사용했습니다

Diamond Mako는 Psion revo의 동일한 모델로 미국 Diamond사에서 출시한 제품이었습니다

이 제품이 치명적인 조루 베터리의 단점과 Diamond사의 PDA사업 철수로 싸게 나온 제품을 업어와서

베터리 팩도 만들고, 백라이트도 교체하고 잘 사용했었습니다

최고의 장점은 아마 풀쿼티 키보드가 아녔을까 생각이 듭니다

이걸로 레포트도 쓰고, DOS 에뮬레이터로 TouboC++을 돌려서 간단한 프로그램도 만들었던 기억이 나는군요

1093702402_p_12772-7 1093702402_p_12767-1

 

그 다음에 접했던 제품은 컴팩의 ipaq 3850

IPAQ_3800

지금은 HP ipaq으로 이름이 붙어서 나오지만 우연찮게 쓰시던 분이

한번 써보라고 해서 얻어서 반년정도 사용하다 다시 돌려드린 제품 입니다

그래서 그닥 추억은 없지만 흑백 모델만 사용하던 제가 처음으로 접했던 컬러 제품을 보고 열광했던 기억은 있네요

 

그리고 한동안 PDA에 대해서 쉬고 있다가

미국에 갔을 때 Dell Axim x51v를 구해서 사용했습니다

x51v_thejuri x51v_1_thejuri

중고로 구입해서 액정에 스크레치가 있었지만 하이엔드급 PDA로 매우 잘 썼던 좋은 제품 입니다

WM5를 처음 접하게 되었지요

3850에서 베터리가 나가면 완전 리셋 되는 악몽을 WM5를 통해 처음으로 해소했던 기억이 있습니다

그래픽 가속칩셋이 있어 OpenGL이나 Direct3D도 원할하게 돌아가고

640x480 VGA 해상도를 통해서 고화질의 동영상도 봤고

WI-FI와 블루투스 내장으로 외장형 블루투스 GPS수신기를 구입해서 지오테깅과 네비로도 잘 사용했던

최고의 제품이었습니다

이때부터 스마트 폰용 프로그램을 개발하고자 맘 먹었던 것 같네요

지금 이녀석은 WM6로 롬 업데이트 후 회사에서 개발에 유용하게 쓰고 있습니다

 

그리고 PDA와 전화기를 동시에 들고 다니기 귀찮아 하던 찰나

WM6가 발표되면서 스마트폰이 쏟아져 나오기 시작했지요

그 전에는 솔직히 PDA+전화기라 분리하고 싶습니다

전화기 모듈도 따로 분리되어서 메인보드 + 전화기 모듈 이런식이어서 전화기 모듈만 빼고도 사용 가능했었거든요

 

그래서 눈을 돌린 것인 SCH-M490 T*옴니아 였습니다

통신사 이동을 통해서 구입했었어도 꽤 비싸게 주고 샀었습니다

2008-12-23_17;51;59_r00tin

옴니아 화이트가 뿜어내는 매력에 그냥 빠져버렸고

지금 쁘띠 다이어리가 완성 될 동안 큰 도움을 준 녀석 입니다

WVGA의 놀라운 화면과 광학 조이스틱 내장으로 심플하면서 스마트한 버튼 구성

7색 LED를 통해서 상태 표시와 조도센서, 근접센서(효과는 못봤지만요)

가속도 센서, WI-FI, 블루투스, 5M 카메라 등등 최고의 스팩을 보여주는 멋진 제품 입니다

무엇보다 스피커와 통화용 스피커가 동일하여 Skype를 설치하고 사용해도 전화기처럼 동일하게 쓸 수 있어

무척 매력적 입니다

 

하지만 현실적이지 않은 RAM으로 인하여 사용하기는 조금 까다로웠습니다

 

그러나…

고질적인 삼성의 기계 불량으로 인해

배를 새번갈라 대수술 끝에 결국 환불을 결정…

정말 참하고 튼튼하고 좋은 제품을 떠나보내는 마음이 꽤나 쓰리더군요

 

지금은 SCH-M715 T*옴니아2 아몰레드 로 정착했습니다

sch_m715_dabinnetwork

솔직히 AMOLED빼고는 별로 마음에 드는 녀석은 아닙니다

옴니아1과 동일한 고질적인 터치 불량은 있지만 참고 쓰다 개선된 터치 패널이 나오면 눈물을 머금고 배를 갈라 교채해 줘야 겠지만요

광학 조이스틱도 없고, LED도 없어서 무선 인터넷이 접속이 되었는지 안되었는지도 모르는 그런 제품….

삼성에서 사용하기 쉽게 만든 UI때문에 엄청나게 RAM을 점유하는 문제는 개선되지 않았더군요

아직 공개되지 않은 SDK, 해외용 제품과는 달리 지자기 센서가 빠져 전자 나침반으로도 못쓰는 상황

(지자기 센서를 막은겁니까, 뺀겁니까.. 개발담당자 말로는 통신사 요청이라고 하는데…)

결국 외부 스피커를 하단에 배치하여 VOIP의 사용이 불편함을 제공하기도 합니다

 

옴니아1보다 20% 부족한 기분이 드는 건 왜일까요

가장 신제품이었지만 저한테는 별로 사랑을 받지 못하는 비운의 제품이기도 합니다

 

 

쭉 살펴보니 많이 사용한 것은 아니네요

전 세계적으로 열풍이 불었던 Palm 씨리즈도 사용 못해봤고

애플사의 아이폰도 못 만져봤고

다른 회사 제품들도 많이 접해보지는 못했는지만

어느센가 제 생활에서 한 부분을 차지하고 있는 PDA를 보면서

새삼 디지털 노예가 되는 것을 느낄 수 있네요

 

그냥 정리하는 기분으로 쓴 글 입니다

너무 깊게 파고들면 지는겁니다!

:
Posted by Lunaness
2009. 8. 21. 09:43

Smart Together Quiz Smart Phone Story2009. 8. 21. 09:43



스마트폰 오픈마켓인 MySmart에서 스마트폰 체험단 퀴즈 이벤트를 진행합니다

총 8주간 미션이 수행되며, 스마트폰 체험활동을 진행한다고 합니다

선정되신분은 신청한 스마트폰으로 지급이 된다니깐 그동안 눈빛만 빛내며 기다리셨던 분들은

한번쯤 신청해보는 것도 재미 있을것 같네요

아 체험단으로 선정되면 SK텔레콤 가입을 원칙으로 한답니다

타 통신 가입자는 신규가입/번호이동을 통해 참여한다니깐 이점 유의하시고 지원하세요~!
:
Posted by Lunaness


SKT의 아이토핑(http://www.itoping.co.kr)서비스를 통합 모바일 오픈마켓 서비스로 변경하면서 시작된
아이토핑 베타테스트를 시작하게 되었다

SKT는 Featured Phone 과 Smart Phone을 동시 지원하는 플랫폼을 개발 진행중이며
금번 모바일 어플리케이션 공모전을 통하여 많은 참석을 유도하고 있다

열심히 활동해봐야지~  유후~


아..  참고로 테스터에게는 데이터통신비 지원을 해준다는군요  유훗~
:
Posted by Lunaness