월별 글 목록: 2011년 10월월

카산드라 완벽 가이드 : 페이스북, 트위터를 지탱하는 기술, NoSQL

올해 작업했던 책이 드디어 출간을 합니다..

개인적으로 리서치 업무를 진행하면서 카산드라를 접하게 되었고, 업무에 카산드라를 적용해 보면서 많은 도움을 얻은 책을 번역하게 되서 너무 좋았습니다..

그리고, 제가 좋아하는 형하고 같이 작업해서 아주 좋았습니다. 특히, 편집을 담당해 주신 한빛미디어의 한동훈님께서 너무 잘 정리를 해주셨습니다.. 비록, 카산드라 버전이 1.0.0의 정식버전이 런칭을 했지만, 책의 상당 부분이 0.6~0.7버전이 아닌 0.8 버전을 대상으로 작업을 해서 1.0.0을 적용하려는 분들께도 상당히 도움이 될 것으로 생각합니다..

책은 http://www.yes24.com/24/goods/5847220 에서 구매하실 수 있습니다..

오/탈역
– 번역서 147 페이지

이 플래스는 I/O가 아니라…
–> 이 플래그는 I/O가 아니라…

거짓 양성에 대한 주석부분에서.. 스팸 메일의 위험성에 대한 기술을 하고 있는데, 책에서 거짓 양성이 거짓 음성보다 덜 위험하다고 기술하고 있는데,,, 거짓 음성이 거짓 양성보다 덜 위험합니다..

거짓 양성에 대한 부분은 http://charsyam.wordpress.com/ 님께서 지적해 주셨습니다..

Android에서 앱 Activity 관리 및 앱 종료 detect하기..

안드로이드(Android)에서 앱의 Activity나 앱 종료를 체크하기 위해서, Activity Stack을 설정한 개수만큼만 유지시켜주는 클래스를 만들었다.

ActivityManager.java

import java.util.concurrent.LinkedBlockingQueue;
import android.app.Activity;
/**
 * Activity Manager Class
 * @author mcsong@gmail.com
 *
 */
public class ActivityManager {
    private static final int max = 13;
    private static final int size =12;
    private static LinkedBlockingQueue queue = new LinkedBlockingQueue(max);
    private static final String CNAME = ActivityManager.class.getSimpleName();

    public static void createActivity(Activity activity) {
        if(activity == null)
            return;

        queue.add(activity);
        if(queue.size() > size) {
            try {
                queue.take().finish();
            } catch (Exception e) {
                LogUtil.e(CNAME, LogUtil.TAG, ExceptionUtil.getException(e));               
            }
        }
    }

    public static boolean isRootActivity(Activity activity) {
        if(activity == null)
            return false;

        try {
            if(activity == queue.peek())
                return true;
        } catch (Exception e) {
            LogUtil.e(CNAME, LogUtil.TAG, ExceptionUtil.getException(e));               
        }

        return false;
    }

    public static void clear() throws InterruptedException {
        while(queue.size() > 0) {
            queue.take().finish();
        }
    }
}

사용방법 및 효과
– Activity 생성(onCreate 메소드에서)시에 createActivity()를 호출한다. 자연스럽게 size만큼 Activity Stack이 관리가 된다.
– 앱 종료 detect는 isRootActivity()로 확인을 하면 된다.. ture인 경우 각 Activity 클래스에서.. onBackPressed()를 Override해서 확인하면 된다.. 참고로, AbstractActivity 클래스를 만들어서 상속해서 AbstractActivity 클래스에서 이 코드를 삽입하면 각각의 Activity 클래스에서 이 코드를 삽입할 필요가 없다.
– 앱을 종료하면서 clear()를 호출해서 Activity stack에 있는 Activity들을 다 날려주셔야 Activity 관리가 명확해 집니다.. ^^

안드로이드 activity의 동작형태는 android:launchMode=”standard” 에서 잘 동작한다.