개발과삶2010.08.11 21:00
안드로이드용 앱을 개발하면서 자주 사용하는 비동기 작업 코드를 정리하였습니다.

1. Handler
new Handler().postDelayed(new Runnable() {
     @Override
     public void run() {
         // 로직(단시간 처리가능한 로직) & UI
     }
}, 1000); // 1초후 실행

2. AsyncTask
new AsyncTask<String, Integer, Boolean>() {
    @Override
    protected void onPreExecute() {
        // UI 처리
        super.onPreExecute();
    }

    @Override
    protected Boolean doInBackground(String... params) {
        // 로직 처리
        return true;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        // UI 처리
    }

    @Override
    protected void onPostExecute(Boolean result) {
        // UI 처리
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }
}.execute();

3. Timer & TimerTask
new Timer().schedule(new TimerTask() {
    public void run() {
        // UI 및 로직
    }
}, 1000); // 1초후 실행

4. Theard & Message
new Thread(new Runnable() {
    @Override
    public void run() {
        // 로직처리
        handler.sendEmptyMessage(0);
    }
});

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        // UI처리
    }
};


Posted by 종이비행기
개발과삶2010.08.11 01:32
예전에 아이팟 한글 키보드 제작하셨던 분이신 듯 합니다. 이번에도 이렇게 한글 키보드를 만들어 주시니 감사할 따름입니다.
아직 정식 iOS에는 한글 키보드가 없기 때문에 탈옥한 아이패드 유저분만 이용이 가능하십니다.
한글 키보드 설치방법은 개발자님 블로그를 참고하세요.

http://codedesign.tistory.com/51


Posted by 종이비행기
개발과삶2010.06.20 09:50
올해 초에 리뷰에 참여 했었던 책입니다. 입문서는 아니고, 입문서를 본 이후에 다른 개발자들은 어떤 식으로 개발하는가 궁금할 때 보기 딱 좋은 책이며 저의 추천서적 입니다. APress에서 나온 책을 지앤선에서 한국어로 번역 출판한 책이구요.

7명의 저자들이 각기 다른 방식으로 개발을 하면서 얻게된 지식이나 생각들을 잘 정리하여 장황하게 코드가 나열된 개발서적 보다는 더 가치가 있어 보입니다. 두께도 전철안에서 볼 수 있을 정도로 작고 비교적 얇아서 좋았습니다.

번역은 류정원님이 하셨는데, 개발 경험을 적절히 노트하여 독자들이 이해하기 쉽도록 하였습니다. 참고로, 한국 최초 우주인 후보 10인에 선발되었던 재미있는 이력도 있으신 분입니다.

1. 초 간단 버전 프렌직 Frenzic 퍼즐 게임 제작
2. 마이크 애쉬의 피어투피어 네트워킹 파고 들기
3. 한번에 여러 가지 일들 해치우기: 스레드를 이용한 성능 향상
4. 신기한 손가락의 마술: 멀티터치 인터페이스의 설계와 구현
5. cocos2d 아이폰 프레임웍을 이용한 물리 모델, 스프라이트 Sprites, 그리고 애니메이션
6. 판도라 라디오와 함께하는 오디오 스트리밍의 세계
7. 코어 로케이션, XML, SQLite 와 함께 루티시 따라잡기
Posted by 종이비행기
개발과삶2010.05.19 22:06

2010년 5월 6일 드디어 베일에 가려져 있던 bada 모바일 플랫폼 SDK가 개발자들에게 공개되었습니다. 아직 bada 플랫폼이 적용된 스마트폰이 발매되지 않았고 SDK 또한 beta 버전이기는 하지만, 단기간에 개발되었다고는 하나 SDK를 보면 제대로 만들었다고 생각이 들게 합니다.
한국은 미국에 비해 소프트웨어 산업이 전반적으로 약하나 특히 시스템 소프트웨어는 더 심합니다. 큐브리드 DBMS 프로젝트를 참여하게 된 것도 그런 바탕을 미력이나마 도울 수 있을까 하는 고민에서 시작하였습니다. bada 또한 저에게는 한국의 대표 기업인 삼성이 모바일 플랫폼 분야에서 세계적인 모바일 기업인 애플과 나란히 할 수 있기를 바라는 마음에 관심을 갖게 되었습니다.
공부하는 입장에서 쓰는 글이라 부족한 점이 많겠지만, 함께 스터디를 해나간다고 생각하시고 양해해주시길 부탁드리겠습니다. 함께 bada에 뛰어들어보자구요~


bada SDK가 설치되었다고 가정하고 프로젝트 생성부터 시작하겠습니다.



1. 프로젝트 생성 File - bada Application Project를 선택합니다.




2. 프로젝트 생성 마법사가 보입니다.

프로젝트명을 적절히 입력하여 주세요(FormTestApp으로 하겠습니다). Project type에는 Application의 bada Form Based Application을 선택하겠습니다.


(맥 사용자인데 개발도구가 맥용으로 개발이 되었으면 좋겠습니다^^)

다음의 각 프로젝트 템플릿별 설명은 삼성에서 공개한 문서에서 발췌하였습니다.

1. bada 프레임 기반 어플리케이션(bada Frame Based Applications):
    • This template is suitable for creating a simple project based on a frame.
    • 이 템플릿은 프레임을 기반으로 둔 간단한 프로젝트에 적합하다.
    • You can create an application for getting more familiar with bada or for testing particular steps in application creation.
    • bada에 더 친숙해지기 위해 또는 어플리케이션 생성의 특정 절차의 테스트를 위해 어플리케이션을 생성할 수 있다.
    • This template contains the basic application functionality as well as the functionality for printing out the project name on the device screen.
    • 이 템플릿은 디바이스 화면에 프로젝트명이 출력되는 기능과 같은 기본 어플리케이션 기능을 포함한다.


2. bada 폼 기반 어플리케이션 (bada Form Based Applications):
    • This template is suitable for creating a simple project based on a form.
    • 이 템플릿은 폼 기반의 단순 프로젝트를 생성하는데 적합하다.
    • This template contains the basic application functionality as well as the functionality for drawing a form on the device screen.
    • 이 템플릿은 디바이스 화면에 폼을 그리는 기능과 같은 기본 어플리케이션 기능을 포함한다.


3. bada 빈 프로젝트 (bada Empty Project)
    • This template is suitable for creating a project with only project files without any source or include files. The template is used for importing the existing source files.
    • 이 템플릿은 어떠한 소스나 포함된 파일도 없이 오직 프로젝트 파일만을 가진 프로젝트를 생성하는 데 적합하다. 이 템플릿은 존재하는 소스 파일을 추가하는 용도로 사용된다.


4. bada 정적 라이브러리 (bada Static Library)
    • This template is suitable for creating an application library with static libraries. If you select this template, you need to make sure that the Linker of the IDE can access the external libraries at the build time. Therefore, you need to define the path to the libraries in the project settings. When you build the project, the IDE creates the links to the external static libraries.
    • 이 템플릿은 정적 어플리케이션 라이브러리를 생성하는 데 적합하다. 이 템플릿을 선택하면, IDE의 링커가 빌드 시점에 외부 라이브러리에 접근할 수 있도록 만드는 데 필요하다. 그러므로, 프로젝트 설정에서 라이브러리의 경로를 정의할 필요가 있다. 프로젝트를 빌드할 때, IDE는 외부 정적 라이브러리로 링크를 생성한다.



3. bada SDK를 선택하는 화면 입니다.

다음 단계로 넘어갑니다.





4. 디바이스 설정 화면 입니다.

manifest.xml 파일을 생성해야하는데, bada 개발자 홈페이지에서 생성할 수 있으며 현재는 테스트 개발이므로 기본 파일을 사용하겠습니다. 다음 단계로 넘어갑니다.





5. 기본 폼 이름을 정합니다.

디바이스에서 실제로 화면을 꾸밀 수 있는 개체가 바로 폼입니다. Form 클래스를 상속해서 만들게 되어 있는데, 현 단계에서는 Form을 상속한 사용자 정의 폼을 만들게 됩니다. Form name에는 MainForm을 입력하겠습니다. 다음 단계로 넘어갑니다.





6. 기본 설정 화면 입니다.

Vendor나 Description에 적절히 입력을 하시고 다음 단계로 넘어갑니다.





7. 디플로이(deploy)를 위한 환경설정 화면 입니다.

다음 단계로 넘어갑니다.





8. 이제 프로젝트 생성 마법사의 마지막 단계 입니다.

Finish를 하시면 됩니다.





9. 이렇게 하여 첫 프로젝트를 만들었습니다.





10. 실행

실행 방법은 프로젝트를 선택하시고 마우스 우클릭하시면 컨텍스트 메뉴가 나오는데, Run As - bada Simulator Application을 선택하면 bada 시뮬레이터가 뜨면서 방금 만든 프로젝트가 실행됩니다. (이클립스 유저라면 잘 아시죠?)
단, 최초 빌드시에는 Java 개발시와는 다르게 Run As만으로 실행되지 않습니다.
Java는 실시간으로 컴파일되어 class가 생성되지만,
C++는 특성상 컴파일후에 링크과정이 있기 때문에 최초 Build를 한 다음 Run을 해야 정상적으로 실행이 됩니다.
아래 화면에 Build Project를 한 번 해주신 후 Run As를 이용하여 실행해주시면 되겠습니다.




Posted by 종이비행기
개발과삶2010.05.12 09:31


What is bada?
bada란?

bada, (bɑdɑ, the Korean word for “ocean”,) is a new smartphone platform that allows developers to create feature-rich applications that elevate the user experience in mobile spaces.
bada(한국어로 바다를 뜻하는 단어)는 모바일 공간에서 개발자들이 사용자 경험을 높여 특색있는 어플리케이션을 만들 수 있게 하는 새로운 스마트폰 플랫폼이다.


User-interactive
사용자 상호작용

Samsung bada includes a new UI framework that supports the next generation Samsung touch UI. The main UI delivers simplicity and ease, without decreasing usage efficiency. The UI framework introduces an open-ended evolutionary innovation from the current touch UI to leverage better user experiences.
삼성 bada는 차세대 삼성 터치 UI를 지원하는 새로운 UI 프레임워크를 포함한다. 메인 UI는 사용함에 있어 효율의 저하없이 간결함과 편리함을 준다. UI 프레임워크는 더 나은 사용자 경험을 주기 위해 최근 터치 UI로부터 제한없는 진화된 혁신을 소개한다.

Some additional UI tools include the ability to embed the Adobe® Flash® Player and the WebKit Internet browser directly into native bada applications, allowing seamless integration of premiere UI technologies. Also, the bada map control is easily embedded in your applications to deliver interactive mapping and routing with POI features for your users.
몇몇 부가적인 UI 도구는 bada 네이티브 어플리케이션에 직접적으로 Adobe® Flash® Player와 WebKit Internet browser를 추가하는 기능을 포함하여, UI 기술들의 매끄러운 통합이 가능하다. 또한, bada 맵 컨트롤은 사용자들에게 POI로 경로를 찾고 상호작용하는 맵핑을 제공해야 하는 여러분의 어플리케이션에 쉽게 임베드 된다.

The bada platform provides user interaction modalities including motion sensing, fine-tuned vibration control, and face detection. These interfaces open up new possibilities for greater creativity and user interactivity in developing applications. Samsung bada also provides a mechanism to develop sensor-based, context-aware applications. With weather service and sensors such as acceleration, magnetic, tilt, GPS, and proximity sensors, application developers can easily implement context-aware, interactive applications.
bada 플랫폼은 모션 센서, 미세하게 조정이 되는 진동 컨트롤, 그리고 얼굴 인식을 포함하는 사용자 인터렉션의 방식을 제공한다.
이들 인터페이스는 개발하는 어플리케이션에 있어 창조성과 사용자 상호작용의 새로운 가능성을 열어준다. 삼성 bada는 또한 센서기반(sensor-based), 문맥인식(context-aware) 어플리케이션을 개발하기 위한 메커니즘을 지원한다. 날씨 서비스와 가속, 자기, 틸트, GPS, 그리고 근접 센서와 같은 센서 어플리케이션 개발자들은 쉽게 문맥인식(context-aware), 상호작용(interactive) 어플리케이션을 구현할 수 있다.


Service-oriented
서비스 기반

Samsung bada introduces several new service-centric capabilities that differentiate it from conventional mobile operating systems. These new features include social networking, content management, location-based services, and commerce services, all supported by back-end bada servers. Developers can now create service-centric applications without additional effort compared to developing mobile standalone applications.
삼성 bada는 기존의 모바일 운영체계와 구분 짓는 여러 새로운 서비스-중심(service-centric) 능력을 보여준다. 이들 새로운 특징들은 백엔드(back-end) bada 서버들에 의해 지원되는 소셜 네트워킹, 컨텐츠 관리, 위치-기반 서비스, 커머스 서비스를 포함한다. 개발자들은 이제 독립형 모바일 어플리케이션을 개발하는 것에 비교해서 추가 노력 없이도 서비스-중심 어플리케이션을 만들 수 있다.

Social networking applications can manage user profiles, including buddy information for application users, and can integrate users on most popular social networking services. Content management applications can store and search contents on devices and servers. Location applications can use landmark stores, maps, and geo-coding services. Commerce applications can sell products, such as game items in applications.
소셜 네트워킹 어플리케이션은 어플리케이션 사용자들의 친구 정보를 포함하는 사용자 프로파일을 관리할 수 있으며, 대부분의 유명한 소셜 네트워킹 서비스의 사용자들과도 통합이 가능하다. 컨텐츠 관리 어플리케이션은 디바이스와 서버에서 컨텐츠를 저장하고 검색할 수 있다. 위치 어플리케이션은 이정표, 지도, 지오코딩 서비스를 사용할 수 있다. 커머스 어플리케이션은 어플리케이션 내부에서 게임 아이템과 같은 상품을 판매할 수 있다.


Open and Configurable
개방 및 설정가능

Samsung bada enables developers to take full advantage of mobile device capabilities to easily create compelling applications. Applications can use device functions to make phone calls, send messages, or access the contact list, as various application controls allow developers to create richer, more consistent applications.
삼성 bada는 개발자들에게 강렬한 어플리케이션을 쉽게 만들기위한 모바일 디바이스 기능의 장점을 취할 수 있도록 한다.
어플리케이션은 전화 걸기, 메시지 전송, 주소록 접근, 부유하게 만들기 위해 개발자들에게 허용하는 다양한 어플리케이션 컨트롤로 더욱 일관된 어플리케이션을 만들기 위해 디바이스 기능들을 사용할 수 있다.

Different service applications can share information such as personal profiles, social relations, schedules, and contents with simple user confirmation, all in order to provide services with greater personal relevance and cooperative service extensions. For example, social networking applications can share user information with commerce or location-aware applications, and share photos from other content publishing applications.
서로 다른 서비스 어플리케이션은 거대한 개인 관계성과 협력하는 서비스 확장과 함께 서비스를 제공하기 위한 모든 것이 간단한 사용자의 승인만으로 소셜 릴레이션, 스케쥴, 개인 프로필과 같은 정보를 공유할 수 있다.

The bada platform is kernel-configurable so that it can run either on the Linux kernel or real-time OS kernels, which makes bada applicable to a wider range of devices than any other mobile operating system. Samsung bada uses Eclipse and a GNU tool- chain, providing developers with a popular and extensible development environment.
bada 플랫폼은 커널 설정이 가능하기에 bada는 어떠한 모바일 운영체계보다 광대역의 디바이스를 지원하여, 리눅스 커널 또는 실시간 OS 커널을 실행할 수 있다. 삼성 bada는 개발자들에게 유명하고 확장성 있는 개발 환경을 제공하는 Eclipse와 GNU 컴파일 도구들을 사용한다.


bada Architecture
bada 아키텍처

Samsung bada has a four-layer architecture: kernel, device, service, and framework layers. The kernel layer can be the Linux kernel or a real-time OS kernel, depending on the hardware configuration. The device layer provides the core functions as a device platform, such as system and security management, graphics and windowing system, data protocols and telephony, as well as audio-visual and multimedia management. The service layer provides service-centric functions that are provided by application engines and web-service components interconnecting with bada Server. Only the framework layer can export the C++ open API. The framework consists of an application framework and functions exported by the underlying layers.
삼성 bada는 커널, 디바이스, 서비스, 프레임워크, 이 4개의 레이어 아키텍처를 가진다. 커널 레이어는 하드웨어 설정에 따라 리눅스 커널 또는 실시간 OS 커널이 될 수 있다. 디바이스 레이어는 시스템과 보안 관리, 그래픽 및 윈도우처리 시스템, 데이터 프로토콜, 전화, 오디오-비주얼 및 멀티미디어 관리와 같은 디바이스 플랫폼의 핵심 기능을 제공한다. 서비스 레이어는 bada 서버와 결합되는 어플리케이션 엔진과 웹서비스 컴포넌트에 의해 지원되는 서비스-중심의 기능을 지원한다. 오직 프레임워크 레이어만이 C++ 오픈 API로 나와 있다. 이 프레임워크는 기저 레이어에 의해 산출된 어플리케이션 프레임워크와 함수들로 구성된다.



Posted by 종이비행기
개발과삶2010.05.07 14:14

삼성의 모바일 플랫폼 '바다'의 SDK가 발표되었습니다.
아이폰OS, 안드로이드의 주요 모바일 플랫폼속에서 경쟁력을 갖고 성공하기를 개인적으로 바래봅니다.
Posted by 종이비행기
개발과삶2010.03.13 09:16
구글 앱스 마켓플레이스는 기업용 웹 애플리케이션을 판매하고 End User들은 이를 사용하는 구조의 오픈 앱 마켓입니다.
구글 앱스 계정을 이미 갖고 있을 경우 무료/유료의 웹 애플리케이션을 마음대로 사용할 수 있으므로 솔루션을 별도로 개발하거나 시스템을 직접 운영하기 힘든 기업의 경우 또는 관리를 아웃소싱하려는 기업에는 훌륭한 기회가 되리라 봅니다.

구글앱스 계정으로 로그인한 상태에서 앱스 마켓플레이스에서 애플리케이션을 설치하는 과정을 살펴보도록 하겠습니다.

1. 구글 앱스 계정에 로그인 합니다. 단, 관리자계정으로 로그인하여야 합니다.

2. 로그인해서 대시보드로 들어가면 아래와 같은 화면을 볼 수 있습니다.

3. 우선 현재 상태에서는 구글 앱스 마켓플레이스에서 애플리케이션을 설치하려고 하면 400 Bad Request 에러를 접하게 됩니다. 도메인 설정 탭을 클릭하시고 나오는 화면의 제일 하단에 있는 제어판 항목에서 다음 세대(영어로만 제공)을 선택해 줍니다.

4. 변경사항을 클릭해서 작업을 마무리 합니다. 그러면 화면이 정말로(?) 영문으로 나오게 됩니다.

5. 메뉴탭에서 Dashboard를 클릭합니다.

6. Add more services를 클릭합니다.


7. Other services에 있는 Google Apps Marketplace의 링크를 클릭하여 앱 마켓플레이스로 이동합니다.


8. 원하는 앱을 선택하여 상세보기로 들어가서 우측에 있는 Add it now를 클릭합니다.


9. 앱스 도메인 입력폼이 나옵니다. 앱스 도메인을 입력해줍니다. 저는 제 도메인인 pcraft.kr을 입력했습니다. 그리고, Go를 클릭하세요.
        


10. 약관에 동의를 해줍니다.


11. 데이터 접근 권한을 허용해줍니다.


12. 환경설정에 대한 설명이 나옵니다. Continue를 클릭해줍니다.


13. 설치한 앱을 사용가능한 상태로 변경합니다.


14. 대시보드로 다시 돌아가게 되는데, 제일 하단에 보면 방금 전에 설치한 앱이 보일 것입니다. Socialwok이 보이네요. 이제 설치가 끝났고, 클릭하시면 실행이 됩니다.


구글에서는 도메인설정에서 제어판을 다음세대로 해야 앱이 설치된다는 사실을 알려주지 않아서(제가 못찾았을 수도 있겠습니다) 한참을 찾다가 어떤 블로그의 글을 보고 방법을 알게 되었습니다. 'Google Apps Marketplace giving you 400 Bad Request?'

앱 마켓플레이스를 통해 경쟁력 있는 국내 소프트웨어 개발사 및 개인 개발자들의 글로벌 시장 진출이 더 수월하게 되었습니다. 이를 기회로 한국의 소프트웨어 산업이 성장할 수 있기를 기대해 봅니다.

Posted by 종이비행기
개발과삶2010.03.12 02:19

iPhone, Android 등등 대부분 모바일 기기와 관련된 앱스토어 일색이었는데, 갑작스레 등장한 앱 스토어가 있었으니 바로 구글 앱스 마켓플레이스 입니다. 특히나 기업용 웹 애플리케이션을 판매하는 마켓이 열렸다는 데서 큰 충격이었습니다.
개발자나 소프트웨어 회사에게는 또 하나의 기회의 땅이 될 수 있어서 좋기는 하지만, 반면 구글 내부에 숨겨진 큰 야심이 조금씩 드러나는 것 같기도 해서 불안한 마음도 있습니다. 물론, 개발자로서는 이런 시장이 생겼다는 데에 큰 의미가 있겠습니다.

마케팅, 유통, 운영은 구글에 맡기고 개발자 및 개발회사는 제품에만 집중하면 되니 이 보다 더 좋을 수는 없을 듯 합니다. MS도 어플리케이션 마켓 시장을 열어주면 좋겠습니다. (그러면 우리 참을인이 좋아하겠지요 ㅋㅋ)

Posted by 종이비행기
큐브리드2010.03.08 01:26
databases 디렉토리에 이미 생성하고자 하는 데이터베이스명으로 된 디렉토리가 존재할 경우 오류처리가 되지 않고 데이터베이스 생성 프로세스로 넘어가서 CM Server로부터도 정상적인 오류 메시지를 받지 못하는 문제로
서버에 연결할 수 없습니다. CUBRID 매니저 서버의 구동 상태와 연결 설정(Port,IP등)을 점검하십시오.
와 같은 오류 메시지가 출력되어 왔습니다. 데이터베이스 생성전 디렉토리 검사 프로세스에서 존재시 오류 메시지를 출력하는 것이 더 좋은 방법이라 생각되어 오류 메시지를 추가하였습니다.

-- 목적 데이터베이스명(디렉토리명)으로 된 디렉토리가 존재하지 않을 경우
task:checkdir
status:success
note:none
noexist:C:\CUBRID\databases\testdb

-- 이미 존재할 경우
task:checkdir
status:success
note:none


// if a directory is not exists, display a alert window.
if (dirs == null || dirs.length == 0) {
    Display.getDefault().syncExec(new Runnable() {
        public void run() {
            CommonTool.openErrorBox(getShell(),
                    Messages.bind(Messages.msgExistDbFound, databaseName));
            isCanFinished = false;
            getShell().setVisible(true);
        }
    });
}

Posted by 종이비행기
큐브리드2010.03.04 01:17
한줄로 자랑하는 큐브리드 적용 스토리! 여러분도 함께 참여해 보세요. 

Posted by 종이비행기

티스토리 툴바