옵션 프로그램은 단발기의 메뉴버튼을 누르는 것에 의해서 표시되는 메뉴로, 어플리케이션의 보조적인 작업에 이용한다.

import android.view.Menu;
import android.view.MenuItem;

//옵션 메뉴 생성 (1)
    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
       
        //메뉴 항목0 추가 (2)
        MenuItem item0=menu.add(0,MENU_ITEM0,
            0,R.string.menu_item0);
        item0.setIcon(android.R.drawable.ic_menu_add);
       
        //메뉴 항목1 추가
        MenuItem item1=menu.add(0,MENU_ITEM1,
            0,R.string.menu_item1);
        item1.setIcon(android.R.drawable.ic_menu_call);
       
        //메뉴 항목2 추가
        MenuItem item2=menu.add(0,MENU_ITEM2,
            0,R.string.menu_item2);
        item2.setIcon(android.R.drawable.ic_menu_save);
        return true;
    }


//메뉴 항목 선택 이벤트 처리 (3)
    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case MENU_ITEM0:
            showDialog(this,"","항목0이 눌렸음");
            return true;
        case MENU_ITEM1:
            showDialog(this,"","항목1이 눌렸음");
            return true;
        case MENU_ITEM2:
            showDialog(this,"","항목2가 눌렸음");
            return true;
        }
        return true;
    }


   
    //대화상자 표시
    private static void showDialog(final Activity activity,
        String title,String text) {
        AlertDialog.Builder ad=new AlertDialog.Builder(activity);
        ad.setTitle(title);
        ad.setMessage(text);
        ad.setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int whichButton) {
                activity.setResult(Activity.RESULT_OK);
            }
        });
        ad.create();
        ad.show();
    }
}


사용자 삽입 이미지사용자 삽입 이미지


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/10/26 10:33 2010/10/26 10:33
, ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5587

[Android] 구굴맵구현하기

Android Maps API Key 구하기
: http://code.google.com/intl/ko-KR/android/add-ons/google-apis/maps-api-signup.html











크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/10/25 18:42 2010/10/25 18:42
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5584


네트워크 상에 있는 HTML 파일을 읽으려면 WebView 클래스에 있는 loadUrl() 메소드의 인수에 HTML의 URL을 전달합니다. 예를 들어, http://www.ngio.co.kr/tc/ 를 열려면, 다음과 같이 작성합니다.

webView.loadUrl("http://ngio.co.kr/tc/index.php") ;

또한 통신이 필요하므로 AndroidManifest.xml 의 manifest 태그 안에 android.permission.INTERNET의 권한을 설정할 필요가 있습니다.

<uses-permission android:name="android.permission.INTERNET" />
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/10/25 18:16 2010/10/25 18:16
, , , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5583

알툴 대체 프로그램 소개

알툴 대체 프로그램 소개

알씨 -> picasa 3 ( http://picasa.google.com/ )

알약 -> 네이버 백신 ( http://security.naver.com/ )

알집 -> 빵집 ( http://www.bkyang.com/ )

알FTP -> Filezilla ( http://filezilla-project.org/ )
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/10/25 15:14 2010/10/25 15:14
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5582

jquery modal 기능(모달 기능)

jquery modal 기능(모달 기능)

http://nyromodal.nyrodev.com/

Features

  • Ajax Call
  • Ajax Call with targeting content
  • Ajax call can change the modal size
  • Single Image
  • Images Gallery with arrow navigating
  • Gallery with any kind of content
  • Form
  • Form in iframe
  • Form with targeting content
  • Form with file upload
  • Form with file upload with targeting content
  • Dom Element
  • Manual Call
  • Iframe
  • Error handling
  • Modal will never goes outside the view port
  • Esc key to close the window
  • Customizable animation
  • Customizable look
  • Modal title
  • Ability to block only one element
  • W3C valid HTML (Transitionnal)

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/10/13 14:31 2010/10/13 14:31
, ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5561

PhoneGap - http://www.phonegap.com/

PhoneGap - http://www.phonegap.com/
사용자 삽입 이미지사용자 삽입 이미지




크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/09/07 17:10 2010/09/07 17:10
, , , , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5501

Android Architecture

Android Architecture

The following diagram shows the major components of the Android operating system. Each section is described in more detail below.



크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2010/09/03 16:15 2010/09/03 16:15
,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5494


대한민국 앱 공모전 - http://www.koreaapps.or.kr/

앱에 관심 있다면 지원요망.
스마트폰이 완전 대세로 거듭나는구나. 요즘 TV를 봐도 거의 스마트폰 광고들.
그런데 과연 활용도는 얼마나 일지.
홈쇼핑에서는 무료로 나누어 준다더라. 어플까지 친절히 설치해서 ㅎㅎ
근데 난 왜 이렇게 웃기게 느껴지지.

하지만, "DB활용 안내" 주목할만 하다.
이렇게 까지 많이 올릴 수 있는건 아마도 정부의 힘?! ㅎㅎㅎ



주최 문화체육관광부 행정안전 세계속의 경기도 주관 NIA KDB




DB 이용안내

  • HOME >
  • DB활용 안내 >
  • 이용안내
공모전 참가자의 DB이용 안내

DB이용 조건 안내

DB활용 시 참고 사항

민간 기업 DB제공 안내 문의 한국데이터베이스진흥원 02-3708-5402

공모 내용

공모 분야 응모 자격응모 일정

시상내용 - 앱 개발 분양
시상내용 - 앱 기획 분야

유의사항
심사 기준


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/08/30 11:12 2010/08/30 11:12
, , , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5480

2010. 정보처리기사 실기시험(필답형) 채점 관련 안내 사항이라고 메일이 왔네.

뭐가 자꾸 복잡해지기만 하는건지.

프로그램만 잘 하면 되는줄 알았는데, 역쉬 세상에 쉬운거 하나 없고, 움직이지 않으면 거저 생기는거 하나 없다.

독하게 해라!!!



크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/08/23 14:23 2010/08/23 14:23
, ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5465

모바일 디바이스 환경을 위한

SQLite 성능 향상 테크닉

모바일 환경을 지원하는 디바이스는 휴대성을 고려하기 위해 한정된 자원을 사용해야 하는 많은 제약사항을 가지고 있다. 그러나 똑똑하고 다양한 기능을 지원하기 위해서는 큰 메모리를 사용하고, 다루고자 하는 데이터가 많아지는 경우에는 안정성과 활용성을 고려한 데이터베이스 시스템이 사용되어야 한다. 모바일 디바이스에서 현재 큰 인기를 끌고 있는 SQLite에서 어떻게 하면 성능을 향상시켜 최적의 기능을 이끌어낼 수 있을지 지금부터 살펴보도록 한다.

모바일 디바이스에서 사용되는 데이터베이스 관리 시스템에는 많은 솔루션이 있지만, 그 중에서 대표적인 것이 SQLite이다. SQLite는 구글의 안드로이드나 애플의 아이폰 등에서 사용되는 솔루션으로 사용자 측면과 관리자 측면에서 모두 뛰어난 접근성을 가지고 있다.
SQLite는 다음과 같은 임베디드 시스템을 위한 요구사항을 만족하는 데이터베이스 솔루션이다.

- 사용자가 사용하기 쉬움
- 관리가 간편
- 갑작스런 외부 오류에 둔감
- 다양한 플랫폼에 모두 적용 가능
- 풋-프린트가 작음

SQLite 가 가지는 가장 큰 특성 세 가지는 다음과 같다. 서버를 필요로 하지 않기 때문에 시스템 내에서 별도의 자원을 사용할 필요가 없으며, 다른 솔루션과 달리 설정이 필요 없으므로 사용하기에 편리하다. 또한 트랜잭션 처리가 이뤄지므로, 데이터의 무결성을 보장해 줄 수 있다. 따라서 SQLite는 데스크톱 컴퓨터로부터 PDA, 셀룰러 폰, MP3 플레이어에 이르기까지 많은 디바이스에 적용될 수 있다. SQLite의 주요 특성은 다음과 같다(<표 1> 참조).


이와 같은 특성들을 가지고 있는 SQLite의 내부 구조는 <그림 2>와 같다. 코어, SQL 컴파일러, 백앤드가 주요 핵심요소이고, 이외에 액세서리 역할을 하는 유틸리티와 테스트 코드로 이뤄져 있다.
그럼 지금부터는 SQLite의 성능을 다른 데이터베이스 솔루션과 비교해 보도록 하자. 일단 오픈소스 데이터베이스로서 유명한 MySQL과 비교해 보면 <화면 1>과 같다.

InnoDB를 사용하는 MySQL에 비해서는 SQLite가 빠르지만, MyISAM을 사용하는 MySQL에 비해서는 느린 특성을 가진다.
<표 2>에서는 PostgreSQL과 MySQL의 성능을 SQLite와 비교해 보도록 하자. 비교하는 동작은 INSERT, UPDATE, SELECT, DELETE, DROP이다.
그럼 SQLite의 성능을 최대한 향상시키기 위해서는 어떻게 해야 할까? 우선 다음과 같은 방법을 고려해 볼 수 있다.
SQLite 에서 성능을 향상시키고자 할 때 우선적으로 트랜잭션과 캐시를 고려한다. 만약에 트랜잭션이 명시적으로 선언되어 수행되지 않으면, 각 SQL 문은 자신들의 동작을 보장하기 위해 동작 시마다 새로운 트랜잭션을 가지게 된다. 이는 매번 저널 파일에 대한 열기, 쓰기, 닫기를 수행하도록 함으로써 속도 저하를 유발하므로, 일련의 SQL 문들이 있으면 이 전체를 모두 하나의 트랜잭션으로 묶어 속도를 향상시킬 수 있다.

SQLite 는 저널 파일을 사용함으로써 만약의 동작 실패 시에 트랜잭션을 롤백할 수 있다. 이를 위해 트랜잭션 동작 중에 데이터베이스에서 발생하는 모든 변화들을 기록해야 한다. 따라서 이는 디스크 액세스에 있어서 오버헤드 동작이 된다. 따라서 만약 데이터베이스를 변경할 필요가 없을 경우에는 저널 동작을 수행하지 않도록 한다. 만약에 게임과 같은 애플리케이션이 동작하면서 데이터베이스를 사용하는 경우에는 데이터의 무결성보다는 성능을 더욱 더 중요시하기 때문에 이러한 경우에는 저널링을 중단해도 될 것이다. 물론 사용자가 원한다면 저널링을 수행하도록 한다. 쿼리는 캐시돼 있을수록 디스크에 대한 접근 횟수가 줄어들기 때문에 속도향상에 도움이 된다.
또한 이러한 방법 이외에 추가적으로 SQL 문을 재정렬하거나 인덱스를 생성 및 이용하면 속도를 향상시킬 수 있다. 인덱스를 사용하는 쿼리는 인덱스를 사용하지 않는 쿼리보다 속도의 향상을 기대할 수 있다. 인덱스들 중에 불필요한 것이 있는지는 확인해서 불필요한 것은 제거하도록 해야 한다.
인덱스를 사용하게 되면, 디스크에서 전체 테이블을 스캔하지 않고서도 값의 범위를 선택할 수 있다. 인덱스는 질의가 전체 테이블에 대해 스캔할 필요가 없을 때 속도 측면에서 큰 차이를 가져온다. 인덱스를 사용하기 위해서는 별도의 인덱스 테이블을 생성해야 하기 때문에 부수적인 크기의 오버헤드를 가져온다. 인덱스를 생성하는 방법은 <리스트 1>과 같다.

<리스트 1> 인덱스 생성 방법 CREATE TABLE mytable ( a TEXT PRIMARY KEY, -- index created b INTEGER, c TEXT UNIQUE -- index created );

이러한 방법과 더불어 다음과 같은 방법들도 고려할 수 있다.

첫 번째로 데이터베이스 스키마를 가능한 간단하게 만들도록 한다. 즉, 잘못된 데이터나 논리구조를 가지면 안 된다는 의미다.
두 번째로 데이터베이스 스키마를 무조건적으로 정규화하지 않도록 한다. 이는 개발자에게는 편리할 수 있겠지만, 정규화는 성능을 감소시킬 수 있다.
세 번째로는 SELECT 문에서 테이블의 순서를 조정함으로써 성능을 향상시킬 수 있다.
네 번째로는 불필요한 인덱스들을 사용하는 대신 해시 키를 사용할 수도 있다. 이는 성능문제 때문에 인덱스를 생성하기 어려울 경우에 매우 유용할 수 있다.

또 한, 컴파일러 설정을 확인해서 C 컴파일러에서 최적화 옵션을 사용해 빌드해야 한다. 불필요한 심볼이 들어가서 이를 처리하기 위한 불필요한 동작이 수행되면 성능을 저하시킬 수 있기 때문이다. 만약에 사용하지 않은 특성이 있다면 이는 비활성화시켜서 바이너리 크기를 줄이고, 이를 통해 속도를 향상시키도록 한다.
SQLite의 사용 시간 중에 많은 부분을 차지하는 것은 디스크 액세스 시간이다. 따라서 성능을 최적화시키기 위해서는 디스크 액세스 양을 최소화해야만 한다. 이러한 점을 고려해 다음과 같은 방법을 사용하도록 한다.

- In-memory 데이터베이스 사용
- PRAGMA cache_size 사용
- PRAGMA synchronous=OFF 사용
- PRAGMA count_changes=OFF 사용

이외에도 SQLite의 실제 동작은 파일시스템 위에서 이뤄질 것이기 때문에 하위 근간을 이루는 파일시스템의 성능도 중요한 요소가 된다(<화면 2> 참조).

SQLite 데이터베이스는 기본 값으로 1KB 크기를 가지는 btree 페이지들로 나눌 수 있으며, 데이터베이스를 가지고 동작할 때 이러한 페이지들을 메모리로 로드해 데이터들을 관리한다. 캐시의 페이지 최대값으로 2,000이 기본적으로 설정돼 있지만, 이를 증가시킴으로써 성능 도모를 꾀할 수 있다.
PRAGMA synchronous=OFF를 사용함으로써 디스크에 쓰기 위해 기다리는 시간을 줄일 수 있어 속도를 향상시킬 수 있게 된다. PRAGMA count_changes가 ON으로 설정돼 있으면, 콜백 함수는 각 DELETE, INSERT, UPDATE 동작이 수행될 때마다 수행된다. 따라서 이를 OFF로 해 놓으면 속도를 향상시킬 수 있다.
SQLite에서 GLOB과 LIKE 연산자는 인덱스를 사용하지 않기 때문에 가급적이면 피하도록 한다. 그리고 매우 긴 문자열을 사용할 때 length()를 사용하지 않도록 한다. 따라서 <리스트 2>와 같이 사용하도록 한다.

<리스트 2> Length()의 대체방법 Example : Replace (WHERE length(str)=0) with (WHERE str='').

SQLite 데이터베이스의 파일 크기를 줄이기 위해서는 실제로 내용이 없어서 비어 있지만 메모리 페이지를 차지하는 페이지를 제거하는 방법을 우선적으로 사용할 수 있다. 이를 위한 가장 간단한 방법은 VACUUM이라는 명령어를 사용하는 것이다. 이는 <리스트 3>과 같이 수행할 수 있다.

<리스트 3> VACUUM 사용 방법 (C 코드에서) sqlite_exec(db, "VACUUM;", 0, 0); (sqlite의 유틸리티) sqlite> VACUUM; (쉘 프롬프트에서) $ echo 'VACUUM;' | sqlite filename

데이터의 크기를 최소한으로 만들기 위해서 압축하는 방법을 사용할 수 있다. 바이너리 데이터를 압축 및 해지하기 위해서 sqlite_ encode_binary()와 sqlite_decode_binary() 함수를 사용할 수 있다. 이를 통해 저장하기에 적합한 바이너리로 인코딩할 수 있다. 만약에 특수 문자를 포함하지 않는다면, 모든 0을 제거하기 위해 XOR 인코딩을 사용할 수 있다. 이러한 인코딩 방식과 별도로 7-비트 데이터 인코딩 방식이 존재한다. 이는 상위 비트를 토글링함으로써 SQL 문을 인코딩하는 데 유용하게 사용될 수 있다.

<리스트 4> 7-비트 데이터 인코딩 방식 int ascii7enc(char *out, const char *in, int len) { int ct = len; if (!in || !out || len < 0) return -1; while (ct-- > 0) { char ch = (*in == 0 || *in == '\'' || *in == 0x80 || *in == '\''^0x80)? (*in++ ^ 0x80): *in++; *out++ = ch; } return len; }

지금까지 SQLite 성능을 향상시키기 위한 여러 가지 방법을 살펴봤다. 다양한 방법을 통해 성능을 향상시킬 수 있지만, 어느 하나만을 사용한다고 해서 혁신적으로 속도가 향상되는 것은 아니다. 따라서 해결법을 혼합 사용해 원하는 속도의 향상을 이뤄내도록 노력해야 할 것이다.


필자소개

김형훈 asinayo73@hotmail.com|모바일 디바이스의 설계부터 테스팅까지 모든 부분에 관심이 많으며, 현재 gmobileTech사에서 모바일 디바이스 구조검증 및 설계 컨설팅 업무를 맡고 있다. 다양한 형태의 모바일 디바이스가 어떻게 하면 각각 최적의 성능을 낼 수 있는지에 대해 연구하고 있다.

출처 : 한국 마이크로소프트웨어

제공 : DB포탈사이트 DBguide.net

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 홍반장

2010/08/19 13:17 2010/08/19 13:17
, ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/5457

« Previous : 1 : ... 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : ... 101 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/11   »
          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
Statistics Graph

Site Stats

Total hits:
243766
Today:
117
Yesterday:
776