2010년 5월 5일 수요일

블로그를 이전합니다.

텍스트큐브가 블로거로 통합됨에 따라

 

블로그를 다시 티스토리로 이전합니다.

 

동일한 주소로 접속하실 수 있습니다.

 

http://www.virgo81.net

 

5초 후에 자동으로 이동합니다.^^

 

 

 

Because textcube will be merged by blogger,

 

my blog is moved to Tistory.com

 

But, you can visit my blog as the same URL

 

http://www.virgo81.net

 

In 5 seconds, this page will be automatically redirected. :)

2010년 3월 20일 토요일

Base64 Encoding / Decoding in Android

안드로이드에서 Base64 인코딩 디코딩 하기

Base64 Encoding / Decoding in Android

 

안드로이드 OS는 이미 apache codec 1.3의 Base64를 가지고 있다.

Android OS already has the Base64 of apache codec 1.3.

 

 

 

public static byte[] encodeBase64(byte [] binaryData) {
    byte [] buf = null;
       
    try {
        Class Base64 = Class.forName("org.apache.commons.codec.binary.Base64");
        Class[] parameterTypes = new Class[] { byte[].class }; 
        Method encodeBase64 = Base64.getMethod("encodeBase64", parameterTypes);
        buf = (byte[])encodeBase64.invoke(Base64, binaryData);
    } catch (Exception e) {
        e.printStackTrace();
    }       
       
    return buf;
}

 

 

public static byte[] decodeBase64(byte [] base64Data) {
    byte [] buf = null;
       
    try {
        Class Base64 = Class.forName("org.apache.commons.codec.binary.Base64");
        Class[] parameterTypes = new Class[] { byte[].class }; 
        Method decodeBase64 = Base64.getMethod("decodeBase64", parameterTypes);
        buf = (byte[])decodeBase64.invoke(Base64, base64Data);
    } catch (Exception e) {
        e.printStackTrace();
    }       
       
    return buf;
}

 

안드로이드 android base64 encoding decoding apache codec

2010년 3월 8일 월요일

도시락 없이 mp3를 kmp로 변환하자!

KT를 사용하는 분들은 mp3파일을 듣기 위해

 

도시락을 통해 mp3를 kmp로 바꿔야합니다.

 

하지만, 도시락을 이용하여 변환하는  것은

 

너무 번거롭습니다.

 

물론 mp3tokmp라는 프로그램이 널리 이용되고 있지만,

 

Windows 7 64bit와 같은 운영체제에서 자주 프로그램 오류가 납니다.

 

하지만 와이프는 프로그램 오류 없이 변환하길 원합니다.(?)

 

이러한 요구 사항들을 만족하기 위해 No Dosirak이 탄생했습니다.

 

 No Dosirak 을 이용하시면 빠르고 간편하게 mp3 파일을 kmp 파일로 변환할 수 있습니다.

 

 

먼저 첨부 되어 있는 No Dosirak과 SMPEncoder.dll를 다운로드 받아 같은 폴더에 저장합니다.

 

 

(이 프로그램은 .net framework 2.0 이상의 버전이 필요합니다.)

 

 

SMPEncoder.dll 다운로드 받기 #1 #2  (SMPEncoder.dll 은 저작권 문제를 피하기 위해 외부 링크로 대체합니다.)

 

 

그리고나서 NoDosirak.exe 를 실행하여 변환을 수행하면 됩니다.

 

 

변환 절차는 다음과 같습니다.

 

1. 파일 추가 또는 폴더 추가 버튼을 이용하여 원하는 mp3 파일 또는 mp3 파일이 저장된 폴더를 선택합니다.

 

2. 사용자 전화번호를 입력합니다.

 

3. 대상 폴더를 지정합니다. 외장 메모리의 mp3 폴더를 지정하시면 편리합니다.

 

4. 선택 변환 또는 전체 변환 버튼을 통해 변환 작업을 수행합니다.

 

 

참고 자료

http://plus7.postech.ac.kr/~override/blog/?p=68

 

 

kmp 변환 mp3 변환 도시락 kt kt 도시락 kt kmp 휴대전화 휴대폰 mp3 폰 mp3tokmp dosirak

 

2010년 2월 4일 목요일

신뢰되지 않은 루트 인증서 안드로이드 에뮬레이터에 설치하는 방법

 

신뢰되지 않은 루트 인증서를

안드로이드 에뮬레이터에 설치하는 방법

 

How to install a untrusted root certificate

to android emulator

 

 

1. 작업 디렉토리를 만듭니다. (WORKDIR)

2. 루트 인증서(MYROOT.CER)를 WORKDIR 로 옮깁니다.

3. 첨부 파일을 WORKDIR로 다운로드 받습니다.

 

 

 

 

 

4. http://www.bouncycastle.org/latest_releases.html에서 Bouncy Castle Crypto API 라이브러리를 다운로드 받습니다.
 예) http://www.bouncycastle.org/download/bcprov-jdk16-145.jar

5. 다운로드 받은 jar 파일을 "$JAVA_HOME\jre\lib\ext" 디렉토리로 옮깁니다.
 예) C:\Program Files (x86)\Java\jdk1.6.0_18\jre\lib\ext

6. -partition-size 옵션과 함께 에뮬레이터를 실행합니다.
    usage: emulator -partition-size [size] -avd [target-avd]
    ex: emulator -partition-size 256 -avd my_android2.0

7. 부팅 과정을 기다립니다.

8. 명령 프롬프트에서 다음 명령들을 실행합니다.

     adb pull /system/etc/security/cacerts.bks cacerts_org.bks
 
     copy cacerts_org.bks cacerts.bks

     keytool -keystore cacerts.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass changeit -importcert -trustcacerts -alias CACERT -file MYROOT.CER
         Trust this certificate? [no]:  y


    adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
 
    adb push cacerts.bks /system/etc/security/cacerts.bks


hosts 파일도 수정하기 원한다면.
#-- 시작

    adb pull /system/etc/hosts hosts_org

    copy hosts_org hosts
#-- 끝

hosts 파일을 수정합니다.

hosts 파일도 수정하기 원한다면.
#-- 시작
    adb push hosts /system/etc/hosts
#-- 끝

    adb push mkfs.yaffs2.arm /data/data/temp/mkfs.yaffs2

    adb shell chmod 777 /data/data/temp/mkfs.yaffs2

    mkfs.yaffs2 /system /data/data/temp/system.img

    adb pull /data/data/temp/system.img system.img

    adb shell mount -o remount,ro -t yaffs2 /dev/block/mtdblock0 /system

9. "당신의 androidSDK 홈\platforms\target-version\images" (IMAGEHOME) 디렉토리로 이동합니다.
    예) E:\dev\android-sdk-windows\platforms\android-2.0\images

10. system.img 파일을 백업합니다
    ex) system.img를 system.img.org로 이름 변경합니다.

11. WORKDIR\system.img 를 IMAGEHOME 으로 이동합니다.

12. 에뮬레이터를 종료합니다.

13. 에뮬레이터를 새로 시작합니다.

14. 안드로이드 브라우저를 이용하여 당신의 사이트에 접속합니다.

15. 보안 관련 메시지가 안나타나면, 성공입니다.

 

 

1. Make a directory for working(WORKDIR).

2. Move your root certificate(MYROOT.CER) to WORKDIR.

3. Download the attached file to WORKDIR.

4. Download the Bouncy Castle Crypto API library from this site (http://www.bouncycastle.org/latest_releases.html).
 ex) http://www.bouncycastle.org/download/bcprov-jdk16-145.jar

 

5. Move the crypto API jar to "$JAVA_HOME\jre\lib\ext" directory.
    ex) C:\Program Files (x86)\Java\jdk1.6.0_18\jre\lib\ext

6. Run the emulator with -partition-size option.
    usage: emulator -partition-size [size] -avd [target-avd]
    ex: emulator -partition-size 256 -avd my_android2.0

7. Wait booting processing.

8. Run these commands in command prompt.

    adb pull /system/etc/security/cacerts.bks cacerts_org.bks
 
    copy cacerts_org.bks cacerts.bks

    keytool -keystore cacerts.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass changeit -importcert -trustcacerts -alias CACERT -file MYROOT.CER
         Trust this certificate? [no]:  y


    adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
 
    adb push cacerts.bks /system/etc/security/cacerts.bks


If you want to modify the hosts file.
#-- start

    adb pull /system/etc/hosts hosts_org

    copy hosts_org hosts
#-- end

Modify the hosts file.

If you want to modify the hosts file.
#-- start
    adb push hosts /system/etc/hosts
#-- end

    adb push mkfs.yaffs2.arm /data/data/temp/mkfs.yaffs2

    adb shell chmod 777 /data/data/temp/mkfs.yaffs2

    mkfs.yaffs2 /system /data/data/temp/system.img

    adb pull /data/data/temp/system.img system.img

    adb shell mount -o remount,ro -t yaffs2 /dev/block/mtdblock0 /system

9. Go to "your android SDK home\platforms\target-version\images" (IMAGEHOME).
    ex) E:\dev\android-sdk-windows\platforms\android-2.0\images

10. Back up your system.img
    ex) Rename system.img to system.img.org

11. Move WORKDIR\system.img to IMAGEHOME

12. Terminate the emulator.

13. Relaunch the emulator.

14. Connect your site by android browser.

15. If there are no messages related security, success.

 

2010년 1월 22일 금요일

가상화 (Virtualization)

최근 Windows 7의 등장과 XP-모드, x86 CPU

 

가상화 지원으로 인하여

 

가상화에 대한 관심이 높아지고 있습니다.

 

가상화는 매우 많은 의미로 사용되고 있지만

 

일반적으로 가장 많이 사용 되는 곳은

 

여러 운영체제를 한 시스템에 격리하여 사용하는

 

시스템 가상화(플래폼 가상화)를 의미합니다.

 

 

먼저 몇 가지 가상화 용어에 대해서 정리를 해보겠습니다.

 

 

가상 머신 모니터(Virtual Machine Monitor = 하이퍼바이저(Hypervisor))

가상 머신의 추상 개념을 제공하는 소프트웨어입니다.
가상 머신을 실행하고, 실제 하드웨어로부터 격리하는 역할을 합니다.
대표적인 소프트웨어로 VMware, Virtual Box, Xen, KVM 등이 있습니다.

 

가상 머신(Virtual Machine)

프로그램을 물리적인 머신처럼 실행할 수 있는 머신의 소프트웨어적 구현입니다.

 

전 가상화(Full virtualization)

소프트웨어를 수정 없이 가상 머신에서 실제 머신처럼 실행 가능합니다.
보통 전통적인 가상화에서 제공하며 x86의 경우 인텔의 VT AMD AMD-V 확장을 통해 제공합니다.
Windows 7
의 가상화 기능과 KVM 등이 전 가상화를 지원합니다.

 

반 가상화(Paravirtualization)

가상 머신에서 실행을 위해서는 소프트웨어의 수정이 필요합니다.
가상화 확장 이전의 x86에서 사용되었으며
반 가상화를 사용하는 가장 유명한 가상 머신 모니터로는 Xen이 있습니다.

 

 

용어를 몇 가지 살펴보니 가상화를 간단하게 이렇게도 말할 수 있을 거 같습니다.

 

 

가상 머신 모니터 소프트웨어를 이용하여 가상 머신을 만들어서 실제 머신에서처럼

 

가상 머신에서 소프트웨어를 실행하는 것이 가상화다.

 

 

그러면 왜 이렇게 번거로운 작업을 해야 할까요?

 

여러 가지 목적이 있겠지만 대표적인 몇 가지를 이야기하면 다음과 같습니다.

 

1. 여러 장비에 분산되어 있는 서버를 고성능 한 장비에 합칠 때
2.
한 컴퓨터에서 여러 프로그램을 실행하고 싶지만, 보안이나 기타 이유로 여러 운영체제가 필요할 때
3.
여러 운영체제에서 테스트가 필요할 때
4.
구형 하드웨어나 소프트웨어에 대한 지원이 필요할 때 (Windows 7 XP 모드의 주 목적입니다)
5.
클라우드 컴퓨팅과 같이 유연하게 자원을 사용하고 싶을 때

 

등등 많은 이유로 가상화에 대한 요구가 증가하고 있습니다.

 

그 동안 VMware Virtual Box등으로 가상화를 사용했던 거 같은데 뭐가 문제였길래

 

인텔이나 AMD가 가상화 지원 CPU를 출시하고 있을까요?

 

과거로 거슬러 올라가 보면 Popek Goldberg 1974년 논문

 

"가상화 가능한 3세대 아키텍처들을 위한 형식상의 요구사항"에서 VMM으로 고려되는

 

시스템 소프트웨어를 위한 3가지 필수 특징을 발표하였습니다.

 

 

3가지를 간단하게 정리하면 다음과 같습니다.

 

1. 효율(Efficiency)

    모든 위험하지 않은 명령들은 VMM의 간섭 없이 하드웨어로 직접 수행되어야 합니다.
2. 자원 통제(Resource control)

    VMM은 가상화된 자원에 대해 완벽한 통제를 해야 합니다.
3.
동등(Equivalence)

    VMM에서 실행되는 프로그램은 같은 머신에서 직접 실행되었을 때와 동일하게 수행되어야 합니다.

 

전통적인 가상화는 트랩-에뮬레이트를 통해 위 특성을 만족하는 가상화를 제공하였습니다.

 

하지만 최근까지 하드웨어의 지원 부족으로 x86 아키텍처는 전통적인 트랩-에뮬레이트 가상화를

 

허용하지 않았습니다.

 

다행스럽게도 최근 인텔 AMD가 전통적인 가상화를 지원하기 위해 아키텍처 확장을 소개했습니다.

 

그것이 인텔의 VT AMD의 AMD-V입니다.

 

 

그러면 x86 아키텍처가 가상화를 위한 어떠한 하드웨어 지원이 부족했을까요?

 

대표적인 문제가 특권 상태 접근 시에 폴트를 발생시키지 않는 문제입니다.

 

이전에는 x86이 많이 사용되는 PC 여러 운영체제를 동시에 사용하고자 하는 요구가 거의 없었습니다.

 

x86에서는 2비트(0-3) 특권 레벨(Privilege Level) 기반의 보호를 제공하는데

 

특권 레벨0은 가장 권한이 높은 소프트웨어(운영체제)가 사용하고

 

특권 레벨 3은 일반 응용프로그램이 사용합니다.

 

하지만 가상화에 대한 요구가 증대되면서 가상화를 시도하게 되었습니다.

 

가상화를 위해 VMM이 도입되어야 하는데, 자원통제를 위하여 VMM은 가장 높은 특권 레벨(0)에서

 

실행이 되어야 합니다. 하지만, 아뿔사! 이미 그 자리는 운영체제가 차지하고 있습니다.

 

그럼 어떻게 해야 하나요? 굴러온 돌(VMM)이 박힌 돌(OS)를 빼내야 합니다.

 

그래서 운영체제한테 특권 레벨 1이나 3으로 가라고 했습니다.

 

특권 레벨 0에 있던 운영체제가 특권 레벨 1 또는 3으로 갔는데 이게 잘 실행되었으면 하는 바램이 있지만

 

바램은 바램일 뿐입니다.

 

 

운영체제는 여러 특권 명령을 실행하게 됩니다. 특권 명령은 특권 레벨 0에서만 사용할 수 있는 명령입니다.

 

특권 명령을 다른 특권 레벨에서 사용하면 트랩이 발생하게 되고 이 트랩을 VMM이 처리를 해주면

 

말끔하게 문제가 해결될 거 같습니다.

 

하지만 애석하게도 x86의 일부 특권 명령은 다른 특권 레벨에서 실행하여도 트랩을 발생시키지 않습니다.

 

트랩을 발생 시켜야 VMM이 처리를 할 텐데 난감한 일이죠.

 

그 외에 링 앨리어싱, 주소 공간 축소, 게스트 시스템 호출의 부정적 효과, 인터럽트 가상화,

 

숨은 상태의 접근, 링 축소, 특권 자원에 대한 빈번한 접근 등의 문제가 있습니다.

 

 

이러한 문제를 하드웨어가 확장을 통해 지원 하기 전에는 소프트웨어로 해결했습니다.

 

VMware, Virtual Box와 같은 x86용 VMM들은 게스트 커널 코드의 바이너리 변환을 대신 사용했습니다.

 

또한 Xen과 같은 경우는 운영체제 코드 레벨 1에서 실행되도록 수정하고 반 가상화를 사용했습니다.

 

이러한 방법으로 가상화를 사용할 수 있지만, 코드를 변경하거나 VMM이 계속 개입해야 하는

 

문제 등이 있습니다.

 

 

이러한 문제를 하드웨어로 해결하기 위해 VT 또는 AMD-v

 

VMX root VMX non-root의 추가를 통해 아키텍처를 확장 했습니다.

 

 

양 모드 모두 0-3까지의 특권 레벨을 가지고 있습니다.

 

VMM VMX root 모드에서 실행되고, 게스트 운영체제는 VMX non-root 모드에서 실행됩니다.

 

 상태는 vm entry를 통해 VMX root에서 VMX non-root 모드로 전환되고

 

또한 vm exit를 통해 VMX non-root 모드에서 VMX root 로 전환됩니다.

 

VMX non-root 모드에서 운영체제는 기존처럼 특권 레벨 0에서 실행됩니다.

 

하지만 기존과 다르게 많은 명령어들과 이벤트들이 vm exit를 호출합니다.

 

이러한 개선을 통해 운영체제는 기존의 특권 레벨에서 실행되기에 특권 레벨 변화로 인한

 

대부분의 문제가 해결 되었습니다.

 

그리고 또한 특권 명령을 VMM이 처리할 수 있게 적절히 트랩도 발생하게 되었습니다.

 

, 이제 말끔하게 가상화를 위한 문제들이 해결된 거 같습니다.

 

그럼 성능도 항상 하드웨어 지원을 통한 가상화가 좋은 성능을 보일 것 같습니다.

 

 

하드웨어 지원 가상화 vs. 소프트웨어 가상화

 

하지만 하드웨어에서 지원해준다고 항상 좋은 것만은 아닙니다.

 

VMX root <-> VMX non root 변환 시 지연이 생각보다 길기 때문입니다.

 

2.66GHz Core 2 Duo 프로세서에서 vm entry 명령을 실행하는데 무려 937 CPU 사이클이 필요하고

 

vm exit 1186 CPU 사이클이 필요합니다.

 

많은 명령어들과 이벤트들이 vm exit를 호출하고 다시 vm entry를 통해 게스트 운영체제로 돌아오기에

 

보통 오버헤드가 아닙니다.

 

VMware 사에서 발표한 논문에 실험 결과를 참고해보면 어느 한쪽이 좋다고 쉽게 단정지을 수 없습니다.

 

하지만 하드웨어 개선을 통해 점점 상태 전환 시 필요 사이클은 줄고 있고

 

하드웨어 지원 가상화는 점점 더 큰 매력을 가지게 되고 있습니다.

 

 

 

가상화에 대해서 간단히 설명해보았는데, 가상화에 대한 이해에 도움이 되었으면 합니다.

 

 

 

참조 자료

 

Intel® Virtualization Technology: Hardware support for efficient processor virtualization

G Neiger, A Santoni, F Leung, D Rodgers, R Uhlig - Intel Technology Journal, 2006

 

A comparison of software and hardware techniques for x86 virtualization

K Adams, O Agesen - ASPLOS, 2006

 

Formal requirements for virtualizable third generation architectures

GJ Popek, RP Goldberg - Communications of the ACM, 1974

 

Virtualization and etc. - Wikipedia

 

 

2010년 1월 3일 일요일

세연이 50일 사진 찍었어요!

안녕하세요. 또 세연이에요.

 

저의 엄마 아빠를 모시고 50일 사진을 찍으러 병점에 있는

 

화이트발란스 스튜디오(수원동탄점)에 갔어요.

 

거기가 50일 사진 무료 이벤트 중이라고

 

엄마 아빠가 여기로 가야한다고 해서 같이 갔어요~

 

아빠가 오늘의 사진사였어요~^^

 

 

곰돌이 같나요?

 

 

이제 여자아이 같죠?

 

 

잘 생겼죠?

 

 

상반신 누드 :$

 

 

이제 이런 자세도 가능해요.!

 

 

어때요? 이쁘죠?

 

 

음악도 들을 줄 안다고요!

 

 

엄마, 아빠가 바구니에 넣었어요.ㅜㅜ

 

 

바구니에 들어가도 음악은 들어요!

 

 

이제 그만 찍어요! 힘들어요!

 

 

안찍을테야!!

 

 

흑흑.. 여기까지만.ㅜㅜ

 

 

힘들었지만, 귀엽고 깜찍한 저를 표현할 수 있는 하루였어요^^

2009년 12월 13일 일요일