달력

5

« 2024/5 »

  • 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
  • 31
반응형
728x90
반응형

안드로이드 - 구글 애드센스 수익이 나왔습니다.


이번이 네번째 환전인가 그랬던걸로 기억하는데, 그동안 한번은 국제우편으로 받게되어 집 가까운 농협에서 환전을 받았고 나머지 두번은 "웨스턴유니온"을 통해 지급을 받았기 때문에 기업은행 당진지점에 가서 환전을 받았었습니다. 기업은행 일반통장과 외화통장 두개를 개설해두고, 매번 반반씩 달러와 원화로 분할해서 돈을 넣어놓습니다. 외화통장은 빼서 쓸 일이 없다보니 그냥 놔두고, 일반통장은 연동된 체크카드를 통해 능동적으로 돈을 사용하고 있답니다.


마침 보강주간인데다가 강의가 없길레, 고장난 핸드폰 충전기도 A/S센터에 가서 맏기고 애드센스 수익금도 환전하기 위해 병원 외래를 보고 성정동쪽으로 나왔습니다.


SAMSUNG | SHW-M250K | Aperture priority | Center-weighted average | 1/1351sec | F/2.6 | 0.00 EV | 4.0mm | ISO-40 | Off Compulsory | 2012:06:12 11:06:52


당진지점 이외의 기업은행 지점은 처음가봅니다. 예전에 강남갔을때 통장정리 몇번 했던적은 있지만, 이렇게 그냥 창구로 들어가기는 아무래도 처음인가봅니다. 지점 이름이 굉장히 깁니다.


"기업은행 천안성정롯데마트지점"


아아.. 이렇게 긴 은행 지점명은 처음보는 것 같습니다. 여튼 계산대 안의 물건이 있는곳에 위치해있는 형태가 아니라, 마트의 한구석에 입점해있는 형태입니다. 사실 이 주변에 기업은행 지점이 없는걸로 추정되서 쌍용동까지 가려고 했지만 다행히 이곳에 있더군요. 걸어서 조금만 걸으면 삼성 서비스센터도 그 옆에 바로 있고 말이죠.. 여튼 일석이조 아니 일석삼조의 효과를 볼 수 있었던 곳입니다.

(삼성전자 서비스센터와 반대편에 바로 농협이 있어서.. 농협도 가서 볼일좀 봤네요.)


SAMSUNG | SHW-M250K | Aperture priority | Center-weighted average | 1/40sec | F/2.6 | 0.00 EV | 4.0mm | ISO-40 | Off Compulsory | 2012:06:12 11:07:45


기업은행 지점 안입니다. 기업고객들이 많이 찾는 은행이긴 하다보니 다들 한번 창구앞에 서면 꽤 오랜시간을 창구 직원과 업무처리를 하곤 합니다. 제가 갔을때만 봐도 어떤 회사에서 나온듯한 아저씨도 한참 얘기하고 계시고 베트남사람 몇명도 베트남으로 돈을 보내기 위해서 한참을 창구에 있더군요.


뭐 저도 이것저것 처리해야 할 일이 한두가지가 아니라 창구에 오랜시간 머물렀답니다.



이번에 지급받을 금액은 120.64달러입니다. 총 환전금액은 139,809원이 나왔네요.


MTCN번호를 능숙하게 적고, 이름은 당연히 영어로 적고.. 이렇게 저렇게 서류를 작성하고 잠시 후 창구직원이 열심히 자판을 두드리고 마우스를 클릭합니다. 한참이 지나서 120.64달러라는 쌀국 돈은 대한민국의 원화로 환전되어 나오더군요. 사실 구글측에서 지급하는 달러는 원화로 환전하여 지급되게 만들어두었기 때문에 외화통장에 넣기 위해서는 다시 환전을 해야합니다. 외화 그자체로는 외화통장에 들어갈 수 없다는 것이죠. 그렇게 때문에 지급된 금액중 6만원을 그냥 환전해서 외화통장에 집어넣어봅니다.


6만원을 다시 달러로 환전해서 외화통장에 집어넣었습니다. 딱 51달러가 맞추어지더군요.


사실 환전한 외화를 다시 산다는것 자체가 손해이긴 하지만 그냥 상징적으로 외화를 남겨두려는 의도이기 때문에 크게 여의치는 않습니다. 기업은행에서 이런방식으로 환전을 여러번 하다보니 이대는 우대환율을 적용받고 환율수수료도 면제를 받는 우수한(?) 고객이 되었습니다. 오래 거래해봐야 2년정도밖에 안됬을테고 그렇게 오래 거래한것도 아닌데 창구직원도 여튼 의아해하더군요. 그렇게 외화통장도 애드센스 한번 환전할때의 금액정도가 모였습니다.


SAMSUNG | SHW-M250K | Aperture priority | Center-weighted average | 1/15sec | F/2.6 | 0.00 EV | 4.0mm | ISO-64 | Off Compulsory | 2012:06:12 23:10:45


그렇게 집에와서 복잡한 종이들을 정리하면서 다시 살펴봅니다.


가장 위에는 웨스턴유니온 신청서고 그 아래는 지급받은 약 14만원의 금액 계산서. 그 아래는 다시 산 51달러에 대한 계산서. 그 아래는 외화통장으로 입금된 계산서입니다.


여튼 또 한번의 애드센스 환전을 마쳤습니다. 한번 계정이 정지를 먹고서 수익률이 급격하게 떨어지긴 했지만 간혹가다가 한번 이렇게 용돈으로 쓰라고 들어오는 돈은 얼마나 반가운지 모릅니다. 덗분에 썰어먹는 햄버거라는 문화적 충격을 느끼게 해준 크라제버거도 가서 오랫만에 먹어보고 여튼 즐겁게 집으로 돌아왔답니다.


물건을 제공받았다고 명시를 해두고 직접 자신의 사용기를 쓰는 방식은 괜찮다고 생각하나 직접 써보지도 가보지도 않고 해본것처럼 글을 쓰고 누군가가 신청을 하면 커미션을 받는 형태의 블로그 전체를 광고판으로 이용하는 수익창출은 해보라고 요즘에도 몇번씩 방명록에 제의가 들어와도 할 생각도 없는데다가 블로그의 순수한 목적인 1인 미디어로써의 사실적인 정보전달에 위배된다는 생각이니 그런 방식을 이용해서 수익이 늘어날 일도 없습니다. 그리고 그렇게까지 블로그를 돈벌이를 위해 한다는 느낌은 받고싶지 않습니다.


오르지 수익만을 위한 블로그는 하고싶지 않습니다. 주제없이 이광고 저광고로 떼우는 블로그도 하고싶지 않습니다. 수익이라는것은 소소한 수준에서 만족하고 글을 위해 투자하는 이런저런 비용을 회수하거나 재투자하는 정도 혹은 가끔씩 있는 이벤트때 방문자분들께 다시 보답하는 비용과 글에대한 작은 수고비 수준으로만 생각하고 싶습니다

728x90
반응형
:
Posted by mapagilove
728x90
반응형

구글 애드센스 지급보류가 해제되다


얼마전 구글 애드센스 수익을 확인하다가 조금 당황했다.
워낙 블로그 운영이 그리 신통치 않은데도 구글 애드센스 수익이 10달러를 넘어섰다는 것이다. 그러면서 자동적으로 지급보류 상태가 된 것이다.

아마도 말하자면 '당신은 이제 구글 애드센스를 통해 수익을 창출할 가능성이 생겼으니 더욱 확실한 계정 관리를 하라'라는 뜻으로 보였다.

지급보류 상태를 해제 하려면 세단계를 거쳐야 한다.
첫번째는 세금관련 점검인데, 미국내 회계처리가 필요한지 확인하고 이와 관련된 점검을 하는 것 같은데, 전혀 관련이 없으니 '아니오'로 답하면 정답인듯 하다...^^

두번째는 수익 지급 방식이다. 보통 구글 애드센스는 100달러는 기준으로 수표를 발급한다고 하는데 이를 수령할 때 일반우편으로 할지, 등기로 할지를 정하는 것이다. 그러나 등기는 비용이 만만치 않다는 것이다. 아마도 대다수 일반우편으로 하지 않을런지...

마지막 세번째가 가장 시간이 많이 소요되고 중요한 것으로 생각된다.
바로 PIN계정이라는 것을 입력하는 것이다.
실수령자를 확인하는 것인데, 구글 본사에서 PIN계정입력 번호가 있는 우편물이 도착해야만 기입이 가능하다. 가장 앞서가는 인터넷 사업자이면서도 역시나 돈과 관련해서는 아날로그적으로 확인하는 것을 더 선호하고 있는 것 같다.^^ 사실 돈받을 사람의 주소지가 정확하지 않으면 수표를 보내도 휴지조각이 되버릴 테니까...



오늘 반갑게도 그 우편물을 받아서 이렇게 포스팅까지 하게 된다.^^(사진속 엽서를 열면 PIN계정번호가 나온다.)
그럼 여러분도 빨리 우편물 받으시고 광고수익 100달러 달성해서 국익에 보탬을 하시라!!!ㅋㅋ

아직 100달러 달성하려면 멀고 먼 from615의 광고수익 리뷰였슴다^^
728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - 스마트폰 해상도 총정리

2012/01/13 17:35

복사 http://blog.naver.com/edinart/20148212261

 

320*240(QVGA)
소니에릭슨 - X10mini, X10mini pro,
HTC - 디자이어팝


480*320(HVGA)
삼성전자 - 갤럭시GIO, 갤럭시ACE, 갤럭시ACE PLUS
LG전자 - 옵티머스원, 옵티머스시크, 안드로원
KT테크 - 스마트볼
팬텍(스카이) - 미라크A
모토로라 - 모토믹스
HTC - 레전드


800*480(WVGA)
삼성전자 - 갤럭시NEO, 갤럭시S, 갤럭시S호핀, 갤럭시U, 갤 럭시K, 갤럭시A, 갤럭시S2, 갤럭시S2 LTE, 넥서스S
LG전자 - 옵티머스Q, 옵티머스Z, 옵티머스마하, 옵티머스블 랙, 옵티머스빅, 옵티머스2X, 옵티머스3D, 옵티머스EX, 옵티 머스Q2, 프라다폰3.0
KT테크 - 테이크, 테이크2, 테이크 타키
팬택(스카이) - 이자르, 미라크, 베가, 시리우스, 베가X, 베가X +, 베가S, 베가레이서, 베가넘버5
HTC - 인크레더블S, 디자이어, 디자이어HD, 넥서스원, 센세이션XL
델 - 델베뉴, 델스트릭
SK텔레시스 - 리액션, WYNN
아이리버 - 바닐라


854*480(FWVGA)
모토로라 - 모토쿼티, 모토로이, 모토글램, 디파이
소니에릭슨 - X10, 아크, 레이


960*540(QHD)
KT테크 - 테이크 야누스
HTC - 이보4G+, 레이더4G, 센세이션
모토로라 - 레이저, 아트릭스


1024*600(WSVGA)
삼성전자 - 갤럭시탭7.0(태블릿PC라기엔.전화기능이 있어서 폰으로 분류했습니다.)


1280*720(HD)
삼성전자 - 갤럭시넥서스, 갤럭시S2 HD LTE
LG전자 - 옵티머스LTE


1280*800(WXGA)
삼성전자 - 갤럭시노트
KT테크 - 테이크HD
팬택(스카이) - 베가LTE, 베가LTE M

728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - EditText의 텍스트 변경 감지하는 코드

원본출처 ; http://www.androidside.com/bbs/board.php?bo_table=B51&wr_id=4986&page=2

final EditText nameText = (EditText) findViewById(R.id.name);

nameText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
setSearchList(nameText.getText().toString());
}

@Override
public void afterTextChanged(Editable arg0) {
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});

텍스트 변경시 onTextChanged() 메소드가 호출되므로 이 메소드 안에 원하는 코드를 작성하면 됩니다.
이 코드에서는 setSearchList() 메소드를 호출했습니다.
728x90
반응형
:
Posted by mapagilove
728x90
반응형
 안드로이드 - 특정 모양의 Bitmap 이미지 자르기

직소 퍼즐 같은 게임을 만들때 가장 고민하는 부분 중의 하나가 이미지를 사각형이 아닌 직소 퍼즐 모양으로 어떻게 잘라야하는가~ 입니다. 저도 이번에 안드로이드 직소 퍼즐 게임을 만들면서 이 부분에서 많은 고민을 했고 또한 여러차례 시행 착오를 거쳐 결국 원하는 결과를 얻어낼 수 있었습니다...


여러 삽질끝에 얻어낸 결과인지라 이 방식이 효율적이고 완벽하다라고 말씀드릴 수는 절대 없습니다, 또한 다른 더 좋은 방식이 있을 수도 있습니다만 조금이라도 도움이 되었으면 하는 마음에서 이 글을 작성합니다.


설명이 잘 이해가 안된다 싶으실때 덧글 주시면 시간날때 답글 달아 드리겠습니다. ^^a



원본 이미지를 직소 퍼즐 조각 모양으로 잘라내기의 핵심은 이미지의 알파값을 이용하여 필요없는 부분은 화면에 표시되지 않도록 하는것 입니다.


기본적으로 이미지는 사각형을 기준으로만 자를 수 있습니다(맞지요?). 사각형으로 자른 이미지를 원하는 모양의 이미지로 가공하기 위해서 기준이되는 이미지(아래 이미지 참고)를 별도로 준비합니다. 직소 퍼즐 게임의 경우 각 직소 펴즐의 조각 이미지가 되겠지요.



예제 이미지의 빨간색 부분은 원래 투명 부분입니다. 흰색으로 기준 이미지를 만들다 보니 바탕색과 구별이 안되어 투명 배경을 빨간색으로 표시한 것이니 참고하시구요~ 기준이 되는 이미지의 색상은 어떤 색상을 쓰시더라도 상관 없습니다(빨간색, 검정색, 흰색, 노란색 등등). 단, alpha 값을 이용하여 필요없는 부분이 화면에 표시되지 않도록 하는 방식이므로 반드시 필요없는 부분은 투명으로 만들어 주셔야 합니다. 그러므로 기준 이미지는 png 파일로 저장해서 사용하시면 됩니다.



먼저, 원본 이미지에서 원하는 부분만 사각형으로 잘라내는 코드는 다음과 같습니다.



// 원본 이미지를 불러오고

Bitmap mSource = BitmapFactory.decodeFile("이미지 경로/이미지 파일 이름.jpg");


// 잘라낼 가로 픽셀 크기

int nWidth = 100;

// 잘라낼 세로 픽셀 크기
int nHeight = 100;

// 원본 이미지에서 잘라낸 비트맵 이미지 영역의 색상값을 저장할 배열

int[] nPixels = new int[nWidth * nHeight];


// 원본 이미지의 좌측 상단을 기준으로

// 가로 50, 세로 50 지점에서 가로 100, 세로 100 크기의 생상값을 가져와

// nPixels 배열에 저장한다.
mSource.getPixels(nPixels, 0, nWidth, 50, 50, nWidth, nHeight);


// 잘라낸 이미지를 저장할 새로운 비트맵 이미지를 생성한다.

Bitmap mJigsaw = Bitmap.createBitmap(nWidth, nHeight, Bitmap.Config.ARGB_8888);

// 생성된 비트맵 이미지에 색상값을 저장한다.

mJigsaw.setPixels(nPixels, 0, nWidth, 0, 0, nWidth, nHeight);



위의 코드대로 적용하면 원본 이미지의 좌측 상단을 기준으로 가로 50픽셀, 세로 50픽셀 지점에서 가로 100픽셀, 세로 100픽셀 크기의 이미지가 mJigsaw 비트맵 이미지에 저장됩니다. 여기까지 사각형으로 잘라내기는 완성입니다.


이제 잘라낸 이미지를 어떻게 가공해야 원하는 모양의 직소 조각을 만들어 낼수 있을지를 설명하겠습니다. 위 코드에서 잘라낸 이미지 색상값을 mJigsaw 비트맵 이미지 인스턴스에 setPixel로 저장하기 전에 다음 코드를 추가합니다.



// 직소 조각 모양의 레이아웃 비트맵 로드
Bitmap mLayout = BitmapFactory.decodeFile("이미지 경로/직소 조각 기준 이미지 파일 이름.png");

// mLayout 비트맵 이미지의 alpha 값을

// 잘라낸 mJigsaw 비트맵 이지지에 적용될 nPixels 배열의 alpha 값으로 대체한다.
for (int i = 0; i < nPixels.length; i++) {

// nPixels 배열의 각 컬러값에서 alpha 값을 제거한다.
nPixels[i] &= 0x00ffffff;

// 제거된 alpha 값을 mLayout의 alpha 값으로 대체한다.

nPixels[i] |= mLayout.getPixel(i % nWidth, i / nWidth) & 0xff000000;
}


// 생성된 비트맵 이미지에 색상값을 저장한다.

mJigsaw.setPixels(nPixels, 0, nWidth, 0, 0, nWidth, nHeight);



완성된 mJigsaw 비트맵 이미지를 Canvas 나 ImageView 에 표시해보면 원하는 직소 조각 모양으로 표시되는 것을 확인할 수 있습니다.


굳이 기준 이미지를 사용하지 않더라도 원하는 모양의 alpha 값을 배열로 만들어서 적용이 가능하시다면 그렇게 사용하셔도 결과는 같습니다.


위 코드는 단순히 직소 퍼즐 조각에만 적용되지는 않습니다. 원하는 모양의 어떤 이미지라도 만들어 낼 수 있습니다.

 

728x90
반응형
:
Posted by mapagilove
728x90
반응형

안드로이드 - SQLite assets 데이터베이스로 연결하기

원본출처:http://crlog.com/49

안드로이드와 SQLite 관련해서 데이터베이스를 만들고 연결하는 팁들은 검색을 해 보면 금방 찾을 수 있었습니다. 제가 생각한 것은 미리 배포버전 자체내 데이터베이스에 데이터를 만들어 놓고 어플만 다운 받으면 데이터를 가져오는 연결을 하지 않아도 데이터를 이용하고 싶은 생각이 들었습니다.

자료를 찾다보니 안드로이드 개발 프로젝트 폴더 중에 assets가 있는데요. 여기에 SQLite 데이터베이스 파일을 저장해두고 이를 어플이 처음 실행 할 때 스마트폰 기기로 저장을 하는 방법을 사용하더군요. 바로 이거다 했지요!.

개발에 필요한 핵심 요소들을 이렇게 정했습니다.
1. assets 폴더에 sqlite 데이터베이스를 만들어 놓자.
2. 스마트폰의 지정한 위치에 데이터베이스가 없으면 복사를 하자.
3. 파일이 있으면 이를 데이터베이스로 연결하여 사용하자. 끝. ^^

가장 먼저 구한 방법이 데이터베이스를 복사하는 소스였습니다.

private void copyDatabase() throws IOException {
InputStream myInput = crContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}

복사하는 메소드는 딱 봐도 군더더기 없이 깔끔해 보입니다. ^^

다음은 assets 폴더에 데이터베이스를 만드는 일 입니다. 처음 생각에는 가장 쉬울 줄 알았는데, 막상 하려고 해보니 몇 가지 문제점이 있었습니다. 그 하나는 sqlite 데이터베이스를 어떻게 만드는가 하는 거죠. 원본 데이터는 데이터베이스 서버에 저장이 되어 있는 상태이고 이를 간단하게 Export 해서 SQLite에 Import를 하려고 한 것 인데요. 그 데이터들이 SQLite에 잘 저장되지 않습니다.

문제는 한글 입니다. !!!

CSV로 저장하는 과정에서 UTF-8으로 저장을 해야하는데, 계속해서 한글이 깨진 상태로 저장이 됩니다. 별별 방법을 동원해 가면서 하루를 스트레스로 보내야만 했습니다. ^^


결국 SQLite Databse Browser 로는 할 수가 없다는 결론을 내렸습니다. 한글에 대한 방법이 없을 뿐아니라, 자주 멈추거나 슬그머니 종료가 되기까지 합니다. 그러다가 SQLite Manager 라는 툴을 발견했습니다. 부분 무료 이기 때문에 결제를 하라는 메시지가 빈번하게 나타나긴 하지만, 중요한 것은 한글을 처리 할 수 있다는 것 이지요. ^^


아무튼 겨우 MySQL에서 뽑아온 CSV 파일을 SQLite Manager 로 Import 했습니다.

데이터베이스를 만들고 스마트폰에 복사를 하는 모듈을 먼저 만들었습니다. 위에 소스 copyDatabase() 하나면 충분합니다.
이제 파일을 연결해서 이를 데이터베이스로 사용하는 일만 남았습니다. 여기에서의 가장 문제점은 데이터베이스 연결이 안된다는 겁니다. !!

다시 원점으로 돌아가서 무엇이 잘못된 것인가를 찾아내는데 다시 하루를 보냈습니다.
문제는 또 한글이었습니다.!!

public void openDataBase() throws SQLException{
String myPath = DB_PATH + DB_NAME;
sqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}

SQLite에서 다국어 처리를 하려면 SQLiteDatabase.NO_LOCALIZED_COLLATORS를 사용해야 된다고 하네요. ^^

public class DBAdapter {
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(this.context);
try {
DBHelper.createDatabase();
DBHelper.openDataBase();
} catch (IOException e) {
Log.d("DBAdapter", e.toString());
} catch (SQLException e) {
Log.d("DBAdapter", e.toString());
}
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
private SQLiteDatabase sqlite;
private final Context crContext;
DatabaseHelper(Context context)
{
super(context, DB_NAME, null, 3);
this.crContext = context;
}
public void createDatabase() throws IOException {
if (!checkDatabase()){
this.getReadableDatabase();
try {
copyDatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
public boolean checkDatabase() {
SQLiteDatabase checkDB = null;
try{
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
} catch (SQLiteException e) {
Log.d("checkDatabase", e.toString());
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null ? true : false;
}
private void copyDatabase() throws IOException {
InputStream myInput = crContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
String myPath = DB_PATH + DB_NAME;
sqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}
@Override
public synchronized void close() {
if(sqlite != null)
sqlite.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
public void close()
{
DBHelper.close();
}
}

이틀 동안 삽질한 보람이 있네요. 테스트 폰에서는 아주 잘 돌아갑니다. ^^
728x90
반응형
:
Posted by mapagilove
반응형