리눅스는 원격제어가 탁월하며 원격제어를 받는 동안 서버PC는 윈도우즈와 다르게 자신의 x-windows데스크탑 사용에 간섭을 받지 않는다.

리눅스 서버측에 원격제어 RDP (Remote Desktop Protocol) -server를 설치 하는 것은 매우 간편하다.

바로 패키지인 xrdp를 설치 하는 것이다.

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

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

// 서버측 데스크탑 가상머신에 xrdp모듈을 설치한다.


user@user-test:~$  sudo apt-get install xrdp






xrdp를 설치 함으로써 해당 리눅스 서버에 리눅스에서 뿐만이 아니라 윈도우즈에서도 x-windows-desktop 형태로써 접속이 가능하다.


그렇다면 리눅스 클라이언트에서 접속할때에는 어떤 소프트웨어를 주로 쓸까?

대부분 RDP 접속 소프트웨어를 사용하는데 윈도우즈는 '데스크탑 원격 연결 툴'로써 간단히 접속 할 수 있다. 


리눅스 접속 소프트웨어 중 한가지를 추천한다면 본 필자는 remmina 를 추천하고 싶다. 
remmina 는 rdp접속 뿐만이 아니라 각종 vnc 접속 및 vino-vnc-server 접속 까지 원할하게 접속하고 제어를 제공하는데에 전혀 문제가 없다.

물론 본 블로그에서는 기초 툴인 'rdesktop'을 활용한다.

그런데 여기에 xrdp를 활용 하는데에 있어서  또 한가지 변수가 있다. 

xwindows-desktop 문제 인데 서버측 x-windows-데스크탑 환경이 'xfce4-session' 인 경우에 특히 원할하게 동작 하는 것이 바로 그것이다. 

만약 터미널 환경에서 직접 접속 하려 한다면 다음의 툴을 사용하여 다음과 같이 접속하면 된다.

그렇다면 가상머신(Virtualbox)을 통하여 클라이언트 pc에서 xrdp 원격을 테스트 해보도록 하자.

먼저 서버측 가상머신의 운영체제에 위에서 설명 한듯이 xrdp를 설치 하고 ifconfig를 통해 로컬 ip를 확인한다.
(두번째 줄 inet addr : 부분이 로컬 ip에 해당한다.)

그리고 rdp 접속을 시도하려는 클라이언트 pc에 remote desktop 클라이언트 소프트웨어인 rdesktop을 설치 한다. 

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

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

// rdesktop을 설치한다.


user@user-test:~$ sudo apt-get install rdesktop



user@user-test:~$ rdesktop <ip>


-> 접속하면 다음과 같은 프론트엔드가 구동된다.









마찬가지 이와 같은 방식으로 리눅스 뿐만이 아니라 윈도우즈로도 원격지원 방식으로 접속이 가능하다.
(물론 대부분의 윈도우즈는 서버 서비스 모듈이 자동으로 구동되고 있기 때문에 xdrp 같은 x서버 구동 패키지를 따로 설치할 필요가 없이 바로 원격접속이 가능하다.)


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


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



몇 주 전 부터 외교부 장관 적임자로 발탁된 강경화 후보에 대한 강도 높은 검증이 아직도 끝나질 않고 있다.
사실 지금까지의 검증을 위한 청문회 과정을 살펴 본다면 이 대한민국에 고위공직자, 장관 할 사람 없다.

아니 이 전세계에도 없을 것이다.

모든 인간은 죄를 가지고 있기 때문이며 단지 그 차이의 크기가 저마다 다를 뿐이다.

단도직입적으로 필자가 하고픈 말은 그 후보자에 대한 단점과 장점을 모두 공개 한 다음 국민지지참여제도를 도입 하고

 대통령 비준 | 국회의원 비준 | 국민지지참여 비준
35 %     |     35%     |     30%
 
로써 새로운 '장관 임용 체택 제도'를 도입 하는 것이다.

그러면 채택 결과가 나오면 어느 누구도 이러쿵 저러쿵 혹은 마녀사냥 할 필요도 없어 진다.

그러니까 한마다로 그것이다.

당신은 그 사람이 그래도 장관을 한 번 해봤으면 하는가?
안 했으면 하는가?

아주 쉽지 않은가?

크래쉬의 '니가 진짜로 원하는게 뭐야?' 가 생각나는 하루다.
 
 

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


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

         







  


필자는 예전에 부저장치를 이용한 라즈베리파이로 구동 하는 '부저 피아노' 를 연습용 프로그래밍 개발로 내놓은 적이 있다. [바로가기]

당시 포스팅의 목적은 라즈베리파이의 유용성과 파이썬 프로그래밍의 유용성을 알리기 위함이 목적 이었다면 이번 포스팅은 파이썬 그 자체만의 유용성을 알리고자 하는 목적이 될 것이다.

이번 프로그래밍 가이드는 순수히 파이썬만 활용하고 gui 디스플레이 기반의 유명한 교육용 게임 제작 모듈인 'pygame' 을 적극적으로 활용할 것이다.

그리고 해당 모듈을 활용하기 위해서는 모듈을 다운받아 파일 시스템에 적용 시켜야 한다.

pygame 모듈을 활용하여 키눌림과 키올라감을 감지하는 이벤트 처리와 동시에 음악을 재생하는 모듈도 pygame으로 활용하기로 한다. 

리눅스 우분투라면 간단히

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

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



user@user-test:~$ sudo apt-get install python-pygame


-> 로써 모듈을 바로 설치하여 프로그래밍 할 수 있다.




혹은 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 에 접속하여 자신의 시스템에 맞는 모듈을 직접 다운받아

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

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


user@user-test:~$ sudo pip install <파일명.whl>


-> 로써 모듈을 설치 한다.




다음으로는 소리를 재생할 음악파일을 다운 받는다. 

음악소스 파일은 망태기님 블로그의 음원 http://blog.daum.net/_blog/BlogTypeView.do?blogid=0S5D7&articleno=854 을 그대로 활용한다.



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

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

// 터미널에서 바로 파일명을 지정하여 다운받자.


user@user-test:~$ wget -O 1.mp3 https://t1.daumcdn.net/cfile/blog/186170454F44FE8911

user@user-test:~$ wget -O 2.mp3 https://t1.daumcdn.net/cfile/blog/156322454F44FE8A0F

user@user-test:~$ wget -O 3.mp3 https://t1.daumcdn.net/cfile/blog/1765AC454F44FE8B0C

user@user-test:~$ wget -O 4.mp3 https://t1.daumcdn.net/cfile/blog/116018454F44FE8C13

user@user-test:~$ wget -O 5.mp3 https://t1.daumcdn.net/cfile/blog/14605A454F44FE8D12

user@user-test:~$ wget -O 6.mp3 https://t1.daumcdn.net/cfile/blog/12586D454F44FE8E18

user@user-test:~$ wget -O 7.mp3 https://t1.daumcdn.net/cfile/blog/1658CC454F44FE8F1C

user@user-test:~$ wget -O 8.mp3 https://t1.daumcdn.net/cfile/blog/125876454F44FE901E



소스코드는 다음과 같다.

              Source_File name : py_piano.py           |           Type : python             |                        |           


# -*- coding:utf-8 -*-
import pygame, time

from pygame.locals import *
pygame.init()	#pygame 라이브러리를 로드 한다.

display_screen = pygame.display.set_mode((815, 85)) # 디스플레이 창 크기 설정

pygame.display.set_caption('MINI PYTHON PIANO')	# 디스플레이 이름

pygame.mouse.set_visible(1)	# 마우스 커서 활성화

white = (255, 255, 255)	# 색 지정

black = (0, 0, 0)

display_font = pygame.font.Font('/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf', 32) # 폰트 지정

text = (u"키보드 1~8까지 꾸욱 눌러 보세요. \n Esc키를 누르면 종료 됩니다.")	# 유니코드 인코딩으로 텍스트 설계

display_text = display_font.render(text, True, black, white)	# 설게한 텍스트를 랜더링 한다.

display_text_vis = display_text.get_rect()	# 디스플레이에 표시

display_text_vis.center = (340, 34)	# # 디스플레이에 표시되는 위치 설정

def mp(file):	# 소리 파일을 불러 오는 파일을 불러오는 함수
	pygame.mixer.music.load(file)
	
while True:

	display_screen.fill(white)	# 디스플레이의 배경색 지정
	
	display_screen.blit(display_text, display_text_vis)	# 디스플레이에 텍스트 표시
	
	pygame.display.update()	# 디스플레이를 계속 업데이트 한다.

	for event in pygame.event.get():	# 이벤트 시작
      
      
		if (event.type == KEYDOWN):	# 키를 눌렀을 경우 mp함수가 음악 파일을 불러오고 pygame모듈이 재생
			if (event.key == pygame.K_1):

				mp("1.mp3")
				pygame.mixer.music.play()
 
      
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_2):

				mp("2.mp3")
				pygame.mixer.music.play()
     
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_3):

				mp("3.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_4):

				mp("4.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_5):

				mp("5.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_6):

				mp("6.mp3")
				pygame.mixer.music.play()
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_7):

				mp("7.mp3")
				pygame.mixer.music.play()
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_8):

				mp("8.mp3")
				pygame.mixer.music.play()
				
		if (event.type == KEYUP):	# 키가 올라갔을때(땠을 때) 재생을 중단 시킴


     			pygame.mixer.music.stop()
      
      
		if (event.type == KEYUP):	# esc 키를 누르고 땠을때 종료 실행
      			if (event.key == pygame.K_ESCAPE):

      				pygame.quit()
	
		if event.type == QUIT:	# 창을 종료 했을때 정상 종료 수행
			pygame.quit()




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

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

// 코딩이 완료 되었다면 실행해 보자.


user@user-test:~$ python py_piano.py



키보드의 키 1~8(도레미파솔라시도) 를 눌러 보고 눌렀다 때 보면서 음의 길이도 조절이 되는지를 테스트해 보자.



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


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

         






미국이 위태롭다.

미국이 미국 답지 않을때는 경제 대공황이라는 절망의 위기를 겪고 있었고 또 그 보다 더 오래전 미국이 미국 답지 않을때에 남북전쟁을 겪었다.

하지만 비로소 미국 다워졌을때 남북전쟁(게티스버그)도 끝났고 미국은 재통합 할 수 있었다.

자, 그렇다면 여기서 필자가 말하는 '미국이 미국 다울때'는 무엇을 뜻하는가?

'미국' 이라는 말은 우리나라가 만들어낸 국가 이름이고 '미국'의 진짜 이름은 'United States' of America 이다.

그렇다. 미국의 진짜 이름은 '합중국', 유나이티드 스테이츠다.

우리가 항상 즐겨 말하는 '미국' 은 마치 단독, 단일민족 국가인것 마냥 중요한 '합중국 이라는 사실을 망각하게 만드는 어쩌면 잘못된 말 인지도 모른다.


미국은 전세계를 대표하는 다인종 국가이며 다민족 국가이다. 

그렇기에 내부에서 단일민족문화를 경계하고 주의 하는 것은 매우 당연지사 라고 할수 있다.


그렇기에 미국이 백인들만의 국가가 아니며 특정 민족이 국가를 좌지우지 하게 되는 것은 미국이 미국 답지 못하게 되는 것을 의미한다.


그리고 트럼프 대통령은 지구의 중대한 문제인 국제기후대책 문제에서 뒷걸음 치려는 움직임 까지 보이고 있다. 

미합중국 으로써 가장 솔선수범하게 앞서 나가도 모자른 형국에 말이다.

미국은 국제인들이 이룬 국가로써 국제 사회를 관철하고 선도 할 수 있는 United States 라는 이름 값을 져버리지 말기를 바란다.

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


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

         





빅뱅의 탑, 최승현 그가 현재 대마초 흡연 혐의에서 기면상태에 이르기 까지 짧은 시일 이내에 지금까지 참 많은 일들이 있었다.


필자가 본 포스팅으로 하고 싶은 말은 그가 어쩌면 법적으로 처벌 받는 것 보다 대중미디어에 의해 심판대에 서게 되는 것을 더욱 고통스러워 할지 모를 것 같다는 생각이다.

예전에도 2008년도에 탑은 과도한 스케줄 소화로 인해서 신경 안정제 복용 부작용으로 탈이 난적이 있었고 그로인해 대중미디어는 그가 혹시 자살시도 한 것이 아니냐는 의혹을 낸적이 있었다. 하지만 다행히 사실이 아닌 것으로 들어났고 지금 이 순간에도 위기를 무사히 넘기길 바라는 마음 이다.

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


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

         




아직도 세월호 사건에 대해 많은 사람들이 의구심을 가지고 있다. 

세월호가 이번년도 인양이 되어 지상으로 올라온 상태 이지만 아직 대한민국의 많은 국민들은 많은 의혹을 쉽게 떨치지 못하고 있다.

그리고 그 세월호 사건에는 수많은 부정과 비리들이 연계 되어 있었고 그 가운데 세월호의 실 소유사인 '세모그룹' 의 전 회장 유병언과 그의 장녀인 유섬나가 사회로부터 주목 받게 되었으며 심지어 그녀는 현재 많은 사람들로부터 세월호의 실 소유주가 아니냐는 의혹이 있을 뿐만이 아니라 세모그룹의 자회사인 다판다로부터 상당한 액수의 횡령혐의도 받고 있는 상태이다.

그리고 그녀가 말하길 

"나는 정권이 바뀌길 기다린 것이 아니라 세상이 바뀌길 기다렸다."
라는 말을 내뱉었다.

그녀가 바뀌길 바라던 세상이란 대체 어떤 세상 일까?

그녀의 잘못을 묻지 않는 세상, 아니면 혹여나 대한미국이 뒤집히기라도 기다렸던 것인가?

어쩌면 그것보다 스스로를 바꾸는 것이 더 쉽지는 않을까?

어쨌든 이번 2017년에는 의외로 많은 사건들이 엉킨 줄이 풀리듯 일어나기 시작했고 의혹을 받고 있는 당사자들도 부디 혐의에 대한 대가를 당당히 치르고 스스로의 죄로부터 자유로워 지기를 바라며 또한 세월호 사건의 희생되신 분들을 위해서라도 세월호 사건 이면 혹은 깊은 수면에 있었던 진실이 밝혀지기를 진심으로 원하는 바이다.  

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


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

         



Ralf Lotys (Sicherlich)
https://commons.wikimedia.org/wiki/File:2014_WGT_298_Slowdive.jpg


사실 이 밴드를 알게 된 것은 얼마 되지 않는다. 

불과 1개월 전 클레멘타인 소프트웨어로 soma rock 뮤직을 스트리밍을 듣고 있던 무렵 느낌이 너무 괜찮아 스크랩 해 놓았었기에 이 밴드의 존재에 대해서 알게 된 것이다.

slowdive 밴드는 절대 신생 모던락 밴드가 결코 아니다.

무려 1989년도에 데뷔 했으며 이후 90년대에 너바나를 비롯한 당대 최고의 얼터너티브 록 그룹들과 어깨를 나란히 한 밴드로 전설로써 전해 지고 있었는데

밴드가 해체 후 무려 22년 만에 4번째 정규 앨범을 발표 하는 것이다.

무려 27년지기 밴드 치고는 앨범 발매 횟수가 현저히 적다는 것은 도중의 공백 기간이 있었던 원인이 가장 크겠지만 필자가 보기에는 밴드가 음악 하나 하나를 만드는데 있어서 상당히 신경을 곤두 세우는게 아닌가 싶다.
     


위 곡은 1996년에 발표한 곡으로 슬로다이브가 어떤 음악을 추구 하고 있는지 면밀히 보여주며 밴드 이름 처럼 정말 천천히 깊이 빠져드는 몽환적 느낌을 리스너에게 선사해 준다.


위 라이브 영상은 밴드 slowdive가 다시 20년 만에 재결합하여 93년대 발매한 곡 'When the Sun Hits' 를 2014년 피치포크 락 페스티발 에서
소화해 내는 라이브 영상이다.


하지만 이 밴드를 글로써 전부 표현해 낸다는 것은 한계가 있을 것이며 필자도 이 밴드에 대해서 많은 것을 아직 알지 못한다.

하지만 좀 더 특별한 음악을 즐기고픈 혹은 남들과 다른 음악을 연주 하고픈 뮤지션들에게 많은 영감과 도움을 줄 것으로 기대 하는 바 이다. 

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


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

         



최근 한 개그맨 연애인의 강도사건으로 인해 화제가 되고 있는 병 '모야모야' 병이 많은 사람들의 관심의 대두가 되고 있다.

해당 사건은 모 개그맨이 금품을 갈취하기 위해 강도를 벌이다가 가까스로 위기를 모면한 한 여대생이 갑자기 정신을 잃으면서 그녀가 '모야모야 병'  이라는 것이 밝혀 지게 된 것이었다.

모야모야병은 이미 여러분도 검색을 해서 알다시피 전형적인 선천성으로 뇌의 혈관이 정상적으로 발달 하지 못하고 혈관 협착으로 인하여 약하게 주둔 되어 있어 정상인보다 뇌로 가는 혈류량이 적어 어지러움이 많고 기절 등을 많이 겪게 될 뿐만 아니라 모르고 방치 하다가 갑작스럽게 사망에 이를 수도 있는 병이다.


T1-weighted MR image of moyamoya disease. Flow void in the basal ganglia is indicated by the arrow.
Takuma-sa

그렇다면 '모야모야 병' 의 전조 증상은 무엇일까?



 특히 어린이 일때 가장 많이 전조증상이 나타나며 

 두드러지게 발작 나타날수 있으며 뿐만아니라 운동신경이나 감각에 마비 증상이 오는 경우가 잦다.

또는 성인일 경우 또한 찾아올수 있는데 어린이보다 진행이 현저히 느릴수 있다.

증상은 마찬가지 잦은 발작, 운동신경 마비, 언어 장애 등을 예를 들 수가 있다. 


'모야모야 병' 의 원인은 유전적, 외상적, 질병적 등 많은 가설들이 있지만 아직 확실히 규명 되지 않았다고 한다.  

 

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


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




향후 출시 되는 아이폰에 탑재되는 운영체제 IOS 10 버전에 '다크모드' 라는 디스플레이 기능이 탑재 된다는 소문이 있다.

그렇다면 '다크모드'란 무엇일까?

그저 조명 환경에 맞추어 사용자의 시각적 편의를 위해 전체 배경 색상을 검은색 (blank)에 가깝게 자동으로 조절해 주는 기능을 말한다. 

하지만 이것이 소프트웨어 기술적으로 하는 것인지 디스플레이의 신호를 따로 물리적으로 바꾸는지는 정확한 정보는 없다.

그로인해 만일 전체 권한적 소프트웨어적으로 할 경우 버그가 발생 할수 있다는 이야기가 있다. 

그리고 필자의 생각으로도 봤을때 이 기술이 쉬어 보일 수 있겠으나 쉽지는 않다는 견해다.

기본 프로그램이나 설정에서는 소프트웨어를 업데이트 하면 됨으로 충분히 지원이 가능하나 전체 앱에 적용 한다는 것은 조금 무리가 있을수도 있으며 잘못 하다간 오류가 빗발치수도 있을 것이다.

또 하지만 이미 그러한 '다크모드'는 벌써 많은 뷰어 애플리케이션들이 도입하고 있다는 점에서 굳이 '표면 UI환경' 에서 다크모드가 필요한지는 의문이다.       
 

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


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



모두다 알다시피 장문복은 슈퍼스타k로 인해 '힙통령' 이란 타이틀로 16세에 스크린에 데뷔 했다.

하지만 그때 이후로 많은 시간이 흘렀고 최근 그의 음악을 통해서 그가 사람들의 반응으로 많은 좌절과 고민을 겪었다는 것을 알 수 있었다.



그동안 그에게 많은 일들과 도전이 있었고 심지어 속주 랩의 전문가인 아웃사이더와 같이 프로젝트를 이끌어 나가기도 했다. 

https://www.youtube.com/watch?v=zCf-OuuuKg8 (아웃 사이더 - Become Stronger )


물론 열심히 꾸준히 노력 한다면 성공 할 수 있을 것이다.

허나 개인적으로 장문복이 사람들의 시선과 목소리에 신경 쓰지 않고 대중적인 표준도 아닌 자신만의 음악적 색깔을 만들어 나간다면 세계적인 아티스트가 될 수도 있을 것이라고 생각 한다.

https://www.youtube.com/watch?v=bXl6Bc9AVsg (장문복의 슈퍼스타k 레전드 영상 - Speed racer)

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


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


 





2017년 6월 초대장 배포 이벤트 !~

남은 초대장 : 0개


2017년 6월 초대장 배포를 시작 합니다.


조건은~


총 두개의 댓글을 다셔야 하는데 하나의 댓글은 '주제' 에 대한 자신의 생각을 집필, 나머지 하나의 댓글에는 '비밀'로써 초대장을 받을 이메일을 작성 해주시면 됩니다.


먼저


'공개 댓글' 로써


{  "KC인증 마크 - 전안법 의무화 시행 "에 대한 자신의 생각을 두 줄 이상 집필해 주세요.}


[ 관련링크 ]


1. 전안법 논란 조항 두 가지 1년 유예하겠다고 밝힌 정부

2. [팩트체크] '전안법' 논란, 뒤섞인 루머-사실 따져보니

3. 전안법 유예 1년...중소 상인들 고민은 여전


그리고 두 번째로 같은 닉네임으로 메일 주소를 '비밀댓글'로 작성해 주시면 되겠습니다.


다시 말해 총 두개의 댓글을 다셔야 합니다.




- 방법 -


1. '공개 댓글'로 위의 조건을 집필한다.


2. 같은 닉네임으로 '비밀 댓글'로 초대장을 받을 이메일 주소를 작성.



마감 되었습니다.


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


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




현대사회에서의 화폐구조와 전자화폐등 모든 실질 자산담보는 '실물 화폐'를 그 담보로 한다.


왜냐하면 화폐(실물 화폐)의 발행에 있어서 '관리통화제도'를 대부분의 국가가 시행하고 있기 때문이고 우리나라도 그 범주에 속하기 때문이다.

하지만 사실 통화량과 빈축을 판단하고 그에 맞게 기준금리를 조정하여 화폐를 발행 하는 방식은 '관리통화제도'는 실질적으로 '신본위제' (신용 본위제)에 해당 하기 때문 이기도 한다.

다시 말해 필자가 말하고자 하는 것은 '실물 화폐'가 반드시 모든 거래와 결제 수단의 밑바탕 이라고 말하는 것이고 반드시 존재해야 한다는 것을 의미 하기도 한다.

뿐만 아니라 전자화폐 거래 방식이 늘어나고 있는 실정에 "이제 '실물화폐'는 필요 없지 않나?" 하는 한심한 사람들이 생겨 나고 있는 것이 안타깝지만

전자화폐방식은 천재지변, 블랙아웃(전력 차단 및 말소), 사이버테러, 기술장애로 인한 모든 DNS 연결 다운 (인터넷 마비)등에 의하여 무력화되고 백지화 될 수 있는 가능성은 모든 확률을 종합하면 50%가 넘는 위험성을 가지고 있을 뿐만 아니라 '전자화폐'를 보유하고 있는 회사가 파산등에 처하게 되면 여러분이 보유하고 있는 자산은 보장 받기가 어려워 진다. 

그리고 가장 결정적으로 지급 보증능력을 가지고 있는 실물 화폐가 없게 되면 그 바탕으로 하고 있는 전자화폐의 가치는 전면 백지화 되기 마련이다.

하지만 실물 화폐(지폐)가 가지고 있는 가장 큰 위험성은 바로 '위조에 의한 복제'가 가능 하다는 것이다.

아직 까지는 완벽한 위조가 없다고 쳐도 위조범들의 지폐 위조 기술은 점점 더 발전되고 있다.

이러한 위조지폐의 활성은 실물 화폐의 가치를 본질적으로 떨어트릴 뿐만이 아니라 더 나아가 전자화폐의 가치도 추락 시키게 될 것이다.

그렇기에 현재까지 진보된 NFC 기술을 지폐에 탑재하여 기존의 지폐를 '전자지폐'로 개량할 필요성이 적극 필요하다.

그 본질적인 이유는 누구나 스마트폰으로 관련 앱을 실행하여 태그를하면 위폐인지 확인이 가능하기 때문이다.  

물론 기존의 NFC도 복제가 가능하다.  

뿐만 아니라 암호화를 적용 시킨다고 해도 이 또한 크래킹이 가능하다.

하지만 지폐에 탑재되는 특이점을 가진 NFC 자체는 다른 NFC와는 물리적인 차별성을 가지고 그 기술을 기밀화함과 동시에 최근 발전되고 있는 NFC 복제방지 기술을 도입한다면 위조범이 복제를 하는데 있어서 상당한 시간과 비용이 들기에 이를 것이며 해당 NFC칩은 단 한 회사만 그 생산능력을 가지고 있는다면 어떠한 루트로도 해당 NFC칩을 구하는 것은 매우 어려울 것이다.

또한 위조범이 10000원 지폐를 복제 하는데에 비용이 10만원 가까이가 든다면 결국 위조범은 복제를 포기할수 밖에 없어진다.

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


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


'일자리 창출'은 많은 정치인들의 공통 공약 중 하나이다.

하지만 정작 현재 대한민국에 일자리가 부족한 이유는 실질적으로 무엇인가에 대해 설명 하는 사람은 많지 않다.

정말 우리나라에 일자리가 부족한 것일까? 

혹은 여느 음모론자들 말 처럼 외국인들이 상당부분 일자리를 차지 했기 때문일까?

하지만 외국인들이 차지 하고 있는 직장은 대부분 일반적으로 구직자들이 기피 하는 업종인 경우가 대다수 이다.

본 필자는 단도직입적으로 혹은 개인적으로 대한민국에 일자리가 부족한 절대적인 이유는 일자리가 부족해서 아니라.......


많은 사람들이 자신의 성향과 다른 엉뚱한 직장에 지원하거나 그 사람이 있을 자리에 이미 딴 사람이 있기 때문이다.


그리고 필연적으로 현재 우리나라에서는 직장을 짧게 다니는 형태가 무수히 빈번하게 발생하고 있으며 '평생 직장' 이라는 키워드는 점차 사라지고 있는 추세라고 해도 과언이 아니다. 

그렇다면 그 이유는 진정으로 무엇일까?

필자는 그 이유가 본질적으로 교육에서 부터 문제가 있다고 보고 있으며 

근본적으로 현재의 교육이 과거에 얶메어 있어 개인에게 맞는 지향적 교육이 아닌 무차별적인 집단 교육에 의존하고 있기 때문이다.

일자리 이야기 하는데 뜬금 없이 교육 얘기를 왜 하냐고?


많은 사람들이 자신이 누구인지 모르는데 과연 일자리 문제가 근본적으로 해결될까?



이런식으로면 천년이 지나도 문제를 해결 하지 못할 것이다.

국민들이 자신이 누구 인지를 알고 어떤 것을 즐거워 하며 잘 할수 있는지를 아는 것이야 말로 일자리 문제의 해결의 근본 이라고 생각한다.




있어야 할 자리에 있어야 할 사람이 있는 것 그것이 일자리 문제의 해결의 핵심이다.

즉 결과적으로 일자리 문제를 해결 하려면 근본적인 교육 문제 부터 들여다 봐야 한다.

교육때 부터 그 사람이 누구인지를 파악하고 그에 맞게 교육하는 맞춤 교육이 진정한 '미래 교육'이며 그로인해 그 사람이 있어야 할 자리를 찾아 있게 되는 것, 그것이 일자리 문제의 근본적인 해결 방법이다.

국가나 기관이나 기업 차원에서 하는 일자리 창출 방안은 

단지 기획일 뿐이다.

기획은 그 순간 뿐 결국에는 막대한 비용과 책임 그리고 대가나 부작용이 따르기 마련이다.
  
  

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


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



흔히 '포맷'을 하는 방법은 대부분 알 것이고 리눅스에서 하드를 청소 하는 방법 또한 이미 많은 사람들이 알고 있을 것이다.

흔히들 알고 있기를 리눅스에서 포맷은 

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

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



user@user-test:~$ dd if=/dev/sdx of=/dev/zero



로써 알고 있을 것이다.

하지만 이 방법은 완전한 파일시스템을 제거하는 것이 아니라 'zerofill' 방식으로 (0값으로 덮어 씌우기 : wiping) 하드 디스크의 섹터를 덮어 씌우는 방식이다.

그리고 이러한 와이핑 방식의 포맷은 윈도우에서도 지원을 될 뿐만이 아니라 기술자들이 가지고 있는 복구 솔루션으로 복구가 충분히 이루어 지고 있는 실정이다.

"그렇다면 정말로! 완벽한 하드디스크 소거가 소프트웨어적으로 가능할수는 없을까?"

많은 리눅서들이 알아낸 최고의 방법은 바로 배드블럭을 체크하는 프로그램인 'badblocks'를 활용하는 방법이 그러하다.

일반적으로 프로그램 'badblocks'는 '-v' 명령을 활용하여 하드디스크의 베드섹터 유무를 파악하는 것이 일반적이다. 하지만 '-w'  명령을 활용하여   0xff, 0x55, 0xaa, 0x00등의 값으로 쓰기 테스트를 하기 때문에 하드디스크는 이론적으로 완전히 갈리게 되는 방식이다.

활용 방법은 매우 간단하다.

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

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

// 우선 간단히 타겟 하드디스크를 리셋 시키자.


user@user-test:~$ sudo mke2fs -j /dev/sdx



// 그럼 본격적으로 badblocks 를 활용해 하드디스크를 밭갈아 보자.


user@user-test:~$ sudo badblocks -w -c 600 /dev/sdx


-> 여기서 '-c' 모드는 한번에 쓸 블럭 단위를 설정하는 옵션이다.  기본이 64 블럭이며 최대로 설정해야 처리 시간을 단축 할 수가 있다.



// 다시한번 로우 포맷을 해준다.


user@user-test:~$ sudo dd if=/dev/zero of=/dev/sdx





위의 그림과 같이 포맷된 데이터를 복원 시도를 통해 확인하여도 복구 할수 있는 데이터와 파티션이 일체 나오지 않는 것을 확인 할 수 있다.

그렇다면 실험은 성공한 것이다. 

물론 이 방식도 복구 할 수 있는 더 높은 기술의 복구 기술이 있을지도 모른다.
하지만 실제로 이론적으로 하드디스크의 데이타를 영구삭제 하는 것은 가능하다는 결론을 얻을수 있다.     

    

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


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


중급 이상의 c언어 프로그래밍 개발자라면 파일 시스템의 활동 상태를 감시할수 있는 inotify 함수 응용에 대해서 알고 있을 것이다. 

본 포스팅은 리눅스에서 inotify를 응용한 C언어 코딩과 그 안의 시스템 함수를 응용 하여 쉘 컨트롤을 중첩 활용한 '디펜드 파일시스템 '를 설계하고 구현해 보고 '파일 시스템 방어 구축'에 관한 그 가능성을 짚어 보도록하는 데에 그 취지가 있다. 

우선 전체적인 원리는 단순하다.


글씨를 참 못쓴다. 누가 보면 초딩인줄 알겠다..... 참 나는 전자펜 으로 그리는 데에는 아직(?) 재주가 없다. 



중요한 것은 본 프로그래밍 가이드에 필요한 모듈에 필요한 함수가 의외로 많다는 것이고 특별한 헤더에는 "sys/inotify.h(파일 시스템 감독)" , "setjmp.h(지점 "sys/types.h (타입 파악)" 이 있다.

자 그렇다면 본격적인 프로그래밍을 해보도록 하자.

                 Source_File name : dfs.c             |             Type : C                  |                        |           


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define _Event_		( sizeof (struct inotify_event) )	/* Inotify 함수의 이벤트 처리를 위한 전처리 지정 */
#define Buffer_size	( 1024 * ( _Event_ + 64 ) )

jmp_buf point;	/* setjmp 모듈을 활용할 변수 지정 */

int main( int argc, char **argv ) {
	setjmp(point);	/* setjmp 함수 당 포인트를 셋팅 한다. */
	FILE *Write_file;	/* 로그 파일을 기록하기 위한 변수 선언 */

	char Fs_Path[4092]; /* 감시할 파일 경로를 입력받을 변수 */
	strcpy(Fs_Path, argv[1]);
	
	int ii;		/* 각 버퍼 사이즈 비교 대입 값을 위한 변수 */
	
	int Inotify_Buff; /* inotify 함수를 대입할 고정 버퍼값을 위한 변수 */
	
	char buffer[Buffer_size];	
	
	ii = inotify_init();	/* inotify 모듈을 초기화 로드 한다. */
	
int Back_Target() {
		char cpcon[2048] = "cp -rf ", bakpath[] = " /tmp/bak_path"; 	/* 파일 백업을 만들 변수 */
		system("rm -rf /tmp/bak_path");
		strcat(cpcon, Fs_Path);
		strcat(cpcon, bakpath);
		system(cpcon); /* 타겟 파일 백업을 만든다. */
	}
int syscon() {		/* 이벤트 발생시 해당 파일을 복원할 파일 시스템 제어 기초 함수 설계 */ 
		
		/* 시작 기존의 백업 파일을 삭제 */
		
		char Remove_Target[2048] = ("rm -rf ");		
		strcat(Remove_Target, Fs_Path);
		system(Remove_Target);
		
		/* 완료 기존의 백업 파일을 삭제 */
		
		/* 시작 변동시 복원을 위한 작업 */
		
		char Restore[2048] = "cp -rf /tmp/bak_path ";
		strcat(Restore, Fs_Path);
		system(Restore);
		
		/* 완료 변동시 복원을 위한 작업 */
		
		/* 시작 작업 내용 출력 및 시작 로그 기록 */ 
		
		Write_file = fopen("dfs.log", "a");
		fprintf(stderr,"\nTarget ' %s ' has restored.\n\n", Fs_Path);
		fprintf(Write_file, "Target ' %s ' has restored.\n\n", argv[1]);
		fclose(Write_file);
		
		/* 완료 작업 내용 출력 및 시작 로그 기록 */
	}


	if (ii < 0) {		/* 버퍼 비교에 의한 inotify 함수 초기화 */
		perror("inotify_init");
	}
	else
	
	system("date -R >> dfs.log; echo Defending_Start >> dfs.log");	/* 날짜 출력과 함께 로그 기록을 생성하고 시작 (존재 할시 이어서 기록한다. */
	
	if (argc < 2 ) { 	/* 외부 인자 값의 유.무를 파악 하여 작업 선언 */
		printf ("Do not start defend file system... Please running with insert Target path.\n\n BYE~!\n");
		exit (0);
	} else {
	
		if ( access(Fs_Path, F_OK) == -1 ) { /* 타겟 파일의 존재를 파악하여 없다면 종료 시킨다. */
			fprintf(stderr, "Target %s does not exist... to EXIT.", Fs_Path);
			exit (0);
		} 
	
		fprintf (stderr, "Defending start... \n File path = '%s' of systems\nIf you wnat exit to 'CTRL +C'.\n", argv[1]);

		Back_Target();	/* 타깃 파일을 백업 한다. */
	}
	
	Inotify_Buff = inotify_add_watch(ii, argv[1], IN_MODIFY | IN_CREATE | IN_DELETE | IN_MOVED_FROM | IN_MOVED_TO | IN_MOVE_SELF);	/* inotify 각 이벤트 발생에 따른 함수 실행을 위한 변수 지정 */
	
	while(1) {	/* 지정한  타겟 파일에 대한 반복 감시 시작 */ 
		int origin_size, i = 0;
		origin_size = read(ii, buffer, Buffer_size);
		if (origin_size < 0) {
			perror("read");
		}
		
		while ( i < origin_size ) {	/* 이벤트 발생을 위한 반복 수행 */
			struct inotify_event *event = (struct inotify_event *) &buffer[i];	

			fprintf(stderr, "\nVariance check = Wd : %d , Mask : %d , Cookie : %d , Length : %d , Type : %s\n\n", event->wd, event->mask, event->cookie, event->len, (event->mask & IN_ISDIR)?"Directory":"File");	/* 타깃 파일에 대한 변화를 감지 하여 변화된 실제 파일의 타입을 출력하고 로그를 기록한다. */
			
			system("date -R >> dfs.log");
			
			Write_file = fopen("dfs.log", "a");
			
			fprintf(Write_file, "\nVariance check = Wd : %d , Mask : %d , Cookie : %d , Length : %d , Type : %s\n\n", event->wd, event->mask, event->cookie, event->len, (event->mask & IN_ISDIR)?"Directory":"File");	/* 변화된 사항과 만일 타깃 디렉터레에 추가된 사항이면 그것이 어떤 타입인지 확인 */
			
			fclose(Write_file);

			if (event->mask & IN_CREATE) {	/* 타깃 디렉터리에서 파일이나 디렉토리가 생성 되었을 경우 이벤트 처리 */
			
				printf("\n %s was created. at Watching in Target Directory.\n\n", event->name);
				
				/* 시작 출력과 출력 로그를 기록한다. */
				
				Write_file = fopen("dfs.log", "a");
				fprintf(Write_file, "\n %s was created in Target Directory. \n\n", event->name);
				fclose(Write_file);
				syscon();
				}
				
				/* 완료 출력과 출력 로그를 기록한다. */
				
			else if (event->mask & IN_DELETE || IN_DELETE_SELF) {	/* 타깃에 삭제가 발생할 경우 이벤트 처리 */

				printf(" %s was deleted at Watching Target.\n", event->name);
						
				Write_file = fopen("dfs.log", "a");
				fprintf(Write_file, " %s was deleted at Watching Target. \n", event->name);
				fclose(Write_file);
				syscon(); 
				}
				
			else if (event->mask & IN_MODIFY ) {	/* 타깃에 변동이 발생 되었을 경우 이벤트 처리 */ 

				printf(" %s was modified at Watching Target.\n", event->name);
				Write_file = fopen("dfs.log", "a");
				fprintf(Write_file, "%s was created. at Watching Target of file system.\n", event->name);
				fclose(Write_file);
				syscon(); 
				}

			else if (event->mask & IN_MOVED_FROM || event->mask & IN_MOVED_TO || event->mask & IN_MOVE_SELF) {	/* 타깃에 대한 이동 발생시 이벤트 처리 */

				printf("%s was moved at Watching Target.\n", event->name);
				Write_file = fopen("dfs.log", "a");
				fprintf(Write_file, "%s was moved at Watching Target.\n", event->name);
				fclose(Write_file);
				syscon(); 
				}
			i = 0;
			longjmp(point, 1);	/* jmp 셋팅한 지점으로 다시 되돌아 간다. */
			}
		}
	return 0;
	}



코딩이 완료 되었으면 컴파일 하고 실행해 보자.

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

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

// 해당 파일을 컴파일 한다.


user@user-test:~$ gcc -f dfs dfs.c


// 컴파일된 프로그램을 실행해 본다.


user@user-test:~$ gcc -f dfs dfs.c


Do not start defend file system... Please running with insert Target path.


-> 하지만 코딩 했던것 처럼 인자값이 입력 되지 않으면 종료 된다.



이제 본격적으로 방어 능력을 테스트해 보자.




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

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

// 아무 파일을 만든다.


user@user-test:~$ echo 1 > /tmp/a

 

// 만든 파일을 실행과 함께 인자값으로 지정한다.


user@user-test:~$  ./dfs /tmp/a


Defending start... 
 File path = '/tmp/a' of systems
If you wnat exit to 'CTRL +C'.


-> 라는 문구와 함께 해당 파일에 대한 감시 및 방어를 시작한다.

// 다른 터미널을 열어 만든 파일을 변조해 공격해 보자.


user@user-test:~$ echo 2 > /tmp/a


Variance check = Wd : 1 , Mask : 2 , Cookie : 0 , Len : 0 , Type : File


Target ' /tmp/a ' has restored.

Defending start...
 File path = '/tmp/a' of systems
If you wnat exit to 'CTRL +C'.

->  변경된 속성과 타입 출력, 그리고 복원했다는 메시지가 나온다.


// 정말 복원 되었는지 확인해 보자.


user@user-test:~$ cat /tmp/a


1

-> 아까 입력한 대로 '1' 을 출력하였고 복원에 성공한 것을 확인했다.



그렇다면 이젠 디렉토리 복원을 테스트해 보자.

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

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

// 먼저 폴더를 만들고 파일 하나도 같이 만들자.


user@user-test:~$ mkdir /tmp/1 ; echo 1 > /tmp/1/2


// dfs로 디렉토리 방어를 시작해 보자


user@user-test:~$ ./dfs /tmp/1

Defending start...
 File path = '/tmp/1' of systems
If you wnat exit to 'CTRL +C'.


// 터미널을 새로 열고 변조를 통해 공격을 시도해 보자.


user@user-test:~$ rm /tmp/1/2


Variance check = Wd : 1 , Mask : 512 , Cookie : 0 , Len : 16 , Type : File


 2 was deleted at Watching Target.

Target ' /tmp/1 ' has restored.

Defending start... 
 File path = '/tmp/1' of systems
If you wnat exit to 'CTRL +C'.


-> 파일 '2'가 삭제 되었고 복원 하였다는 메시지가 출력한다.


// 마찬가지 복원을 확인하자.

user@user-test:~$ cat /tmp/1/2

1


-> 복원 성공을 확인할 수 있다. 



// 이번에는 타겟 폴더에 폴더를 생성해 보자.


user@user-test:~$ mkdir /tmp/1/3

Variance check = Wd : 1 , Mask : 1073742080 , Cookie : 0 , Len : 16 , Type : Directory



 3 was created. at Watching in Target Directory.


Target ' /tmp/1 ' has restored.

Defending start...
 File path = '/tmp/1' of systems
If you wnat exit to 'CTRL +C'.


-> '3' 폴더가 만들어 졌지만 복구 했다는 메세지가 출력 된다.



// 정말 복원 되었는지 확인하자.


user@user-test:~$ cd /tmp/1/3


-bash: cd: /tmp/1/3: 그런 파일이나 디렉터리가 없습니다


-> 정말 만든 폴더가 복원, 방어 되어 존재 하지 않는 것을 확인 할 수 있다. 


이뿐만이 아니라 해당 프로그램은 코드에서 봤다 시피 'dfs.log' 파일에 시간과 함께 작업 모든 기록을 보관 하고 있다.


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

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

// 지금까지 작업한 로그 기록을 확인해 보자.


user@user-test:~$ cat dfs.log



이로써 C언어로 설계한 디펜드 파일 시스템이 정상적으로 성능을 발휘 할 수 있는 것을 확인 할 수 있지만 코드를 보아서 알다시피 전지전능한 프로그램은 아니기에 폴더 안의 폴더 안에 발생하는 이벤트를 처리 하지는 못한다. 이를 해결하려면 더 추가적인 코딩이 필요하다.

또 마찬가지 실행시 마다 백업 경로를 단일로 갈아 치우는 단순한 방법을 사용 하기 때문에 이 프로그램을 활용하여 여러 프로세스로 실행해 실제 파일 시스템의 여러 중요 파일들을 한번에 방어 하지 못한다. 마찬가지 실전용으로 만들려면 bash를 적극 활용한 이중 교환적을 요구하는 높은 난이도의 복잡한 추가적 코딩이 요구된다.

하지만 이러한 방식으로 말미앎아 파일 시스템을 직접적으로 방어 할 수 있는 새로운 방식의 보안 시스템을 구축 할 수 있다는 것을 선 보인 좋은 계기가 될 것이며 파일을 변조 및 암호화 하여 비트코인을 달라 하는 랜섬웨어 악성코드 발동도 결과적으로 방어 할 수 있는 이상적 시스템을 구상할 수가 있다.

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


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



+ Recent posts