2015년 6월 25일 목요일
우분투에서 사용할 만한 동영상 플레이어
얼마전(정확히 말하면... 6월 24일 2015년도)부터 노트북과 데스크탑 환경을 모두 Linux 계열로
모두 바꿔 버렸다. (솔직히 Windows를 쓰는건 우리나라에서는 다른 운영체제 쓰는 것이 문제가 많으니)
하지만 요즘에는 그런 문제가 많다고 하더라도 어느정도 해결이 되는 상황이고
나도 Linux를 많이 사용하다가 보니까 그런 문제 해결에도 어느정도 방법을 알게 되어서
Linux 사용에 부담이 없어졌다. 그래서 모든 운영체제를 Linux 계열로 바꿨는데
익숙해져 있던 Windows에 인터페이스 프로그램들을 사용하는데 한계가 있어서
비슷한 프로그램을 찾아야 한다. 오늘 기록할 프로그램은 동영상 플레이어다.
우분투에서 기본으로 제공되는 플레이어는 구리다. -ㅅ-;;;
그리고 쉽게 설치가 가능한 VLC 플레이어는 기본제공되는 플레이어보다 좋지만
여전히 사용하기에는 불편하다. 그래서 찾은 것이 bomi 라는 플레이어다.
설치 방법은 간단한 편에 속하고 자막파일도 알아서 잘 읽어 오더라.
그런데 이게 아직 개발 중이라나? [출처: http://sergeswin.com/1083]
설치 방법은 명령어 4줄로 끝난다.
sudo apt-add-repository ppa:darklin20/bomi
sudo apt-get update
sudo apt-get install bomi
bomi
사용시 주의사항으로는 동영상 플레이어가 종료되지 않고 트레이로 바뀌는거라
백그라운드에 계속 남아 있다는거 정도? 잘 찾아서 종료하지 않으면
시스템 자원을 잡아먹는 범인이 될 것이다.
2015년 4월 1일 수요일
vmware easy install 없애는 방법
vmware에 ubuntu를 설치하다가 보면 가끔 발생하는 문제가
GUI가 나오지 않고 vmware easy install이 나올 경우가 있다.
이 방법을 해결하기 위해서
$ sudo -s
$ mv /etc/issue.backup /etc/issue
$ mv /etc/rc.local.backup /etc/rc.local
$ mv /opt/vmware-tools-installer/lightdm.conf /etc/init
위의 방법을 다 수행하고
$ reboot
다시 시작을 해주면 GUI 화면을 볼 수 있게 된다.
2015년 3월 5일 목요일
프로그래밍과 영어를 동시에?!?!
인터넷을 보다가 어떤 사람이 비영리로 인터넷 강의를 서비스 한다고 해서 찾아 보았다.
칸 아카데미
근데 재미있던 사실은 마이크로소프트의 빌 게이츠가 재단을 설립해 주었다고 한다.
이유는 자신의 아이들이 이 강의를 보고 공부를 하고 있었고 그걸보고 해주었다고 한다.
근데 이 인터넷 강의에서는 여러 가지 과목이 있는데 그중에 컴퓨터에 관한 과목도 있다.
근데 강사들이 외국사람이기도 하고 다양한 국가에 서비스를 하기 때문에
기본적인 영상의 언어는 영어로 되어 있다. 하지만 걱정은 없을 정도로 자막이 잘 나온다.
영어와 프로그래밍의 기본적인 공부를 하기 위해서 활용하면 좋을 것 같다.
2014년 10월 27일 월요일
역 어셈블(disassemble)을 시도해본다
예전에 공부했던 자료들 중에서 어셈블과 소스코드의 주소와 어셈블 명령을
참조해야 되는 자료가 있는데 자료를 본지 너무 오래 되서 기억도 잘 안나고
그때는 어떻게 했는지 기억도 안나고 그래서 좀 찾다가 보니까 괜찮아 보이는 자료를
찾아서 정리 좀 하려고 합니다.
역 어셈블을 하기 위해서 사용되는 방법은 바로 'objdump' 유틸리티 입니다.
Ubuntu 에서는 objdump는 기본으로 사용할 수 있게 되어 있습니다.
그리고 옵션이 생각보다는 꽤 있죠. 자세하게 알아보시려면 objdump 옵션을 검색해서
찾아 보시면 됩니다. 우리가 사용하는 역 어셈블은 -d 옵션을 사용합니다.
-D 옵션도 역 어셈블을 하는데 전체를 다하기 때문에 소스코드가 긴 경우에는
너무 많이 출력되기 때문에 알아보기 힘들수가 있습니다. 그래서 -d 옵션을 사용하는 것을
추천 드립니다. 그럼 어떻게 사용하는 보겠습니다.
소스 코드는 되게 간단한 Hello World 프로그램을 사용하겠습니다. 자 그럼 이제
소스 코드를 컴파일하고 역 어셈블을 시도해보겠습니다.
컴파일을 할 때는 gcc를 사용합니다. 그리고 두 개의 옵션을 주었습니다.
-c : 링크 파일만 생성 [파일명.o]
-g : 디버그 옵션
두 개의 옵션만 주면 역 어셈블을 수행할 수 있습니다.
자 그럼 objdump로 수행해보겠습니다.
objdump -d [링크파일명]
이렇게 입력을 하면 역 어셈블 내용이 화면에 출력 됩니다.
왼쪽에 있는 부분은 주소와 관련된 부분이고 오른쪽 부분은 어셈블 내용입니다.
그런데 이렇게만 보면 이해하기 어려우니까 옵션을 하나 더 줘보겠습니다.
위와 동일하지만 -S 옵션을 하나 더 주었습니다. (S는 대문자입니다.)
objdump -d -S [링크파일명]
이렇게 하면 어셈블이 나오면서 해당 코드도 같이 표시 되기 때문에
이해하기가 약간은 쉬워집니다. 하지만 저는 여기서 문제가 하나 발생했습니다.
그건 바로! 제가 하는 것은 인텔 계열 프로그램을 역 어셈블 하는 것이 아니고
ARM 계열 소스코드를 역 어셈블 해야 된다는 것이죠.
그래서 저는 방법을 찾으려고 했습니다. 하지만 쉬운 문제는 아니었죠.
하지만 구글신은 여러 가지 방법을 알려주더라고요. 그래서 저는 방법을 찾았습니다.
우선 이것을 하기 위해서는 무언가를 하나 설치해야 됩니다.
$ wget http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/downloads/arm-none-eabi.tar.bz2 --2012-08-16 18:26:29-- http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/downloads/arm-none-eabi.tar.bz2 Resolving www.cl.cam.ac.uk (www.cl.cam.ac.uk)... 128.232.0.20, 2001:630:212:267::80:14 Connecting to www.cl.cam.ac.uk (www.cl.cam.ac.uk)|128.232.0.20|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 32108070 (31M) [application/x-bzip2] Saving to: `arm-none-eabi.tar.bz2' 100%[======================================>] 32,108,070 668K/s in 67s 2012-08-16 18:27:39 (467 KB/s) - `arm-none-eabi.tar.bz2' saved [32108070/32108070] $ tar xjvf arm-none-eabi.tar.bz2 arm-2008q3/arm-none-eabi/ arm-2008q3/arm-none-eabi/lib/ arm-2008q3/arm-none-eabi/lib/libsupc++.a arm-2008q3/arm-none-eabi/lib/libcs3arm.a ... arm-2008q3/share/doc/arm-arm-none-eabi/info/gprof.info arm-2008q3/share/doc/arm-arm-none-eabi/info/cppinternals.info arm-2008q3/share/doc/arm-arm-none-eabi/LICENSE.txt
위와 같이 입력을 해줍니다.
그럼 arm-non-eabi tool chain을 설치하는 것인데요.
raspberry pi 의 tool chain 이니까 없어지지는 않겠죠. 압축을 풀고나서 'arm-2008q3/arm-none-eabi/bin'
위치로 들어가보면 'objdump'가 있을 겁니다.
그럼 PATH 설정하는건 귀찮으니까 적당히 복사해서 사용해 보죠.
적당한 위치에 복사한 objdump에 같은 옵션을 주고 모듈 프로그램의 링크 파일을 역 어셈블 합니다.
그럼 이제 위와 같이 ARM으로 컴파일된 모듈도 역어셈블을 할 수가 있게됩니다.
참 쉽죠잉?
궁금한게 더 있으시다면 덧글이나 메일로 문의를 주세요.
아는대로 답변을 해드리겠습니다. 그럼 오늘은 끝~!
2014년 4월 17일 목요일
안드로이드 NDK 설치(Windows OS) [3]
어제에 이어서 마무리를 향해 달려가 보도록 합시다.
어제까지 환경설정을 위한 SDK와 sygwin, NDK를 설치 & 설정 하였습니다.
오늘은 마무리로 Java에서 .c 파일을 가지고 오는 것과 빌드와 실행을 해보겠습니다.
안드로이드 프로젝트 아래에 있는 src 폴더에 MainActivity.java 코드를 수정해서
jni 폴더에 있는 ndktest.c 파일을 읽을 수 있도록 해보겠습니다.
------------------------MainActivity.java-----------------------------
package sample.ndktest;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
public class MainActivity extends Activity {
// 라이브러리 로드 - Android.mk 이름과 매치
static {
System.loadLibrary("ndktest");
}
// 코드의 함수를 선언 - 반드시 ndktest.c 와 일치
private native String invokeNativeFunction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 코드를 호출
String hello = invokeNativeFunction();
new AlertDialog.Builder(this).setMessage(hello).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
jni 폴더에 있는 ndktest.c 파일을 읽을 수 있도록 해보겠습니다.
------------------------MainActivity.java-----------------------------
package sample.ndktest;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
public class MainActivity extends Activity {
// 라이브러리 로드 - Android.mk 이름과 매치
static {
System.loadLibrary("ndktest");
}
// 코드의 함수를 선언 - 반드시 ndktest.c 와 일치
private native String invokeNativeFunction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 코드를 호출
String hello = invokeNativeFunction();
new AlertDialog.Builder(this).setMessage(hello).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
----------------------------------------------------------------------
MainActivity.java에서 새로 추가한 부분은 진하게 표시 했으니 보기 쉽겠죠.
이제 ndktest.c 파일을 빌드하러 가보겠습니다.
이제 cygwin 터미널을 사용해서 파일 빌드를 해보죠.
파일을 빌드하기 위해서 중요한 것이 있습니다.
1. 안드로이드 프로젝트의 위치
2. ndk-build 파일의 위치
이 두 가지 인데. 안드로이드 프로젝트의 위치는 SDK의 이클립스가 처음 실행될 때
설정하도록 되어 있습니다. 만약 어디로 했는지 모르겠다면
생성한 프로젝트에서 마우스 오른쪽 버튼을 눌러서 'propertise'를 누르게 되면 창이 뜨는데
그곳에 화살표로 가르키는 부분이 안드로이드 프로젝트의 위치 입니다.
ndk-build 파일의 위치는 안드로이드 ndk 압축파일 해제한 위치입니다.
그곳에 화살표로 가르키는 부분이 안드로이드 프로젝트의 위치 입니다.
ndk-build 파일의 위치는 안드로이드 ndk 압축파일 해제한 위치입니다.
--------------------------------- 실행 내용
-------------------------------------
cube@cube-PC /cygdrive/c/IDE/adt-bundle-windows-x86-20131030/workspace/ndktest
$ /cygdrive/c/IDE/android-ndk-r9c/ndk-build
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
[armeabi] Cygwin : Generating dependency file converter script
[armeabi] Compile thumb : ndktest <= ndktest.c
[armeabi] SharedLibrary : libndktest.so
[armeabi] Install : libndktest.so => libs/armeabi/libndktest.so
cube@cube-PC /cygdrive/c/IDE/adt-bundle-windows-x86-20131030/workspace/ndktest
$ /cygdrive/c/IDE/android-ndk-r9c/ndk-build
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
[armeabi] Cygwin : Generating dependency file converter script
[armeabi] Compile thumb : ndktest <= ndktest.c
[armeabi] SharedLibrary : libndktest.so
[armeabi] Install : libndktest.so => libs/armeabi/libndktest.so
--------------------------------------------------------------------------------
제대로 실행이 됐다면 이클립스에 파일이 생성이 되었을 것입니다.
안 보인다면 F5를 눌러서 프로젝트 리소스를 새로고침 해보시고 안되면 다시 파일의 이름과
다른 것들을 확인해 보시기 바랍니다.
이제 파일이 제대로 생성된 분들은 프로젝트를 실행시켜서 제대로 동작하는지 확인해 봅시다.
실행방법은 특별한 것이 없습니다만. 안드로이드 프로젝트에서 마우스 오른쪽 버튼 눌러서
Run As 에 있는 Android Application 을 선택해 줍니다.
(스크린샷이 안되서 부득이하게 글로 대체 합니다.)
다른 것들을 확인해 보시기 바랍니다.
이제 파일이 제대로 생성된 분들은 프로젝트를 실행시켜서 제대로 동작하는지 확인해 봅시다.
실행방법은 특별한 것이 없습니다만. 안드로이드 프로젝트에서 마우스 오른쪽 버튼 눌러서
Run As 에 있는 Android Application 을 선택해 줍니다.
(스크린샷이 안되서 부득이하게 글로 대체 합니다.)
생성했던 안드로이드 프로젝트 이름과 같은 어플이 생긴 것을 확인했습니다.
어플을 실행시켜 줍니다.
어플을 실행시켜 줍니다.
실행하면 화면에 글이 나오는 것을 확인할 수 있습니다.
화면에 나오는 저 글은 jni 폴더에 있는 ndktest.c 코드에 있는 글이 출력되는 것입니다.
더 자세히 어떤 부분이신지 궁금하시다면 스스로 찾아 보시기 바랍니다.
어렵지 않습니다. 여기까지 진행하셨다면 수정은 쉬울테니까 저는 이만 하도록 하겠습니다.
이건 NDK 설치에 대한 문서이기 때문에 더 자세한 것은 나중에 또 공부해야 겠네요.
그럼 저는 내일 다른 내용을 가지고 올 수 있겠네요. 그럼 수고하셨습니다.
화면에 나오는 저 글은 jni 폴더에 있는 ndktest.c 코드에 있는 글이 출력되는 것입니다.
더 자세히 어떤 부분이신지 궁금하시다면 스스로 찾아 보시기 바랍니다.
어렵지 않습니다. 여기까지 진행하셨다면 수정은 쉬울테니까 저는 이만 하도록 하겠습니다.
이건 NDK 설치에 대한 문서이기 때문에 더 자세한 것은 나중에 또 공부해야 겠네요.
그럼 저는 내일 다른 내용을 가지고 올 수 있겠네요. 그럼 수고하셨습니다.
피드 구독하기:
글 (Atom)





