전체 글: 218개의 글

[안드로이드]Error generating final archive: Debug certificate expired on

by Blogger 하얀쿠아
2011. 8. 6. 23:13 소프트웨어 Note/Android

Error generating final archive: Debug certificate expired on


종종 Android SDK를 사용하다 보면, 소스코드에는 전혀 Error가 없는데, Build하려고 하면 아래와 같은 Error로 인해 device나 emulator에서 실행시킬 수 없는 경우가 있다.



문제 상황

"Error generating final archive: Debug certificate expired on" 라는 에러 메세지가 Console에 보임.



해결책

해결방법은 간단하다.

우선, debug.keystore 라는 파일을 삭제하면 된다.
보통 "사용자" 디렉토리에 '.android' 라는 폴더 아래에 있다.
나의 경우는 아래와 같다.

C:\Documents and Settings\User Name\.android 폴더에서 debug.keystore 삭제


debug.keystore삭제 후,  Project Clean 후, 재빌드 한다.



이 댓글을 비밀 댓글로

10진수를 2진수로 변환하는 알고리즘 (또다른 방법)

by Blogger 하얀쿠아
2011. 7. 22. 16:25 소프트웨어 Note/Algorithm

10진수를 2진수로 변환하는 알고리즘 (또다른 방법)

우선 몇자리의 2진수를 만들것인지를 알아내거나 제시한다.

그리고, 기본적인 아래의 규칙 하나만 기억한다.

rule : 작으면 0 / 크거나 같으면 1


예를 들어보겠다. 10진수 600 10자리의 2진수로 만들 경우를 생각해보자.

10자리의 2진수로 만들 것이므로, 2의 10승 = 1024 부터 시작한다.

그 후, 2의 9승, 2의 8승... 2의 1승까지 차례로 rule대로 비교해 내려간다.

아래의 과정으로 간단하게 만들 수 있다.

600 이 1024보다 작으므로 0
600이 512보다 크거나 같으므로 1, 그리고 600 - 512 = 88
88이 256보다 작으므로 0
88이 128보다 작으므로 0
88이 64보다 크거나 같으므로 1, 그리고 88-64 = 24
24가 32보다 작으므로 0
24가 16보다 크거나 같으므로 1, 그리고 24-16 = 8
8이 8보다 크거나 같으므로 1, 그리고 8-8 = 0
0이 4보다 작으므로 0
0이 2보다 작으므로 0

마지막으로 붉은색 숫자를 위에서부터 아래 순서로 나열한다.

0100101100

이것이 600을 2진수 10자리로 만든 것이다.





이 댓글을 비밀 댓글로
    • sellester
    • 2011.10.25 13:15
    틀렸음 512부터 시작합니다.
    • 1024부터 시작하거나 512부터 시작하거나 구하는 2진수의 자리수만 다를뿐, 구해지는 2진수는 같지 않은가요?

      1024부터 시작하면 0100101100
      512부터 시작하면 100101100

      이렇게 구해지는 것이지 않나요.
    • 정말감사합니다.
    • 2014.04.08 09:44
    힌트를 얻어서 풀게 되었습니다. 감사합니다 ㅋㅋㅋ

XNA Framework의 논리적 흐름

by Blogger 하얀쿠아
2011. 7. 21. 17:10 소프트웨어 Note/XNA Framework


XNA는 Frameworkd 이기 때문에 일련의 논리적 순환 순서가 있다.
공부를 시작하면 우선 이를 인지해야 한다.

1. 메인 응용 프로그램이 게임 생성자를 호출한다.

2. 게임 생성자는 게임 컴포넌트들을 생성하고 게임 컴포넌트의 생성자를 호출한다.

3. XNA Framework에서 게임의 Initialize 메서드를 호출한다.

4. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Initialize 메서드를 호출한다.

5. XNA Framework에서 각각의 Drawable 게임 컴포넌트에 해당하는 LoadContent 메서드를 호출한다.

6. XNA Framework에서 게임의 LoadContent 메서드를 호출한다.

7. XNA Framework에서 게임의 Update 메서드를 호출한다.

8. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Update메서드를 호출한다.

9. XNA Framework에서 게임의 Draw메서드를 호출한다.

10. XNA Framework에서  각각의 Drawable 게임 컴포넌트에 해당하는 Draw 메서드를 호출한다.

11. 매초마다 7단계에서 10단계까지 여러번 반복한다.

12. 장치를 유실할 경우(사용자가 창을 다른 모니터로 이동했거나 화면 해상도가 변경되었을경우, 또는 창이 최소화된 경우 등) UnloadContent 메서드를 호출한다.

13. 장치를 리셋한 경우 6단계에서 다시 시작된다.

14. 게이머가 게임을 종료한다.

15. XNA Framework에서 게임의 Dispose 메서드를 호출한다.

16. 게임의 Dispose 메서드에서 기본 객체의 Dispose 메서드를 호출한다. 이경우 다음 두 단계를 발생시킨다.

17. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Dispose 메서드를 호출한다.

18 .XNA Framework에서 게임의 UnloadContent 메서드를 호출한다.

19. 게임의 Dispose 메서드로 초점(focus)이 반환되고 게임이 종료된다.

'소프트웨어 Note > XNA Framework' 카테고리의 다른 글

FBX improvements in XNA Game Studio 3.0  (0) 2011.10.03
XNA와 3D 기초 (1)  (0) 2011.09.10
XNA Framework의 논리적 흐름  (0) 2011.07.21
이 댓글을 비밀 댓글로

[C#] 메소드 동기화

by Blogger 하얀쿠아
2011. 7. 21. 01:38 소프트웨어 Note/C#
동기화를 원하는 몇개의 메소드가 클래스 안에 있다고 가정하자.
(물론 그것들은 여러개의 스레드에 의해 동시에 사용될 수 없게 하려는 상황이라고 가정한다.)

자바 프로그래머라면 스레드 사용시 메소드 동기화를 위해 단지 다음과 같은 방법을사용 하면 된다는걸 알고 있을것이다.

public synchronized void methodName() {...}


C#에서는 이와같은 효과를 주기 위해 어떻게 해야 할까.

자바를 먼저 공부했던 나는 C#을 공부하면서 이와같은 의문을 가졌고, 찾은 해결방법은 다음과같다.


방법1. Just wrap the entire content of your method in a lock statement.
(메소드의 전체내용을 lock 문장으로 둘러 싸면 된다)
public class MyClass
{
public void MyMethod()
{
lock(typeof(MyClass))
{
// 메소드의 내용
//
}
}
}



방법2.
[MethodImpl(MethodImplOptions.Synchronized)]
public void MyMethod()
{
// Contents of method
}

Both are not exactly the same and the second one is more like the
synchronized keyword in Java but in general people use locks in C# as it
gives you more fine grained control.


출처 : http://bytes.com/topic/c-sharp/answers/274531-c-synchronized-methods
이 댓글을 비밀 댓글로

[C#] 구조체

by Blogger 하얀쿠아
2011. 7. 8. 12:22 소프트웨어 Note/C#
구조체는 클래스와 동일한 구문으로 대부분 형식을 공유하지만 클래스보다 제한적이며 다음과 같은 특징을 갖는다.

▷ 구조체는 값 형식이고 클래스는 참조 형식이다.
▷ 클래스와 달리 구조체는 new 연산자를 사용하지 않고 인스턴스화 할 수 있다.
▷ 구조체는 생성자를 선언할 수 있으나 반드시 매개 변수를 사용해야 한다.
▷ 구조체는 다른 구조체 또는 클래스에서 상속될 수 없으며, 클래스의 기본 클래스가 될 수 없으며 모든 구조체는 System.Object 를 상속하는 System.ValueType에서 직접 상속한다. 
▷ 구조체는 인터페스이를 구현할 수 있다.
▷ 구조체를 nullable 형식으로 사용할 수 있고 여기에 null값을 할당할 수 있다.
▷ 구조체 선언 내에서 필드는 const 또는 static으로 선언한 경우에만 초기화 할 수 있다.
▷ 구조체에서는 매개변수가 없는 생성자인 기본 생성자나 소멸자를 선언할 수 없다. 

 
구조체는 다음과 같이 struct 키워드를 통해 정의한다.

public struct StructLogic
{

//필드, 속성, 메서드, 이벤트

 
구조체 블록 내부에 추가되는 필드, 속성, 메서드, 이벤트를 통칭하여 구조체 멤버라고 함.
클래스의 기능을 부분적으로 제한한 것이 구조체라 생각하면 이해가 쉬울 것. 
Tags
이 댓글을 비밀 댓글로

[아이디어] ...

Posted by 하얀쿠아
2011. 7. 4. 10:10
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[안드로이드] 안드로이드 SurfaceView 캡쳐 예제

by Blogger 하얀쿠아
2011. 7. 4. 09:36 소프트웨어 Note/Android

안드로이드 SurfaceView 캡쳐 예제


다음과 같은 상황이라고 가정하자.

아이템의 사진을 찍는 앱이 있는데, 이 아이템들은 ActivityScreen의 특정한 고정 된 영역에서 볼 수 있어야 한다는 요구사항 있다.
문제는 저장된 비트맵이 액티비티에 표시될 때 인데, 카메라로 보고 찍은 것과는 보여지는게 다르다. 줌을 땡겨서 사진을 찍을 때, 프리뷰 화면에서는 보여지지 않았던 영역까지 액티비티에 그려진다.

해결을 위한 주요 코드 줄은 다음과 같다.


이미지 캡쳐 (IMAGE CAPTURE)
surfHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
captImageView = (ImageView)findViewById(R.id.CamImageView);
byte [] photoData;
Camera cam;
SurfaceHolder surfHolder;
SurfaceView surfView;
Camera.PictureCallback cback;

cback = new Camera.PictureCallback() {
	@Override
	public void onPictureTaken(byte[] data, Camera camera) {
		final int length = data.length;
		opts.inSampleSize = 4;
		final BitmapFactory.Options opts = new BitmapFactory.Options();
		Bitmap bMap = null;

		try {
			bMap = BitmapFactory.decodeByteArray(data, 0, length, opts);
		} catch(OutOfMemoryError e) {
			// OutOfMemoryError handle
		} catch(Exception e) {
			// Exception handle
		}

		captImageView.setImageBitmap(bitmap);

		if(bMap==null) {
			cam.startPreview();
		} else {
			savePhotoButton.setVisibility(ImageView.VISIBLE);
			takePhotoButton.setVisibility(ImageView.INVISIBLE);
			photoData = data;
		}
	}
}

이미지 저장 (IMAGE SAVE)
captImageView.setImageBitmap(null);
// SAVE THE PICTURE   THIS SAVES PICTURE IN WRONG SIZE.  LOOKS LIKED ZOOMED IN NOT WHAT WAS PREVIEWED!!!

public void photoSave(byte[] data) {
	final int length = data.length;
	final BitmapFactory.Options options = new BitmapFactory.Options();
	options.inSampleSize = 2;

	try {
		Bitmap bMap = BitmapFactory.decodeByteArray(data, 0, length, options);
		int quality = 75;
		File file = new File(getDir(), fname);
		fileOutputStream = new FileOutputStream(file);
		bMap.compress(CompressFormat.JPEG, quality, fileOutputStream);
	} catch(FileNotFoundException e) {
		// Handle FileNotFoundException 
	} catch(OutOfMemoryError e) {
		// Handle OutOfMemoryError
	} 
}


액티비티에 이미지 보이기(IMAGE DISPLAY as DRAWABLE in ACTIVITY)

사진이 찍히면 언제나 미리보기에서 보이지 않는 확대 또는 축소 된 부분으로 이미지가 표시되곤 했었다.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = inSampSize;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);

Drawable drawable = bitmap;
ImageView pictureView = (ImageView)findViewById(R.id.pictureViewer);
pictureView.setImageDrawable(drawable);


이 댓글을 비밀 댓글로
  1. 구찌 핸드백은 90 년 긴 역사를 온 세계의 가장 유명한 핸드백의 하나입니다.
  2. 패션을 가진 사람과 유명 인사들은 슬로프와 레드 카펫에 Moncler를 착용하십시오.

[MFC] 알아두면 유용한 형변환

by Blogger 하얀쿠아
2011. 6. 30. 16:28 소프트웨어 Note/C++ MFC
// CString -> int 변환
CString CNum = _T("234");
int iNum = _ttoi(CNum);

// int -> CString 변환
int iNum = 234;
CString CNum;
CNum.Format(_T("%d"), iNum);

// CString -> double
CString CNum = _T("41.53");
double dNum = _wtof(CNum);

// double -> CString
double dNum = 41.53;
CString CNum;
CNum.Format(_T("%f"), dNum);

이 댓글을 비밀 댓글로