2010년 11월 14일 일요일

망할 폴더가 사용중이라 지워지지 않을때 지우는 법

일단 로그아웃 하거나 재시작 하면 지워집니다...
진짜에요;;
아신다구요?

일단 망할 현상 부터 되짚어 보죠. 
망할 지우려고 해도 이런 창이 뜨면서 지울 수가 없습니다.
저는 쓰고 있지 않는데...
귀신이 쓰고 있는게 틀림 없습니다!!!

자 정말 귀신이 쓰는지 확인해 보죠.
다음 프로그램을 따운 받습니다.

Process Explorer v12.04


현제 12.04 버젼 이군요.
설치는 필요 없고 적당한 곳에 압축을 풀면 됩니다.
바로 실행 해보죠.

1. 메뉴 -> Find -> Find Handle or DLL... 을 누릅니다.
2. 창이 뜨면 Handle or DLL substring: 에 않지워 지는 파일,
또는 디렉토리를 적어 Search 를 눌러 찾아 봅시다.
저의 경우 "eclipse"를 쳐 넣었습니다.
저런!! adb.exe 라는 녀석이 범인이었습니다.
더블클릭 해서 범인을 지목 합시다! 

다음 해당 파일에서 오른쪽 클릭을 하면
Close Handle 라는 메뉴가 보일 것입니다.
클릭 하면 경고는 살포시 무시해 주고~
그럼 망할파일을 지울 수 있게 됩니다.

2010년 11월 8일 월요일

C언어 - 가변인자 사용(pritnf 같은 함수를 만들자!!)

printf() 함수는 참 신기 합니다.

printf("정수? %d, 문자열? %s", 5, "문자열이긔");

인자가 3개네요.

printf("실수? %f, 문자열? %s, 정수? %d", 3.14, "문자열이긔", 7);

이번엔 또 인자가 4개군요.

C언어에서는 함수의 오버로딩을 지원 하지 않습니다.
결국 원형은 하나라는 건데..
그럼 printf()함수는 원형이 어떻게 생겼을까요?

#include <stdio.h>

비밀은 여기에 있습니다.
우리가  printf 함수를 쓰면서 당연히 인클루드 하던 stdio.h
 파일 열어 보신  있으신가요?
한번 열어서 printf()함수를 찾아 봅시다.

_Check_return_opt_ _CRTIMP int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format, ...);

웁스;;
이건 암호도 아니고;;;; 별 도움이 않되겠네요;;
오히려 헷갈리는 --;;

그럼 모르는 것 빼버리고 우리가 알고 있는 함수 처럼 만들어 봅시다.

int printf(const char * _Format, ...);

그래도 모르는게 하나 남았네요.

...

장난 하나요? 무슨 쓰기 싫어서 ... 으로 생략 했나 봅니다.
는 아니고 사실 비밀은 저 ...에 있습니다.
우리가 아는 그대로 나머지 인자는 여러개가 있을 수 있다는 이야기 입니다.

아하 그럼 우리도 함수를 저렇게 선언하면 가변적인 인자에도 대응 할 수 있겠군요?
네 그렇습니다.

자 함수 하나 만들어 보죠~

그전에 메인 함수 부터 만들어 보죠.

int main()
{
     vaFunc(3, "Hello", "World", "!!!");

     return 0;
}

vaFunc() 라는 함수가 가변적으로 인자를 받는 함수입니다.
그럼 선언은

int vaFunc(int argc, ...)

뭐 이렇게 하면 되겠죠?
다음 vaFunc() 함수의 몸체를 써내려가야 하는데...
argc는 쓸 수 있는데 그 다음 부터는 어떻게 하죠?

자 여기서 쓰는것이 va_list 라는 것입니다.

va_list 및 가변 인자에 관한 것은 <stdarg.h> 파일에 정의 되어 있습니다.

#include <stdarg.h>

하시고,

int vaFunc(int argc, ...)
{
     va_list argptr;
     char *strTemp;
     int i;
     va_start(argptr, argc);

     for(i = 0; i < argc; ++i)
    {
          strTemp =  va_arg(argptr, char *);
          printf("Arg %d = %s\n", i, strTemp);
     }
  
     va_end(argptr);
  
     return 0;
}

내용물을 체웁시다.

눈썰미 있는 분은 코드만 봐도 아시겠네요.

먼저

va_list argptr;

가변인자를 처리하기 변수를 선언 합니다.

va_start(argptr, argc);

다음으로 가변인자가 시작될 위치를 지정하죠.
우리가 만든 함수와 printf() 는 고정 부분이 하나지만
여러개가 올 수도 있답니다.

vaFunx(int arg1, float arg2, ...);

등으로 말이죠.
위의 경우는

va_start(argptr, arg2);

로 해줘야 합니다.
가변인자는 arg2 다음에 오니 말이죠 ㅎㅎ

strTemp  = va_arg(argptr, char *);

가변인자의 인자를 하나씩 strTemp 에 대입해 줍니다.
"Hello", "World", "!!!" 순으로 말이죠.

눈치 체신분도 있으실텐데...
가변인자는 인자의 갯수를 알 수 있는 수단을 제공해야 합니다.
그래서 처음 인자를 뒤의 인자의 갯수로 써주는 것입니다.
그럼 printf()의 경우는??

printf("Arg %d = %s\n", i, strTemp);

를 보시면 삘이 확 오시나요?
그렇습니다.
%d, %s 이런것을 보면 뒤에 오는 인자의 갯수를 알 수 있답니다.
조심해야 할점은 뒤의 인자의 갯수는 모자라면 않된다는 점입니다.
메모리 접근 위반이 나겠죠?
또한 인자의 타입도 달라서는 않됩니다.

마지막으로

va_end(argptr);

내부적으로 초기화를 수행해 완료 작업을 합니다.
메모리 누수가 발생할 수도 있으니 빼먹지 맙시다.

이것으로 우리도 가변인자를 지원하는 함수를 만들 수 있겠네요~

2010년 11월 4일 목요일

Captains of Crush - COC 악력기 구입

에제 주문한 COC 악력기가 배송 됬다.

친척동생 선물로 줄 Trainer 한개랑 No. 1 한개 해서 두개 주문했다.


좌 : Trainer 우 : No. 1
크기가 미묘하게 다르다;;

참고로 COC 악력기의 장력은 다음과 같다.

1. Trainer - 100 lb.(45.3kg)
2. No1 - 140 lb.(63.42kg)
3. No1.5 - 167.5 lb.(75.88kg)
4. No2 - 195 lb.(88.35kg)
5. No2.5 - 237.5 lb.(107.59kg)
6. No3 - 280 lb.(126.84kg)
7. No3.5 - 322.5 lb.(146.09kg)
8. No4 - 365 lb.(165.35kg)

일단 내가 사용할 것은 No. 1 평소에도 운동 별로 안한넘 치고
팔씨름도 꾀 하고 악력도 자신있었기에 No. 1 부터 샀는데...

개봉 후 바로 잡아 봤는데 금속 가루가 좀 묻어 났다.
몇번 잡으니 계속 묻어나지는 않는다.

일단 오른쪽은 끝이 서로 닿게 간신히 성공..
그렇게 사진을 찍으려 했는데...
모토로이가 꾸져서
왼손으로 촬영에 집중하면(한 몇초간 누르고 있어야함)
오른손 힘이 풀리더라는 --;;
왼손은 미묘하게 힘이 모자란다...

뭐 잡혀야 운동이 되지 --;;
그나저나 친척 동생...
Trainer 사준거 잘하는 짓일까....?

COC 악력기 구매처

11월 8일

흠흠;;
왜 한개도 못하겠지????
전엔 됬었자나!!
왜!!

ㅠ_ㅜ

2010년 11월 3일 수요일

스타벅스 2011 플래너 증정 이벤트 개시

오늘 스타벅스를 갔는데
올해도 어김없이 스타벅스 플래너를 주는
이벤트가 시작 되었다.

이벤트 음료인
페퍼민트 모카, 토피 넛 라떼,
오늘의 커피-크리스마스 블렌드
3잔을 포함 하여 총 17잔을 마시면 된다는데...
뭐 단순 계산으로 5000원씩 치면 17잔이니 총 85,000원
하루에 1잔씩 무도 17일...
흐미 여친이랑 스타벅스만 가야 할 듯 하다.

플래너는 따로도 팔고 17,000원 이라는데

쿠폰도 3개나 들어 있고 매니아라면
도전해 볼만할듯 하다.

제세한 정보는 스타벅스 홈페이지에서~

플래너 받고 싶당 ㅎㅎ


스티커 카드 입니다.
크리스마스 음료는 암꺼나 3장 빨간색이구요.
다른 음료는 흰색 14장 붙여야 합니다.

언제 다모으지 -ㅁ-;;

요즘 먹는 감기약

그제 아침 부터 콧물이 홍수 -ㅁ-;;
몸살 기운도 있고 해서 집에 굴러 다니던 감기약을 챙겨 먹었다.
일본에서 먹던건데 유통기한 2013년으로 길당.

















평소에 약을 안 챙겨 먹는지라 약빨이 잘듣는다.
하루 3회 1회에 3알씩 63알 들었당.
21회니까 일주일 분량밖에 않되는구낭;;;
63알이면 대박 많은뎅 ㅎㅎ
7일이라니 짧네;;

아무튼 이 녀석 덕에 감기도 거의 나았다.

그래도 무엇보다 예방이 중요해요~
손 잘씻고, 양치 잘하고, 피로 조심하고, 잘 챙겨 먹읍시다!

2010년 11월 2일 화요일

Android Google 맵 API 디버그용 키 얻기

책에 있는 코드를 그대로 했는데도 지도가 않나와요!
...
그렇습니다.
그럼 지도가 않나옵니다.


지도를 사용하려면 (구글 맵 API를 이용하려면) 해당 컴퓨터에 있는
API 키라는 것을 입력 해야 합니다.
책에 있는 키는 저자분 PC의 API 키 이구요.
각자 자신의 PC의 MD5 인증서 코드에 맞는 API 키를 입력 해야 합니다.


MD5 인증서 코드.. 요건 어딨냐면..


1. 먼저 이클립스의
메뉴 -> Window -> Preferences
Android -> Build
Default debug keystore: 부분의 경로를 확인 합니다.
















제 경우
C:\Users\Hermina\.android\debug.keystore
입니다.


2. 다음으로 자바 SDK가 설치된 폴더를 환경변수에 추가 합니다.
생략해도 되나 해두면 편리 하니 추가해 둡니다.


윈도우즈의 (윈도우즈 7기준)
내 컴퓨터에서 우클릭->등록정보->고급 시스템 설정
고급 탭-> 환경변수
시스템 변수에 Path에 추가 할 수 있습니다.
변수 값에 자바 SDK의 bin 폴더를 추가 하면 됩니다.
제 경우 C:\Program Files\Java\jdk1.6.0_22\bin
이걸 추가 했습니다.
추가 할때 구분자는 세미콜론 ( ; ) 을 붙여 주고 하십 됩니다.


3. 다음 PC의 MD5 지문을 얻어 냅니다.
1번에 구할 C:\Users\Hermina\.android\debug.keystore 에 들어 있으며
2번에 추가한 디렉토리의 keytool 로 구할 얻을 수 있습니다.
윈도우즈의 시작메뉴->프로그램 및 파일 검색에 (XP는 실행)
cmd를 입력 합니다.
1에서 구한 경로로 이동합니다.
cd C:\Users\Hermina\.android\
2의 툴로 MD5를 얻습니다.
keytool -list -keystore debug.keystore
암호는 android 입니다.









인증서 지문(MD5) 를 복사 해 둡니다.



4. 구글의 Android Maps API의 Sign Up 페이지에 접속 합니다.


http://code.google.com/intl/ko-KR/android/maps-api-signup.html


계약 내용에 동의 하면 I have read and agree with the terms and conditions에 체크를 하고
My certificate's MD5 fingerprint: 에 3에서 구한 MD5키를 입력 합니다.
Generate 클릭~


???????????????????????????? 가 난무 하지만
MD5 위에 암호 같이 생긴게 API 키 이다.













5. 이클립스의 프로젝트의 res / layout / main.xml (디폴트라면)의
android:apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
부분을 4번에서 얻은 키로 바꿔 줍니다.


자 프로젝트를 재 빌드 하면 지도가 나올껍니다.