과거에 웹 서버를 구축하는 방식을 기록할려고 한다.

 웹서버를 구축하는데 까먹을 수도 있고, 요즘 다양한 방식이나 그런게 존재하기 때문에, 이렇게나마 조그만한 거라도 기록하지 않으면, 큰 일이 있을 것 같아서 기록하기로한다.


 먼저, CentOS 6.3을 가지고 리눅스를 설치했다.

 이 후에 리눅스를 이용해서 웹 서버를 만들것인데, yum을 이용해서 설치하는게 아니라.

 source 파일들을 받아서 설치하도록 한다.


 yum과 source 파일로 설치하는 것의 차이는 source 파일로 한다면, 사용자가 원하는 형태로 부분적으로 설치를 할 수 있는 특징을 가지지만, 반대로 yum에 비해서 복잡하고 잔 오류가 많이 발생한다.


 잔 오류가 발생하면, 거기에 맞춰서 고쳐나가야 되는 특징이 있기 때문에, 주의가 요구된다.


 참고로 source 파일로 설치를 할려면, 기본적으로 gcc와 glib, gcc-libs을 깔아 둬야 된다.


 이것은 yum으로 깔아줘야 된다. 그 이전에 souftware development workstation이라는 패키지로 설치하면 자동으로 설치가 된다.


 yum을 이용해서 gcc(GNU C Language Compiler)을 설치하는 과정을 먼저 작성한다.


 gcc와 함께, make(자동 컴파일 장치)을 이용도 사용하기 위해서 make또한 설치해야된다.


 먼저, yum은 웹하드에 저장되어 있는(ftp로 저장이 되어있는) 파일들을 불러와서 설치하는 장치이다. 그래서 인터넷 연결을 해야지 제대로 사용이 가능하다. 이걸 해결하기 위해선 이전글인 수동으로 eth0를 참조하면 된다.[각주:1]

 


 윗 방법으로 설치한다.

 httpd(Apache)는 gcc뿐만 아니라 gcc-c++(C++ 컴파일러)을 이용해서 httpd를 구현하기 때문에, gcc-c++을 인스톨하였다.


 이 방법 말고 정 불안하면, gcc와 gcc-c++와 make을 소스 파일로 가지고 있는 상태를 사용해도 된다.(단, 그럴 경우에는 초기 운영체제를 설치할때, 개발자 도구를 설치해야된다. 컴파일 후에 부딧침을 방지하기 위해서라도 rpm을 돌려서 삭제 작업을 해줘야 한다.)

 소스 파일로 하기 싫다면, rpm 파일을 사용해도 된다.(rpm 파일에서도 그냥, 컴파일 시키는 것과 유사하게 제작하는 것이기 때문에 문제가 될 것까진 아니다.)

 차이점은 사용자가 정의를 내려서 쓰느냐 안 쓰느냐의 차이일 뿐이다.


 그 외에도 make을 이용해서 컴파일 작업을 하기 때문에, make을 설치했다.

 결과를 보면, gcc와 g++, make을 입력했을때, 마지막 사진처럼 나오게 되면, 제대로 설치가 된것이다.


 참고로 필자는 httpd-2.4.6버전을 설치할 생각이다.


 웹에서 다운을 받기 위해서 wget 또한 설치하는게 좋은데, 그것을 위해서라도 yum install wget 또한 설치하는게 좋다.


 wget은 웹에서 들어가서 파일을 다운 받을 수 있게 만드는 장치로써 사용이 유용하다.


 정리하자면,


 yum install gcc gcc-c++ make wget -y


 이렇게 입력을 해주면, 필자가 필요한 장치는 어느정도 설치가 된다.

 참고로 그 외에도 yum을 이용해서 설치하는 일이 있을 것이다.

 지금은 그냥 컴파일을 할 수 있을 정도일 뿐이고, 라이브러리가 더 필요하다.


 필요한 라이브러리는 그때 그때마다 컴파일 하면서 조율하고, 뭐가 필요한지 표시할려고 한다.

  1. http://jihadw.tistory.com/112 [본문으로]
Posted by JunkMam
,

 리눅스는 ethx로 인터넷(정확하게는 유선 네트워크 장치를 뜻한다.) 무선 인터넷은 wlanx를 사용한다.[각주:1]


 기본적으로 네트워크는 설치하는 과정에서 자동 연결을 하지 않으면, 네트워크가 연결이 되지 않는다.

 단지 lo(local network;127.0.0.1)만 연결이 되는데, 이것은 그냥 자기 자신으로 연결하는 에코 IP이기 때문에 네트워크 프로그램을 외부에 연결해서 작업하지 않고 만들기 원할때 사용하는 것 말곤 없다.


 네트워크 장치자를 사용자가 설정하지 않는 이상은 부팅할때마다 설정을 해줘야 된다는 뜻이 된다.


 먼저, 수동으로 부팅시 네트워크를 연결하는 명령어은 ifup이라는 명령어가 있다.(일반적으로 있는 것이며, 그냥 /sbin/에 존재하는 명령어이다.)



 sbin에서 있는 ifconfig, ifdown, ifup등이 전부 다 네트워크에 관련된 명령어이다.


  - ifconfig : 현재 연결되어 있는 장치들의 정보를 출력한다.

  - ifdown : 특정 장치의 연결을 끊는다.

  - ifup : 특정 장치를 연결한다.


 윗 설명을 가지고 사용하면, ifconfig을 이용해서 현재 연결의 상태를 알 수 있다.

 


 여기 본다면, 기본적으로 lo(local연결 장치.)가 되어있다. 설정하는 파일명은 ifcfg-lo에 설정 정보가 들어가 있다.


 여기서 연결을 원하다면, ifup을 이용한다. eth0가 기본적으로 처리된다.


 


 연결이 완료되어서 본다면, 다음과 같이 eth0이 연결되는걸 볼 수 있다.

 만약에 무선의 연결을 원한다면, wlan을 이용해서 볼 수 있다.


 대표적으로 adb로 안드로이드 폰을 연결하게 되면, wlan으로 연결이 되는걸 알 수 있다.



 연결을 끊기 위해선 ifdown을 이용한다.



 다음과 같이 ifdown eth0을 이용하면, 연결이 끊어 짐을 알 수 있다.


 수동으로 하는 것은 매우 불편하고, 귀찮다. 웹 서버나 서버인 경우에는 다른데 올려 놓은 다음에 원격으로 작업을 하는 경우가 많은데, 이 경우에는 무슨 일이 발생해서 컴퓨터가 재부팅이 된다. 라면, 원격으로 연결을 못 하는 문제점이 발생한다.


 그래서 다음과 같은 방법을 이용해서 처리한다.


 먼저 ifcfg-eth0와 ifcfg-lo등 네트워크를 설정하는 파일은 다음과 같은 폴더에 위치한다.


 /etc/sysconfig/network-scripts/에 존재한다.

 

 이렇게 동작하여, 설정을 볼 수 있게 된다.


 여기서 ip을 설정하는 것을 한다. 대표적인 예로[각주:2]

DEVICE=eth0 HWADDR=d8:d3:85:c5:8e:4e ONBOOT=no HOTPLUG=yes BOOTPROTO=none NETMASK=255.255.255.0 IPADDR=10.0.0.15 GATEWAY=10.0.0.1 TYPE=Ethernet

 윗 처럼 되어 지는 경우도 있다.


 여기서 고정 IP을 이용해서 사용할때는 저렇게 설정을 해줘야 된다.

 하지만, 자동 IP을 이용하게 되면, 다음과 같은 설정이 된다.


 여기서 ONBOOT라는 설정이 있는걸 볼 수 있다.

 ONBOOT라는 것이 부팅시 자동으로 연결하도록 하는 설정으로, 사용자가 재부팅시에도 자동으로 점검을 한 후에 부팅 하게 만드는 장치이다.

 이걸 통하여 사용자는 수동으로 연결하지 않아도 자동으로 연결하는 시도를 하게 된다.


 변경하는 방법으로는 vi이라는 장치가 있다.

 vi는 리눅스에서 기본적으로 제공하는 에디터로 일반적인 메모장과는 차이가 있다.

 일반적으로 GUI(Graphic User Interface) 형태를 취하는 것도 TUI(Text User Interface)로 취하는 것도 아니다. 그냥 명령 shell 방식을 취하기 때문에 일반적인 사용자가 그냥 사용하기에는 불편함이 따른다.

 명령어를 어느정도 알고 해야되지만, 그것은 여기 게시글에는 다루지 않을 것이고, 그냥 다음과 같이 수정을 하면 된다.



 vi [파일명] 이렇게 하면, vi으로 특정 파일을 여는 작업을 할 수 있게 된다.



 vi을 열면 다음과 같은 형태로 나오게 되는데, 이걸 편집을 하기 위해선 'i'을 누르면, 된다.(i는 insert의 단축키라고 보면 된다.)



 방향키를 이용해서 이동한 후에 no을 yes로 수정하고 esc키를 누르면 명령을 받을 수 있는 모드로 변경이 된다.



 명령 모드에서 :(콜롬)을 클릭한 후에 w(write)와 q(quit)을 입력하면, 저장한 후에 나가게 되는 명령이 실행이 된다.


 명령이 완료되고 재부팅을 하면, 자동으로 연결이 되는걸 확인 할 수 있게 된다.


  1. 여기서 x(ethx, wlanx)는 장치의 숫자를 뜻한다. 예을 들어서 유선 네트워드 1,2,3이 있다면, eth0, eth1, eth2로 네트워크 장치가 붙는다. [본문으로]
  2. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-networkscripts-interfaces.html(2016-06-01) [본문으로]
Posted by JunkMam
,

 CentOS를 설치하여, 리눅스에 작업하는 것을 위해서 만들고 있다.


 CentOS의 사이트[각주:1]에 들어가면, CentOS의 ISO을 다운 받을 수 있다.(더 자세한 것은 Mirror Site에 들어가서 받아 가는게 더 정확하게 받을 수 있다.)[각주:2]


 CentOS는 레드햇에서 파생된 것으로. 원래, 리눅스는 리누스 토발즈라는 사람이 유닉스와 유사한 개인용 컴퓨터 커널을 만들게 되면서 시작이 되었다.

 리눅스 커널에서는 사용자가 다양하게 수정 및 개조를 하고 싶어하는 것은 가능하지만, 사용하기 위해서 설치하는 과정이 매우 어려웠다.


 리눅스 커널에서 우리가 사용하는 윈도우 같은 U/I로 변경할려면, 다양한 장치를 만들어야 된다.

 먼저, XWindows Library라는 걸 깔아야지, WIndows 처럼 마우스를 클릭하면서 컨트롤 할 수 있는 걸 만들 수 있다.

 그 외에도 사용자가 Chrome을 연결해서 사용하는 형식을 할려면, 또 작업을 해야될 것이. GNOME등 다양한 그래픽 작업을 해주는 Library을 설치해야된다.


 이것은 사용자가 쓰기에는 매우 불편해진다. Windows는 그냥 설치하면 쓸 수 있지만, Linux는 그걸 하기 위해서 설치해야될 것이 많이 필요하다.


 그래서, 리눅스에서는 Windows 등을 처리하기 위해서 리눅스 패키지를 모아서 정리해 놓은 것으로 다양한 운영체제가 파생되었다.


 레드햇, 우분투, CentOS, 칼리 리눅스, 안드로이드 등이 리눅스에서 파생된 OS들이다.


 그래서, 오늘 CentOS을 설치한 후에 이것 저것 테스트 하는걸로 할려고 한다.


 Linux을 설치하는 과정을 기록하고 다양한 설치 방법등을 기록하고 공개 및 정리를 할려고 한다.


 

 


 처음 새로 만들기를 해서 가상 머신은 만드는 과정이다.



 가상머신이 가질 메모리량으로 그냥 4G로 잡았다. 굳이 이렇게 할 필요는 없다.

 추천 메모리크기가 256MB라는 점을 보면, 굳이 메모리를 잡아 먹을 필요는 없다.



 가상 디스크로 가상 머신에서 보조 저장 장치로 사용할 파일을 설정하는 것이다.

 가상 하드 디스크를 추가하지 않으면, 새로 설정을 해줘야 된다. 그게 아니면, ODD(광학)이나 FD(플로피 디스크)로 돌리는 생각을 해야된다.


 기존 가상 하드 디스크 파일을 사용하는 것은, 기존에 작업한 가상 머신을 가지고 올 수 있는 것으로, 재 사용이 가능하다는 뜻이다.



 QEMU, VDI등 가상 머신에서 사용하는 종류들을 뜻한다.

 종류에 따라서 포맷이 달라지는 등이 있다.



 가상 머신이 완료된 사진이다.

 가상머신에서 시스템 내용을 볼 수 있고, 시작을 하면, 가상머신의 정보를 읽어서 돌수 있게 된다.



 CentOS을 클릭 후 설정(S)을 눌으게 되면, 사진 처럼 나오게 된다.

 여기서 저장소를 보면, 맨 처음 가상머신을 추가한 파일이 나오고, ODD 장치가 한개 추가 되어 있는 걸 볼 수 있다. 제거 할 수 있고, 추가 할 수 있다.


 시스템에서 있는 내용(부팅순서)에 따라서 부팅되는 순서가 바뀐다.

 


 CentOS을 삽입(혹은 윗 설정에서 ODD에서 ISO를 추가시킨 상태)에서 동작 시키면, ODD가 작동되서 CentOS 6.3의 설치 메뉴가 뜨게 된다.



 광학 미디어에 내장된 파일이 이상이 없는지 확인하는 과정으로 다운 받은 파일 혹은 광학 미디어가 문제가 없다면, 그냥 Skip해도 된다.(오래된 광학 미디어일 경우 확인을 해야되는 경우도 있다.)



 CentOS 6 Graphics 과정으로 맨처음 설치 메뉴에서 나온 곳에서 Text모드로 설치 실행을 하지 않으면, 가능한 Graphics로 설치하게 되어있다.



 설치하는 과정에서 언어를 선택하는 것으로 Korean(한국어)을 설정하면 쓰기가 편해진다.



 키보드 사용하는 정보인데, '한국어'라는 모듈이 깔리지 않는 이상 굳이 한국어 키보드를 쓰든 영어 키보드를 쓰든 상관은 없다.(영어에서 파생된 형태이니...)





 사용자(정확하겐 시스템 관리자)의 호스트 명과 네트워크 연결 설정창이다.

 고정 IP일 경우에 이걸 수정하고 Booting 후에도 작동을 했으면 한다면, 여기서 수정을 가해야된다.



 시스템 시간을 설정하는 것이다. Korean으로 설정하는 등 한국으로 설정을 해서 자동으로 서울로 잡아 준 것 같다. 안 그러면 영국이나 미국으로 설정되어 있는 경우도 있기도 한다.



 Windows 위에 리눅스를 덮어 씌울때 주의 해야되는 경우다.

 필자는 VM을 사용하고 있지만, VM의 단점은 VM이 진짜 하드웨어 상황을 완벽하게 시뮬레이팅을 해주지 않는다. 그러므로, 가끔 윈도우 위에 리눅스를 깔아야 되는 경우도 있다. 이때, 모든 공간 사용을 사용하면, Windows의 정보까지 모조리 삭제하는 경우가 생기므로, 그런것은 피하는 방향으로 작업을 해야된다.



 설정하는 것.

 CentOS 등 리눅스 OS등은(리눅스 커널 등 기본 리눅스 OS 제외) 사용자가 사용하기 편하게 하기 위해서 패키지화 시켜서 모아둔 것들이라고 했다. 그래서, CentOS에서 사용자가 원하는 패키지들을 묶어서 고를 수 있게 만들어 져있다.


 - Desktop은 사용자가 XWindows등을 사용할려는 것 및 Editor등을 포함시켜 놓은 상태를 말하는 것이다.

 - Minimal Desktop은 XWindows 같은 데스크탑의 최소 패키지.

 - Minumal은 그런것 전혀 없는 순수 리눅스 OS를 쓰기 위해 필요한 것들

 - Basic Server는 기본 서버(웹 서버등)을 위한것.

 - DataBase Server는 데이터 베이스만 컨트롤 하기 위한 서버.

 - Web Server는 웹서버를 위한 서버.

 - Virtual Host는 네임 서버등 가상화를 위한 서버.

 - Software Development Workstation는 에디터 및 디버깅 툴들을 가지는 패키지 이다.


 일반적으로 RPM(레드햇의 패키지) 모둠들을 가지고 설치하는 것이기 때문에 중요한 것이 아닌 이상 그냥 Minimal로 설치하는 것이 나은 경우도 많다.


 밑에 있는 지금 선택(C)을 선택하고 다음으로 넘어가면, 밑의 사진처럼 나오게 되어 사용자가 필요한 것만 뽑아서 설치할 수 있다.



 필요한 부분을 패키지로 나눠서 볼 수 있는 창이다. 필요한 것들만 체크해서 설치하면 된다.

 단, 이걸 제대로 사용할려면, ISO 파일을 전부 다 받아 둬야 되는 경우도 생기므로 왠만해선 Source 버전(혹은 RPM버전)에서 자주 사용할 것들만 다운 받아서 사용하는게 낫다.

 참고로 CentOS의 해당 버전에서 제대로 동작하는 Source 버전과 RPM 버전은 Mirror에서 제공해주므로, 그걸 사용하는걸 추천한다.




 인스톨이 끝나서 재부팅된 후에 나오는 화면이다.

 여기서 나온 창은 로그인 창으로 윈도우스에서 맨처음 나오면, 로그인 하도록 만드는 창과 동일한 창이라고 보면 된다.


 여기서 초기에 사용자가 설정이 되어 있지 않기 때문에 현재 있는 사용자는 root(시스템 관리자) 밖에 없게 된다.


 참고로 시스템 관리자는 보안을 위해서라도 패스워트를 반드시 입력하게 되어있다.(설치 과정에서 스크린 샷을 빼먹었지만, 설치하게 되어 있다.)


 


  1. https://www.centos.org/ [본문으로]
  2. http://mirror.symnds.com/distributions/CentOS-vault/ [본문으로]
Posted by JunkMam
,

 Linux등을 공부하기 위해서는 직접 해당 운영체제를 깔아서 사용해보는게 중요하다.


 그러기 위해선, 운영체제를 깔아야 된다. 하지만, 일반 사람들과 기타 사람들은 컴퓨터를 여러대 모든 상황에 맞는 기기를 맞춰서 가지고 있을 수 없다.(그렇게 할려면, 돈도 돈이지만, 공간이 부족해질 것이다.)


 이것을 해결해주기 위해서 나온 것이 VM;Virtual Machine 이라는 것이다.


 VM이란, 가상으로 유사 하드웨어 장치를 작동시키고 이것을 사용자에게 제공하는 프로그램이다.


 이것이 가능한 이유는 먼저 하드웨어가 과거에 비해서 성능이 향상되어진 것도 있으며, 번역 기능의 향상으로 본래, 타 CPU에서는 동작되지 않는 장치를 가상으로 동작 시킬 수 있기도 되었다. 하지만, 그래도 소프트웨어가 아무리 노력해도 하드웨어 만큼의 성능을 낼 수 가 없다.(이것은 어쩔 수 없다. 본래 CPU가 동작하는 원칙과 벗어난 방식을 하는 경우도 있고 하기 때문에...)

 참고로 CPU가 가상머신을 지원해주지 않으면, 제대로된 가상머신이 동작을 하기 힘들게 된다.


 우리가 잘 알고 있는 Java VM, Flash Player 또한 일종의 Virtual Macine이다.


 VM 종류에서는 여기서 설명할 Virtual Box라는 것과, Bochs(Box라는 뜻이라고...) VMWare 등이 있다.(대표적으로 사람들이 알고 있는 장치를 말하는 것이다.)


 여기서 무료이자.(Bochs도 무료이다.) 소스 공개형인 Virtual Box을 사용하고자 한다.

 Virtual Box는 Intel CPU 위주로 작동되는 프로그램으로 Oracle에서 제공하는 것이다.


 먼저 Virtual Box의 사이트에 들어간다.

 다음과 같은 사이트가 뜰 것인데, 여기서 Download VirtualBox 5.0을 클릭한다.

 만약, 다른 버젼을 원한다면, 좌측에 있는 메뉴에서 Downloads을 클릭하면 된다.



 여기서 Windows나, 자기에게 맞는 OS를 찾아서 클릭하면, 다운을 받을 수 있게 된다.

 밑에 내려가면, 공개한 소스가 존재하며, 개발 도구(SDK)등도 얻을 수 있다.


 다운을 받게 되면, Install이 있는데, 이걸 클릭해서 동작 시킨다.


 

 


 필자는 E:\에 용량이 남아도니, E:\에 적용 시킬 것이다.(참고로 C:는 SSD인데, SSD는 쓰고 적는게 많을 수록 수명이 빨리 닮는 특성이 있다. 라고 하니 주의 할것.)

 


 여기서 Next을 적용하시키면, 설정하는 곳으로 넘어가게 된다.



 가상 NetWork을 설정하는 것으로, ip가 한 개 더 추가 되는 것을 묻는 것이다.


 설치를 하게 되면, 마지막으로 밑의 프로그램이 작동되면, 성공적으로 설치가 된 것이다.


 이렇게 한 후에 설치가 완료 된 것이며, 이제 가상 머신으로 동작 시키면 된다.


 VM으로는 다양한 작업을 할 수 있는데, 옛날 컴퓨터 게임이라. 과거 OS을 깔아서 작업을 해야될 경우.

 Linux을 설치하여, 다양한 작업을 할 경우.

 OS을 제작하기 위해서 작업하는 경우.


 기타 다양한 방식을 이용해서 작업이 가능하게 된다.


 보통 OS을 제작하기 위해서는 Virtual Box을 사용하는 것보단, Bochs을 사용한다고 한다.(보통이라고 하는데, 정확하게는 모르겠다.)


 참고로 Bochs는 안드로이드 에뮬레이터로 사용한 적도 있다.(과거 Android Eclipse에서 사용할때, Bochs가 다운 받아져 있는 걸 확인 되었었다.)

Posted by JunkMam
,


 



 어떤 분께서 이런 질문을 하셨어.(필자가 가장 바빠서 신경도 못 쓰고 있을때, 올리셨다.)

 늦었지만, 답변을 작성 하기로 한다.


 ADBKeyBoard에 관련되서는 이전글[각주:1]을 읽어 보면, 답변이 될 것같다.


 먼저 ADBKeyBoard[각주:2]가 필요하다.

 

 ADBKeyBoard란, UNICODE을 ADB의 BroadCast의 데이터를 키보드 apk을 통하여 입력을 하게 만드는 것이다.


 ADB로만으로 UNICODE을 넣게 만드는게 아니라는 말이다.(만약, ADB로만 UNICODE을 넣길 원한다면, ADB을 뜯어 고쳐라.)


 1. ADBKeyBoard을 다운 받는다.(필자는 ADBKeyBoard.apk가 있지만, 지금은 구할 수 없어져서 소스를 다운 받았다.)

  소스를 받고 싶으면, 이전글을 참조 하실길...


 


 2. APK로 컴파일해서 해당 폰에 설치한다.(에뮬레이터에 설치한다.)


 3. 설치된 폰에서 키보드 설정을 한다.

     혹은, ADB에 다음과 같은 명령을 준다.


     adb -s 해당 폰 shell ime set com.android.adbkeyboard/.AdbIME


     키보드 설정하는 명령어다.

 


밑에 ADB Keyboard {ON} 이라고 되어 있으면, 제대로 작동 중인 것이다.


 4. 3. 까지 하면, 이제, ADB의 명령으로 키보드를 입력할 수 있게 되었다.

    이제, 브로드 캐스트를 이용해서 입력하게 만든다.

    


 깜빡하고, "한글 입력" 이렇게 스페이스가 붙었는데... 실수한 것이다.(보면, broadcast에서 입력 부분이 오류나는걸 알 수 있다.)

 스페이스 부분은 특수문자(\space 라는 형태로 파싱을 해서)를 추가시켜서 만들도록 하면, 입력이 된다.


 참고로 이전글에 소개한 사이트에서 이런 설명이 다되어 있다.(영문이라서 그렇지...)

 

  1. http://jihadw.tistory.com/103 [본문으로]
  2. https://github.com/senzhk/ADBKeyBoard [본문으로]
Posted by JunkMam
,

 webp의 lossless 결과물을 비교해보았다.


 비교해보는 이유는 bmp에서 webp로 바꾼 다음 bmp로 바꿔서 원본이랑 디코딩한 결과물을 비교해보니, 파일이 전혀 바뀌어 져있었다.


 7z h -scrcsha256으로 하여 sha256의 값이 바뀐 것뿐만 아니라, hexeditor로 읽어 본 바이너리 내용물도 바뀌었다.(sha256으로 확인했을때, 다른 것은 당연히 바이너리 내용물이 다르다는 것을 알 수 있다.)


 그래서 진짜 내용물이 손실 없이 되는지 궁금했다.


 먼저 webp에서 인코딩을 이용하고, 다른 프로그램을 이용해서 비교하는기로 했다.


 webp에서 인코딩을 이용하기 위해서 샘플로 나와있는게 있다.[각주:1]


 cwebp을 이용해서 인코딩을 표현할 수 있다.


 libwebp이라고 하여, bin파일과 함께 include 및 라이브러리를 구성할 수 있다.


 PNG을 이용해서 만들어지는 무손실 압축 그래픽인 것에서 webp은 png보다 용량을 적게 할 수 있는걸 확인 했다.



 정말 webp에서 그래픽이 손실이 심할지 궁금해서 확인 하기 위해서 비교 프로그램을 돌리기로 했다.[각주:2]



 libwebp을 다운 받고.[각주:3] 설명에 맞춰서 사용해 보았다.



 cwebp -q 100 -lossless test.bmp -o text.webp


 이렇게 하면, 압축률이 높은 무손실 압축이 된다. 라고 한다.[각주:4] 그래서 이걸 이용해서 압축 했다.


 png와 비교했을 경우. 용량이 약 10%정도 감소되는걸 확인 했다.


 내가 궁금한건 png의 용량 감소가 아닌 내용물의 무손실인지 확인 하는 것이다.


 그래서 bmp으로 추출하는걸 해보았다.


 dwebp -bmp test.webp -o test_1.bmp


 이렇게 해서 나오는 결과물인 test_1.bmp과 test.bmp을 diffimg을 이용해서 제작하도록 했다.


 결과물을 얻기 위해서 test.bmp을 원본으로 하고, test_1.bmp랑 비교하는걸 해보았다.

 결론은 webp에서 lossless는 bmp의 형태가 달라서 그런 것이지.(무압축 bmp으로 나타낸다.) 값이 변화되는건 아닌걸 확인 하였다.


 webp에서 lossless를 이용하면, 확실히 무손실 압축이며, png보다 용량이 10%정도 적어진 파일이 완성된다는 것을 알 수 있게 되었다.


 실수로 cwebp -q 100만을 이용해서 압축하고 푸니, 원본 bmp보다 어두워진 bmp 파일이 만들어 졌다.


 추측하곤데 webp는 명암을 증가 시켜서 화질을 개선하고, 이것을 압축하는 방식인 것 같다.


 맞는진 모르겠지만, lossless에선 확실히 무손실이 된다. 라는걸 알게 되었다.

  1. https://developers.google.com/speed/webp/docs/cwebp (2016-05-25) [본문으로]
  2. https://sourceforge.net/projects/diffimg/(2016-05-25) [본문으로]
  3. https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html(2016-05-25) [본문으로]
  4. https://developers.google.com/speed/webp/docs/cwebp#name(2016-05-25) [본문으로]
Posted by JunkMam
,

 포토샾이나 드림위버를 이용해서 작업을 하다가 TEMP파일에 임시 파일이 들어가는 걸 확인 했다.


 그런데, 포토샾이라는 표시를 위해서 'PhotoShop tmpxxxxx' 이런식으로 파일이 생성 되는걸 확인 했다.


 TEMP 파일을 생성하는걸 보니, 파일명을 따로 정의 내리는게 없어 보였다.


 TEMP 파일 생성의 함수를 사용하는게 아니라면, 파일을 새로 원하는 형태로 만들었다. 라는 판단에 시스템 변수의 값을 출력하는 방법을 찾아 보았다.


 원본


 찾아보니, 다음과 같은 블로그에서 설명이 되어 있었다.


 시스템 변수를 찾는 방법으로 #include <stdio.h>에 정의 되어져 있는 getenv()라는 함수를 사용하거나 환경변수 envp을 이용해서 변수를 찾는 방법을 사용했다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
//#include <stdlib.h>
 
 
int main(int argc, char* argv[], char* envp[]) {
  char *s;
 
  // 지정한 특정 환경변수만 출력
  s = getenv("PATH");
 
  if (s != NULL)
    printf("%s\n", s);
  else
    fputs("그런 환경 변수가 없습니다\n", stderr);
 
  // 모든 환경변수 출력 (envp 이용하여)
  for (int i = 0; envp[i] != NULL; i++)
    printf("%s\n", envp[i]);
 
  return 0;
}
 
cs


 이렇게 해서 환경변수를 출력할 수 있으며, getenv을 이용해서 원하는 변수를 받을 수 있으니, 이걸 이용해서 TEMP 파일을 생성 할 수도 있을 것 같다.


 하지만, C언어의 tmpfile을 이용하는게 더 나을 것 같다.

Posted by JunkMam
,

 최근에 LEA관련된 암호 방식이 있다는 걸 확인해서(필자는 DVD에 보관하길 원하는데, 혹시 모르는 안전을 위해서도 있고... 이것 저것 신기한 것 같아서) 연습삼아 만든걸 올린다.


 LEA는 최근 우리나라 KISA가 만든 경량화된 대칭키 암호 방식을 뜻한다.


 대칭키 암호는 단일 암호키를 가지고 암호/복호화를 하기 때문에 키를 알면 누구든지 암호/복호를 할 수 있는 단점을 가지고 있지만, 반대로 간단한 암호 방식으로 알고 있다.


 대표적인 암호로 AES가 있는데, LEA는 여기에 있는 AES의 속도 보다 1.5~2배 빠르다. 라고 나와있다.(실제로 나온 과 비교해보니 빠르다.)


 그래서 이걸 library을 다운받아서 적용시키는 작업을 해보았다.



 -소스-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
 
#include "include/lea/config.h"
#include "include/lea/lea.h"
 
#define ENC {2323534323123050894203424518223}
 
unsigned char mk[16= ENC;
 
unsigned int mk_len = 16;
 
unsigned char ctr_enc[16= ENC;
 
unsigned char pyn_buffer[16];
//unsigned int pyn_buffer_len = 16;
 
unsigned char cyp_buffer[16];
//unsigned int cyp_buffer_len = 16;
 
int main()
{
    size_t M = 0;
 
    LEA_KEY key;
 
    FILE *fip = NULL;
    FILE *fop = NULL;
 
    fip = fopen64("test","rb");
    fop = fopen64("test.LEA_CTR","wb");
 
    lea_set_key(&key, mk, mk_len);
 
    while((M=fread(pyn_buffer, sizeof(char), sizeof(pyn_buffer), fip))!=NULL)
    {
        lea_ctr_enc(cyp_buffer, pyn_buffer, M, ctr_enc, &key);
        //lea_ctr_dec(cyp_buffer, pyn_buffer,M,ctr_enc,&key);
        if (fwrite(cyp_buffer, sizeof(char), M, fop) == 0)
        {
            fclose(fip);
            fclose(fop);
            _unlink(fop); // 에러난 파일 지우고 종료
            return -1;
        }
        //lea_ctr_enc(cyp_buffer, pyn_buffer, pyn_buffer_len, ctr_enc, &key);
        //fwrite(cyp_buffer, cyp_buffer_len, 1, fop);
 
    }
 
    fclose(fip);
    fclose(fop);
 
    return 0;
}
 
cs



 일단, 위에 소개한 앱과 다른 점은 모드가 다르다.


 위에 소개한 앱의 암호 방법은 ECB방식이다. 이 방식은 암호키와 평문을 사용하는데, 딱 1:1로 처리하기 때문에 암호문이 단조로워 질수도 있다는 점이다.


 실제로도 이미지(RAW)파일을 암호화 시키니깐, 색은 없지만, 형태는 보여져서 대략적인 그림을 알 수 있는 특징을 가졌다.

 이것은 반대로 말하면, 반복적인 평문일 경우엔 뚫리기 쉬워진다는 뜻이 된다.(암호문의 반복 패턴을 이용해서 암호키를 유추할 수 있으며, 이 유추된 키를 이용해서 다른 암호문들을 다 풀기 시작하면, 평문이 금방 나오게 된다는 점이다.)


 그래서 나는 CRT 방식이 라이브러리로 적용이 되어 줘서 이 방법을 사용하였다.


 이 방법은 CRT라는 암호키 외의 정보를 가지고 있어야되며, 이것과 다른 암호문을 만들때 변형 시켜서 사용하기 때문에 단조로운 형태를 취해지지 않는다는 특징을 가지게 된다.


 실제로도 RAW파일을 이용해서 만드니 이게 어떤 형태의 파일인지 정확하게 알기 어려웠다.


 다음은 RAW파일을 억지로 BMP파일로 바꾼것과 LEA_ECB로 암호화된 파일을 억지로 BMP으로 바꾼 것. LEA_CRT로 암호화된 파일을 억지로 BMP으로 바꾼 것이다.


 억지로 바꾸기 위해서 MSPAINT을 이용해서 24bit그림 파일로 바꾸었고(RAW파일의 대상은 내 휴대폰이다.) 수정할때 사용한 에디터는 HxD이다.


 

LEA_ECB 방식으로 암호화한 결과를 BMP으로 바꾼 것.


LEA_CRT로 암호화 한걸 BMP으로 바꾼 것.


원본



 RAW파일을 강제로 가지고와서 그려지게 했기 때문에 조금 깨지게 되어 있지만, LEA_ECB로 해서 만들어진 것과 비교한다면, 약간의 잔상이 원본과 유사한 부분이 있어 보임을 알 수 있다.


 파일을 암호화 하는 것 중에 하나는 랜섬웨어 같은 나쁜 용도로 사용되는게 아니라 원래는 내 파일을 혹은 내 문서/내 메세지를 원하지 않는 사람(해커)에게서 지키기 위해서 사용하는 방식이다.


 LEA방식과 AES 방식을 비교해보면, LEA 방식이 확실이 빠름을 느낄 수 있었다.

 이걸 이용해서 개인 파일을 해커에게 지키거나 하는 방법도 생각해보는 것도 좋을 것 같다.


 사실, 국가 보호법에서 사람의 휴대폰을 볼 수 있다. 이런 식의 이야기가 있기도 하고, 내 개인 적인 정보를 DVD에 기록하기 전에 한번이라도 적용 시킬 수 있는 내 개인적인 장치를 만들고 싶기도 했다.


 LEA는 최근에 내왔지만, 기사에선 LEA가 암호화에서 3~5위 안에 들어간 방식이라는 말을 들었기 때문에 빠르게 암호화를 원한다면, 한번 제작해보는 것도 좋을 것 같다.


 사실 라이브러리를 적용시킨 사례가 적은 것도 있는 것 같다.


 여기서 CRT는 사용자(개발자) 마음대로 적용 시켜도 되는데, 저렇게 고정 시켜서 적용 시켜도 되는지는 모르겠다.

 라이브러리 사용법은 적혀 있지만, 예제가 적은 점이...



 참고로 Block암호화 방식이기 때문에 늘어나는 것도 줄어 드는 것도 없다. A라는 용량의 파일을 암호화 하면, A라는 용량으로 1:1크기의 암호다.


 큰 용량일때, 압축이 가능하다. 라면, 압축시키고 암호화 시켜야된다.(아니면, 분할시켜서 보내던가...)

 그렇지 않고, 암호한 후에 압축하면 효율성이 거의 0%이다.

Posted by JunkMam
,


 오늘 화나는 뉴스 하나를 보고 이 글을 올린다.


 뉴스


 정말 내용을 보면, 주장이 터무니 없는 이야기임을 IT 업자들은 알 수 있을 것이다.


 뉴스의 주장은 이것이다.

 "구글은 바둑의 모든 경우의 수를 비교하는 프로그램을 사용하기 때문에, 이세돌 9단이랑 경기가 될 수 없다. 그리고 앞서 말한 방식이기 때문에 해당 프로그램(알파고)는 '인공지능이 아니다.' 그래서 구글이 전 세계를 대상으로 '사기'를 친다."


 거기에 대한 근거는 다음과 같다.


 1. 1200개의 CPU와 176개의 GPU을 사용하기 때문에 1:1의 경기로써 맞지 않다.

    특히, 네트워크 통신을 하기 때문에 클라우딩 컴퓨팅을 하여, 1:1 경기에 맞지 않다.


 2. 브루드포스(Brute Force;무차별 대입방법)을 사용하기 때문에 바둑의 모든 경우의 수를 가지고 푼다. 이것은 모든 정수들을 다 보고 두는 것이기 때문에 컨닝이다.


 윗 근거가 IT 업체 즉, 프로그래밍 하는 사람들로써는 정말 말도 안되는 억지 주장이다. 라는걸 알 수 있다.


 그리고 초 1~중 3 까지 바둑을 취미삼아서 뒀던 한 명의 인간으로 이해가 되지 않는다.


 정말, IT 전문 변호사. 라는 말이 무색할 정도로 졸자스러운 발상이다.

 해당 변호사는 웃긴게, 페이스북 스타가 되었다. 라면서 자랑질까지 했다. (이메일은 동일하다.) 이것은 아직 제대로 된 정보가 아니다. 그래서, 취소선을 취하겠다.(하지만, 이메일은 동일하다.)

 (2016-03-12 12:50에 추가)

 해당 변호사의 경력이 올라와있는 사이트가 있길래 봤는데, 클라우드 시스템(저장형태)와 인터넷 통신, 1999년도에 C++ 마이크로 소프트로 공부했을 정도일 뿐이다.

 즉, 소프트웨어의 이해가 깊은게 아니라 법률이 깊은 사람이다. 그런 사람의 주장에 속고 있는거다.

 

전석진 변호사/참조 : http://www.myitrevolution.com/?author=1(2016-03-12)



 그리고 이 주장이 기사로 나오면서 엄청 공감하는 사람들이 많다는 점에서 탄식을 표하게 되었다.


 윗 주장에서 중요 포인트는 

 구글이 전 세계에게 사기를 친다./알파고가 인공지능이 아니다./바둑의 모든 수를 구글 클라우드에 다 저장 되어 있다./클라우드 네트워크를 사용해선 안된다.


 먼저, 클라우드 시스템을 사용해선 안된다. 라는 말은 웃긴 말이다.

 하드웨어로서 CPU는 클라우드 시스템을 사용하지 않고는 슈퍼 컴퓨터를 만들 수 없다.

 IBM의 Deep Blue는 가능했지 않느냐? 라고 말한다면, 지금의 슈퍼 컴퓨터와 Deep Blue는 차원이 다르다. Deep Blue는 최상의 하드웨어를 제작하여 연산 속도를 만들어 낸 기기이다.

 정말 단일 슈퍼 컴퓨터. 라고 칭해도 될 것이다.

 하지만, 여기서 알아야 될 것은 하드웨어의 발달이다.

 CPU의 발달이 정확하지만, 이게 점점 빠르게 발전해 나가는 중의 컴퓨터이다.


 하지만, CPU의 발달은 점점 늦춰짐이 보여졌다.


 다음은 CPU의 Hz(처리 속도)를 그래프로 나타낸 것이다.


[각주:1]


 윗 그래프에서 CPU의 발전 상태를 보면, 알 수 있을 것이다.

 딥 블루가 나온 시기는 1996년초이다.

 보면, CPU가 점점 극진적인 발전이 보이기 시작한 시기이다.(이때도 Deep Blue는 엄청난 CPU연산을 위해서 수십개의 CPU을 박아둔 단일 슈퍼 컴퓨터였다. 즉, CPU가 많아서 반칙이다.는 Deep Blue에 조차도 적용해야지 맞는 말인 것이다.)[각주:2]


 하지만, 2000년 이후의 CPU의 발전 상황을 봐라.

 점점 10GHz이하(약, 4.4GHz가량에서)에서 점점 수렴해 나가는 것 처럼 증가폭이 점점 떨어진다.


 이 이유는 물리적 제약 때문에 그렇다.

 전문적 용어는 'Power Wall'(전력 장벽)[각주:3]이라고 한다.

 이것은 쉽게 말해서 소비 전력과 발열량 증가에 의해서 더이상 전기적 효과를 내기가 어렵다. 라는 것이다.

 그렇다 연산코어 증가(멀티 코어의 시작)가 되었다.

 괜히, 멀티 코어가 된게 아니라는 말이다.


 하지만, 이 멀티 코어도 문제가 되는 점이 있다.

 문제는 CPU의 복잡성이다. 코어를 늘리기엔 CPU 디자인이 엄청 복잡하게 되어 버린다.

 그 뿐만이 아니다. CPU 디자인에 따른 제작 단가의 증가. 컨트롤의 복잡함. 등... 들여야 되는 비용이 엄청나다. 거기다, 그렇게해서 빨라지면 이득이지만, 별 차이가 없다.


 프로그램에 따라선 CPU0가 다 먹어 치워 버려서 프로그램이 버벅거리는 걸 볼 수 있었을 것이다.

 즉, 컨트롤 및 그런 것이 속도의 문제가 엄청난 장애를 가지게 되버렸다.


 이걸 타파하기 위해서 나온 방법 중 하나가 클라우딩 네트워크(병렬 처리 네트워크)이다.


 이것은 아주 간단하다. CPU의 제약이 물리적인 이유라면, 처리할 데이터들을 나눠서 처리하면 되지 않겠는가?

 이것이 병렬처리 네트워크의 목적이다.

 그래서 CPU를 1개씩 가지는 컴퓨터 2대 이상을 가지고 네트워크에 연결해서 서로 통신하면서 병렬 처리하는 것이다.

 이 병렬 처리를 통하여 연산 속도를 비약적으로 올릴려고 꽤한 것이다.(네트워크 통신이 좋아야되며, 여전히 남는 병렬 처리에 따른 컨트롤, 네트워크 통신에 따른 병목 현상 등 단점은 존재한다.)


 ()에 말한 단점 때문에 처리하는 속도가 아무리 해도 많이 안 늘었다.

 그래서 최근에 떠오르는게 있는데, 그것은 바로 GPU이다.

 GPU는 CPU와 다르게 엄청난 코어를 가지고 있다.(단, 실수 처리하는 코어는 싼 GPU에선 없다 싶이 한다.)

 그래픽 처리는 엄청난 연산이 필요한 것이다.

 특히, 엄청 픽셀이 많을 수록 엄청난 연산이 필요하다.

 하지만, GPU는 그걸 처리한다. 이유는 미친 듯한 코어수. 거기에 맞춰진 각각의 메모리.들이다.

 이게 가능한 것은 솔직히 CPU가 비싼 이유는 실수 처리, 명령어 처리이지만, GPU는 정수연산 처리만 있고, 명령은 CPU에 받는다. 대충 그런식의 형태이기 때문에 GPU는 미친 듯한 코어량을 발휘한다.


 그래서 앞서 말한 클라우드 네트워킹/수십개의 CPU/수백개의 GPU가 있다고 해서 문제가 없다.

 왜냐? 그것은 전부 다 연산속도를 위한 것들이기 때문이다.


 그러면, 1.의 근거와 클라우드 네트워크를 사용해선 안된다. 라는 말이 정말 터무니 없다는 걸 알 수 있다.


 그냥 연산 속도를 높이기 위해서 그렇게 한걸 가지고 씨알도 먹히지 않는 글은 최대한 조심히 적어야 된다는 뜻이다.


 웃긴 이야기는 2.의 근거이며, 그래서 알파고가 인공지능이 아니며, 바둑의 모든 수는 클라우드에 다 저장 되어있다. 라는 것이다.


 정말 웃음만 나온다. 정말 나의 감정을 표현하는 그림을 올리고 싶지만, 이 글의 분위기를 해칠까봐 그냥 넘기기로 한다.


 일단, 바둑의 모든 수는 클라우드에 다 저장 되어 있다.

 이것은 말이 안된다.

 그래서 이게 되기 위해서 현재 나온 기보들의 내욜을 클라우드에 기록해뒀다. 라고 해보자.

 그러면, 이세돌 9단의 1국때와 2국때의 놀라운 한수는 그전 기보에 대부분 있어야 된다.


 하지만, 없다.


 없기 때문에 모든 기사에서 놀라지 않았던가?[각주:4][각주:5]


 그러면, 모든 바둑의 수를 만들어서 클라우드에 다 저장되어 있다. 라고 해보자.

 바둑은 그냥 수만 본다면, 361!가지가 필요하다.

 대충 계산기를 두들기면, 1.43*10^768개이다.


 이것은 거진 뚫리지 않는다는 RSA 2048bit(총 x^2048 = 3.23*10^616)보다 많은 경우의 수 다.


 RSA 2048bit 암호를 뚫는데, 이론적으로 거진 10만년 가량 걸린다고 떠들었다.

 그런데, 판후이 2단을 48개의 CPU로 이긴 알파고[각주:6]가 모든 바둑의 수를 클라우드에 저장했다?

 구글이 딥 마인을 인수한지 2년만에?[각주:7]


 이 무슨 개 껌 논리인가?


 저게 맞게 돌아간다면, FBI는 애플에게 정보보안지원 요청따윈 필요 없다. 왜냐? 그냥 미친 듯한 클라우드 네트워크와 미친 듯한 컴퓨터 댓수로 밀어 버리면 장떙이다.(이것은 모든 암호에서 100% 뚫릴 것이다. 라고 말했다. 문제는 그만큼 들인 시간이 가치가 있겠느냐? 로 모든 암호는 시간 늘리기 싸움이다.)

 그게 안되기 때문에 요청을 하는 것이다. 그리고 미친 듯이 충돌 테스트와 약점 테스트로 우회로를 만들려고 한 것이다.


 그런데, 바둑은? 바둑에 우회로가 있긴 한가? 우회로를 컴퓨터에게 어떻게 입력 시킬 것인가? 바둑의 모든 경우의 수에 1%도 못 미치는 바둑 기보를 보고?


 우회로가 있긴 한가. 이건 바둑 기사들 모두에게 물어봐도 정석 말곤 없다. 라고 할 것이다. 뭐라고 말할 수 없는 무언가. 그게 있기 떄문에 바둑을 두는게 재밋는 것이다.(그리고 수를 예견해보는 것이 개관의 즐거움이다.)


 그런데, 꼴랑 4자리의 비밀번호가 있다면, 0000-9999을 전부 다 입력한 결과로 비밀번호를 찾는 무작위 대입법으로 바둑의 모든 수를 가지고 있다?

 웃기지 마라. 비밀번호 최소 8자리 이상, 특수 기호, 숫자, 영어 대/소문자를 섞어서 만들어라는게 괜히 있다고 보느냐?


 숫자만 적어도 1자리수는 10가지를 가지지만, 2자리수는 100가지 8자리수는 10^8가지의 경우의 수가 생긴다.


 경우의 수를 무시하지마라.



 그리고 만약, 바둑의 좋은 수들을 전부다 클라우드에 저장하고 있다고 하자.

 그러면, 거기에서 진짜 좋은 수를 어떻게 찾을 것인가?

 그게 되었다면, 이미 몇년 전부터 진짜 좋은 수를 찾아 내는 컴퓨터가 나왔을 것이다.

 하지만, 그게 되지 않았다.


 왜냐? 컴퓨터는 데이터가 있어도 그걸 진짜 좋은 수인지 모르니깐,


 예을 들어보자.


 1+1+1+1+1+1

 1+1+1+1+2

 1+1+1+2

 1(2*3)

 3+3

 3*2


 자, 결과물은 전부다 동일하다.

 어느게 더 효율적인가?


 컴퓨터에게 어떻게 하면, 효율적이고, 동일한 결과를 알려줄 수는 있을 것이다.

 하지만, 입력에 따라서 바뀌어 져야된다면?(바둑처럼)

 프로그래머가 그걸 전부 다 예상하면서 프로그램을 작성 할 수 있을까?


 정답은 No!


 절대까진 아니지만, 판이 커지면 커질 수록 프로그래머가 입력 할 수 있는 한계점이 분명히 존재한다.


 그렇다면, 그걸 타파해야된다.


 데이터들을 엄청 많이 가지고 있어도 그 데이터들을 활용하고 처리할 줄 아는 것. 그것이 인공지능인 것이다.


 물론, 내가 말하는 인공지능은 약한 인공지능에 속한다.


 강한 인공지능은 내가 생각할 수 없을 정도로 엄청난 것이니 넘어가자.


 하지만, 데이터가 클라우드에 들어가 있고, 그걸 비교하기 때문에 인공지능이 아니다. 라는 것은 막말 중에 올해의 엄청난 막말이다.


 인공지능[각주:8]은 데이터 마이닝[각주:9]에서 없어선 안되는 필수적인 기술이다.


 그래서 빅 데이터 다음으로 열광하게 된 것이다. 인공지능인것이다.


 인공지능의 종류는 참고된 위키에 보거나 뉴스에 찾아보면 알 수 있듯이.


 OCR, 번역기, 음성 인식, 글자 인식 등등 입력 받은 데이터를 가지고 있는 데이터와 비교하여 자동으로 처리하는 것이다.


 그런데, 구글이 만든 것이 말도 안되는 무작위 대입 방법을 통해 만든 방대한 데이터를 기반으로 어떻게 처리해야 될지도 모르는 데이터와 입력 데이터를 어떻게든 비교해서 두는 비교 프로그램이기 때문에 인공지능이 아니다. 라는 주장이 맞다고 생각하는가?


 도대체 어디서 웃기지도 않는 말로 이야기하는지 모르겠다.


 이미 딥 러닝을 배우거나 인공 신경망을 조금이라도 읽어 본 사람들은 알 수 있다.


 데이터를 기반을 하여, 컴퓨터에게 학습(배움)을 할 수 있게 만드는 것.

 그것이 딥 러닝(심층 신경망)인 것이다.

 그리고 그것이 기계학습의 목표이다.


 심층 신경망이 나온지도 오래 되었는데, 그딴 웃긴 소리를 하는지 모르겠다.


 구글은 사과할 필요가 없다.

 구글이 사기가 아닐 가능성이 더 높다.


 구글은 그냥 그대로 가줘야 되긴 하지만, 한 가지 구글에게 부탁하고 싶은게 있다.


 만약, 진짜 만약에 알파고가 가지고 있는 자가학습 대전 기보들이 데이터 베이스에 들어가 있다면, 바둑계에 공개 해줬으면 한다!


 그리고 어떤 판사가 말한 이세돌 9단의 경기의 상금에 비해서 조금 작다. 라는 평이 있는데, 그건 구글 역량으로 맡기는게 나을 것 같다.


 대전이 아직 남아 있는 지금.

 심층 신경망에는 분명한 단점이 가지고 있다. 엄청난 연산량이 필요하다.(그래서 CPU가 12000개에 GPU가 178개가 붙여서 근근히 속도를 올리는 것이다.)


 그리고 과적응 현상.에 취약하다.

 인간으로 치면, 고정 관념. 이라는게 생길 수 있다는 것.


 왜, 그 값이 나오는지 모른다는 것.

 아주 슬픈 이야기다. 알파고가 1, 2국을 복기라는 걸 도와 줄 수 있다. 해도 알파고는 이세돌 9단에게 제대로된 복기를 해줄 수 없다는 뜻이 된다. 그냥 알파고는 이렇게 답할 뿐이다. "해보니깐 이게 좋았다."


 이세돌 9단이 지고 있고, 커젠가 커센가 하는 녀석이 엄청나게 모욕을 주고 있는 있다는 점에서 이번 대국이 정말 안타깝다고 생각은 한다. (중국에서 실제로 그런말을 안하고 기자들이 소설을 적었다고 한다. 역시, 기자들의 반이상은 버려져야된다고 생각한다.[2016-03-13])


 하지만, 기자라는 사람들/변호사라는 사람의 행동은 정말 욕이 나온다.


 옹호하는 사람들이 있을 것 같아서 더 적자면, 이세돌을 위해서 그렇게 한 것이다. 라고 할 수 있을 것 같다.

 그럼, 이세돌 9단이 정확하게 조금이라도 의문의 말을 할때 그런 이야기를 해라.

 당사자는 이길려고 노력하는데, 지금와서 이딴 이야기를 한다는 걸 봐바라.


 이건, 이세돌 9단을 2번 죽이는 일이다.


 당사자가 아무 말도 안하는데 그딴 이야기. 절대로 하지마라.


 특히, 언론에 위치하는 기자들은 정말 반성해라.

 그리고 IT 전문이라고 말하는 변호사는 반성했으면한다.


  1. 참조 : https://namu.wiki/w/4GHz%EC%9D%98%20%EB%B2%BD(2016-03-12) [본문으로]
  2. 참조 https://ko.wikipedia.org/wiki/%EB%94%A5_%EB%B8%94%EB%A3%A8 (2016-03-12) [본문으로]
  3. 참조 : https://namu.wiki/w/4GHz%EC%9D%98%20%EB%B2%BD(2013-03-12) [본문으로]
  4. 참조 : http://slownews.kr/51771 (2016-03-12) [본문으로]
  5. 참고 : http://news.mk.co.kr/newsRead.php?no=182328&year=2016(2016-03-12) [본문으로]
  6. 참고 : http://biz.khan.co.kr/khan_art_view.html?artid=201603081426501&code=920100&med_id=khan (2016-03-12) [본문으로]
  7. 참고 : https://ko.wikipedia.org/wiki/%EA%B5%AC%EA%B8%80_%EB%94%A5%EB%A7%88%EC%9D%B8%EB%93%9C (2016-03-12) [본문으로]
  8. 참고 : https://namu.wiki/w/%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5 (2016-03-12) [본문으로]
  9. 참고 : https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%A7%88%EC%9D%B4%EB%8B%9D (2016-03-12) [본문으로]
Posted by JunkMam
,

 ADB로 Unicode을 입력할 수 있는지 궁금해서 구글링을 하다가 찾은 것이다.

 (ADB로 한글을 입력 할 수 있다!)


 하는 방법은 소스 사이트에 들어가서 APK을 설치한 후(불안하면, 소스만 보고 필요한 부분말 빼가서 처리하면 된다.) 키보드를 설정한 후에 ADB의 브로드 캐스트를 보내주면 된다.


 원리는 APK로 만들어진 가상 키보드가 BroadCastReciver가 존재하고, 이것이 ADB로 보내는 브로드 캐스트를 받는다.

 받은 브로드 캐스트의 내용은 가상 키보드가 내용물로 처리해주는 방식이다.


 키보드 기본 설정을 해야되는 불편함만 제외하고, 이걸 이용하면, ADB가 사용하는 BroadCast을 이용해서 UNICODE을 송신을 받아서 자동으로 입력을 받을 수 있게 해준다.


 ADB로 키보드를 변경하는 방법도 적혀져 있다.


 한자, 한글, 영어 전부다 지원이 되는 걸 확인 했지만, 문제는 스페이스가 지원이 안된다.


 아마도 브로드 캐스트라서 그런 것 같다.


 소스가 있으니, 특정 기호 = 스페이스바. 이렇게 수정이 가능할 것이다.


 소스


 관련 질문 사이트

Posted by JunkMam
,