2010년 2월 13일 토요일

Torch Relay 를 보고.....

세계인의 축제인 올림픽......... 그 시작을 알리는 성화가 오늘 회사 앞 Gas Town을 지나갔네요 ㅎㅎ

사람들이 너무 많아서 괜찮은 사진은 별로 찍지 못했습니다.

펼쳐두기..

2010년 2월 12일 금요일

오늘은......?

머리가 좀 지끈거리네요...... 할 게 많아져서 그런건가??

머리속으로 정리해놓은것도 있는데 또 새로운게 들이닥치면서 갑자기 급 복잡해졌습니다.

방대한 양의 정보를 처리할 수 있는 능력을 가진 뇌가 저는 없네요 ㅠ.ㅠ

그래도 할 게 많아진다니까 내가 공부하고 있다는걸 앞으로 나아가고 있다는걸 느낄 수 있어서 행복할 것 같습니다.

오늘은 뻘 글로 하루 포스팅을 마무리.....

조만간 안드로이드에 구글맵 살짝 띄어보는 내용을 포스팅 할려고 합니다.

그렇게 어려운 내용은 아닌데 바쁜것도 아닌데 그냥 이것저것 하다보니 포스팅할 시간은 그렇게 나지 않네요.(오늘도 이것저것 하다보니 저녁 11시에나 글을 쓰고 있는....)

이렇게 하루는 흘러가고 귀국의 시간은 다가오네요..... (아이 좋아 >.<)





푸념글

펼쳐두기..

2010년 2월 11일 목요일

지금 여기 벤쿠버는......

지금 여기 벤쿠버는 거리마다 올림픽 일색으로 거리가 장식되어 있네요...

Robson Street 에 설치된 CTV 중계소 인듯 합니다. 정확히 저기서 뭘 하는지는 모르겠는데 대충 올림픽 할때 거리의 모습을 중계하거나 할 듯 하네요.


위 사진은 벤쿠버 미술박물관(?) 이었나 명칭이 잘 생각이 안나네요. 올림픽 기간동안 갖가지 신기한 영상들을 보여주고 있습니다. 그 주위에는 겨울스포츠를 대표하는 장비들이..... 지금 가지고 있는 사진은 스노우보드 밖에 없네요.... 헐..... 바로 맞은편에 봅슬레이도 있었는데 친구사진 찍어준다고 제 사진찍는건 깜빡했네요.... 허허...


어떤 건물인지는 잘 모르겠는데 그 건물 벽면에 캐나다 국기를 걸어놨네요....... 이 나라는 국기를 로고로 해서 해놓은 물건들이 정말 많습니다. 옷부터 가방에 모자에.......... 사람들도 별로 촌스럽다고 안느끼고 많이 입고 다니는 모습이 흔하네요.

아무튼 올림픽은 다가오고 사진찍을 거리는 많아지고.... 괜춘하네요 ㅎㅎ

자축!! 1000Hit 돌파!!!

블로그를 개설한지 약 1달이 좀 되어 가는 것 같네요. ㅎㅎ

싸이는 만들어놔도 제가 잘 안하는 관계로다가 방문자수 크게 늘지 않는데

블로그를 개설한지 1달도 안되서 1000히트를 기록하니 느낌이 새롭습니다. ㅎㅎ

찾아와주신 모든 분들께 감사하고 미약한 정보로 도움이 되셨다고 말해주신 분들도 혼또니 아리가토

라고 감히 말씀드립니다.

좀 더 많은 정보를 포스팅하고 좀 더 재밌는 거리를 포스팅해서 많은 블로거 분들과 친해졌으면 하네요

5000히트를 다음 목표로 삼고 블로그 운영해 나가겠습니다.

오늘은 치즈케익이라도 사서 자축이나 해볼까......... (이뭔 병신짓인가 ㅠ.ㅠ)

고민중................

요즘 들어서 국내 안드로이드폰 출시 소식이 심심찮게 들리고 있습니다.

대표적으로 이번에 출시한 모토로라의 모토로이!!







대충 다른 블로거님들의 글을 읽어보면 괜찮다하는 평이 나오고 있는 듯 합니다. 머 확실한 평은 좀 더 두고봐야 알겠지만요.

다음으로 기대되는 기기는 Sony Ericson 의 Xperia X10 입니다. 일본에서 4월내 출시된다는 기사를 읽은 적이 있네요. 과연 국내 출시될지 그리고 출시된다면 언제 출시될지는 모르겠지만 전체적인 기기 디자인과 UI 디자인은 홀딱 빠지게 만들만 합니다.

 하지만 유튜브 영상으로본 구동기는 실망을 감출수가 없는데 출시될때에는 그 부분도 개선될 거라 믿고 싶네요.







지금은 당장 테스트용 기기가 필요하므로 모토로이를 구매할 가능성이 높을 듯 싶습니다. 하지만 괜시리 Xperia 를 기다리고 싶어지기도 하고요.

아니면 요번에 3G망 접속문제 패치를 한다는 Nexus One 도 기대됩니다.

얼른 많은 기기들이 한국에 출시되어서 소비자들의 선택의 폭을 넓혀줬으면 좋겠군요.

기업의 이익도 중요하겠지만 소비자들의 권리도 함께 쫓아간다면 최고의 기업이 되지 않을까 생각됩니다.

한국 갈 날이 얼마 남지 않았는데 이제 여기 생활도 슬슬~ 마무리 해야 겠네요.

오늘은 간단히 맥주나 한잔 걸쳐볼까...........

2010년 2월 9일 화요일

안드로이드에 구글맵을 사용하기 위한 준비!!

앞서 포스팅한 것들은 이미 포함되어져 있는 라이브러리를 사용해왔기에 별다른 설정 없이 사용을 해왔지만 구글맵을 사용하기 위해서는 또다른 설정을 해주어야 합니다.

이 설정을 해주기 위해서는 API KEY가 필요한데 이번 포스팅에서는 이 Key를 가져오는 방법을 포스팅 하겠습니다.

별로 크게 어려운 점은 없으니 차근차근 따라하시면 될 듯합니다.

먼저 여러분이 미리 설치해두신 JDK가 설치된 폴더의 bin폴더에 있는 keytool을 이용해야 합니다.

먼저 자신이 설치한 JDK의 설치폴더를 확인해주세요

keytool을 사용하기 위해서는 커맨드프롬프트를 이용해야 합니다. 여기서 잠깐!! 커맨드프롬프트 상에서 자바명령어를 불편하지 않게 사용하기 위해서 path가 등록되어 있어야 합니다. 등록이 되어 있지 않다면 내컴퓨터의 속성에 고급탭으로 가셔서 환경변수를 클릭하시면 시스템 변수의 PATH 항목에 jdk의 bin폴더 경로를 입력해 주시면 됩니다. 물론 각 항목의 끝을 알리는 세미콜론(;)을 앞에 붙여주시고요.

이제 keytool을 이용해서 MD5 Fingerprint를 생성하겠습니다. MD5 Fingerprint는 구글맵 API Key를 얻기위해 사용되므로 꼭 필요합니다. 커맨드 프롬프트 상에서 debug.keystore 가 있는 곳으로 이용해야 하는데 주로 C:\Documents and Settings\계정이름\.android 이 경로에 있으니 찾아보시기 바랍니다. 이 경로에도 없다면 파일찾기를 통해 debug.keystore 를 찾아보시는걸 권장합니다.

그러면 커맨드 프롬프트 상에서 저 경로로 들어간 후에 다음과 같은 명령어를 타이핑 하시면 됩니다.


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

위의 명령어를 실행하시게 되면 다음과 같은 화면을 보실수 있습니다. 빨간줄로 밑줄 지어진 부분이 MD5 Fingerprint 입니다. 복사하셔서 보관해두세요.


그렇다면 이제 API key를 발급받아볼까요?

http://code.google.com/android/maps-api-signup.html 로 접속하셔서 MD5 Fingerprint를 입력하시고 구글계정으로 로그인 하시면 Key를 발급받으실 수 있습니다.


발급받은 Key는 잃어버리지 않도록 잘 보관하시기 바랍니다. 다음에는 간단하게 구글맵을 안드로이드에 띄우는 것을 포스팅 하도록 하겠습니다.


2010년 2월 6일 토요일

Hello GridView 살펴보기

오늘은 저번에 살펴본 GridView 에 대해서 살펴볼까 합니다.

이걸로 당분간은 View 에 대한 글은 미루고 다른것들을 포스팅 할까 생각중입니다. ㅎㅎ

먼저 xml 코드부터 살펴보도록 할까요?
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
   
android:id="@+id/gridview"
   
android:layout_width="fill_parent"
   
android:layout_height="fill_parent"
   
android:columnWidth="90dp"
   
android:numColumns="auto_fit"
   
android:verticalSpacing="10dp"
   
android:horizontalSpacing="10dp"
   
android:stretchMode="columnWidth"
   
android:gravity="center"
/>

머 기본적인 코드들은 어느정도 익히셨다고 생각되고 중요한 부분만 짚고 넘어가겠습니다.

바로 view 에 ID를 부여하는 부분입니다. 바로 이 부분 android:id="@+id/gridview" 여기서 직접 View 에 ID를 부여하여 Java 코드에서 해당 Id를 가져와 컨트롤을 할 수 있습니다. id는 아무거나 하셔도 됩니다. ex) android:id="@+id/아이디"

다음은 onCreate 메소드에 들어간 코드를 살펴보죠
public void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);
    setContentView
(R.layout.main);

   
GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview
.setAdapter(new ImageAdapter(this));

    gridview
.setOnItemClickListener(new OnItemClickListener() {
       
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
           
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
       
}
   
});
}

GridView 객체를 생성해 findViewById 메서드를 통해서 해당View를 직접적으로 콘트롤 하게 됩니다.

다음으로 setAdapter를 통해서 모든 이미지를 GridView 에 표현하기 위해 ImageAdapter와 연결을 합니다.

ImageAdapter는 잠시 뒤로 미뤄두도록 하죠

Grid에 올려져 있는 아이템을 우리가 클릭을 했을때 어떤일을 하기 위해서 setOnItemClickListner()는 AdapterView.OnItemClickListener로 전달이 됩니다. 콜백함수인 onItemClick()은 해당아이템이 위치한 포지션을 토스트 해줍니다. 토스트는 직접 실행해보셨으면 알겠지만 갑자기 토스트기계에서 나오는 빵처럼 뿅~ 하고 나왔다가 사라지는 일종의 알림말 같은 것이라고 보시면 될 것 같네요.
주로 우리가 만드는 프로그램은 저렇게 토스트가 나오는게 아니라 이미지가 확대되어 나오는 코드를 짜면 될 것 같습니다. ㅎㅎ

자 이제 마지막으로 미뤄두었던 ImageAdapter를 보면 될 것 같네요.
public class ImageAdapter extends BaseAdapter {
   
private Context mContext;

   
public ImageAdapter(Context c) {
        mContext
= c;
   
}

   
public int getCount() {
       
return mThumbIds.length;
   
}

   
public Object getItem(int position) {
       
return null;
   
}

   
public long getItemId(int position) {
       
return 0;
   
}

   
// create a new ImageView for each item referenced by the Adapter
   
public View getView(int position, View convertView, ViewGroup parent) {
       
ImageView imageView;
       
if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView
= new ImageView(mContext);
            imageView
.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView
.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView
.setPadding(8, 8, 8, 8);
       
} else {
            imageView
= (ImageView) convertView;
       
}

        imageView
.setImageResource(mThumbIds[position]);
       
return imageView;
   
}

   
// references to our images
   
private Integer[] mThumbIds = {
            R
.drawable.sample_2, R.drawable.sample_3,
            R
.drawable.sample_4, R.drawable.sample_5,
            R
.drawable.sample_6, R.drawable.sample_7,
            R
.drawable.sample_0, R.drawable.sample_1,
            R
.drawable.sample_2, R.drawable.sample_3,
            R
.drawable.sample_4, R.drawable.sample_5,
            R
.drawable.sample_6, R.drawable.sample_7,
            R
.drawable.sample_0, R.drawable.sample_1,
            R
.drawable.sample_2, R.drawable.sample_3,
            R
.drawable.sample_4, R.drawable.sample_5,
            R
.drawable.sample_6, R.drawable.sample_7
   
};
}

위의 ImageAdapter 는 BaseAdapter를 상속하고 있다는걸 아실 수 있습니다.
BaseAdapter에서 상속받은 몇 몇 Implement 가 요구됩니다. 위의 코드를 보시면 아시겠지만 생성자 함수와 getCount(), getItem(int), getItemId(int) 가 그것입니다. getItem 함수는 실질적인 객체를 return 해주는게 좋고 getItemId 함수는 해당 아이템의 row Id를 return 해주는게 좋다고 나와있습니다.
하지만 이 예제 코드에서는 필요하지 않으니 그냥 null과 0으로 처리를 했군요.

자 다음은 getView 함수입니다. 이 함수는 ImageAdapter에 이미지를 추가하기 위해 새로운 ImageView를 생성하는 일을 합니다. 생성된 ImageView에 배열안에 넣어진 이미지들을 넣어주도록 설계되었습니다.

보기에는 좀 까다로워 보이는 예제코드이지만 막상 분석을 해보면 그렇게 어렵지 않은 코드란걸 아실 수 있을 듯 하네요.

조금더 나은 공부를 위해서 정보 공유는 필수!!! 질책 마다하지 않습니다. 댓글 남겨주시면 감사요 ㅋㅋ

Vancouver Olympics Torch Relay Route

오늘 출근하자마자 Kathy(인턴쉽 사장님) 에게서 뜻밖의 메일을 받았습니다.

그것은 벤쿠버 올림픽이 시작하는 날인 2009.2.12 9시 즈음에(한국시간 2009.2.13 새벽2시 정도) Torch Relay 가 회사앞을 지나간다는 정보!!!

사진찍을 거리 생겨서 신나네요 ㅎㅎㅎ

어학연수를 위해 산 디카인데 요즘들어서 찍을게 없어가지고 아쉬워 하고 있는 찰나에 춈 기쁜 소식이 아닐 수 없네용 ㅋㅋㅋ

아래는 Torch Relay 루트입니다.


빨간 네모 부분이 제가 다니는 회사가 위치한 곳입니다. Water Street!!!

머 Gas Town으로 불리죠 세계에 몇 없는 증기시계인 Steam Clock 이 위치한 곳이기도 하지만 IT 회사들이 몰려있는 곳이기도 합니다. 하지만 관광객들은 잘 모르죠 ㅋㅋㅋ 회사 간판도 없거니와 대부분의 회사가 2층에 있기 때문이기도 하죠.( 참고로 제가 다니는 회사는 기념품 가게건물 2층)

아무튼 볼 거리가 생겨서 신난 1인

2010년 2월 5일 금요일

블로그 스킨 리뉴얼

이번에 뭔가 분위기를 바꾸고 싶은데 스킨제작에 투자할 시간은 부족하고 해서

다른분들이 만들어 놓은 스킨을 쓰기로 마음먹고 쭉~~ 검색해 보았습니다.

여러가지 스킨들이 있었지만 결국은 제노시움님의 스킨으로 낙찰!!!!

어떤가요? 좀 세련되어졌나? ㅎㅎ

나름 만족감을 느끼고 있습니다. 혹시나 이 스킨을 쓰시고 싶으신 분은 아래 링크로 가셔서

간단한 설치법과 함께 다운로드 하시면 될 듯 합니다.

제노시움님의 블로그

2010년 2월 4일 목요일

카트하는 대딩 ㅡ,ㅡ;;

그렇습니다. 전 이 나이 먹어서도 카트를 하고 있습니다.

시작한건 이제 2년 정도 되었을것 같네요. 그냥 간간히 하는 게임으로는 괜찮아서 아직도 하고 있습니다.

최근에 개인적으로 기록을 세워서 이렇게 포스팅합니다. ㅠ.ㅠ

55초의 벽을 허문것은 이번이 처음이라서 ㅋㅋㅋ

고수분들이 보기에는 별거아닌 기록이지만 저에게는 최초의 기록이네요

Hello GridView~

오랜만에 포스팅을 하네요. ㅎㅎ

회사서버가 갑자기 다운이 되는 바람에 이틀정도 회사를 쉬게되었었네요. 주로 회사에서 남는시간에 포스팅을 하는 저라서 집에 돌아가서는 신경도 안쓰고 있었다는 ㅋㅋㅋ

오늘은 GridView 에 대해서 포스팅을 할려고 합니다. 코드에 대한 자세한 설명은 Theory 란에서 자세하게 할터이니 여기에선 간단히 코드를 보는 것으로 하죠.

GridView 는 간단히 설명해서 사진첩과 비슷한 기능을 한다고 생각하시면 됩니다. 그래도 머하는건지 잘 모르시겠다면 코드를 작성해서 실행해보는게 더 빠르겠네요 ㅋㅋ

이번에 할 GridView 는 앞서 포스팅한 View보다 더 까다로울 수 있으니 손으로 하나하나 제대로 하시는게 좋을 듯 합니다. ^^

먼저 새로운 프로젝트를 만들어 볼까요.

GridView 에서 보일 이미지들을 아래 그림과 같이 rew/drawable 폴더에 넣어주시면 됩니다.


새롭게 만든 프로젝트에서 main.xml 파일을 먼저 손봐야 겠군요. 앞서 설명드린것과 같이 실질적인(눈으로 보이는) activity의 구현은 xml파일 내에서 이루어 집니다.

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
   
android:id="@+id/gridview"
   
android:layout_width="fill_parent"
   
android:layout_height="fill_parent"
   
android:columnWidth="90dp"
   
android:numColumns="auto_fit"
   
android:verticalSpacing="10dp"
   
android:horizontalSpacing="10dp"
   
android:stretchMode="columnWidth"
   
android:gravity="center"
/>

자 이제 xml 코드 수정 작업을 마쳤으면 프로젝트에 생성한 java 파일을 수정을 해야겠죠?

클래스 내의 oncreate 메소드에 다음과 같이 코드를 수정해 주시면 됩니다.

public void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);
    setContentView
(R.layout.main);

   
GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview
.setAdapter(new ImageAdapter(this));

    gridview
.setOnItemClickListener(new OnItemClickListener() {
       
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
           
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
       
}
   
});
}

안드로이드를 저와 같이 거의 초보단계로 접하신 분은 생소한 부분이 많을 것이라 생각됩니다. 자세한 설명은 다음으로 넘기고......... -_-;;;

자 이제 ImageAdapter 클래스를 새로 생성하셔야 합니다.

머 새롭게 자바 파일을 귀찮다 하시는 분은 그냥 생성된 java 파일내에 새롭게 클래스를 만드셔도 되고
저처럼 하나의 자바 파일에 모든 클래스를 다 넣는게 싫으신 분은 새로운 파일을 생성해서 만드셔도 됩니다.
이 클립스에서 패키지 내에 새로운 자바 파일을 만드실 경우에는 해당 패키지 내의 src 부분에서 오른쪽 마우스를 클릭하시고 new->class 로 생성 하시면 됩니다.
패키지 설정부분에 해당 패키지를 잡아주시는거 잊지 마시고요. ㅎㅎ

그럼 새로운 클래스에 다음과 같이 코드를 추가해주세요.

public class ImageAdapter extends BaseAdapter {
   
private Context mContext;

   
public ImageAdapter(Context c) {
        mContext
= c;
   
}

   
public int getCount() {
       
return mThumbIds.length;
   
}

   
public Object getItem(int position) {
       
return null;
   
}

   
public long getItemId(int position) {
       
return 0;
   
}

   
// create a new ImageView for each item referenced by the Adapter
   
public View getView(int position, View convertView, ViewGroup parent) {
       
ImageView imageView;
       
if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView
= new ImageView(mContext);
            imageView
.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView
.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView
.setPadding(8, 8, 8, 8);
       
} else {
            imageView
= (ImageView) convertView;
       
}

        imageView
.setImageResource(mThumbIds[position]);
       
return imageView;
   
}

   
// references to our images
   
private Integer[] mThumbIds = {
            R
.drawable.sample_2, R.drawable.sample_3,
            R
.drawable.sample_4, R.drawable.sample_5,
            R
.drawable.sample_6, R.drawable.sample_7,
            R
.drawable.sample_0, R.drawable.sample_1,
            R
.drawable.sample_2, R.drawable.sample_3,
            R
.drawable.sample_4, R.drawable.sample_5,
            R
.drawable.sample_6, R.drawable.sample_7,
            R
.drawable.sample_0, R.drawable.sample_1,
            R
.drawable.sample_2, R.drawable.sample_3,
            R
.drawable.sample_4, R.drawable.sample_5,
            R
.drawable.sample_6, R.drawable.sample_7
   
};
}

위의 코드중 Integer[] 배열 내에 있는 R.drawable.sample~ 의 이름들은 아까전에 rew/drawable 내에 삽입한 이미지들의 파일이름으로 대체하면 됩니다. ex)R.drawable.파일이름 확장자까지는 필요 없어요 ㅎㅎ

그럼 한번 실행 해 보도록 할까요?

실행할 경우 다음과 같은 결과를 보실 수 있습니다.



저같은 경우는 안드로이드 개발자 사이트에 올려진 이미지 샘플을 사용하였습니다. 이미지 샘플 원하시는 분은 아래 링크로 다운 가능합니다.  Image Samples

다음에는 위 코드에 대한 분석을 차근차근 해보도록 하겠습니다. 저도 아직까지 확실히 이해 안가는 부분이 많네요.

더 열심히 해야겠다는 생각이 듭니다.

오늘도 즐공....... 아 눈물나....