가로 세로 회전 시 Activity의 상태를 유지하는 방법은 아래 블로그를 참고

위 방법대로 했음에도 불구하고, 
IME (Soft Keyboard)를 띄운 상태에서 가로 세로로 전환했을 때 입력한 내용이 표시가 되지 않는다면, AndoidMenifest.xml 파일을 확인해 보라.

만약 아래 처럼 android:minSdkVersion를 정의해서 쓰고 있다면 이를 삭제해서 테스트를 해 보자.
<uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="16" />

android:minSdkVersion은 안드로이드 OS버전이 얼마 이상 되야 이 앱이 설치될 수 있다는 것을 기술하는 부분인데, 
왜 도대체 이 부분이 문제가 되는 지는 잘 모르겠다.

IME 버그인지.. 안드로이드 버그인지..


저작자 표시 비영리 동일 조건 변경 허락
신고


정규 표현식을 사용하면 코드 양을 획기적으로 줄일 수 있다. 이번 기회에 Java에서 지원하는 정규표현식을 정리해 본다.


일단 Java 정규표현식 문서는 아래 링크를 참조. (JAVA SE7기준)

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html


문서에 사용예제가 있다.

Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();


정규표현식의 기본 형식에 대해 테스트 코드를 만들어 보았으니, 첨부소스를 참고하자.


regularExpression.zip


(첨부 소스에 빠진 예제가 많은데, 혹시 예제로 표현해 주실 분은 댓글로 남겨주시면 감사하겠습니다.)


정규표현식 검사기도 있다고 하니 JAVA가 아닌 다른 언어로 정규식을 검사할 때 유용하겠다.


아래는 개발하면서 유용하게 쓰일 정규 표현식들. (유첨 소스의 UsefulExpressionsTest.java에 포함)


IP주소

((([0-9])|([1-9]\d{1})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}(([0-9])|([1-9]\d{1})|(1\d{2})|(2[0-4]\d)|(25[0-5]))


URL

^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$


Email주소

(\w+\.)*\w+@(\w+\.)+[A-Za-z]+


HTML 주석

<!-{2}(.|\n)*?-{2}>


HTML 태그

^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$


주민등록번호

- 주민번호 체계 공식에 대입하기 전에 간단히 자리수 체크만 할 때 쓴다.

// \d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])-[1-4]\d{6}


한글

[가-힣]+


3자~16자의 사용자 id (영문/숫자/_/- 만 가능)

^[a-z0-9_-]{3,16}$


16진수값

^#?([a-f0-9]{6}|[a-f0-9]{3})$



참고 사이트

1.http://blog.naver.com/PostView.nhn?blogId=fightingdk&logNo=60124162230&redirect=Dlog&widgetTypeCall=true

2. http://goodidea.tistory.com/86

3. http://blog.outsider.ne.kr/360


저작자 표시 비영리 동일 조건 변경 허락
신고


JAVA에서 URL 정규표현식을 알아보자. (발췌: http://goodidea.tistory.com/86)


원문에서는 마지막에 http://www.daum.net 과  같이 URL 마지막에 슬래쉬(/)가 없는 예에서는 에러가 난다.

이를 수정하면 아래와 같이 된다.


^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$


JAVA 테스트 코드로 바꾸면 다음과 같다.


    @Test

    public void url() {

        String regex = "^(https?):\\/\\/([^:\\/\\s]+)(:([^\\/]*))?((\\/[^\\s/\\/]+)*)?\\/?([^#\\s\\?]*)(\\?([^#\\s]*))?(#(\\w*))?$";

        Pattern p = Pattern.compile(regex);


        assertTrue(p.matcher("https://goodidea.tistory.com:8888/qr/aaa/ddd.html?abc=def&ddd=fgf#sharp").matches());

        assertTrue(p.matcher("http://dextto.tistory.com").matches());

        assertTrue(p.matcher("http://blog.daum.net/dexter").matches());

        assertTrue(p.matcher("http://www.daum.net:80/index.cfm").matches());

        assertTrue(p.matcher("http://xxx:password@www.daum.net").matches());

        assertTrue(p.matcher("http://localhost/index.php?ab=1&c=2").matches());

        assertTrue(p.matcher("http://localhost:8080").matches());

        assertTrue(p.matcher("http://dextto.tistory.com/admin/entry/post/?id=150&returnURL=/entry/JAVA-Regular-Expression-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%98%88%EC%A0%9C").matches());

    }

저작자 표시 비영리 동일 조건 변경 허락
신고


LCD가 꺼져 있을 때 강제로 켜고 싶을 때가 있다. 

  • 메세지가 도착했을 때. (카톡과 같은 메신저류에서의 요구사항)
  • 설정한 알람 시간이 됐을 때
    : 알람 이벤트가 되면 자동으로 LCD가 켜지는 지는 모르겠다..
  • 또는 이와 같이 LCD가 꺼진 상태에서 특정 이벤트가 왔는데, 화면에 표시해야 할 때

이럴 때는 PowerManager를 이용해서 아래와 같이 wake lock을 걸어주면 된다.

먼저 AndroidMenifest.xml에 다음 퍼미션을 추가하자.
<users-permission android:name="android.permission.WAKE_LOCK"/>

wake lock을 걸 때
private void acquireWakeLock(Context context) { PowerManager pm = (PowerManager)context.getSystemService (Context.POWER_SERVICE); screenWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
, context.getClass().getName());
if (screenWakeLock != null) { screenWakeLock.acquire(); } }


wake lock을 걸고 할 일을 마쳤다면 반드시 lock을 풀어서 소모전류 이슈가 발생하지 않도록 하자.

wake lock을 풀 때
private void releaseWakeLock() { if (screenWakeLock != null) { screenWakeLock.release(); screenWakeLock = null; } }


저작자 표시 비영리 동일 조건 변경 허락
신고


앱을 개발하다 보면 미디어 스캐닝을 강제로 하고 싶은 경우가 있다.

네트웍에서 음원이나 사진을 다운받았는 데 뮤직이나 갤러리에서 표시가 안되는 경우가 그렇다.


미디어 스캐너에게 파일정보가 업데이트가 되었다는 인텐트를 보낸다.


sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://" + path)));




아래 내용은 KitKat부터 사용 불가합니다. 

미디어 스캐닝이 너무 자주 불려 성능저하를 일으키는 문제로 앱단에서 호출하지 못하도록 되었습니다.

여하튼 KK 이전 버전이라면...


이럴 때는 아래처럼 인텐트를 하나 날려주자.

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://" + Environment.getExternalStorageDirectory())));


adb로 바로 미디어 스캐닝을 하고 싶다면 이렇게..

(URI 부분을 file:///storage하면 전체 storage에 대해 스캐닝을 수행함)

adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED

file:///storage/sdcard0


저작자 표시 비영리 동일 조건 변경 허락
신고

파일 비교창에서

도구 > 현재 규정 편집 > 탭과 공백 

저작자 표시 비영리 동일 조건 변경 허락
신고


개인적으로 코딩을 할 때 Indentation을 맞추기 위해 tab을 사용한다. 이에 대한 조사 결과는 찾아 보지 않아서 정확한 데이터 수치는 모르겠지만, 아마도 대부분의 개발자가 그렇게 할 것 같다.


하지만 사내의 Coding rule 문서에는 indent를 넣을 때, space 4칸을 넣도록 되어 있다.

사실 space든 tab이든 중요하지 않다. 중요한 것은 tab을 넣더라도 읽기 편하게 하기 위해 tab size를 4칸으로 보여주도록 툴에 설정을 하면 되기 때문이다.

사내 코딩룰이 저렇게 된 것은 tab size의 기본 값이 8로 되어 있는 text editor 툴이 많아서 그럴 것이라고 생각한다.


어쨌든! 사내 코딩 가이드는 다 같이 지키라고 있는 것이니, 오늘 부터 따르기로 했다.

다만 일일이 스페이스 키를 4번 눌러대는 것이 귀찮으니, Eclipse의 Formatter를 편집해서 tab을 누를 때 자동으로 스페이스가 입력되도록 하자.



Formatter 메뉴 진입

Windows > Preference > Formatter


현재 쓰고 있는 Formatter를 Edit하면 아래 메뉴가 뜬다.

여기서 Indentation 탭 > General Settings > Tab policy를 Spaces only로 설정하고, 

Indentation size와 tab size를 4로 설정




저작자 표시 비영리 동일 조건 변경 허락
신고

https://github.com/xdissent/redmine_gitosis

저작자 표시 비영리 동일 조건 변경 허락
신고

.git 디렉토리가 있는 위치의 .gitignore 파일

또는
.git/info/exclude 파일에 다음과 기술 (#은 주석)


# git-ls-files --others --exclude-from=.git/info/exclude

# Lines that start with '#' are comments.

# For a project mostly in C, the following would be a good set of

# exclude patterns (uncomment them if you want to use them):

# *.[oa]

# *~

*.apk

*.class

*.dex

*.ap_


저작자 표시 비영리 동일 조건 변경 허락
신고


우분투에 Git 최신 버전 설치

  • 우분투에 Git 최신 버전을 빌드하기 위해서는 먼저 의존 관계에 있는 프로그램을 설치해야 한다.
    >sudo apt-get build-dep git-core git-doc
    
  • Git 사이트에서 Git 최신 버전을 다운로드한다.
  • 압축을 푼 후 디렉토리로 이동한다.
  • 기본 디렉토리 아래에 설치하고자 한다면 다음과 같다.
    >./configure
    >make
    >sudo make install
    
  • 설치 경로를 바꾸고자 한다면..
    >./configure --prefix=/usr/local/git
    >make
    >sudo make install
    

우분투 설치 후 gitk와 git-gui가 동작하지 않을 경우

  • 우분투에 tcl/tk가 설치되어 있지 않을 경우 exec: 3: wish: not found wish 에러가 발생한다. 이와 같은 에러가 발생할 경우에는 tcl/tk 모듈을 설치한다.
    >sudo apt-get install tcl8.5
    >sudo apt-get install tk8.5
    
  • 위와 같이 apt-get을 이용하거나 수동으로 설치를 하면 정상적으로 동작한다.

저작자 표시 비영리 동일 조건 변경 허락
신고