MS Windows에서 EUC-KR 코드셋을 넘어가는 문자의 경우(CP949 코드셋), 하기 코드에서 EUC-KR 부분을 CP949로 교체해서 사용.


# UTF-8을 EUC-KR로 변환
def utf2euc(str):
    return unicode(str, 'utf-8').encode('euc-kr')

# EUC-KR을 UTF-8로 변환
def euc2utf(str):
    return unicode(str,'euc-kr').encode('utf-8')


참고자료: http://renderman.tistory.com/28


Posted by Gungume
,

MS Windows 환경에서 '\', '/', ':', '*', '?', '"', '<', '>', '|' 문자의 경우 파일/폴더명으로 사용 불가능.


아래 코드는 파라메터로 넘겨진 문자열에서 위의 사용 불가능 문자를 삭제한 결과를 리턴해주는 코드


def get_valid_path(path):
    return path.translate(None, '\/:*?"<>|'')


Posted by Gungume
,

동일한 이미지 리소스 (예: R.drawable.samplebitmap)를 여러곳에서 사용하고 해당 Drawable의 속성을 바꾸면 다른 곳에서도 같이 변경됨.


예를 들어 ActionBar의 배경색에 사용될 Drawable을 메인화면에서는 원본 그대로 사용하고, 상세 페이지에서는 스크롤 상태에 따라 투명도를 적용했는데, 투명도 적용 후 메인화면으로 돌아가면 똑같이 투명도가 변경되는 이슈 발생.

(같은 R.drawable.samplebitmap리소스에 대해서 각각 get해서 사용한 상태)


Android에서 동일한 리소스에 대해서 메모리 낭비를 방지하기 위헤 Constant state를 공유하고 이로 인해서 변경 사항이 모든 Drawable에 영향을 끼치고 있음.


해결 방법으로는 Drawable의 mutate()메소드를 호출해서 얻어진 Drawable로 원하는 작업 수행.


문제가 발생하는 경우에 대한 예제 코드로 하기 코드를 Adapter의 getView() 메소드와 같이 반복적으로 사용하는 경우 star.setAlpha() 수행 결과가 book.isFavorite()의 결과와 상관 없이 일괄 적용됨.


Drawable star = context.getResources().getDrawable(R.drawable.star);
if (book.isFavorite()) {
  star.setAlpha(255); // opaque
} else {
  star.setAlpha(70); // translucent
}


문제를 해결하는 예제 코드

Drawable star = context.getResources().getDrawable(R.drawable.star);
if (book.isFavorite()) {
  star.mutate().setAlpha(255); // opaque
} else {
  star. mutate().setAlpha(70); // translucent
}
참고자료: http://android-developers.blogspot.kr/2009/05/drawable-mutations.html


Posted by Gungume
,

Fragment를 ViewPager를 사용해서 보여주는 경우, 아래와 같이 setUserVisibleHint 메소드를 Fragment 클래스에서 Override해서 사용하면 해당 Fragment가 사용자에게 보이는 시점을 찾을 수 있다.


isVisibleToUser값이 True인 경우가 사용자에게 보이는 시점.


public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) {

    } else {

    }
}

참고자료: http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager

Posted by Gungume
,

command? 부분에 세미콜론 단위로 구분해서 원하는 명령어 실행

adb shell "su -c 'command1; command2; command3'"


예제: /data, /data/data 디렉토리의 접근 권한 설정하기.

adb shell "su -c 'chmod 777 /data; chmod 777 /data/data;'"


참고자료: http://stackoverflow.com/questions/8761992/launch-a-script-as-root-through-adb

Posted by Gungume
,

Android에서 "Application" 클래스에서는 전역변수와 같이, 공통으로 사용될 정보들을 관리 가능.


Application 클래스내에서 여러 모듈에서 공통으로 접근이 가능한 정보를 넣어서 활용할 수 있고, onCreate 메소드의 경우 어플리케이션이 생성될 때 호출되므로, Singleton 초기화 등에 활용 가능.


Application 클래스를 상속해서 구현하며, AndroidManifest.xml 파일의 <application> tag의 name 필드에 관련정보를 넣어줘야함.


SampleApplication.java
import android.app.Application;

public class SampleApplication extends Application {
    public SampleApplication() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}


AndroidManifest.xml


Posted by Gungume
,
public class AuilUtils {

    public AuilUtils() {
    }

    static private String getImageUri(String uri, Scheme scheme) {
        if (uri != null) {
            return scheme.wrap(uri);
        }

        return null;
    }

    static public String getUriFromFile(String filePath) {
        return getImageUri(filePath, Scheme.FILE);
    }

    static public String getUriFromContent(String contentUri) {
        return getImageUri(contentUri, Scheme.CONTENT);
    }

    static public String getUriFromDrawable(int drawableId) {
        return getImageUri(String.valueOf(drawableId), Scheme.DRAWABLE);
    }

    static public String getUriFromWeb(String webUri) {
        if (webUri.toLowerCase(Locale.US).startsWith("http")) {
            return webUri;
        }

        return getImageUri(webUri, Scheme.HTTP);
    }
}


Acceptable URIs examples

"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)

참고자료: https://github.com/nostra13/Android-Universal-Image-Loader#acceptable-uris-examples


Posted by Gungume
,

빠른 복사

robocopy SRC DES /E /NFL /NDL /NJH /NJS /nc /ns /np


백업(미러링)

robocopy SRC DES /MIR /R:3 /W:5 /DCOPY:T /E /NFL /NDL /NJH /NJS /nc /ns /np


SRC, DES 부분에 각각 복사할 폴더의 경로, 복사될 폴더의 경로 입력.

백업(미러링) 옵션 사용시에는 SRC 폴더 기준으로 DES와 동일하게 처리됨.

(예: SRC폴더에서 삭제된 자료 있으면, DES에서도 삭제됨)

Posted by Gungume
,

선택된 폴더/파일을 모두 삭제하며, 폴더의 경우 모든 하위 폴더 및 파일 삭제.

(SendTo/Drag&Drop용)

for %%d in (%*) do (
	del /f/a/s/q %%d > nul
	rmdir /s/q %%d
)
pause

del 명령어 options

  • /f: 읽기전용 파일 삭제
  • /a: 속성이 있는(숨김속성 등) 파일 삭제
  • /s: 하위 디렉토리까지 삭제
  • /q: 와일드 카드 사용시 삭제 여부 묻지 않고 삭제.
  • > nul: 결과물 nul로 리타이렉트함으로써 화면에 표시되지 않게 처리.

rmdir 명령어 options (del로 폴더 삭제 안되는 경우 있어서 추가로 사용)

  • /s: 지정된 폴더 및 하위 폴더/파일 삭제
  • /q: Quied mode


Posted by Gungume
,

현재 경로에 있는 모든 폴더를 "폴더명.7z"로 각각의 파일로 압축하는 batch script.

(폴더채가 아닌 해당 폴더내의 모든 파일 기준으로 압축

for /D %%d in (*.*) do 7z a "%%d.7z" ".\%%d\*"


batch 파일에 드래그 또는 MS Windows의 보내기(SendTo) 기능을 활용해서, 복수개로 선택된 폴더만을 압축하는 batch script.
(파일명, 압축할 파일 기준 등은 위의 스크립트와 동일)

for %%d in (%*) do 7z a "%%~nd.7z" "%%d\*"
pause


Posted by Gungume
,