2012의 게시물 표시

우분투(리눅스)에서 넥서스7 이용하기

안드로이드 3.X 버전부터인가 저장장치의 인식 방식이 MTP로 바뀌었다. 하지만 MTP가 윈도우에서 지원하는 방식이라나 뭐라나 해서 우분투 등의 리눅스 이용자들은 안드로이드 단말기를 이용하는데 많은 어려움을 겪게 되었다. 하지만 아래의 방법을 이용하면 손 쉽게 MTP를 이용할 수 있다. 방법의 설명은 우분투 사용자를 위한 저장소를 이용한 벙법, 그리고 다른 리눅스 배포판에서 이용가능한 벙법 순으로 하겠다. 참조:  http://maketecheasier.com/connect-nexus-7-to-ubuntu/2012/12/27 우분투에서 설치 >> 1. 새로운 저장소 등록   # add-apt-repository ppa:webupd8team/unstable 2. 목록 업데이트   # apt-get update 3. go-mtpfs 설치   # apt-get install go-mtpfs 일반적인 리눅스에서 설치 방법 >>   $ sudo apt-get install golang fuse git-core libmtp-dev libfuse-dev   $ sudo adduser $USER fuse   $ mkdir /tmp/go   GOPATH=/tmp/go go get github.com/hanwen/go-go-mtpfs   $ sudo mv /tmp/go/bin/go-mtpfs /usr/bin/ 이용방법 >> 1. MTP 마운트에 이용할 디렉토리 생성.   $ mkdir Android 2. go-mtpfs를 이용한 MTP 마운트   $ go-mtpfs Android 3. 안드로이드 단말기 패턴, 비번 등 unlock 4. Android 디렉토리에서 저장소 이용 주의점 >> 단말기를 해제하기 전에 언마운트 과정이 필요하다.   $ fusermount -u Android

우분투를 프록시 서버로 설정하기

이미 졸업하여 논문을 꼭 봐야할 상황에서는 벗어났지만 습관이 무서운 것인지 궁금한 것이 있을때면 잘 정리된 논문을 찾고는 한다. 하지만 유명한 논문 데이터베이스를 이용하기 위해서는 금전적 지출이 너무 커지게 된다. 때문에 꼼수를 부려봤는데, 졸업 전 연구실에 서버를 구축해놨던 것이 생각나 프록시 서버로 이용하기로 했다. 프록시 서버를 이용하면 다음과 같은 구조로 네트워크가 동작하게 된다. ============ 기존의 흐름 구성 ==================== 호스트(내 PC)  ------  게이트웨이 ------  네이버                                                              +--  다음                                                              +--  구글                                                              +--  기타 등등 ============================================ ============ 바뀐 구성 ========================= 호스트(내 PC)  ------  게이트웨이 ------  프록시서버  ------  네이버                                                                                             +--  다음                                                                                             +--  구글                                                                                             +--  기타 등등 ==========================

우분투(리눅스) 커널 컴파일 방법(과정)

예전에 작성해뒀던 자료가 생각이나 이곳에 복사합니다. ------------------------------------------------------- # kernel compile basic solution     1. Download kernel source from  http://www.kernel.org     2. decompress file     3. input command  $ cd linux-[version]     4. $ make menuconfig     5. $ make     6. $ make modules_install     7. $ make install     8. chang directory to /boot     9. $ mkinitramfs -o initrd.img-[version] [version]     10. $ update-grub   or   edit grub ( $ gedit /boot/grub/menu.lst )     11. reboot your system     최근 이용되는 방법 가운데 리눅스 커널을 컴파일 하기 위한 가장 기본적인 과정입니다. 위에 기술된 과정 가운데 일부는 현재 이용하는 배포판의 종류에 따라 이용 불가능한 부분도 있을것입니다. (위의 것은 우분투 기준입니다.) 그리고 작업 환경의 차이에 따라 error 나는 경우도 발생할 수 있습니다. 그러나 error를 해결하기 위한 솔루션을 찾는 과정에서 얻어지는 것이 많을 것이라 믿기에 자세히 기록하지 않았습니다. 아무런 문제 없이 성공하시는 분들도 다수 계실것입니다. 이분들은 error 없이 compile이 성공했다고 끝낼것이 아니라 각각이 의미하는것이 무엇인지 알아볼것을 권합니다. 그래야 수업과정에서 나타나는 갑작스런 문제에 대처하실 수 있을것입니다. 덧붙이자면, 영문을 읽는것이 익숙해질것을 권장합니다. google에서 자료를 찾다보면 그 이유를 자연스레 아시게 될 것입니다.

우분투 12.10 업데이트 후 발생하는 와이파이 문제 해결 방법

우분투(ubuntu) 12.10 버전을 새로 설치 후 눈에 띄는 성능 향상에 즐거워하며 업데이트를 하였는데 무선랜(와이파이 - wifi)이 동작을 하지 않는다. 인터넷에서 검색해보니 나만의 문제가 아닌 브로드컴(broadcom) 계열 무선 랜카드를 이용하는 다수에게서 발견되는 것이었다. 해결 방법은 아래와 같이 간단하다.  1. 우선 네트워크에 접속할 필요가 있으니 유선 랜 케이블을 연결하든지, 아니면 현재 올려져 있는 와이파이 드라이버를 내리고 테더링을 이용하든지 해야 한다.  # sudo apt-get remove bcmwl-kernel-source      : 와이파이 드라이버 제거 방법  # sudo reboot                                                               : 재부팅 와이파이 드라이버를 제거하면 불안정하기는 하지만 매우 근거리에 있는 신호는 인식한다. 스마트폰 테더링을 이용하든지 공유기 근처로 가든지 해서 일단은 네트워크에 접속해야 한다. 2. 네트워크에 접속했다면 아래의 명령들을 입력한다.  # sudo apt-get install linux-headers-generic  # sudo apt-get install  bcmwl-kernel-source  # reboot 재부팅을 해보면 와이파이가 제대로 동작하는 것을 확인할 수 있을 것이다. 참고로 현재 사용하고 있는 무선 랜카드 종류에 따라 결과가 다를 수도 있으며, 본인의 랜카드는  BCM4313 이다. ( lspci 명령으로 확인 가능하다.)

페도라(Fedora) 또는 CentOS에서 rpm 패키지 설치시 의존성 문제 해결하기

rpm도 그렇고 deb도 그렇고 실제 시스템에 설치하기 위해서는 의존성 문제에 부딫히게 된다. 이러한 문제를 해결해주고 좀 더 편리함을 위해 yum 이나 apt-get을 제공해주지만 해당 저장소에서 지원해주지 않는 패키지의 설치시에는 이용이 불가하다.   이럴땐 rpm 또는 dpkg 명령어를 이용해 설치하게 되는데 거의 대부분 의존성 문제에 걸리게 된다. 이때 의존성 문제를 해결하기 위한 방법을 설명한다.   방법에는 크게 두가지가 있다. rpmdb를 이용하는 방법과 yum을 이용하는 방법.   rpm을 이용하는 이유가 yum 저장소에서 제공해주지 않는 패키지를 설치하기 위한것인데 yum을 이용하라는 것에 의문을 가질 수 있을 것이다. yum은 온라인 저장소에서 패키지를 가져와 설치하는 기능 외에 rpm 패키지를 설치할 때 의존성을 자동으로 해결해주는 기능도 함께 제공한다. 이용 방법은 아래와 같다. # yum localinstall XXXXX.rpm   리눅스용 네이트온을 예로 들어 설명하자면, nateon을 설치하기 위해서는 kde와 관련한 라이브러리들을 설치해줘야 한다. 이때 위의 방법을 이용하면 편리하게 설치가 가능하다.   하지만 한가지 문제가 더 발생할 수 있다. 그것은 패키지 서명에 관한 것인데, 관련 정보가 기입되어 있지 않을 경우에는 불안전 요소로 인식하여 설치를 거부할 수 있다. 이때 표시되는 메시지는 다음과같다. Package nateon-1.1.0-301.i386.rpm is not signed   이 문제는 한가지 옵션의 기입만으로 간단하게 해결이 가능하다. 다음과 같이 이용하면 된다. # yum localinstall --nogpgcheck XXXXX.rpm   이제 의존성 문제를 쉽게 해결할 수 있을 것이다.

Fedora, CentOS에서 이용되는 yum을 위한 자동완성 사용하기

 우분투는 다른 배포판들과 비교했을때 철저히 일반 사용자들을 고려하여 만들어졌다고 할 수 있다. 때문에 다른 것들과 비교해 편리하게 이용할 수 있는 몇몇 기능들이 있는데 터미널을 이용한 패키지 설치시 이용할 수 있는 자동완성 기능도 그 중에 하나다.  우분투 사용자들은 터미널 상에서 패키지를 설치할 때 흔히 'apt-get install' 을 이용하게 되는데, 패키지의 완전한 이름을 모르더라도 탭(tab) 키를 이용하면 자동완성부터 유사 목록을 출력하여 손쉽게 패키지명을 완성할 수 있다. 하지만 다른 배포판에서는 이것을 기본적으로 제공하지 않는다.  본 글에서는 'yum install'을 이용할 때 탭키를 이용해 자동완성하는 기능을 이용하는 방법을 설명한다. (참조한 링크:  http://www.if-not-true-then-false.com/2011/yum-autocomplete-on-fedora-centos-red-hat-rhel/ ) Step 1. root 권한 획득  $ su root Step 2. bash-completion을 설치한다.  # yum install bash-completion Step 3. 현재 이용중인 터미널을 닫고 새로운 터미널을 연다. Step 4. 자동완성 기능을 이용한다.  # yum inst[탭키][탭키]  # yum install fire[탭키][탭키]  이제 yum을 이용할때 자동완성 기능을 이용할 수 있다. 방법 참 간단하다.

Java의 volatile 키워드에 대한 이해

아래의 내용은 블로그  http://tomowind.egloos.com/4571673  에서 가저온 것입니다. =============================================================================== volatile이란 단어의 뜻은 "변덕스러운"이다. 다시 말하자면 "자주 변할 수 있다"로 생각할 수 있다.  프로그래밍 언어에서는 정의 는 언어와 버전마다 다르지만, 대충은 "자주 변할 수 있는 놈이니 있는 그대로 잘 가져다써"정도로 생각을 하면 되겠다. 조금 더 엄밀히 정의를 하자면, (1) 특정 최적화에 주의해라, (2) 멀티 쓰레드 환경에서 주의해라, 정도의 의미를 준다고 보면 된다. Java에서는 어떤 의미를 가질까? volatile을 사용한 것과 하지 않은것의 차이는 뭘까? volatile의 버전마다의 차이는 뭘까? synchronization과 volatile의 차이는 뭘까? 이 의문들에 대해서 정리한 것은 다음과 같다. volatile을 사용하지 않은 변수 : 마구 최적화가 될 수 있다. 재배치(reordering)이 될 수있고, 실행중 값이 캐쉬에 있을 수 있다. volatile을 사용한 변수 (1.5미만) : 그 변수 자체에 대해서는 최신의 값이 읽히거나 쓰여진다. volatile을 사용한 변수 (1.5이상) : 변수 접근까지에 대해 모든 변수들의 상황이 업데이트 되고, 변수가 업데이트된다. synchronziation을 사용한 연산 : synch블락 전까지의 모든 연산이 업데이트 되고, synch안의 연산이 업데이트된다. 무슨 말인지 전혀 모를 수 있다. 앞으로 예제를 들면서 이해를 시켜보도록 노력하겠다. 첫 예제는  Jeremy의 블로그 에서 가져온다. 나는 위의 4가지의 경우를 완전히 정립하지 못한 상태에서 봐서 이 예제의 설명이 모호했다고 느꼈다. 블로그의 설명을 보고 내 설명을 보면 이해가 더 될지도 모르겠다.

우분투(리눅스)에서 이클립스를 이용한 안드로이드 개발시 단말기 인식 문제 해결 방법

안드로이드 어플리케이션을 계발하기 위해서 에뮬레이터를 이용하는 방법이 있지만 좀 더 쾌적한 환경에서 테스트하기 위해 실제 단말기를 많이 이용한다. 하지만 우분투(리눅스) 환경에서 단말기를 연결할 경우 몇몇 특정 모델 또는 특정 경우에 단말기를 인식하기 못하는 문제가 발생할 수 있다. 이럴때는 대부분 단말기의 시리얼 정보레 "???????" 등으로 표기된다. 이러한 문제를 해결하기 위한 방법을 간단히 설명한다. 우선 리눅스 환경에서 안드로이드를 정상적으로 계발하기 위해서는 SDK 에서 제공하는  adb를 정상적으로 접근이 가능해야 한다. 이는 이클립스가 스스로 adb가 저장된 위치로 찾아가야 한다는 것인데 PATH를 설정하여 해결가능하다. 터미널을 열고 1. sudo -s 2. vi /etc/profile 3. 맨 아래에 export PATH=$PATH:(SDK위치)/platform-tools 기입하고 저장     (예. /home/XXX/android-sdk-linux/platform-tools) 4. source /etc/profile 위의 과정을 정상적으로 마치면 터미널에서 adb 를 실행하였을때 옵션에 대한 설명을 볼 수 있게 된다. 이 상태에서 이클립스를 실행한 후 임의의 프로젝트를 생성하여 실행해본다. 아직까지도 단말기가 정상적으로 인식되지 않는다면 터미널을 연 후 아래의 과정을 따른다. 1. sudo -s 2. adb kill-server 3. adb devices 위의 과정으로 마치면 터미널 상에서 단말기에 대한 정보를 확인할 수 있을 것이다. 이제 이클립스에서 정상적으로 단말기를 이용한 실행이 가능할 것이다.

재미삼아 만들어본 Double Linked List (이중 연결 리스트)

역시 이론으로 알고있는 것과 실제로 경험해보는 것은 큰 차이가 있다는 것을 실감. 구현하는 것은 어렵지 않았으나, 사소한 것 하나하나에 대한 궁금증이 태어남. 대표적인 것이 "Double pointer(다중 포인터)를 왜 사용하는가?"의 질문. 이에 대한 답은 지역변수의 특징과 관련이 있다는 것을 파악. 지역변수는 함수가 리턴하는 순간 함수와 함께 사라진다는 특징이 있음. 함수에 전달하는 매개변수가 포인터라 하더라도 결국은 지역변수와 비슷한 성격을 보임. 포인터 매개변수는 주소를 전달받아 그것을 가리키는 포인터로 이용한다는 특징이 있을뿐 이외에 것은 일반 변수와 같음. 잡설을 그만두고 코드를 까보자. 코드는 리스트와 테스트로 구분되있다. <이중 연결 리스트> -- list.h -- #define true 1 #define false -1 typedef struct _node { int data; struct _node* prev; struct _node* next; } node; typedef struct d_linked_list { node* head; node* tail; int count; int sorted; } d_linked_list; void del_list(d_linked_list* _list); void ins_data(int _data, d_linked_list** _list); node* search_data(int _data, d_linked_list* _list); int del_data(int _data, d_linked_list* _list); void show_all(d_linked_list* _list); -- list.c -- #include #include #include "list.h" void init_list(int _data, d_linked_list** _list) {

GDB 사용법

*참조도서: "유닉스 리눅스 프로그래밍 필수 유틸리티" GDB 사용 방법 <<실행>> GDB를 이용하기 위해서는 컴파일 과정에서 디버깅 정보를 삽입해야 한다.     컴파일 시 옵션 'g' 이용     $ gcc -g -o main main.c 컴파일이 정상 종료 되면 GDB를 실행한다.     gdb [프로그램명]     $ gdb main     gdb [프로그램명] [프로세스PID]     $ gdb main 1928 GDB가 정상 실행되면 터미널의 프롬프트가 (gdb)로 바뀌게 된다. <<종료>> 종료방법에는 크게 두가지가 있다.     ctrl + d     (gdb) q     (gdb) quit <<소스보기>> 옵션에 따라 실행중인 프로그램의 소스를 다양한 방법으로 볼 수 있다.     l(list)     list 10     list [함수명]     list -  //이전 10라인을 출력한다.     list [파일명]:[함수명]     list [파일명]:10 list 명령어를 사용하면 소스코드가 10줄 단위로 출력된다. 다음의 명령을 통해 출력단위를 변경할 수 있다.     set listsize 20 <<세그멘테이션 폴트가 발생했을대>> 컴파일한 프로그램을 실행했을때 segmentation fault 가 발생하여 비정상 종료되었다면 다음의 명령어를 통해 오류 지점을 확인할 수 있다.     (gdb) r(run) run 명령어는 GDB가 프로그램을 실행시켜 이상이 발생했을때의 파일과 지점을 출력해준다. 또한 관련 함수 또는 변수에 담긴 값을 출력하여 오류수정에 많은 도움을 준다. 오류 지점에 도달하기 전 과정을 확인하기 위해서는 다음 명령어를 이용하면 된다.     (gdb) bt bt명령어는 백트레이스로 프로그램 스택을 역

주분투(우분투) 리눅스에서 CUDA 환경 설정하기.

간단한 CUDA 컴파일 테스트를 하여 정상적으로 동작하는 필자의 현재 환경은 다음과 같다. - xubuntu 11.10 64bit - Nvidia 그래픽 드라이버 설치 (듀얼모니터 이용중) - CUDA 툴킷 4.1  (ubuntu 11.04 64bit 용 ) - gcc 4.4.6 - g++ 4.4.6 CUDA 환경 설치에 앞서 자신의 그래픽 카드가 CUDA를 지원하는지 확인한다. CUDA를 지원한다면 nvidia의 그래픽 카드를 설치한다. 그래픽카드 드라이버를 정상적으로 설치했다면, CUDA 툴킷을 다운로드받는다. (위의 링크 또는 nvidia developer zone에서 받으면 된다.) 다운받은 파일의 확장명은 'run'인데 설치는 터미널에서 sh명령어를 이용하면 된다.     'sh cudatoolkit_4.1.28_linux_64_ubuntu11.04.run'     (당연히 root 권한이 있어야한다.) 설치하는 과정에서 path를 몇번인가 물을텐데 그냥 enter를 누르면 된다. (대부분의 경우 default path가 좋다.) 설치를 완료하면 컴파일러를 좀더 쉽게 이용하기 위해 bash 스크립트를 수정한다.     vi ~/.bashrc 맨 아랫줄에 다음을 입력     export PATH     export PATH=/usr/local/cuda/bin:$PATH     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/lib64:$LD_LIBRARY_PATH 파일을 저장하고 빠져나와 다음을 입력     source .bashrc 다음 명령어를 입력하여 path 설정이 올바르게 됬는지 확인.     'nvcc --version' nvcc의 버전이 올바르게 나온다면 제대로 된 것임. 샘플코드를 이용하여 컴파일 해 봄으로써 nvcc를 알게되겠지만 대부분의 리눅스 배포판은 gcc와 g++의 최신에 가까운 버전을 탑재하여

윈도우 CMD(명령 프롬프트)에서 'ls' 이용하기

리눅스 터미널의 BASH는 강력한 성능을 제공한다. 때문에 리눅스를 사용하다가 윈로우로 넘어오니 터미널이 그리워 cmd를 이용해보려하지만 터미널의 'ls'명령어가 나도모르게 튀어나온다. 이럴때는 'dir'키를 'ls'키로 이용하겠고 정의해주면 되는데 "doskey ls = dir" 처럼 입력해주면 된다. 아주 쉽게 ls가 dir 처럼 동작한다.

쿠분투(kubuntu)에서 vnc 서버 열기

우분투와 달리 쿠분투는 vnc server를 기본 내장하지 않아 사용자가 별도로 설치해야한다. "krfb" 패키지를 이용하면 쉽게 설치할 수 있다.     apt-get install krfb 설치가 완료되면 메뉴의 "인터넷" 또는 "시스템"에서 krfb(데스크톱 공유)"를 확인할 수 있다.

kubuntu에서 한글입력이 안되는 문제 해결

KDE를 이용하는 쿠분투는 우분투에 비해 약간의 불안정함을 보여준다. 그럼에도 불구하고 필자는 우분투의 유니티에 불편함이 더 크게 느껴져 쿠분투로 넘어오게 됐다. 각설하고, 쿠분투 11.10을 설치하고 보니 한글입력이 제대로 되지 않았다. 이를 해결하기 위해 여러 방안을 찾아본 결과를 포스팅하겠다. 단계 1. 한글입력기 "nabi"를 설치해준다.     sudo apt-get install nabi 단계 2. 시스템언어를 변경해준다.     시스템설정 -> local(로캘) -> "시스템 나라말"에서 한국어 설치     시스템 언어 설정 탭에서 "한국어" 선택 & 키보드 입력 방식 nabi 선택 단계 3. 편집기를 이용한 편집     터미널에서 "vi ~/.xinput.d/kd_KR" 입력     입력된 내용들 아래에 "QT_IM_MODULE=xim" 입력 단계 4. 재로그인 또는 재부팅 위의 과정을 그대로 하면 한글 입력이 정상적으로 이루어지게 된다.

[펌] C++ STL 설명.

최홍배님이 한빛미디어 사이트에 게제한 것으로, STL을 이해하기 쉽도록 풀어 써주셧다. About STL : C++ STL 프로그래밍(1) About STL : C++ STL 프로그래밍(2-1) About STL : C++ STL 프로그래밍(2-2) About STL : C++ STL 프로그래밍(3) About STL : C++ STL 프로그래밍(4) About STL : C++ STL 프로그래밍(5-1) About STL : C++ STL 프로그래밍(5-2) About STL : C++ STL 프로그래밍(6) About STL : C++ STL 프로그래밍(7) About STL : C++ STL 프로그래밍(8) About STL : C++ STL 프로그래밍(9) About STL : C++ STL 프로그래밍(10) 원본 사이트 :  http://jacking.tistory.com/491

주분투(xubuntu) 듀얼 모니터 설정

주분투와 루분투는 저사양 피씨 환경을 위해 개발된 그래픽 환경으로 gnome이나 KDE 등을 쓰는 다른 배포판들과는 달리 듀얼 모니터 설정이 잘 되니 않는다. (내가 모르는 것일 수도...) 해서 인터넷을 찾아보았으나 이렇다 할 솔루션을 찾지못해, 영어로 검색을 해보니 아주 쓸만한(마음에 쏙 드는) 방법을 찾아냈다. 우분투 저장소를 통해 설치할 수 있는 프로그램으로 다중 모니터의 설정을 손쉽게 할 수 있도록 도와주는 "grandr" 이라는 것이 있었다. ("grander"아니다. 'e'가 없다.)      apt-get install grandr "grandr"을 설치하고 나면 메인 메뉴의 시스템 밑에 바로가기 아이콘이 위치하게 되는데 프로그램을 실행하고나면, 아~! 이렇게 설정하면 되겠구나 할 정도로 이용방법은 간단하다.