2012년 9월 17일 월요일

Android Application에서 Offline Map 활용 방법



 Android application에서 어떻게 offline map을 활용 할 수 있는 지에 대한 간단한 요약 및 example application에 대해서 설명드리도록 하겠습니다. 

개요는 아래와 같습니다 .
  1. Map(Map 타일) Download 
  2. osmDroid를 활용한 offline MapView 활용
  3. 참고 site 


  1. Map download 
Map을 다운로드 받아 Smart phone에 옮기는 방법을 설명드리도록 하겟습니다. 

 Android application에서 네트워크 연결 없이 Map을 활용하려면 Open Map들 혹은 Google map으로 부터 지도(지도 타일)을 받아와서 SD Card에 저장한 다음 그 파일들을 사용해야 합니다.

저는 Mobile Atlas Creator 1.9 를 활용해서 Open Street Map Mapnik과 Google Map으로 부터 지도파일을 다운로드 받아서 Application을 제작했습니다. 첨부되어 있는 Mobile Atlas Creator 1.9는 Open Street Map Mapnik로 부터 지도 타일을 받는 버젼입니다. (Google Map으로 부터 지도를 다운로드 받으려면 구글링을 구하시길 권합니다.)

이 압축을 해제하면 start.sh파일을 실행시켜서  Mobile Atlas Creator 1.9 를 실행 시킴니다. 

  • format 설정 
그후 메뉴창에 있는 Atlas -> Convert Atlas Format 에서 Osmdroid Zip을 선택해 줍니다. 

  • Map Source 선택 
OpenStreetMap Mapnik을 선택합니다(다른 Open map은 안됬었습니다. )

  •  다운로드 받을 범위 선택
다운로드 받을 범위를 드래그 해서 선택한후 Zoom Level을 클릭합니다. 

  • 선택 부분 저장
Atlas Content에서 Add selection을 선택합니다.

  • 지도파일 생성
Create atlas를 클릭합니다. 

  • Android phone으로 지도 파일 복사
Android phone을 컴퓨터에 연결한 후 usb 연결을 통해 windows 탐색기를 이용해서 /sdcard/osmdroid/ 폴더를 만들고 위의 과정에서 생성한 지도파일을 복사해 넣습니다. 

이제 지도파일은 준비가 완료되었습니다. 


     2.osmDroid를 활용한 offline MapView 활용

osmdroid를 활용해서 기존에 android 에서 Google map을 쉽게 사용하라고 제공해주는 MapView를 대체해서 SDcard에 저장되어 있는 지도파일을 사용해서 Android application에서 offline 지도를 사용할 수 있도록 해줍니다. 

필요한 파일은 아래와 같으며 

  • osmdroid 최신 jar 파일  osmdroid-android-3.0.8.jar ,
  • SLF4J Android 최신 jar 파일 http://www.slf4j.org/android/slf4j-android-1.6.1-RC1.jar

그리고 프로젝트 property -> build path -> library -> add jar 요로케 추가를 해주고
property -> build path -> order and export 에서 클릭 클릭 해서 빌드 되게 주심니다. 

그럼 준비는 완료!

그리고 Project의 내용은 아래와 같이 생성하면 Android application에서 offline지도를 활용할 수 있습니다. 

import android.app.Activity;
import android.os.Bundle;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;

public class Map_demoActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapView = new MapView(this, 256); //constructor
        mapView.setTileSource(TileSourceFactory.MAPNIK);

    mapView.setBuiltInZoomControls(true);
    mapView.setMultiTouchControls(true);
        mapView.setClickable(true);
        setContentView(mapView); //displaying the MapView
        
        mapView.getController().setZoom(14); //처음 화면에 보이는 Zoom level
        mapView.getController().setCenter(new GeoPoint(37.598864, 126.86483)); //항공대의 위도 경도 
        mapView.setUseDataConnection(false); //인터넷 연결 금지
     
    }
}

위의 예제 Source는 아래의 android user 권한을 필요로 합니다. 

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


참고 site 

offline map을 만드는 tutorial 
http://www.haakseth.com/?p=30


Open Street Map site 

osmdroid site 
http://code.google.com/p/osmdroid/

osmdroid에 대한 android 예제.
http://android-coding.blogspot.kr/2012/06/example-of-implementing-openstreetmap.html

osmdroid에 대한 android 예제. 
http://mappingdev.wordpress.com/tag/offline/

osdroid에서의 방법 offline map을 사용하는 방법에 대한 설명
http://stackoverflow.com/questions/8136775/how-can-i-implement-offline-maps-using-osmdroid-by-saving-map-tiles-images-into

OsmDemo(android application)
https://docs.google.com/file/d/0BzFEZqqU7Oz6N2QwZmY4MzItNDdhNS00OWQxLTliYjYtZmIwMjFmMzk1ZjUy/edit?hl=sk#



2012년 9월 12일 수요일

찾았다. Estimating Android applications' CPU energy usage via bytecode profiling


Estimating Android applications' CPU energy usage via bytecode profiling 

 찾았다. 교수님이 쓰고 싶었던 논문, 교수님이 2009년도에 구상했던 내용이 이미 논문으로 작성되서 나와 버렸다. 
 
 교수님이 매우 아쉬워함... 괜히 죄송하네. 내가 휴학했던년도에 휴학 안하고 계속 학부 연구생했었으면 진행 했을 만한 주제였는데. 괜히 이리저리 딴짓한다고 늦어졌네.

 어찌됬든 교수님이 mobile device에 battery issue에 관심이 많다는 것을 다시 한번 확인했네. 

Analyzing Mobile Application software power consumption via model-driven engineering

 Analyzing Mobile Application software power consumption via model-driven engineering에 대한 분석 


 model driven engineering 방식을 이용한 software 설계 방법을 소개하고 그 방법을 통해서 디자인 단계에서 절력소모량을 예측할수 있는 SPOT이라는 tool을 소개하고 있습니다.

Why?
저자의 논지에 따르면 Power consumption을 최적화 하기 위해서는 단순히 battery 사용량을 줄이는 것이 아니라 performance와 battery life에 대한 trade off를 고려해야 한다고 논리를 전개하고 있습니다. 여기서 performance란 개발자가 의도한 목표를 달성하는 정도라고 생각할 수 있습니다.

여기서 예제로 traffic accident detection application을 예로 들었습니다. 이 app에서는 갑작스런 acceleration을 감지하여 traffic accident라고 감지하여 그 사고를 주변으로 전파하는 app입니다. 여기서 app은 accelerator를 활용해서 sampling 해야하고 또 그 결과를 주변으로 저송해야 합니다. 여기서 sampling rate가 높을 수록 사고를 감지해 내는 정확도는 높아지겠지만 그러면 그렇수록 battery 소모량을 늘어날 것입니다.

 하지만 여기서 설계 단계에서는 middle ware, Os, network layer등이 복잡하게 서로 연관되어 있는 관계로 실제 구현하기 전에 에너지 소모를 예측하기는 쉽지 않습니다. 예를 들면 http와 https와의 전력 소모량이 얼마나 차이나는지, security를 확보하기 위한 추가적인 암호화와 복호화에서 얼마 만큼의 에너지가 더 소모되는지 확인하는 방법은 쉽지 않습니다.

거기에 추가로 trade off를 수량화 하기 너무나도 어렵습니다.https에 경우에도 그렇듯이 security와 battery 소모량에 대한 trade off를 혹은 그 외의 설계 단계에서의 고려사항등 wifi를 주로 사용할 것인지, 아니면 cellular 방식을 사용할 것인지는 여러가지 고려사항이 많기 때문에 쉽게 판단하기 어렵습니다.

What?
 이를 해결하기 위해서 저자는 model driven testing과 modeling한 software architecture에 대한 자동 생성 코드를 활용해서 설계한 architecture에 대한 power consumption에 대한 emulation을 수행하고 그 수행 결과를 가지고 설계 단계에서 power consumption을 고려해서 설계하도록 제시하고 있습니다.

여기서 제시한 방법을 요약하자면 개발자가 MDE를 준수하며 MSML을 활용해서 power consumption을 고려해서 software architecture를 설계합니다. 그럼 SPOT은 그 archtecture의 target device에 대한 emulation code를 생성해주고 그 생성된 코드를 target device에서 수행하게 됩니다. 수행한 결과를 가지고 SPOT은 개발자에게 현재 설계된 SW archtecture가 어떠한 전력 소모를 가질 것인지에 대한 정보를 제공하고 그 정보를 바탕으로 개발자는 보다 전력 소비가 최적화된 SW architecture에 대해 설계할 수 있도록 합니다.


How?
SPOT에 대해서 설명하자면 SPOT은 사용자(개발자)에게 시작적인 high level modeling tool을 제공해주며, 이렇게 설계된 SW Architecture에 대한 emulation code를 생성해 줍니다.
또 이 생성된 코드의 실행 결과를 가져다 분석해 줌으로써 디자인 단계에서 power consumption을 예상 할 수 있도록 해줍니다.

SPOT은 device의 power API를 활용해서 측정함.(fuelGauge)
Mobile Application architecture modeling

Power consumption estimation 


설계를 할 때에는 GPS,accleration, orientation, sensor date consumer, network banwidth consumer 등 전력 영향을 주는 요소들을 설계할 단계에서 고려하며 진행합니다.




설계를 할 때에는 GPS,accleration, orientation, sensor date consumer, network banwidth consumer에 대한 emulation code를 생성

XML에서 각 component들의 설정 가능(sampling rate etc)




Power consumption Instrumentation 


fuelGauge에서 제공되는 API를 활용하면 각 package의 CPU,Sensor, wake-lock, 등등의 전력 소모를 하는 구성요소들의 cpu 사용시간을 확인할 수 있습,


Result 

2012년 9월 11일 화요일

ILP(Integer Linear Programing)에서의 coloring theory

 오늘 렙미팅 시작하자 마자 교수님이 던저주신 미션 graph coloring theory를 생각해 봐라.

 결론 부터 말하자면 교수님이 말한 의도를 파악하지 못하고 괜히 시간만 보냄, graph theory에서의 coloring의 해답은 없다고 알고 있었는데 한번에 풀수 있는 방법을 왜 찾으려고 했나 모르겟다. 경쟁심? 조급한 마음들이 시야를 너무나도 좁혀 버렸음. 교수님이 원한 대답은 LP문제를 해결하는 방법을 얘네들이 알까? 안다면 그 방법을 이용해서 graph coloring를 해결할 수 있는가 였다. 교수님의 word를 제대로 파악하자.

 ILP에서의 graph coloring theory를 생각해야지 그냥 graph coloring theory를 해결할려고 했지? 정보통신수학2 식에 LP를 배웠으면 이걸 생각해서 해결할 생각을 해야지.

 집중하되, 중요하지 않은 내 안의 노이즈 그리고 밖의 노이즈를 필터링해서 생각하자.

Noise
1. 칠판에 있는 필기들
2. 빨리 해결해서 뭔가 있어보이고 싶었던 꼬마같은 마음

놓친것
1. 불현듯 기억난 정보이론 시간에 배운 coloring theory에 대한 정보
2. ILP란 word
3. 형아랑 같이 생각해 보는것

Review
1. graph coloring 문제에서 최소의 color의 숫자를 풀어내는 일반적인 방법을 존재하지 않는다. 그래서 하나하나 해봐야 한다.

2. ILP에서 문제를 해결하는 방법

3, 말을 할때에는 너무 한점에 집중하지 말고 말을 하는 사람의 의도 그리고 그 말이 나오는 배경에 대해서 생각하라.


*Graph coloring
http://en.wikipedia.org/wiki/Chromatic_number#Definition_and_terminology
*LP or ILP
http://en.wikipedia.org/wiki/Linear_programming