인터넷에서 JAVA 프로그래밍에 대한 예제를 찾아서 막상 컴파일 해 보면 안되는 경우가 허다 할 것이다.

그 요인은 전체적으로 두 가지 요인으로 볼 수 있는데

하나는 소스 구성이 이전 버전으로 구성 되어 있는 것이며

또 하나는 파일의 인코딩이 다르기 때문이다.

먼저 인코딩을 설명 한다면 JAVAC(JAVA 컴파일러)는 기본적으로 UTF-8을 우선적으로 지원하기 때문이다.

만일, 해당 소스 파일이 'EUC-KR'로 되어 있다면 JAVAC가 인식하지 못하면서 컴파일에 실패 한다.

먼저 만약 소스 코드 구성은 최신 버전에 맞지만 인코딩만 다를 경우를 컴파일을 시도해 보자.


< 해당 'a.java' 소스 파일이 'EUC-KR'인코딩일 경우 >

$ JAVAC -encoding euc-kr a.java
        (euc-kr : 인코딩 지정)

< 컴파일에 성공했는지 확인해 본다. >

$ ls

a.java a.class




< 이번에는 이전 버전의 소스코드와 인코딩이 다른 경우 두가지를 모두 포함하고 있는 경우를 해결해 볼 것이다. >


그러는 이유는 이 방법에는 순서가 있기 때문이다.


물론 프로그래머 스스로가 소스를 수정하여 해결할수도 있겠지만 javac는 이전 버전의 소스 형식도 잡아주는 기능이 있기 때문에 그것을 최대한 활용 하는 것이 훨씬 더 수월 할 것이다.


그리고 이번에는 본 필자가 소스 파일을 제공해 줄 것이다.


a.java


< 위의 파일을 직접 다운 받거나 본 블로그에서 제공하는 예제 파일을 터미널에서 wget을 활용하여 원하는 폴더에  다운로드 한다. >

$ wget http://cosmosproject2015.tistory.com/attachment/cfile21.uf@246C454257AD51422E2D22.java -O a.java


// 받은 파일을 a.java로 변경한다.

< 다운로드 되었는지 확인한다.>


$ ls


a.java


< 먼저 해당 java 파일에 대한 타겟 버전을 설정한다. >

$ javac -target 1.4 a.java
       (타겟 옵션 : 버전 1.4)

javac: target release 1.4 conflicts with default source release 1.9

    * 현재 버전 1.9에 의해 1.4 문제를 타겟 배포 했다는 문구가 출력 된다.

< 이제 인코딩과 컴파일을 같이 실행한다. > >>

$ javac -encoding euc-kr a.java

< 실행해 본다. > >

$ java a


Hello World
성공했습니다!


* 위와 같이 나온다면 성공한 것이다.


도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         




오렌지파이는 라즈베리파이 대항마격으로 중국에서 출시된 개발용 임베디드 기기 시리즈 이다.

물론 임베디드 기기 활용에 있어서 자체 중국인들 보다는 우리나라와 미국쪽 소비자들이 많은 것으로 추정된다. 

우리나라에서도 15,000원 정도면 '오렌지파이 제로'를 구입할수가 있다. 

제로는 칩형태의 오메가 시리즈를 제외한 세계에서 가장 저가형 미니 PC이다. 

하지만 무시할수 없는 것은 쿼드코어로 동작한다는 점, wifi와 lan통신 모듈을 둘다 지원 한다는 점.

스펙으로 보기에는 가장 최대 가성비를 가지고 있는 듯해 보이지만 아쉽게도 본 제품에는 많은 결점이 있다.

 

 
하지만 랜케이블을 연결하여야 완벽히 동작한다는 점, 전원 부족 문제 때문인지 wifi 송수신이 상당히 약하다는 점,

물론 GPIO는 제대로 동작하지만 해당 gpio를 통제하기 위한 메인 소스 프로젝트가 부족하다는 점,

하지만 굳이 모니터 연결 없이 SSH등 원격제어를 통하여 GPIO를 컨트롤 할 수 있는 작고 간편한 익사이팅한 구조는 매우 매력적이며 또 sdcard 슬롯또한 스프링 방식 이기에 안정감이 있다. 물론 비디오 포트등을 연결할수 있는 핀도 있는 것도 나름 혁신적이라고 볼수가 있다.    

오렌지파이 파이썬 GPIO 프로젝트의 활용은 다음에 포스팅할 계획이다.

 뿐만 아니라 데스슬립의 자주 발생 한다는 점이 해당 제품이 가지고 있는 가장 큰 결점인지도 모른다.

물론 '제로'의 상위 버전들이 나왔지만  현재 우리나라에서는 구하기가 쉽지가 않다. 

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         





wine을 기본 설치 하는 방법에 대하여 알아보자.


우선 그 순서를 먼저 나열 하자면


WINE 설치 순서


1. 기본 레파시토리에 있는 wine을 우선 설치 한다. (우선 기본적으로 1.6 버전이 설치될 것이다.)

2. wine을 32비트로 재구성한다.

3. winecfg 명령으로 wine을 라이브러리를 본격적으로 구성된다. (/home/user/.wine 폴더 생성됨) -> win7으로 설정 변경 추천

4. winetricks로 설치 가능한 라이브러리들을 설치한다.




하지만 먼저 그 이전에 wine이 설치 되어 있다면 그것을 삭제하고 기존 폴더도 같이 삭제 해야 한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

//  wine을 삭제한다.


root@test:~$ sudo apt-get purge wine*



//  wine 폴더를 삭제한다.


root@test:~$ rm -rf ~/.wine








1. 레파시토리 ppa를 새로 등록하고 업데이트 하고 wine 최신 버전을 설치한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ sudo add-apt-repository ppa:ubuntu-wine/ppa


root@test:~$ sudo apt-get update


root@test:~$ sudo apt-get install wine1.8





2. wine을 32비트로 재구성한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 변수지정을 ~/.bashrc에 등록하여 소스 리로딩 한다.


root@test:~$ echo "export WINEARCH=win32" >> ~/.bashrc



root@test:~$ source ~/.bashrc


-> bashrc 소스 리로딩




3. wine cfg 명령으로 wine을 라이브러리를 본격적으로 구성된다.

(/home/user/.wine 폴더 생성됨) -> win7우로 설정 변경 추천


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ winecfg


-> 라이브러리를 구성하는 gui가 나타난다.
wine 구성 프론트엔드가 뜨고 'mono' 설치와 'gecko' 설치가 뜬다. 두개 다 각각 설치하면 wine구성이 완료되고

wine 환경설정을 하는 winecfg 프론트엔드가




// 가장 먼저 '닷넷 프레임 워크 2.0'을 설치해 준다.
root@test:~$ winetricks dotnet20



4. winetricks로 설치 가능한 라이브러리들을 설치한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



root@test:~$ winetricks 7zip flash comctl32 corefonts d3dcompiler_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9 d3dx9_26 d3dx9_28 d3dx9_31 d3dx9_35 d3dx9_36 d3dx9_39 d3dx9_42 d3dx9_43 d3dxof devenum directmusic directplay directx9 dmsynth  dsound dxdiag dxdiagn dxsdk_jun2010 dxsdk_nov2006 ie8 mfc42 msls31 msvcirt ogg physx quartz vcrun2008 vcrun2010 vcrun6 vcrun6sp6 xact xact_jun2010


-> 라이브러리들 설치가 끝나면 winecfg 를 실행하여 라이브러리 내장을 확인한다.







도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


솔직히 원자력발전은 미래 에너지 자원 대책이 아닌 것은 명백한 사실이다.

원자력이 '꺼지지 않는 불' 이라고 말하자만 위험대비 핵폐기물에 대한 관리비용대비 실질적인 가성비적 전력효율은 사상 최악이다.

한수원 이사회는 고리원전 5,6호기 추가 건설을 도중 중단 했다.

그로인해 원자력노조와 심한 마찰이 빚어질 것으로 예상 될 수도 있겠지만 그만큼 대안 대책이 필요한 것이 사실이다.

필자는 개인적으로... 5,6 호기 고리원전 건설단지에 '핵융합 발전 설비'를 구축 하는 것이 어떨까 한다.

핵융합 발전은 바다에서 얼마든지 얻을수 있는 에너지인 수소와 헬륨을 그 원료로써 기본으로 하며 그로인해 거의 무한적인 에너지 자원을 가질 뿐만 아니라 투자대비 전겨생산 효율이 인류 역사상 가장 뛰어나다.

하지만 아직까지는 실험단계이며 우리나라는 kstar 프로젝트를 통하여 핵융합 발전에 진전 상태에 다달았으며 수 초 가동 시키는 데에 여러번 성공할 수가 있었다.

물론 아직 까지는 실험 단계 이기 때문에 국제기구가 나서는 방식인 ITER(국제 핵융합 실험로)에서 차기 발전 기술이 이루어 지고 있다.

그래서 필자는 바닷물을 자원으로 하는 핵융합 발전 기술과 동시에 해수 담수화 기술을 융합 하는 단지를 조성하는 것이 바람직하다고 생각한다.

핵융합은 원자력 방식과 다르기 때문에 방사능이 거의 전무 하다. 그렇기에 동시에 그 열원 만으로 해수 담수화를 결합 한다면 동시에 부족한 수자원 문제도 해결 할수도 있을 것이라고 생각한다.
    
뿐만 아니라 빠른 결단으로 말미앎아 많은 원자력 관련 노동자들의 실업 문제 또한 동시에 해결 할수 있을수도 있다고 판단한다.

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         



사실 솔직히 말하자면 이 문제는 사회 체제 즉 시스템의 문제가 아니라고 본다.

교육에 문제가 있다고 본다.


만약 자신이 상대방 보다 유리한 위치에 있으면 불리한 자를 위하여 배풀줄 알아야 한다. 

그것은 어른이 성장기인 어린아이를 당연히 돕는 것과 같은 이치 이다.

물은 물리적으로 아래로 흐르기 마련이고 그래야 생태계가 돌아가며 

마찬가지 실질 사회 에서도 기운은 아래로 흘러야 사회가 정상적으로 돌아간다.


하지만 현 대한민국 사회는 물이 거꾸로 솟아 오르기 바라는 기상천외한 사회 방식에 기대고 있다.

모든 거래의 원칙은 '덕'을 기본으로 한다. 

사실 마진은 '덕' 그 자체이며 '덕'을 얹어 주는 것이나 마찬가지 인 셈이다.

즉 모든 거래는 덕을 서로 주고 받는 것을 의미 하는데... 이것을 간과 하거나 기만하는 것은 경제 생태계를 크게 아프게 하고 파괴 하는 것이나 마찬가지 인 셈이다.

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         




[ 소프트웨어 개발 & 배포 ] 

[Name]   


ldic


[ Section ]   


util


[ Version - 날짜]


0.3-1


[ 지원 아키텍쳐 ]   


x86_64, i386, armhf, arm64


[ 지원 운영체제 ]   


Linux_debian_ubuntu : artful, zesty, yaketty, xenial, wily, vivid, trusty, preceis, linux mint.....


[ 빌드 & 컴파일러 ]


bash


[ 의존 패키지 ]




[ 설명 ]   


본 프로그램은 리눅스 시스템을 다루기 위한 기본 사전 및 개발자들을 위한 프로그래밍 언어 사전을 로드 하고 사용자 사전을 구성하는 데에
그 목적을 두고 있습니다.


[ 특징 및 변경 사항 : Changes log ]   


  * Source upgrade.    (소스 업그레이드)
  * Source bugs fix.    (버그 수정)
  * Trashes librarys deleted.    (필요 없는 라이브러리 삭제)
  * Hangul print added.    (한글 출력 추가)
  * Other file add option added.    (다른 파일 입력 추가)
  * Other file possible sync.    (다른 파일 연동 가능)


[ 개발자 ]


C O S M O S project.


site: http://cosmosproject2015.tistory.com


e-mail : cosmosproject15@gmail.com


[ 설치 방법 ]   



<PPA 등록>          user@user~$
<아키브 업데이트> user@user~$
<패키지 인스톨>    user@user~$

sudo apt-add-repository ppa:cosmosp2016/apps
sudo apt-get update
sudo apt install ldic




[실행]   


 user@user~$

ldic





[사용 방법]



 user@user~$

ldic --help


         << LDIC : Linux - dictionary >>

본 프로그램은 리눅스 일반 사용자 및 개발자들의 도움을 위하여 만들었습니다.

'ldic은 utf-8 인코딩과 한글 검색을 지향 합니다.'

Version : 0.3

1. ldic 명령과 함께 바로 원하는 답을 찾을 수 있습니다.
    (모든 라이브러리를 검색 합니다.)

    예제 1) : ldic <word> 
   
    예제 2) : ldic <word> <word>
       
        = 두가지 단어가 있는 경우만을 출력 합니다. (최대 다섯가지 단업 입력이 가능 합니다.)

    예제 3) : ldic --help
        = ldic의 좀 더 자세한 도움말을 봅니다.

2. 아래 옵션으로 검색하면 해당 라이브러리에서만 찾을수 있습니다.

    -b : bash 쉘 스크립트 및 유닉스 명령 및 각종 프로그램 특수 명령 라이브러리
    -s : 소프트웨어 ppa 및 각종 uri 검색
    -c : C 언어 프로그래밍 라이브러리
    -P : 파이썬 프로그래밍 라이브러리
    -h : Html 스크립트 라이브러리 (자바 스크립트 포함)
    -j : 자바 프로그래밍 라이브러리
    -a : android 개발 프로그래밍 라이브러리
    -l : lazarus de 파스칼 프로그래밍 라이브러리


        예제 2) : ldic -b
            = 모든 bash 쉘 스크립트 및 유닉스 명령 및 각종 프로그램 특수 명령 라이브러리를 출력 합니다.
           
        예제 2) : ldic -j <word>
            = 자바 프로그래밍 라이브러리에서 원하는 단어 겁색을 합니다.

3. 아래의 옵션으로 유저가 원하는 사전을 저장 할 수 있습니다.

    -A : 유저가 원하는 글을 라이브러리에 저장 합니다.
   
        예제 1) : ldic -A
            = 유저가 원하는 사전 입력 프로그램을 시작 합니다.

    -add : 유저가 만든 사전이 담긴 텍스트 파일을 라이브러리에 저장 합니다.
   
        예제 1) : ldic -add <file>
       
    -sync : 원하는 텍스트 사전 파일을 ldic 연동 합니다. (단, 전체 검색에만 반영 됩니다.)

        예제 1): ldic -sync <file>

홈페이지 (블로그) : http://cosmosproject2015.tistory.com

제작자 : C O S M O S project. cosmosproject15@gmail.com
감사 합니다.




[ 소스 다운로드 : Github ]  


https://github.com/cosmosproject15/ldic


 user@user~$

git clone https://github.com/cosmosproject15/ldic



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         



리눅스를 활용하여 콘솔 환경에서 사진을 완벽하게 로드 할 수 없을까? 

충분히 가능하다.


간단하게 ' fbi ' 리는 프로그램을 응용하면 된다.

fbi 프로그램은  Linux framebuffer imageviewer  의 약자(!?) 로써 사실 여기서 L이 빠지고 억지로 fbi 라는 이름을 만든 것 같다. fbi 미 연방수사국을 의미 하는데 제작자가 연방수사국에 불만이라도 있는 것일끼?    

프로그램 이름에서 알 수 있다시피 프레임버퍼를 활용하여 사진파일을 로드 하는 방식이다. 

프레임 버퍼의 의의는 간단하고 단순하다.
     fbi -a 1.pngeda

디스플레이에 영상을 띄우기 위해 데이타 정보를 메모리에 저장하는 단계를 의미한다.


우선 간단히 설치 하도록 해보자.

 user@user~$

sudo apt-get install fbi -y



설치 하였으면 바로 사진을 로드해 보자. 

 user@user~$

fbi -a 1.png


-a 옵션은 자동으로 화면에 맞추어 사진을 줌인 해준다.


using "Noto Sans Mono CJK JP,Noto Sans Mono CJK JP Regular-16", pixelsize=16.67 file=/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
ioctl VT_GETSTATE: 장치에 대해 부적절한 ioctl (not a linux console?)

 
하지만 위와 같이 이미 x-windows 데스크탑에 그래피컬 터미널이 올라가 있는 상태 에서는 프레임 버퍼 따로 사용하는 것이 불가능하다. 

하지만 가능하게 하는 방법이 있으니 바로 그것은 x-windows가 올라가 있지 않은 다른 tty 콘솔로써 실행이 가능 하다.

alt + f1 을 눌러 tty1으로 로그인히여 진입하여 다시 방금 처럼 사진을 로드해 보자.

될 것이다.  (esc키를 눌러 빠져 나온다.)


그런데 정말로 x-windows 데스크탑에서 fbi가 프래임 버퍼를 활용하는 것이 불가능 할까?

방법은 충분히 가능하다. 

바로 그래피컬 터미널에서 다른 tty 가상 콘솔을 활용하는 것이 그것이다.

그 꼼수 기능은 fbi 프로그램 자체에서도 응용이 가능하다. 또한 관리자 권한이 필요하다.

다시 ' alt + f7 ' 을 눌러 x - desktop으로 돌아오자.

다음과 같이 명령을 내리면  x-windows 데스크탑에서 fbi 실행이 가능하다.

 user@user~$

sudo fbi -a -T 1 1.png


                                                   (tty1) (파일)

하지만 해당 프로그램을 x - desktop에서 활용하는 것은 의미가 없을 것이다. 
그렇지만 임베디드 개발에 있어서 반드시 필요한 프로그램이다.

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         



이 전 포스트에 이어서 이제는 우분투 리눅스에 '아파치 오픈 오피스'를 직접 설치해 보도록 하겠습니다.



1. 아파치 오픈 오피스를 다운 받는다.


https://www.openoffice.org/ko/


2. 기존에 설치 되어 있는 리브레 오피스를 삭제 한다.


 user@user~$

sudo apt-get purge libreoffice*




3. 다운받은 압축파일을 해제 한다.


 user@user~$

tar -xvzf 다운받은 파일명




4. 해제한 폴더에서 dpkg로 패키지들을 일괄 설치 한다.


 user@user~$

sudo dpkg -i *.deb





5. DEBS 폴더에 있는 'desktop-integration' 폴더 안에 있는 패키지 하나를 마저 설치 한다.



6. Language 압축 파일도 위의 방식 처럼 압축을 풀어 설치 한다.





도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         





흔히들 리눅스에서 가장 쓸만한 오피스(Office)는 '리브레 오피스' 라고들 한다.


하지만 본 필자가 경험 하기로는 리브레 오피스가 잔 버그가 많고 writer 소프트웨어가 특히 문자 구문 표현 오류가 있는게 아닌가 싶다.


특히 램에 상주 되는 딜레이 또한 뭔가 많이 버겁다.


그래서 본 필자는 작년부터 대신 '오픈 오피스'를 사용 해왔는데 성능이나 안정성 그리고 문자 상호 호환성에 대해서도 오픈 오피스가 훨씬 더 낫다는 것을 깨달았다.


사실 오픈 오피스가 그 리브레 오피스의 모태가 되는 소스코드 소프트웨어다.


그리고 현재로서는 아파치 재단이 오픈 오피스의 판권을 보유 하고 있지만 그 이전에는 오라클이 또 그 이전에는 썬 마이크로시스템이 '스타 오피스' 라는 명칭의 소프트웨어였다.


그 이후 선 마이크로 시스템이 스타 오피스의 소스 코드를 공개하고 오라클이 상용화를 목적으로 썬마이크로 시스템을 인수 하는데 생각처럼 오픈 오피스의 개발과 상용화가 어려웠다.


여기서 많은 논쟁이 있는데 리브레 오피스가 탄생한 이유가 개발자들이 오픈 소스의 시대적 관념을 가지고 'The Document Foundation' (문서 재단)을 만들어 이후 libre office로 재개발 되었다는 의견도 있으며 단순히 오라클의 개발 부진 때문 이라는 얘기도 있는 등 여러 논쟁이 있다.


간단히 말하자면 흐름도는


스타 오피스 ⇒ 오픈 오피스 ⇒ 리브레 오피스 

로 볼수가 있다.



그 사실은 개발자들 스스로가 정확히 알고 있을 것이다.


어찌 되었던 간에 리브레 오피스와 아파치 오픈 오피스가 둘 다 공존하기 시작했다.


한 데 중요한 것은 오픈 오피스와 리브레 오피스가 (리눅스일 경우) 파일 시스템 내부적으로도 프로세스 파일의 공동 사용 즉 심볼릭 링크가 겹치기 때문에 사용자는 아쉽게도 둘 중 한가지를 양자 택일 해야 한다.


하지만 두 소프트웨어를 같이 사용하는 것은 충분히 가능하다.


오픈 오피스와 리브레 오피스 둘 다 설치하여 사용 하는 방법 [바로 가기]



그렇지만 보통 대부분의 리눅스들은 기본적으로 오피스 소프트웨어를 리브레 오피스로 채택하고 있으며 ppa 또한 리브레 오피스 만을 지원한다.


아무래도 그것은 The Document Foundation 의 영향력이 크기 때문일 것이다.




다음 포스팅에서 리눅스 우분투에 오픈 오피스를 설치 방법에 대해 알아 보도록 하자.



다음 페이지 (설치하는 방법 바로가기)





도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         


기타프로의 gp tab파일을 읽어 드리고 연주 할수 있고 악보 제작 능력을 가진 턱스기타(tuxguitar)에 기존 미디 연주에 성에 안 찼던 사람들이 많을 것이다. 

왜냐하면 현재 많이 발달된 RSE(Resl Sound Engine)를 사용하여 현실감 넘치는 기타프로 소프트웨어에 비해 고작 기본 미디연주에만 안주해야 하는 것이 안타까웠을 것이다. 

하지만 중급이상의 PC유저라면 '사운드 폰트'를 활용해 MIDI 연주능력의 성능을 대폭 개선 시키는 방법을 알고 있을 것이다. 

하지만 그렇다고 해서 그것을 Tuxguitar에 접목 시키지 못한 다거나 아예 모르는 사람들이 현저히 많을 것으로 알고 본 포스트팅을 통해 널리 전하고자 한다.


여기서 가장 중요한 것은 바로 사운드 폰트 이다.

사운드 폰트는 미디 서버 시스템을 그대로 출력 이펙트를 변화 시키는 포맷 셋팅을 말한다. 

현재 2세대 까지 개발이 되어 사운드폰트의 확장자는 대부분 .sf2 이다.

먼저 턱스 기타가 설치 되어 있지 않다면 턱스기타를 설치 한다.
(자바 플러그인도 같이 설치 한다.)

 user@user~$

sudo apt-get install tuxguitar tuxguitar-jsa -y



그리고 미디 시스템 서버를 구동 하는 소프트웨어들을 설치 하자.

 user@user~$

sudo apt install fluid-soundfont-gm timidity -y




설치가 끝났으면 먼저 timidity 셋팅을 해주자. 

'/etc/timidity/timidity.cfg' 파일을 다음과 같이 편집해 주도록 하자.

- /etc/timidity/timidity.cfg -

# Instrument configuration file for timidity
# $Id: timidity.cfg,v 1.7 2005/09/03 19:26:03 hmh Exp $

# You can change just about every option in TiMidity++ using
# This config file.  Please refer to the timidity.cfg(5) manpage
# for more details

## If you have a slow CPU, uncomment these:
#opt EFresamp=d #disable resampling
#opt EFvlpf=d #disable VLPF
#opt EFreverb=d #disable reverb
#opt EFchorus=d #disable chorus
#opt EFdelay=d #disable delay
#opt anti-alias=d #disable sample anti-aliasing
#opt EWPVSETOZ #disable all Midi Controls
#opt p32a #default to 32 voices with auto reduction
#opt s32kHz #default sample frequency to 32kHz
#opt fast-decay #fast decay notes

## If you have a moderate CPU, try these:
#opt EFresamp=l
#opt EFreverb=g,42
#opt EFchorus=s
#opt s32kHz
#opt p64a

# Disabling some of the Midi Controls can help with the CPU usage a lot.
# The same goes to the VLPF, sample anti-aliasing and effects such as
# reverb and chorus

# By default, try to use the instrument patches from freepats:
soundfont /usr/share/sounds/sf2/FluidR3_GM.sf2

# alternatively, you can use the fluid-soundfont:
source /etc/timidity/fluidr3_gm.cfg
#source /etc/timidity/fluidr3_gs.cfg


위의 soundfont 는 실제 구동하는 사운드폰트 지정하며 

source 또한 같은 fluid 사운드포트 소스를 활용 한다.

만약 다른 사운드폰트 파일을 적용한다 할 지라도 소스는 그대로 fluid를 사용하는 것이 안정적인 음질을 구사 할 수 있다.

그리고 timidity 미디 시스템 서비스를 리셋 해준다.

 user@user~$

sudo service timidity restart



그리고 턱스기타를 실행후 다음과 같이 셋팅 한다.

     Tools →  Setting → Sound → Midi Sequencer = Tux guitar Sequencer

     Tools →  Setting → Sound → Midi Sequencer = Timidity[128:0]


     Tools → Pluguns → Java Sound Api Plugin = /usr/share/sounds/sf2/FluidR3_GM.sf2

Tools →  Setting → Sound → Midi Sequencer = Tux guitar Sequencer

     Tools →  Setting → Sound → Midi Sequencer = Timidity[128:0]



이제 턱스기타를 재실행하여 연주하면 리얼 사운드 미디가 동작할 것이다. 좀 더 정확한 확인을 원한다면 악기를 바꿔가보며 연주해 보자.

만약 미디가 그래도 출력 되지 않는다면 재부팅 하도록 하자.

미디 출력은 주사운드카드를 기본으로 한다.

원리는 timidity가 미디 시스템 출력을 담당하고 fluid-soundfont 패키지의 사운드폰트를 읽어서 미디 이펙트를 출력 하는 방식이다.

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         




사실 이 부분에 대해서 필자도 오래전 부터 의구심을 가져왔다.

왜냐하면 실제로 오래전 십수년 전에 인터넷에서 한 특정 네티즌이 살인자를 추종 우상 하면서 동시에 다중인격 ( 주부, 학생, 어린이, 학자 )등 여러 인격의 형태로 글을 쓴 것을 발견한 적이 있었고

그러한 사실은 본 필자 뿐만이 아니라 일부 여러 네티즌도 당시 목격을 하였다.

특히 유명 연쇄 살인범도

"내 안에 다른 악마가 한 짓이다."

라는 충격적인 말을 남기기도 했다.

그의 경우는 신창원과는 확실히 대조적이다.

신창원은 가난한 층이 아닌 고위 중산층 이상을 주로 범죄 대상으로 삼았으며 심지어 그 돈으로 불우이웃을 집적적으로 도운 사실 까지 확인 되었을 뿐만이 아니라 그는 자신이 왜 그렇게 됐는지에 대해 사람들 앞에서 
정확히 얘기해 이후에 자신과 같은 사람이 나오지 않도록 하는 범사회적 방지책을 제시 하기도 했다.

심지어 그를 미화하고 기념하는 사람들도 있을 정도이니 말이다.

그렇기에 현대판 홍길동?으로 불리웠던 신창원 같은 경우는 싸이코패스라고는 보기 힘들다.



서두가 길었다.

요즘 세상을 떠들썩하게 하는 사건이 있었으니 그것은 바로 여러분도 알다시피 한 여고생이 여아를 유인해 무참히 살해한 사건이다.

심지어 그녀는 처음에는 조현병등이 있다는 주장을 했었지만 최근에서는 스스로가 다중인격(내안에 악마가 한 짓이다?) 이라고 주장하고 있다.

그것이 사실인지 정말로 진실인지는 스스로가 잘 알고 있을 것이다.

물론 그녀가 정말로 그런 다중인격 장애를 가지고 있을 가능성이 있을 수는 있다.


하지만 본 필자가 생각했을때 모든 고의적 가해 범죄는 '정신병' 으로 비롯 된다고 생각한다.


수감 자체가 사회로부터의 격리이며 수감은 기초적으로 교화와 정신적 치료를 그 목적으로 해야 한다고 생각한다.

즉 필자가 하고자 하는 말은 모든 고의적 가해 범죄자는 형량을 감량을 시킴이 아닌 형량을 법이 준 하는데 내에서 기존의 판례와 같이 정하고 집중적 치료 수감으로 시스템을 전면 개정할 필요가 있지 않을까 한다.

그렇지 않으면 그 혹은 그녀가 다시 세상에 발을 딛였을때 다시 악마도 활개칠 것이다.    

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         



사실 이 포스팅의 제목 자체를 "영화 에일리언 시리즈는 인공지능 로봇의 미래를 어둡게 생각하는가" 라고 정하는 것도 틀린 방법은 아니었을 것이다.

영화 에일리언의 모든 시리즈들이 그러하듯이 등장하는 인공지능 로봇들은 이야기 속 부수적인 존재가 아닌 이야기의 흐름을 엮어 나가는 매우 중요하고 필연적인 부분을 차지하고 있다.

그리고 그 영향을 주는 행동이 우리 인간의 관점으로 볼 때 '악 한' 행동으로 볼 수가 있다.


영화 에일리언1에서 깝치다 초토화된 악역 애쉬 

물론 인간의 관점으로 봤을때 말이다.

그런데........ 과연~ 극 상에서 사고를 치는 로봇들이 단순히 스스로 '선 악'을 뛰어 넘어 가징 이익 적인 부분을 스스로 판단해서 사건을 일으키는 것일까?


영화의 이야기가 사실이라 가정 한다면... 필자는 아니라고 본다.


영화의 시리즈에서 봐서 알다시피 로봇을 만드는 회사들은 로봇의 그러한 부분을 억제하여 업그레이드 하는 것을 볼 수가 있다.

즉 소스 제어가 가능하다는 말씀이다.

에일리언2의 인공지능 로봇 '비숍'은 확실히 순종적 이었다. (오른쪽에서 네번째)

즉..... 고의적이다.

그 로봇을 만드는 회사는 만일의 사태가 발생했을 때 선원들의 이익 보다는 회사의 이익과 과학 발전과 발견을 더 우선시 하도록 미션을 수행하는 로봇 들에게 소스 config를 주었다는 뜻이다.

자신도 창조주가 될수 있다고 착각하는 회사의 욕망에 의한 소스코딩으로 인한 강력한 딥러닝 버그에 걸린 로봇 데이빗

그것이 결국 해서는 안되는 일을 하게 만드는 딥러닝을 통한 전체적인 버그 스크립트를 만들어 내는 것이라고 볼 수 있다.

그리고 그것이 한 번 시작 되면 주체 할수 없을 만큼 버그 스크립트와 계획이 만들어지고 결국에는 기존의 도덕적 스크립트는 무시하고 만다. 아니 애당초 회사는 도덕을 준수하는 코드를 스스로 실행방지 할 수 있도록 로봇에게 막강한 권한을 주었기 때문이다.

그 잘못된 소스와 권한이 결국 끔찍한 일을 저지르는 결과로 이어 질 수 있는 것이다.

그렇다. 그러기에 해당 로봇을 만드는 회사는 그러한 잘못을 알고 양심에 찔리기에 이후 모델에는 그부분을 개선도 아닌 삭제하여 업그레이드 하여 내놓는 것이라 볼 수가 있다.

물론 그렇다고 해서 본 필자도 인공지능 로봇의 미래에 대한 전망을 결코 좋게 보는 것은 아니다.

오래전부터의 생각이긴 하지만 필자는 인공지능에 어느정도 반감을 가지고 있고 인공지능에게 자동차 운전이나 매우 중요한 임무를 맡기는 것에 대하여 심각하게 불신 하는 생각을 가지고 있다.

"모든 컴퓨터 프로그램은 오류 덩어리 이며 버그 덩어리 이다."

초년생부터 컴퓨터를 해 봐와서 심히 깨닫지만 사실 필자는 컴퓨터를 좋아라 하지만 컴퓨터를 그렇게 신뢰 하지는 않는다. 

아주 간단한 프로그램을 짜도 100번을 수행하면 그 중에 오류는 반드시 나오기 마련이며 그렇지 않다 하더라도 1000번 수행 중에는 반드시 버그가 발생한다.

사실 따지면 바이너리 버그가 언제 출몰 할지 모른다는 이야기 이다.

왜냐하면 모든 기초 프로그램 수행은 기초 헤더 라이브러리를 공유해서 사용하기 때문이다.

즉 수 많은 프로세스들이 같은 헤더 실행을 반복하면 충분히 cpu가 연산을 하는 과정에서 바이너리 오류가 발생할수 있기 때문이다.

컴퓨터가 작동하기 위해서는 기본적으로 그것을 구동하기 위한 운영체제가 필요하며 운영체제는 수 백가지의 기초 프로그램을 내장하고 있다. 프로그램 실행을 경우에 따라 운영체제 시스템은 파동적으로 수 차례 구동 시키기 때문에 사용자가 직접 실행하거나 자동 수행 하는 프로그램과 그것들이 바이너리 충돌이 일어날수가 있다.

즉 이런 오류 투성이 컴퓨터애게 매우 중요한 혹은 막강한 권한을 부여 하는 것은 미친 짓이다.

필자가 보기에는 충분히 그렇다는 것이다.

많은 프로그래머와 전문가들이 인공지능을 선호 하는 것은 결코 아니다.  

혹은 인공지능에 매우 긍정적인 프로그래머인 경우 전자제어 프로그래밍에는 매우 강하나 설계 탑재된 해당 임베디드 시스템의 전체적인 파일 시스템 제어 및 구동 구조에는 관심이 부족한 경우가 있다.

마찬가지 모든 프로그래밍 언어 에서도 모든 것을 구현하는 완벽한 헤더 라이브러리는 존재 하지 않는다. 

조그마한 것들을 한데 모아 섞고 섞어 프로그래밍 하는데... 마치 모든 것을 구현할 것처럼 보이게 하는 것은 상식적으로도 억지와 위험성이 있다.

그렇다. 모든 프로그래밍은 약간 억지성이 있음과 동시에 강제 혹은 간접 구현을 기본으로 한다.

즉, 모든 프로그램밍은 불완전하고 억지성과 위험요소를 가지고 있다.

특히나 그 중에서 인공지능과 전자제어를 결합힌 프로그래밍이 가장 그럴 것이다.

그 불완전한 것을 가지고 대중들에게 완벽한 것처럼 떠벌리는 것은 분명 문제가 있는 것이 사실이다. 

"마치 비교 하자면 인공지능과 전자제어 시스템이 절대 안전하다는 말은 위험천만한 원자력발전소를 절대 안전하다고 뻥카치는 것과 같은 원리이다. 단지 그 상대적인 크기가 다르다는 것 뿐이다." 
  

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린점이 있는 것 같다면 꼭 댓글로 알려 주시면 감사 하겠습니다.


단도직입적으로 usb 음반은 매우 바람직하다고 본 필자는 생각하는 바이다.

하지만 그 방식을 어떻게 하느냐가 중요한데, 

뭐 지금까지 나온 기사들을 참조하자면 USB기반으로 음반을 발매 하긴 하지만 인터넷 기반으로 말미앎아 인증을 받고 다운로드 받는 식 이라고 전해지고 있다.

물론 그런 이유는 아마도 데이타를 통한 불법복제를 두려워 하기 때문일 것이다.


하지만 그렇게 되면 usb는 무용지물이나 마찬가지이며 그렇게 다운 받을 바엔 차라리 그냥 음원 사이트나 앱에서 다운 받는 것이 소비자들은 더 낫다고 생각할 것이며 오히려 usb음반 발매는 자칫 잘못하면 혁신이 아닌 웃음 거리로 전락 할 수 있을지도 모른다.


" 불법복제를 두려워 할 필요가 전혀 없다. "

유닉스 시스템의 기술적으로 usb의 데이터들을 충분히 복사 방지 할 수 있다.

하지만 그렇다고 해서 영구적으로 데이터 복사를 막지는 못한다.
모든 데이터는 출판되면 자유로워 지기 마련이며 결국 그 흐름은 거센 강물과 같아 절대 막을 수가 없다.

컨텐츠 제작자는 거기에 집착 하는 것 보다 초기 수입을 잘 활용하여 다음 더 좋은 컨텐츠를 재창조 하는 것이 이득이며

한 예로 영화 '겟 아웃'은 극장 상영과 동시에 토렌트에 릴리즈 되는 충격을 안겨 주었지만 그럼에도 불구하고 놀랍게도 예매 1위를 한 동안 석권하는데 전혀 걸림돌이 되지 않았다.

" 즉 컨텐츠가 안 팔리는 핑계를 불법 복제 탓을 할 필요가 없음이 증명된 것이나 마찬가지로 볼 수 있다. "

그리고 USB 음반 판매는 IT컨텐츠 발전에도 상당히 도움이 된다고 필자는 생각하며 

그 이유를 몇가지 대 본다면...

  1. 가장 초고음질의 음원 탑재 가능
  2. 고화질의 아티스트의 사진 탑재 가능
  3. 메이킹 필름 영상 탑재 가능
  4. 최고 해상도 뮤직 비디오 탑재 가능
  5. 새내기 아티스트들을 위한 커버용 음악 소스 탑재 가능
  6. 각 비트 및 신디 소스 탑재 가능
  7. IT업계에 재고는 많으나 팔리지 않는 저용량 usb 처분 가능 

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         




1. 먼저 ufw 설치 합니다.



user@user-test:~$ sudo apt install ufw



or (혹은 gufw를 설치 합니다.)



user@user-test:~$ sudo apt install gufw




( gufw은 ufw의 gtk버전으로서 그래픽 툴로서 관리 할 수 있는 소프트웨어 입니다. 이 패키지도 마찬가지 ufw를 의존성 패키지로 자동으로 같이 설치 됩니다.)


2. 다음 가장 먼저 해야 할 일은 ufw를 서비스 활성하 시키는 작업입니다.



user@user-test:~$ sudo ufw enable



3. 우선 차단 규칙을 설정 하는 것을 배워 보겠습니다. 먼저 로컬 아이피 대역을 차단해 봅니다.



user@user-test:~$ sudo ufw deny from 192.168.1.1/25


( ip 차단은 앞서 'from'을 붙여 줍니다.)


4. 그럼 tcp와 udp를 차단해 보겠습니다. 



user@user-test:~$ sudo ufw deny 1:6500/udp


( udp 프로토콜의 포트 1에서 65000 까지의 포트 대역을 전부 차단 합니다.)



user@user-test:~$ sudo ufw deny 1:6500/udp


( tcp 프로토콜의 포트 1에서 65000 까지의 포트 대역을 전부 차단 합니다.)





selinux를 리눅스 우분투에 설치하는 것은 매우 쉽다.

하지만 한가지 명심 해야하는 것은 selinux의 차단률이 매우 높기 때문에 apt (Advanced Packaging Tool : 우분투의 고급 패키지 관리 툴)가 enforcing 상태에서는 제대로 동작하지 않는 다는 것이다.


만약 패키지 설치가 필요하다면 selinux의 상태를 enforcing에서 'permissive'로 바꾸어 주어야 마땅하다.

만약 그렇지 않다면 apt postinst(패키징 설치시 동작하는 필요 스크립트)가 제대로 작동 하지 못하고 리턴 오류가 연달아 발생할 것이다.

리눅스 우분투에서의 설치 방법은


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 일반 레파시토리에서 selinux를 설치 한다.


user@user-test:~$ sudo apt install selinux


-> 콘솔창에서 사용권 계약에 대한 내용이 뜨면 '동의(Agree)'


// 하위 스크립트 오류 발생하니 dpkg --configure로 잡아줌


user@user-test:~$ sudo dpkg --configure -a


// 재부팅 한다.


user@user-test:~$ sudo reboot


// 재부팅 후 selinux가 enable (자동 양호) 상태인지를 확인한다.


user@user-test:~$ sestatus

    {
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             ubuntu
    Current mode:                   permissive
    Mode from config file:          permissive
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    }
-> 상황목록이 위와 같이 제대로 뜨면 정상적으로 설치된 것이다.

// enforcing 으로 전환을 테스트 한다.

user@user-test:~$ sudo setenforce 1
user@user-test:~$ sestatus
    {
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             ubuntu
    Current mode:                   enforcing
    Mode from config file:          permissive
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    }
-> 여기까지 했다면 귀하의 pc에는 selinux가 정상적으로 설치되고 작동 되고 있는 것이며 'setenforce 1' 명령으로 currunt mode가 'permissive'에서 'enforcing'으로 바뀐 것을 확인 할수가 있다.


     
하지만 명심해야 하는 것은 selinux가 깔려 있다고 해서 부팅시 곧바로 고급 차단 정책인 'enforcing'이 바로 작동 되는 것은 아니며,
permissive에서 enforcing으로 모드를 바꿔저야 완전한 차단 정책이 적용 되는 것이다.

뿐만 아니라 또 앞서 말했듯이 소프트웨어를 설치 하는 과정인 apt를 활용 하려면 'permissive' 로써 정책을 변경해 줘야만 한다.


enforcing -> permissive 변경 하는 방법



-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


user@user-test:~$ sudo setenforce 0 




영상을 통하여 확인해 보도록 하자.



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         






+ Recent posts