Lomohome.com :: 괴발자 모근원

iPhone 어플에서 UIWebView 를 사용한 프로그램에서
웹뷰안에서 JavaScript 의 Alert 를 호출 하면  (ex -> javascript:alert("test some strings.");)
다음과 같이 호스트 이름이 얼럿창의 상단에 찍히게 된다.

보안때문에 상단의 ip 는 지웠지만 만약 웹뷰에서 lomohome.com  에서 얼럿창을 띄웠다면  lomohome.com 이라는 문구가 얼럿창의 타이틀에 뜨게 된다.

이 얼럿창은 UIWebView 에 카테고리를 이용하여 딜리게이트 메소드를 구현해주면 수정할 수 있다.
먼저 UIWebView 의 헤더파일에 다음과 같은 인터페이스를 추가해준다.

//@Geunwon,Mo 2010.9.17 : UIWebView Javascript alert 위한 카테고리.

@interface UIWebView (JavaScriptAlert) 

- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;

@end


그리고 구현파일에 구현해준다.
 

//@Geunwon,Mo 2010.9.17 : UIWebView Javascript alert 위한 카테고리.

@implementation UIWebView (JavaScriptAlert)

- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {

NSLog(@"javascript alert : %@",message);

    UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:@"Hana Bank" message:message delegate:nil cancelButtonTitle:@"확인" otherButtonTitles:nil];

    [customAlert show];

    [customAlert autorelease];

}

@end


 요렇게 구현하고 나면 다음과 같이 Title  에 원하는 문구로 자바스크립트 얼럿을 띄울 수 있다.



구현 메소드 중, 타이틀 인자를 nil 로 넣으면 아무것도 안찍힌다.

UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:@"확인" otherButtonTitles:nil];




Posted by 모근원
맥북 프로 13인치를 이번에 15인치로 기변을 하였다.



늠름한 맥북프로 15인치의 자태.

사양은  Intel core i7 (2.66Ghz) 에 메모리 8Gb , 고해상도 (1680 x 1050) 그리고  Intel G2 SSD 160Gb  되겠다.
맥북 프로 15인치에서 거의 풀옵수준 ㅠ


그러나.. 장점만 있을순 없는법.
13인치에 비해 정말 무지하게 뜨겁다.
뻥좀 보태면 계란 올려놓으면 익을 수준.

성능은 더할나위없이 좋아졌지만, 무게와 발열, 그리고 눈꼽만큼 줄어든 배터리 시간 (13인치는 10시간, 15인치는 8시간...이 스펙이지만 실사용은 6~7시간정도)

미리  Xbench  를 돌려둔 표가 있어 13인치와 15인치의 벤치마크 결과도 비교해보았다.

특이한 점은 13인치나 15인치나 두개다 동일한 모델의 SSD (인텔 G2) 이지만 15인치의 성능이
눈꼽만큼 더 잘나온다는점.

이상. 지름신고 마침.
Posted by 모근원
iPhone 의 UI 를 보면 다음의 이미지와 같이 테이블의 네귀퉁이 각 모서리가
둥글게 둥글게 처리되어 있는것을 볼수 있다.


이와같은 둥근 모서리를 안드로이드에서 구현을 해보려고 한다.
처음엔 9Patch image 를 쓰려했지만 검색결과 Drawable XML 을 가지고 편하게
둥근 모서리를 구현시킬수 있었다.
나는 TableLayout 에 적용해보았지만 백그라운드에 적용시키는것이기 때문에
다른곳에도 적용할수 있을 것이다.

먼저 Reaource (res) 안의 drawable 폴더에 다음과 같은 XML 을 생성한다.
나는  com_rounded_corner.xml  이라고 저장 하였다.

<?xml version="1.0" encoding="UTF-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#99FFFFFF"/>

    <corners android:radius="15dip"/>

    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /> 

</shape>


그리고 layout 의 적용할 부분의 background 에 해당 XML 을 넣어준다.

<TableLayout android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/com_rounded_corner"

android:padding="10dip"

android:orientation="vertical">


...


</TableLayout>


그러면 다음과 같이 둥글게 깍인 백그라운드를 쉽게 가질수 있다 :-)








Posted by 모근원

원래 하나은행 스마트폰 뱅킹의 위치기반(LBS) 지점찾기는 WebView 에서 Google Map API 를 통하여 구현이 되어있었다.

아이폰에서는 이게 잘 돌아가는데... 안드로이드에서는 기계마다 되는것도 있고, 안되는것도 있고..

영 껄쩍지근 했다. (사실 이번에 출시한 갤럭시 S 에서 안돌아가는 이유가 가장 컸지..)


그래서 내친김에 WebView 에서 구현하지말고 MapView 로 구현해버리기로 했다.

이틀정도 작업한거라 고쳐야할 부분도 많고 (특히 Runnable 로 구현한 길게 누르기는...) 버그도 좀 있지만

일단 돌아가니, 이제까지 한것을 까먹지 않으려고 블로그에 정리를 해 둔다.


* OSX 의 Pages 를 이용하여 블로그 글을 정리했는데.. 웹으로 카피하니까, 이게 폰트 색 정의 해둔것이 죄다 깨졌다.

  감안해서 참고하시길.. 마지막에 PDF 로 첨부해둔다..



MapView 추가하기.


AndroidMenifest.xml 을 수정한다.


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

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

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


윗줄부터 INTERNET 은 구글지도API 가 인터넷연결을 통하여 데이터를 받아오기때문에 추가해주어야하고

ACCESS_***_LOCATION 은 현재위치를 프로바이더(네트웍,GPS)를 통하여 받아오기 위해 추가해준다.


그 다음, <application> 태그 안쪽에 수정되어야 할 항목이다. 먼저,


<!-- 안드로이드 맵뷰를 사용하려면 라이브러리를 추가한다. -->

<uses-library android:name="com.google.android.maps" />


라이브러리를 사용함을 선언해준다. 그리고 액티비티 선언을 하나 추가해준다. 


<!-- 지점찾기 맵 -->

<activity android:name=".BranchMapActivity" android:screenOrientation="portrait">

<intent-filter>

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>


다음은 레이아웃을 그려줄 branchmap.xml 에서 쓰인 맵뷰 부분의 선언이다.


...

<com.google.android.maps.MapView

android:id="@+id/mapView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:enabled="true"

android:clickable="true"

android:apiKey="0kiM******" /> <!-- API 키를 등록해야 동작한다. -->

...


위에서 쓰인 android:apiKey 는 각 개발머신에 따라 따로 받아서 적어넣어야한다.

API Key 를 넣지않으면 동작은 하지만 지도데이터를 받아오지 않는다.

여기서 따로 설명은 하지 않고, 다음의 링크를 따라가면 MD5 값을 가지고 구글 API 키를 받아오는법이 잘 설명이 되어있다.


http://www.mobileplace.co.kr/1070


참고로 나는 맥을 사용해서 개발을 진행하였기때문에 다음의 명령어로 MD5키를 받아왔다.


keytool -list -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android

받아온다음 Google Map API 사이트 (http://code.google.com/intl/ko-KR/android/maps-api-signup.html)에서 API를 받아와서 XML 에 넣어주면 된다.


이제 맵뷰를 표시하는 핵심 클래스인 BranchMapActivity.java 의 내용중 맵뷰에 관련한 부분을 정리해본다.

public class BranchMapActivity extends MapActivity {


맵을 표시하는 액티비티는 MapActivity 를 상속받아 구현한다.


다음은 전역변수로 사용되어진 변수 중, 지도의 표시에 관련한 변수들이다.


private MapView mapView; //맵뷰 객체 

private List<Overlay> listOfOverlays; //맵에 표시된 오버레이(레이어)들을 가지고 있는 리스트

private String bestProvider; //현재 위치값을 가져오기위한 프로바이더. (network, gps)


private LocationManager locM; //위치 매니저

private LocationListener locL; //위치 리스너

private Location currentLocation; //현재 위치

private MapController mapController; //맵을 줌시키거나, 이동시키는데 사용될 컨트롤러


private LocationItemizedOverlay overlayHere; //현재위치 마커가 표시되어질 오버레이

private LocationItemizedOverlay overlayBranch; //지점위치 마커들이 표시되어질 오버레이

private List<BranchInfoDTO> brList; //지점리스트


다음은 onCreate 메소드에서 맵뷰에 관련한 부분이다.


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);


...


setContentView(R.layout.branchmap); //맵액티비티 xml을 풀어헤친다.


...


overlayHere = null;

overlayBranch = null; //각 오버레이 초기화


...


mapView = (MapView) findViewById(R.id.mapView); //맵뷰 객체를 가져온다.

mapView.setBuiltInZoomControls(true); //줌인,줌아웃 컨트롤을 표시한다.


mapController = mapView.getController(); //맵컨트롤러를 가져온다.

mapController.setZoom(17); //초기 확대는 17정도로..


//위치 매니저를 시스템으로부터 받아온다.

locM = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

//사용가능한 적절한 프로바이더를 받아온다.

//network (보통 3G망,Wifi AP 위치정보)또는 gps 둘중 하나로 설정된다.

bestProvider = locM.getBestProvider(new Criteria(), true);


//기기에 가지고 있는 마지막 위치정보로 현재위치를 초기 설정한다.

currentLocation = locM.getLastKnownLocation(bestProvider);

//위치 리스너 초기화

locL = new MyLocationListener();

//위치 매니저에 위치 리스너를 셋팅한다.

//위치 리스너에서 10000ms (10초) 마다 100미터 이상 이동이 발견되면 업데이트를 하려한다.

locM.requestLocationUpdates(bestProvider, 10000, 100, locL); 


//처음에 한번 맵뷰에 그려준다.

updateOverlay(currentLocation);

}


위에서 한번 언급된 MyLocationListener 는 액티비티 클래스안에 인너클래스로 구현한다.

리스너는 로케이션 매니저에 추가되어 GPS 나 네트워크로부터 위치정보 변경되는것을 감시하게 된다.


public class MyLocationListener implements LocationListener {


@Override

public void onLocationChanged(Location location) {

//위치 이동이 발견되었을때 호출될 메소드.

//위의 설정에서 10초마다 100미터 이상 이동이 발견되면 호출된다.

updateOverlay(location);

}


@Override

public void onProviderDisabled(String provider) {

Log.d(LOG_TAG, "GPS disabled : " + provider); 

}


@Override

public void onProviderEnabled(String provider) {

Log.d(LOG_TAG, "GPS Enabled : " + provider);

}


@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

Log.d(LOG_TAG, "onStatusChanged : " + provider + " & status = "

+ status);

}


}


다음은 내가 구현한 지도그려주기 액티비티의 꽃이라 할수 있는 updateOveray 메소드이다.

요청을 받으면 Location 객체 (위치)를 기준으로 현재위치 마커를 찍고, 지점리스트를 HttpClient 를 통하여 통신해서 받아온후 지점들의 마커를 표시하게 된다.


protected void updateOverlay(Location location) {

//기존에 화면에 찍어둔 오버레이 (마커들)을 싹 지운다.

listOfOverlays = mapView.getOverlays(); //맵뷰에서 오버레이 리스트를 가져온다.

if (listOfOverlays.size() > 0) {

listOfOverlays.clear(); //오버레이가 있을때 싹 지워준다.

Log.d(LOG_TAG, "clear overlays : " + listOfOverlays.size());

} else {

Log.d(LOG_TAG, "empty overlays");

}


//Location 객체를 가지고 GeoPoint 객체를 얻어내는 메소드

GeoPoint geoPoint = getGeoPoint(location); 

//현재위치를 표시할 이미지

Drawable marker;


//실제 운영소스엔 분기하여 현재위치와 선택위치 이미지를 변경하게 되어있다.

marker = getResources().getDrawable(R.drawable.icon_here); 

marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());


//LocationItemizedOverlay 를 이용하여 현재위치 마커를 찍을 오버레이를 생성한다.

overlayHere = new LocationItemizedOverlay(marker);

//touch event 의 null pointer 버그를 방지하기 위해 마커를 찍고 바로 populate 시켜준다.

overlayHere.mPopulate();

//현재위치를 GeoCoder 를 이용하여 대략주소와 위,경도를 Toast 를 통하여 보여준다.

String geoString = showNowHere(location.getLatitude(), location.getLongitude() , true);


//현재위치 마커 정의

OverlayItem overlayItem = new OverlayItem(geoPoint, "here", geoString);

overlayHere.addOverlay(overlayItem); //현재위치 오버레이 리스트에 현재위치 마커를 넣는다.


// 지점정보를 HTTP통신을 통해 서버에서 받아와서 전역변수인 brList (지점리스트)에 넣는다.

// 성능을 고려하여 쓰레드로 구현이 되어있다.

// 고다음 지점리스트 오버레이에 넣고 화면에 찍어주는 메소드.

showBranchMarker(location.getLatitude(), location.getLongitude(),

this.searchType, SEARCH_RANGE);


// 맵뷰에서 터치이벤트를 받을 오버레이를 추가한다.

// 특정지점을 오래 눌렀을때 특정 지점 기준으로 재검색을 하기 위하여 터치이벤트를 받아와야한다.

mapView.getOverlays().add(new MapTouchDetectorOverlay());


// 마지막으로 생성된 오버레이레이어를 맵뷰에 추가한다.

mapView.getOverlays().add(overlayHere);

mapView.getController().animateTo(geoPoint); //현재위치로 화면을 이동한다.

mapView.postInvalidate(); //맵뷰를 다시 그려준다.

}


조금 복잡하고 지저분하게 구성되어있어 퍼포먼스는 조금 떨어진다. 개선의 여지가 있다.

시간나면 수정해보자...


다음은 updateOverlay 메소드에서 사용되었던 getGeoPoint 메소드 전문이다.


private GeoPoint getGeoPoint(Location location) {

if (location == null) {

return null;

}

Double lat = location.getLatitude() * 1E6;

Double lng = location.getLongitude() * 1E6;

return new GeoPoint(lat.intValue(), lng.intValue());

}


별것 없다. 주의해야할점은 GeoPoint 객체는 위도, 경도 표시에 1E6 을 곱해줘야한다는것이다.


그리고 마커를 생성하고 오버레이에 표시, 그리고 마커를 눌렀을때 이벤트를 발생시키는 클래스이다.

인너클래스로 구현하였다.


protected class LocationItemizedOverlay extends

ItemizedOverlay<OverlayItem> {

private List<OverlayItem> overlays;


public LocationItemizedOverlay(Drawable defaultMarker) { //오버레이 생성자

//마커 이미지의 가운데 아랫부분이 마커에서 표시하는 포인트가 되게 한다.

super(boundCenterBottom(defaultMarker)); 

overlays = new ArrayList<OverlayItem>();

}


@Override

protected OverlayItem createItem(int i) {

return overlays.get(i);

}


@Override

public int size() {

return overlays.size();

}


public void addOverlay(OverlayItem overlay) {

overlays.add(overlay);

//null pointer 버그때문에 오버레이 아이템 추가후 가능한 빨리 populate 해줘야한다.

populate(); 

}


@Override

protected boolean onTap(int index) {


//마커를 눌렀을때 발생시킬 이벤트 메소드이다.


if ("here".equals(overlays.get(index).getTitle())) {

//현재 위치일 경우 간단한 토스트 메세지를 보여준다.

Toast.makeText(getApplicationContext(),

overlays.get(index).getSnippet(), Toast.LENGTH_SHORT)

.show();

} else {

//지점선택일 경우 다이얼로그를 통하여 지점정보를 보여준다.

//‘전화걸기’ 버튼으로 지점으로 전화거는 기능도 추가되어있다.

//맵뷰에 관련한 소스가 아니어서 이곳에서는 표시 하지 않는다.

...

}


return true;

}


//외부에서 마커의 populate 를 해주기 위한 메소드.

public void mPopulate() {

populate();

}

}



지점 정보를 HTTP 통신을 통해 가져오는 메소드이다.

HTTP 통신시 랙현상을 없애기위해 쓰레드로 구현을 해봤다.

근데 스레드가 생각한대로 동작하진 않는것 같다. 잘못쓰고 있는것일까... -_-


private void showBranchMarker(Double lat, Double lng, String searchType,

String searchRange) {


GetMapDataThread excuteThread = new GetMapDataThread(getMapdataHandler,

lat, lng, searchType, searchRange);

excuteThread.start();

}



실제 HTTP통신을 하는 클래스를 호출하는 쓰레드이다.

HTTP 통신 부분은 지도표시와 상관이 없기때문에 여기서 소스를 게시하지는 않는다.

다만 기존에 HTTPConnection 으로 구현되어있던 HTTP 통신을 HTTPClient 로 변경하니까

퍼포먼스도 훨신 좋아지고 불필요한 커넥션을 줄일수 있었다.


private class GetMapDataThread extends Thread {


private Handler tHandler;


private Double lat, lng;

private String searchType;

private String searchRange;


public GetMapDataThread(Handler tHandler) {

this.tHandler = tHandler;

}


public GetMapDataThread(Handler tHandler, Double lat, Double lng,

String searhType, String searchRange) {

this(tHandler); //스레드 처리 완료후 지도에 가져온 지점정보를 가지고 마커를 찍어줄 핸들러

this.lat = lat; //위도

this.lng = lng; //경도

this.searchType = searhType; //검색조건 (0 : 지점, 1: ATM)

this.searchRange = searchRange; //검색범위 단위는 m(미터)이다.

}


@Override

public void run() { //스레드 실행~


Bundle bundle = new Bundle();


try {

//전역변수로 선언한 지점 리스트를 준비한다. BranchInfoDTO 는 도메인이다.

brList = new ArrayList<BranchInfoDTO>(); 

brList = gdA.getMapData(lat.toString(), lng.toString(),

searchType, searchRange);

//gdA 클래스는 HTTP 통신을 해서 지점정보를 가져오는 클래스이다.

//여기서는 설명하지 않았다. onCreate 에서 생성했다.


bundle.putBoolean("SUCCESS_KEY", true); //성공하면 번들에 성공메세지 셋팅


} catch (Exception e) {

...


bundle.putBoolean("SUCCESS_KEY", false); //실패하면 false 이다.

// ignore


} finally {

try {

Message msg = tHandler.obtainMessage();

msg.setData(bundle);

tHandler.sendMessage(msg); //핸들러에 메세지를 보낸다.


interrupt();


} catch (Exception e) {

// ignore

}

}


}

}



스레드에서 HTTP 통신을 통하여 가져온 지점정보를 가지고 지도에 지점 마커들을 찍어주고 오버레이에 추가하는 핸들러이다.


final Handler getMapdataHandler = new Handler() {

public void handleMessage(Message msg) {


if (msg.getData().getBoolean("SUCCESS_KEY")) {  // HTTP 통신이 성공적으로 이루어졌을때.


// draw branches

Drawable branchMarker;


int markerType = 0;


if ("0".equals(searchType)) { //검색조건에따라 마커이미지를 지점,ATM 중에 선택

markerType = R.drawable.icon_branch;

} else if ("1".equals(searchType)) {

markerType = R.drawable.icon_atm;

}


branchMarker = getResources().getDrawable(markerType);


branchMarker.setBounds(0, 0, branchMarker.getIntrinsicWidth(),

branchMarker.getIntrinsicHeight());


Double lat, lng;


//지점 마커들을 그려줄 오버레이를 준비한다.

overlayBranch = new LocationItemizedOverlay(branchMarker);

overlayBranch.mPopulate();


StringBuilder sb;

//반복문을 돌면서 마커들을 오버레이에 추가한다.

//나중에 마커를 눌렀을때 다이얼로그에 지점 정보를 보여주기위해 스니펫에 몇가지 정보를

//string 으로 전달한다.


for (BranchInfoDTO d : brList) {


lat = Double.parseDouble(d.getYCord()) * 1E6;

lng = Double.parseDouble(d.getXCord()) * 1E6;

GeoPoint branchGeoPoint = new GeoPoint(lat.intValue(),

lng.intValue());


sb = new StringBuilder();

sb.append(d.getBussBrNm()).append(";")

.append(d.getBussBrTelNo()).append(";")

.append(d.getBussBrAdr()).append(";")

.append(d.getTrscDrtm()).append(";")

.append(d.getBussBrAdr2());


// Create new overlay with marker at geoPoint

OverlayItem overlayItem = new OverlayItem(branchGeoPoint,

"branch", sb.toString());

overlayBranch.addOverlay(overlayItem);

}


}

//마커 찍은것이 없으면 오류 메세지를 토스트로 보여준다.

if (overlayBranch.size() < 1){

Toast.makeText(getApplicationContext(),

"검색결과가 없거나 통신장애 입니다.\n'메뉴'버튼을 눌러 조건을 변경하여 다시 검색해 주세요.",

Toast.LENGTH_LONG).show();

}


//지점 오버레이를 맵뷰 오버레이에 최종적으로 추가해준다.

if (overlayBranch != null) {

mapView.getOverlays().add(overlayBranch);

mapView.postInvalidate();

}


};

};


토스트 메세지로 현재 주소와 위도,경도를 잠시 표시해주는 메소드.


private String showNowHere(double lat, double lng , boolean showOption){

StringBuilder geoString = new StringBuilder();

try {

Geocoder goecoder = new Geocoder(getApplicationContext(),

Locale.getDefault());


Address adr = goecoder.getFromLocation(lat,

lng, 1).get(0);


if (adr.getLocality() != null) geoString.append(adr.getLocality()).append(" ");

if (adr.getThoroughfare() != null) geoString.append(adr.getThoroughfare());

if (!"".equals(geoString.toString())) geoString.append("\n\n");

} catch (Exception e) { }

geoString.append("위도 : ").append(lat).append(" ,경도 : ").append(lng);

if (showOption){

Toast.makeText(getApplicationContext(), geoString.toString(),

Toast.LENGTH_SHORT).show();

}

return geoString.toString();

}


캡춰 화면에서 ‘서울특별시 신천동’과 위,경도가 떠있는 토스트이다.

그런데 ‘송파구’ 를 어떻게 가져오는지 모르겠다 -_-;;



이 다음은 화면에서 터치 이벤트를 받아올 오버레이이다.

맵뷰에서 특정지점을 누르고 있으면 현재위치가 아닌 특정지점을 기준으로 지점정보를 검색해오려고 만든 오버레이인데 길게 누르는 이벤트를 받아오는 방식이 좀 어거지이다.

분명 이부분은 개선이 되어야 할것이다.


public class MapTouchDetectorOverlay extends Overlay implements

OnGestureListener {

private GestureDetector gestureDetector;


//onTouchEvent 의 ACTION_DOWN 등을 가지고 직접 처리 하지 않고

//제스처들을 쉽게 캐치할수있는 리스너이다.

private OnGestureListener onGestureListener


private static final long LOOOOONG_PRESS_MILLI_SEC = 1500; // 1.5초정도를 길게누름으로 인식한다.


// for touch timer

private Handler mHandler;

private long touchStartTime;

private long longPressTime;

private MotionEvent globalEvent;


//생성자

public MapTouchDetectorOverlay() {

gestureDetector = new GestureDetector(this);

init();

}


public MapTouchDetectorOverlay(OnGestureListener onGestureListener) {

this();

setOnGestureListener(onGestureListener);

init();

}


//생성자들이 호출할 초기화 함수

private void init() {

mHandler = new Handler();

globalEvent = null;

}


//길게누름을 감지할 스레드

private Runnable looongPressDetector = new Runnable() {

public void run() {

//화면을 누르고 있던 시간

long touchHoldTime = longPressTime - touchStartTime

if ((globalEvent != null)

&& (touchHoldTime > (LOOOOONG_PRESS_MILLI_SEC - 200))) { //조건중에 200ms 를 빼고 검사하는것은 기기마다 성능이 달라서 약간의 여유를 준것이다.

Log.d(LOG_TAG, "loooooong press detected!");

float x = globalEvent.getX();

float y = globalEvent.getY(); //화면에서 눌려있던 지점을 받아온다.


GeoPoint p = mapView.getProjection().fromPixels((int) x,

(int) y); //눌려있던 지점을 위도 경도로 바꿔준다.

Location selectedLocation = new Location(currentLocation);

selectedLocation.setLatitude((p.getLatitudeE6() / 1E6));

selectedLocation.setLongitude((p.getLongitudeE6() / 1E6));

currentLocation = selectedLocation;


locM.removeUpdates(locL); //현재위치 리스너를 잠시 없애버린다.

udateOverlay(currentLocation); //지점 재검색 및 마커 다시 표시

showNowHere((p.getLatitudeE6() / 1E6) , (p.getLongitudeE6() / 1E6) , true);

}

}

};


@Override

public boolean onTouchEvent(MotionEvent event, MapView mapView) {

if (gestureDetector.onTouchEvent(event)) {

return true;

}


onLongPress(event);

return false;

}


@Override

public boolean onDown(MotionEvent e) {

if (onGestureListener != null) {

return onGestureListener.onDown(e);

} else {

// start timer

touchStartTime = System.currentTimeMillis();

mHandler.postDelayed(looongPressDetector,

LOOOOONG_PRESS_MILLI_SEC);

//1.5초 있다가 길게누름을 체크해본다.

}


return false;

}


@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

float velocityY) {

if (onGestureListener != null) {

return onGestureListener.onFling(e1, e2, velocityX, velocityY);

}

return false;

}


@Override

public void onLongPress(MotionEvent e) {

if (onGestureListener != null) {

onGestureListener.onLongPress(e);

}


//화면을 누르고 있으면 onLongPress 가 호출되는데 호출될때마다 체크할 시간을 변수에 넣는다.

//이부분이 퍼포먼스 하락에 영향을 줄 것 같다.

globalEvent = e;

longPressTime = System.currentTimeMillis();


}


@Override

public boolean onScroll(MotionEvent e1, MotionEvent e2,

float distanceX, float distanceY) {

if (onGestureListener != null) {

onGestureListener.onScroll(e1, e2, distanceX, distanceY);

}

return false;

}


@Override

public void onShowPress(MotionEvent e) {

if (onGestureListener != null) {

onGestureListener.onShowPress(e);

}

}


@Override

public boolean onSingleTapUp(MotionEvent e) {

if (onGestureListener != null) {

onGestureListener.onSingleTapUp(e);

}

return false;

}


public boolean isLongpressEnabled() {

return gestureDetector.isLongpressEnabled();

}


public void setIsLongpressEnabled(boolean isLongpressEnabled) {

gestureDetector.setIsLongpressEnabled(isLongpressEnabled);

}


public OnGestureListener getOnGestureListener() {

return onGestureListener;

}


public void setOnGestureListener(OnGestureListener onGestureListener) {

this.onGestureListener = onGestureListener;

}


}


완성된 지점찾기의 동작모습.

액티비티를 실행하게 되면 다음과 같이 작동한다.


실행하게 되면 인트로로 다이얼로그를 하나 띄워준다.



현재 위치가 표시되고 현위치 주변의 지점들을 마커로 표시해준다.



확대 축소 컨트롤은 기기에 마다 내장되어있는 디자인에 다르게 표시된다.



마커를 누르게 되면 간단한 지점 정보 다이얼로그가 뜬다.



메뉴 버튼을 누르면 지점, ATM 찾기를 선택할수 있고, 현위치 메뉴를 선택하면 화면을 다시 현위치로 옮겨준다.



화면을 줌아웃 시키고, ATM 찾기로 옵션을 변경시켜보았다.



화면의 특정지점을 누르고 있으면 그 지점을 기준으로 다시 검색을 해온다.



마지막으로 우리동네도 한번 검색해봤다.





* 추가. 2010-7-13

더블탭시 화면 확대와 화면 스크롤시 길게 누르기 취소를 하기 위하여 다음 부분을 추가.


public class MapTouchDetectorOverlay extends Overlay implements
            OnGestureListener , OnDoubleTapListener{


....


@Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2,
                float distanceX, float distanceY) {
           
            // for Cancle detect loooong touch
            touchStartTime = System.currentTimeMillis() + 5000;
           
            if (onGestureListener != null) {
                onGestureListener.onScroll(e1, e2, distanceX, distanceY);
            }
            return false;
        }


.....


@Override
        public boolean onDoubleTap(MotionEvent e) {
            mapController.zoomIn();
            return false;
        }


.....


}



* 메일주소 등을 적으면서 소스를 달라고 하는 리플들을 보면 눈살이 많이 찌푸려집니다.

본문을 찬찬히 읽어보시고 궁금한점이나 보완해야할점, 토의하고 싶으신 점이 있다면 저도 즐겁게 리플을 달겠지요..

앞으로 소스를 달라고 하는류의 리플은 그냥 제 블로그에서 삭제하도록 하겠습니다.

모쪼록 양해 부탁드립니다.

Posted by 모근원

XCode 로 개발할때는 그럭저럭 할만한데 이클립스만 돌리면 느림보 굼벵이가 되는 나의 맥북!
이클립스가 느려터져서 맥북프로로 바꾸고 하드도 SSD로 바꿔줬는데 이클립스는 너무나도 느렸다ㅠ
이건 뭐.. 처음엔 이클립스는 윈도우에 최적화 되어있고 맥북용은 뻥조금 보태서 로제타가 아닌가 싶을정도로...

윈도우용 이클립스는 eclipse.ini 라는 파일을 수정하거나 이클립스 실행파일의 바로가기에서 메모리 힙사이즈를 조정해서 빠르게 쓸수 있었는데 역시.. 찾아보니 답이 나왔다!


이클립스가 풀려있는 폴더로 가서 이클립스.app 을 보조클릭해서 "패키지 내용 보기" 로 들어간다.


Contents - MacOS 안으로 들어가면 eclipse.ini 파일이 보인다.
요놈을 텍스트편집기로 열어서 수정한다.

위는 수정한 후의 파일인데 먼저
-Xms***m
-Xmx***m
을 적당히 수정한다. 각각 처음에는 40m,512m 정도로 설정되어있는데 나는 4GB 메모리여서 일단은 두배 이상으로 128메가와 768메가로 설정을 해놨다.

중요한부분은 -Dogsi.requiredJavaVersion 인데 처음에는 1.5 로 설정되어있을것이다.
그런데 스노우 레오파드에는 기본 Java SDK 가 1.6으로 설치가 되어있을것이다.
그러므로 이부분을 1.6으로 수정해주자.

모르니 터미널을 열어서 자신의 자바 버젼을 확인하자.
java -version 으로 검사해보니 1.6 이 나왔다.

요렇게만 수정해도 확실히 빨리진 이클립스를 만날수 있다~
Posted by 모근원
정신없는 하루를 보내는 사무실 책상입니다.


새로구입한 맥북프로가 보이네요(?)

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

대학모임  (2) 2011.01.11
카메라 테스트  (0) 2011.01.10
작년 여름.  (2) 2011.01.03
지금은 곤란하다.  (6) 2010.03.17
로모 살아나다  (2) 2010.03.16
괴물 핸드폰 아이폰?  (4) 2009.12.09
Posted by 모근원

오늘 아이패드가 왔습니다 :-)

윤정아 고마와~ ㅋㅋ
Posted by 모근원


지금은 곤란하다. 조금만 기다려달라.
4G 가 나올때까지 버텨주길 바랬는데... ㅠ

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

카메라 테스트  (0) 2011.01.10
작년 여름.  (2) 2011.01.03
정신없는 하루하루  (0) 2010.06.20
로모 살아나다  (2) 2010.03.16
괴물 핸드폰 아이폰?  (4) 2009.12.09
애플 아이폰  (0) 2009.12.03
Posted by 모근원

그동안 책장안에서 녹이슬어 제기능을 못하던 로모를 살려냈습니다 :-)

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

작년 여름.  (2) 2011.01.03
정신없는 하루하루  (0) 2010.06.20
지금은 곤란하다.  (6) 2010.03.17
괴물 핸드폰 아이폰?  (4) 2009.12.09
애플 아이폰  (0) 2009.12.03
영등포 교보문고  (0) 2009.11.04
Posted by 모근원

아이팟이나 아이폰에서 티스토리 블로그를 보시는분들 많으시죠?
http://[일반주소].tistory.com
를 사용하시던 티스토리 블로거 님들은 신경쓰지 않으셔도
아이팟이나 아이폰에서 블로그 접근하면 모바일용 페이지로 보입니다.
스마트폰에서 블로그로 접근하면 모바일용 페이지로 보입니다.

- 수정 : 현재나와있는 거의 모든 모바일기기의 userAgent 를 검사하는 방식으로 변경했습니다.
http://en.wikipedia.org/wiki/List_of_user_agents_for_mobile_phones

그런데 저처럼 티스토리에 자신의 도메인을 연결해서 쓰시는분들은
다음 그림에서처럼 자동으로 모바일 페이지로 이동이 안되고 일반 웹페이지가 나왔었지요.


이때 자바스크립트 몇줄만 스킨에 넣어주면 모바일용 페이지로 이동하게 만들 수 있습니다.
이 방법은 저처럼 lomohome.com 이나 www.lomohome.com 등의 도메인을 티스토리에 연결하신 분께 해당됩니다.

관리자모드 - 스킨 - HTML/CSS 편집에서
HTML 의 <head></head> 태그 사이안에 다음의 자바스크립트를 넣으면

블로그 접근시 유저에이전트를 검사하여 스마트폰이면
모바일 사이트로 이동을 하게 합니다 :-)

<script language="JavaScript">
//모바일 페이지로 이동.
//http://en.wikipedia.org/wiki/List_of_user_agents_for_mobile_phones
var uAgent = navigator.userAgent.toLowerCase();
var mobilePhones = new Array('iphone','ipod','android','blackberry','windows ce',
        'nokia','webos','opera mini','sonyericsson','opera mobi','iemobile');
for(var i=0;i<mobilePhones.length;i++)
    if(uAgent.indexOf(mobilePhones[i]) != -1)
        document.location = "http://"+ location.host +"/m" + location.pathname;
</script>

주의하실점은 위의 빨간색에 이탤릭체로 표시된 부분은
http://[원래티스토리주소].tistory.com/m
으로 해주셔야 한다는것 입니다 :-)
url 을 가져와서 가는방법으로 수정되었습니다.

* 현재 제 블로그에서 [페이지 소스보기] 로 보셔도 해당 소스를 보실 수 있습니다.

작업 후 아이팟 터치나 아이폰에서 자신의 블로그로 접근하면

작업 후 스마트폰에서 자신의 블로그로 접근하면
이렇게 모바일용 페이지로 이동합니다 :-)

모바일용 웹페이지는 작은 해상도에 맞게 이미지등도 리사이즈 해줘서
느린 모바일기기에서 최적의 상태로 블로그를 볼수 있게 합니다.

Posted by 모근원
국내 은행 최초로 하나은행에서 아이폰/아이팟 용 모바일뱅킹 어플이 나왔습니다.
이름은 하나 N Bank 라는군요.
아시는 바와같이 해킹 (즉 탈옥)된 아이폰/팟 (이하는 편의상 아이폰이라 하겠습니다) 에서는 사용이 되지 않는다네요. 보안을 위해서라 생각됩니다.
처음엔 한국 스토어에만 올라왔으나 현재는 미국스토어에서도 내려받기가 가능하다고 합니다.
가격은 당연히 Free 이구요.
어플스토어에서 "hanabank" 를 검색하시면 됩니다.
http://itunes.apple.com/us/app/id340826757?mt=8 [바로가기 링크]

실행하면 기동화면이 나오고 해킹여부를 확인후 공인인증센터에서 인증서를 내려받을수 있습니다.
이니텍의 모듈을 사용하기때문에 안타깝게도 Windows 기반의 PC 에서 작업을 해야하네요.
공인인증서를 아이폰에 넣는 방법은 하나은행 홈페이지에 상세히 설명 되어있습니다.
http://www.hanabank.com/smart

이제 공인인증서를 내려받았으니 기본적인 거래내역 조회와 이체화면을 알아보겠습니다.

공인인증서 작업이 완료된 후엔 이렇게 인증서 로그인을 통해 뱅킹서비스를 시작하게됩니다.


인증서 선택후 인증서 비밀번호를 입력하는 화면입니다.


12시부터 5분간은 서비스가 안된다네요 -_-;


최초 사용시엔 이렇게 약관페이지가 나오며
약관에 동의하여야 스마트폰 뱅킹 서비스를 받을 수 있습니다.


스마트폰 뱅킹 서비스를 가입하기 위해 다시 한번 공인인증서와 보안카드를 넣는
보안매채인증 작업을 합니다. OTP 이용자는 OTP 번호 입력창이 뜨겠네요.
탈옥을 하면 사용할수 없는 모바일 뱅킹이라 Backgrounder 를 사용할수 없습니다.
저처럼 아이폰에 보안카드 번호를 보안어플을 이용하여
보관하시는 분들은 조금 불행한겁니다.. 실물 카드를 가지고 다니는편이 편하겠네요.

*간단하지만 복잡한-_-팁을 하나 알려드리겠습니다.
보안카드란것은 한번 요구번호가 나오면 (위에서는 19,18) 정확한 보안카드번호를 넣어서 거래를 하기전엔 바뀌지 않습니다. 따라서 번거롭지만 아무데나 이체를 하는척해서 보안카드 요구번호를 알아내고 어플 종료후, 보안카드 어플에서 보안카드 번호를 확인한후 다시 은행어플로 와서 진행하면 아까 요구한것과 같은 보안카드 요구번호가 나올겁니다. 조금 귀찮지요..


어찌되었건 사용완료 하고 이젠 사용을 하면 됩니다 :-)


예금계좌 목록조회 화면입니다.
하나은행에 가지고있는 통장목록이 나오는군요.
탭으로 예금,펀드,대출,외환,자산의 보기가 가능합니다.
통장에서 오른쪽의 > 버튼을 누르면 해당 통장에서 할수있는 바로가기 버튼들이 나옵니다.
월급통장의 > 를 탭하니 계좌정보,거래내역,즉시이체 버튼이 나오는군요.


계좌정보를 조회한 화면입니다.
해당 통장의 상세정보가 나옵니다.


거래내역 조회를 해보겠습니다.
인터넷뱅킹과 화면이 그리 다르지 않습니다.
계좌가 여러개이신 분들은 계좌번호선택에 번호만 표기되어 불편한 점도 있을 수 있겠네요.


조회 결과입니다.
출금된 내역은 - 로, 입금된내역은 + 로 표시가 되네요.
아이폰을 이용하면 어디서든 입출금 내역을 확인할수가 있습니다.


자금이체의 첫화면입니다.
인터넷뱅킹과 화면이 다르지 않습니다 :-)
'자주쓰는 계좌' 나 최근입금계좌를 사용이 가능하네요.
자주쓰는 계좌를 눌러보겠습니다.


인터넷뱅킹에서 관리되는 자주쓰는 계좌와 완전히 동일합니다.
자주쓰는 계좌는 이렇게 등록하여 쓰면 클릭만으로 은행과 계좌번호가 자동입력 됩니다.


은행 선택화면입니다.


금액이나 계좌번호를 입력할땐 Qwerty 키보드가아닌 숫자키패드가 나타납니다.
상당히 편리한 인터페이스네요 :-) 개발자분들의 노고와 세심함이 느껴지는 부분입니다.


어찌돼었든, 이체를 진행해보겠습니다.
수취조회를 한 화면입니다. 인터넷뱅킹 이체의 step 2 에 해당하겠네요.
여기서 받는 분을 확인하고 '진행'하게되면 실제 이체 프로세스가 진행됩니다.


보안카드 입력화면이네요.
실물카드를 가지고 있지 않고 폰에 보안카드 번호가 있다면 조금 불편함이 예상됩니다.
보안카드를 입력하고 다시한번 공인인증서를 제출하게 됩니다.


이체가 완료된 화면입니다.
속도도 3G 망을 이용하여 테스트 했는데 크게 불편이 없는 속도였습니다.
10여분넘게 인터넷뱅킹을 테스트 했었는데 사용된 패킷은
일반 > 사용내역 확인시 2메가 남짓 된듯 보입니다. 2MB 정도 사용하니 웬지 찝찝하네요 -_-..


이 포스팅으로 간단히 하나은행 아이폰 뱅킹에서 거래내역 조회와 이체화면을 살펴봤습니다.
인터넷뱅킹을 사용할때 주로 하는 거래가 이 두가지 거래라고 생각합니다.
이 외에 지로/공과금 납부나 카드서비스, 외환, 펀드등의 서비스가 곧 추가될것으로 보이니 국내 은행중 첫 아이폰 뱅킹서비스를 선보이는것 치고는 굉장한 완성도를 보입니다 :-)
이로서 아이폰을 사용하는데 불편함이 하나 해소되었네요.


'내가끄적인글 > 끄적인 글' 카테고리의 다른 글

R.I.P.  (0) 2011.10.06
맥북 프로 15인치 구입.  (0) 2010.09.06
iPad 구입 :-)  (11) 2010.04.17
HD-DVD addon for XBOX360  (6) 2008.12.08
[OSX] dell mini9 99% 동작하는 사운드 드라이버  (4) 2008.11.19
[OSX] dell mini9 CPU speed step 설정.  (0) 2008.11.19
Posted by 모근원
그동안 써왔던 핸드폰중에 사진이 이렇게 나오는 핸드폰은 아이폰이 처음인듯 싶다.

출근길 지하철 안에서. 꽉막히던 강변북로.


새벽에 집을 나서면서


점심먹고 나와 식당앞에서 한컷


명동에 함박눈 내리던 오후


사무실 로비에 자리잡은 크리스 마스 트리


Apple iPhone 3Gs / sRGB / Free PhotoFilters +photoshop.com / 2009. 12

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

정신없는 하루하루  (0) 2010.06.20
지금은 곤란하다.  (6) 2010.03.17
로모 살아나다  (2) 2010.03.16
애플 아이폰  (0) 2009.12.03
영등포 교보문고  (0) 2009.11.04
프로그래머의 자리  (13) 2009.11.04
Posted by 모근원
아기다리고기다리던 아이폰이 왔습니다 :-)

드디어 왔구나~ iPhone 3Gs.


정갈한 32기가 화이트입니다. 밥주고 있지요 :-)


이날 같이 배송된 애플 "매직 마우스"
버튼과 스크롤휠이 없고 멀티터치 펑션이 들어가있습니다.


사무실 책상샷. 절반은 애플제품이군요 :-)


아이폰 구입으로 방출된 아이팟 터치 1세대.
첫월급 받아서 산이후 애지중지한게 2년이 되어가네요 :-)


안녕~


박스에 담아 고이고이 빠이빠이 ㅎ


그나저나 핸드폰 산지 5개월만의 기기변경이라 기기할부 20만원 + 위약금 12만원을 냈더니
아이폰을 구입하기 위해 출혈이 심했다는 생각도 드네요 ;-(


SIGMA DP2 / RAW / sRGB / SPP 3.3 + Photoshop CS3 / 2009. 12. 1


'내가찍은사진 > 디카사진들' 카테고리의 다른 글

지금은 곤란하다.  (6) 2010.03.17
로모 살아나다  (2) 2010.03.16
괴물 핸드폰 아이폰?  (4) 2009.12.09
영등포 교보문고  (0) 2009.11.04
프로그래머의 자리  (13) 2009.11.04
가을 북한산 등산  (4) 2009.10.30
Posted by 모근원
새로생긴 타임스퀘어 안의 교보문고



교보문고 안에 까페도 있어서 책들을 가져다 커피한잔하면서 볼수있어 좋다~ ^^




공무도하 김훈작가님 싸인회


SIGMA DP2 / RAW / sRGB / SPP 3.3 + Photoshop CS3 / 2009. 11. 1

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

로모 살아나다  (2) 2010.03.16
괴물 핸드폰 아이폰?  (4) 2009.12.09
애플 아이폰  (0) 2009.12.03
프로그래머의 자리  (13) 2009.11.04
가을 북한산 등산  (4) 2009.10.30
작업환경  (0) 2009.10.29
Posted by 모근원
항상 깔끔하려고 노력하는 사무실에서 내 자리
살짝 설정샷



이번에 구입한 맥북. 이걸로 Objective-C 공부중~


메인 노트북에선 회사 작업용. 작업용으로 쓰기엔 너무 아깝다 ㅠㅠ


IT분사 저지!(?)


SIGMA DP2 / RAW / sRGB / SPP 3.3 + Photoshop CS3 / 2009. 11. 4

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

괴물 핸드폰 아이폰?  (4) 2009.12.09
애플 아이폰  (0) 2009.12.03
영등포 교보문고  (0) 2009.11.04
가을 북한산 등산  (4) 2009.10.30
작업환경  (0) 2009.10.29
홈메이드 스파게티  (0) 2009.10.29
Posted by 모근원
빨리 가버릴것 같은 늦은 가을에 북한산 등산

아직 초반 즐거운 등산길~


쌩얼 작렬


등산 매니아. 소영.


은평 뉴타운 바라보면서 식사하시는 분들


난 보기만해도 후덜덜 하던데 ㅠ


족두리봉에서 소영이


첫번째 봉우리에서 쩔은 저질체력 보유자


오늘의 목표(?)


머리 묶고 다시 출발 채비


간식 먹는 햄스터


다리 한번 잘못 딪으면 한방에 훅


쉴만큼 쉬고 다시 이동 전에 기념촬영


저~기 보이는곳이 방금 사진찍었던 족두리봉


향로봉 가는길


가다가 지쳐서 커피타임


럭셔리한 맥심


사실 커피마시기전에 집에서 구워온 만두도 있었는데 ㅠ


두번째 봉우리인 향로봉 찍고 비봉가는길


북한산


북한산 파노라마
* 사진을 클릭한후 크게 보시길 추천


북한산은 돌산이어서 단풍나무는 잘 없었지만 (아얘 못본것 같기도..)
그래도 울긋 불긋하니 가을분위기는 났었다~


향로봉


또 걸어걸어 비봉도착. 젊은 나이에 죽기 싫어 올라가지않았다.


사실 비봉은 119 대원님께서 못올라가게 막고 있었는듯.


세번째 봉우리인 비봉을 찍고 사모바위


단풍구경 왔다가 너무 무리하는것 같아서 승가사 찍고 저녁식사 고고싱


승가사


내려오는길에 마눌님이 싸온 도시락.
산에서 먹는 밥은 정말 너무 맛있다 :-)


내려와서 종로 청계천에와서 노숙모드


등산~ 끝~

SIGMA DP2 / RAW / sRGB / SPP 3.3 + Photoshop CS3 / 2009. 10. 25

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

애플 아이폰  (0) 2009.12.03
영등포 교보문고  (0) 2009.11.04
프로그래머의 자리  (13) 2009.11.04
작업환경  (0) 2009.10.29
홈메이드 스파게티  (0) 2009.10.29
강화도 전등사  (0) 2009.10.28
Posted by 모근원
Objective-C 와 Cocoa 를 해보며 취미로 iPhone, iPod 프로그래밍을 해보려고 산 맥북.

훌륭한 테스트 베드, 동생방의 맥북 프로


가지고 다니면서 작업중인 맥북 화이트
* 사진감상 포인트는 너저분한 남자의 방들 -_-;

SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 10. 21

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

영등포 교보문고  (0) 2009.11.04
프로그래머의 자리  (13) 2009.11.04
가을 북한산 등산  (4) 2009.10.30
홈메이드 스파게티  (0) 2009.10.29
강화도 전등사  (0) 2009.10.28
워크샵  (0) 2009.10.28
Posted by 모근원
400일날 저녁 조촐한 홈메이드 스파게티
찍어놓고 보니 사진은 이상한데 맛은 좋았다. 에헴.

토마토 소스


까르보나라


SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 10. 11

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

프로그래머의 자리  (13) 2009.11.04
가을 북한산 등산  (4) 2009.10.30
작업환경  (0) 2009.10.29
강화도 전등사  (0) 2009.10.28
워크샵  (0) 2009.10.28
로또 당첨  (4) 2009.10.27
Posted by 모근원
지호형네와 강화도로 슬슬 드라이브 갔던날

전등사, 형수와 소영이




형수와 지호형


마눌님 빵! 터지셨음.


귀여운 표정 작렬(?)


저돈이 내돈이었으면 -_-;;


봉황


노출증 나한


알뜰한 스님

SIGMA DP2 / RAW / sRGB / SPP 3.3 + Photoshop CS3 / 2009. 10. 10

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

가을 북한산 등산  (4) 2009.10.30
작업환경  (0) 2009.10.29
홈메이드 스파게티  (0) 2009.10.29
워크샵  (0) 2009.10.28
로또 당첨  (4) 2009.10.27
추석연휴  (0) 2009.10.24
Posted by 모근원
1박2일 하나은행 전산부 당진 워크샵
왜목펜션빌의 정승(?)


한적하고 넓은 펜션에서의 광란의 밤-_-을 지내고 난뒤


술냄새가 아직 가시지 않은 펜션


가기전에 한방


길냥이

SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 10. 9

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

작업환경  (0) 2009.10.29
홈메이드 스파게티  (0) 2009.10.29
강화도 전등사  (0) 2009.10.28
로또 당첨  (4) 2009.10.27
추석연휴  (0) 2009.10.24
쁘띠 프랑스 #2  (5) 2009.09.26
Posted by 모근원
추석전날 산 로또 추석날 당첨
 
무려 4등~!


저녁에 계란말이에 소주 고고씽 ㅋ


SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 10. 5

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

홈메이드 스파게티  (0) 2009.10.29
강화도 전등사  (0) 2009.10.28
워크샵  (0) 2009.10.28
추석연휴  (0) 2009.10.24
쁘띠 프랑스 #2  (5) 2009.09.26
쁘띠 프랑스 #1  (0) 2009.09.26
Posted by 모근원
추석연휴 마지막날
가족과 집에서 조개구이 +_+

집에서 먹는 조개구이는 또 색다른 맛!




지글지글


2NE1 스타일. 조카 한별이 -_-;;




대하랑 낙지도 지글지글~


SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 10. 4

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

강화도 전등사  (0) 2009.10.28
워크샵  (0) 2009.10.28
로또 당첨  (4) 2009.10.27
쁘띠 프랑스 #2  (5) 2009.09.26
쁘띠 프랑스 #1  (0) 2009.09.26
아침고요 수목원 #2  (0) 2009.09.24
Posted by 모근원
쁘띠 프랑스 안에는 생택쥐베리 기념관도 있었다.


마지막으로 어린왕자를 읽었던때가 언제였더라..


어린왕자 초고. 어릴때 저 '보아뱀' 을 보고 굉장히 무서워했었는데;;


술 마신다는 게 부끄러워!


'바오밥 나무' 도 무섭다. 어린왕자를 영화화 하면 SF호러물이 되지 않을까.. -_-


기념관앞에서 쉬는중에. 분수 한컷.


'어린' 왕자보다 키 크다고 기뻐하는중.


오르골 전시관에서. 프랑스에서 오르골이 유명한가보다.


한켠에서는 재즈공연도 하고있었다. T-Square 곡을 연주하던데 평소 듣던곡이라 좋았다 :-)


발레리나 이. 이것이 평소 모습.


멋적은 표정. 컨셉.


종치는곳에서 바라본 재즈공연.


뎅~


쁘띠프랑스 앞에는 청평호가 있다.


종 모자. 생각보다 그림이 안나온다 ㅋㅋ


벽에 팔꿈치 찧고 아파하는중. 리얼상황. "아!!!!"


다시 가다듬고. 포~ 즈.


분수대 앞에서 우리 마눌님.


인형극用 인형


쁘띠 프랑스


상장들고 '참 잘했어요' 컨셉


기념 스탬프


쁘띠 프랑스 입구 앞

SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 20

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

워크샵  (0) 2009.10.28
로또 당첨  (4) 2009.10.27
추석연휴  (0) 2009.10.24
쁘띠 프랑스 #1  (0) 2009.09.26
아침고요 수목원 #2  (0) 2009.09.24
아침고요 수목원 #1  (2) 2009.09.24
Posted by 모근원
수목원에서 나와서 청평터미널로 이동해서 택시타고 간 쁘띠 프랑스.
택시타고 가는데 20분정도 걸렸는데 준비한 현금보다 택시비가 많이 나오는 바람에
택시비대신 지갑속에 가지고 다니던 행운의 '2달러' 로 모자란 택시비를 지불했다 ㅠ_ㅠ

쁘띠 프랑스는 '작은 프랑스' 라는 뜻이라는데, 베토벤 바이러스에서 강마에 집무실,
오디션 장면등을 촬영한 곳이라고 한다.
원래는 청소년 수련원인것 같으며 평소에는 펜션으로 숙박도 가능하다.
가격대는 훌륭하나 주변에 볼것이 없어서 숙박할경우엔 그냥 쁘띠프랑스 구경으로 족해야할듯.
입장료는 8천원.

들어서면 이렇게 살짝 이국적인 건물들이 반겨준다.


프랑스 전통의상 체험. 입으려면 5천원 든다. -_-


프랑스 전통가옥에서 한컷.
침대가 좋아보였다. ㅎ


미싱 중.


찍고나서 보니 '만지지 마시오' 였다. 죄송 ㅠ


소파가 너무 푹신했다.


강마에 집무실에서 소영이.


이마에. (운동장)


창밖에 보이는 청평호


쁘띠프랑스 풍경


피곤해서 쉬는중


청평호를 볼수있는 전망대에서. '재현이를 찾아라'


나중에 이런집 짓고 살자


전통의상 빌려다 입고 찍을걸 그랬나


눈 앞에 청평호


최근에 서울에선 이런 큰 거미를 본적이 없는거 같다.




이쁜 숙박동에서 한컷


SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 20

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

로또 당첨  (4) 2009.10.27
추석연휴  (0) 2009.10.24
쁘띠 프랑스 #2  (5) 2009.09.26
아침고요 수목원 #2  (0) 2009.09.24
아침고요 수목원 #1  (2) 2009.09.24
청평 기차여행  (0) 2009.09.23
Posted by 모근원
'한국정원' 이란곳에 들러 휴식


쉴땐 양말부터 벗어야죠




쎄쎄쎄 하는중


한국정원 처마 밑의 옥수수


도라에몽


머리정리중



지못미 원래 컨셉은 이런것이 아니었는데.. ㅠ




잡고 안놓아 주는중


열심히 다음 계획 짜는 중


여기도..


나도..


누워서 본 한옥의 지붕


여기는 수목원입니다~






조심히 건너오렴


조심조심


삐끗!


민망하구랴




아침고요수목원 전망대에서 바라본 정원


완두콩은 들어오지 마세요.


그리고 역광에 인상쓰는 커플.


누가 꽃이고 누가 사람인지~


수목원의 푸른 잔듸


자연과 하나됨




촛점이... 보기싫었던거냐 ㅠ




산채비빔밥


묵무침


송이덮밥


그리고 막국수


아침고요 수목원에서의 점심상

 
SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 20

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

추석연휴  (0) 2009.10.24
쁘띠 프랑스 #2  (5) 2009.09.26
쁘띠 프랑스 #1  (0) 2009.09.26
아침고요 수목원 #1  (2) 2009.09.24
청평 기차여행  (0) 2009.09.23
토론토 친구들 090913  (0) 2009.09.16
Posted by 모근원
펜션에서 아침먹고 바로 나선 아침고요 수목원.


소영이 나


사진찍기 싫다며 카메라 들이대면 포~즈


초입에서 둘러본 아침고요 수목원 입구




공기 좋고~ 물(?) 좋고~


몸통조이기


단풍은 아직이다


흡사 CF의 한장면 ㅎ


회먹고 싶어하는중


횟감들;


수목원 내의 '선녀탕'


피라미들




소영이와 나




햇살좋은 산책길




비행기~ 아이고~


아침고요 수목원

 
SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 20


'내가찍은사진 > 디카사진들' 카테고리의 다른 글

쁘띠 프랑스 #2  (5) 2009.09.26
쁘띠 프랑스 #1  (0) 2009.09.26
아침고요 수목원 #2  (0) 2009.09.24
청평 기차여행  (0) 2009.09.23
토론토 친구들 090913  (0) 2009.09.16
저녁식사  (2) 2009.09.13
Posted by 모근원
급 기획하고 떠난 청평 기차여행
청평역 도착~


아~ 심심타~


머리 팍! 잘랐어요. 우리 소영이.



택시타고 펜션가는길에. 뒤에 소영이는 드라이브중인 강아지 같구나 ㅎ

첫날 저녁. MT의 묘미 바베큐!

나와 소영이


지글지글 바베큐~ 아 또 먹고프다 ㅠ


저녁을 거하게 먹고 방에 들어와서 인간적인 이차.


벌써 졸려보이네~


다음날 아침. 일어나 일광욕중인 마눌님.


편해보인다 -_-..


아~~ 일어나기 귀찮아~~


잠이 덜깬 얼굴



SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 19


'내가찍은사진 > 디카사진들' 카테고리의 다른 글

쁘띠 프랑스 #1  (0) 2009.09.26
아침고요 수목원 #2  (0) 2009.09.24
아침고요 수목원 #1  (2) 2009.09.24
토론토 친구들 090913  (0) 2009.09.16
저녁식사  (2) 2009.09.13
과천 경마공원  (2) 2009.09.12
Posted by 모근원
미호 한국놀러 온김에 오랬만에 만나본 토론토 친구들.

미고 딸기빙수


지현이와 미호


살 쪽빠진 동현이


막걸리 집에서 미호와 지현이


강일이


동현,지현,미호,강일


귿 빠이~


SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 13

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

아침고요 수목원 #2  (0) 2009.09.24
아침고요 수목원 #1  (2) 2009.09.24
청평 기차여행  (0) 2009.09.23
저녁식사  (2) 2009.09.13
과천 경마공원  (2) 2009.09.12
제주도 여행 #9 - 만장굴, 돌아오는 길  (0) 2009.09.05
Posted by 모근원
간만에 스테이크집에서 외식. 1주년 기념.


테이블 셋팅


아 기대되효~


아.. 이게 뭐였더라..


와인이름이 복잡해서 .. 까먹었다. 샤또 뭐시기였는데.








스프


연어 샐러드


로즈마리향 양 갈비 구이


립아이 스테이크. 이건 정말 맛있었다!


후식으로 커피와 함께 나온 샤베트와 티라미스.




SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 7

'내가찍은사진 > 디카사진들' 카테고리의 다른 글

아침고요 수목원 #1  (2) 2009.09.24
청평 기차여행  (0) 2009.09.23
토론토 친구들 090913  (0) 2009.09.16
과천 경마공원  (2) 2009.09.12
제주도 여행 #9 - 만장굴, 돌아오는 길  (0) 2009.09.05
제주도 여행 #8 - 성산 일출봉  (0) 2009.09.05
Posted by 모근원
날 맑은날 경마공원 놀러가기.

가기전에 신림동 순대촌에서 순대볶음 먹고 출발~


초보자 경마교실에서 열심히 강의 듣고, 이벤트 당첨되서 천원 경마권 얻으신 마눌님.


소영이 좋아하는 말도 보고~


다음에 친구들하고 도시락 싸서 또 오면 좋겠다~


나는 6000원 잃었는데 소영이는 단식과 연식에서 당첨~ @_@


소영이가 따신 돈. 완전 소질있는데~


경마공원에서 놀고나서 저녁엔 시원한 맥주 한잔~!


SIGMA DP2 / RAW / sRGB / SPP 3.5 + Photoshop CS3 / 2009. 9. 6

Posted by 모근원