2016년 8월 10일 수요일

Crontab 설정하기(Linux 반복작업)

Crontab



Crontab이란, 리눅스 작업 스케줄러이다.

Crontab을 사용하는 이유

   특정 프로세스를 정해진 날짜에 실행하거나, 특정 년/월/일/분/초 마다 반복을 하기 위해.

Crontab 장점

   bash로 할 수 있는 모든 작업이 가능하기 때문에, 배치bash 프로세스에 최적화!

Crontab 설정법

   crontab -e

규칙

   * * * * * (COMMAND)>>(LOG PATH)
┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───────── 요일 (0~6) (0:일요일, 1:월요일 ... 5:금, 6:토) │ │ │ └────────── 월 (1~12) │ │ └─────────── 일 (1~31) │ └──────────── 시 (0~23) └───────────── 분 (0~59) 

예시)

1분 마다 실행되도록 설정



test.php 파일 내용(1분마다 현재 시각 저장)


실제 Table내용

2016년 2월 23일 화요일

PHPUnit


PHPUnit이란, 단위 테스트를 할 수 있는 PHP용 Unit test 프레임워크이다.

Laravel framework도 PHPUnit으로 단위 테스트를 할 수 있게 구현되어 있다.

PHPUnit 설치방법

      먼저, php가 설치되어 있는 경로를 찾는다.

      필자는, C:\xampp\php이다.

      그 다음, https://phpunit.de/manual/current/en/installation.html 접속한 후
      phpunit.phar을 다운 받는다.

      다운 받은 파일을 C:\xampp\php 로 이동시킨다.


      마지막으로 배치 파일만 만들면 된다.

      배치 파일이란, 확장자가 .bat 또는 .cmd를 가진 텍스트 파일로써
                          문법, 적절한 명령어들의 모음이다.
     
      명령 프롬프트창을 열고, C:\xampp\php로 이동한다.
     
      echo @php "%~dp0phpunit.phar" %* > phpunit.cmd 입력 후, exit.

      새로운 명령프롬프트창을 열고 phpunit --version을 해보자.
      하기의 그림과 같이 설치가 된 것을 확인할 수 있다!

2016년 2월 18일 목요일

핀테크


핀테크란, 금융과 Technology의 합성어로, 금융과 IT의 결합을 통해 
             새롭게 등장한 산업 및 서비스 분야를 말한다.

핀테크를 조사하게 된 계기

      2016년 IT분야 핵심 키워드에서 2위를 차지하고 있다.
      1위인, IOT는 조사를 한 적이 있어서 핀테크를 알아보기로 했다!


핀테크의 탄생

      2007년 미국에서 발생한 서브 프라임 모기지 사태 이후, 
      글로벌 금융 위기로 확산되면서 글로벌 시장에서 급속히 발전했다.

      서브 프라임 모기지 사태란, 미국의 대부업체들이 파산하면서 시작된, 미국만이 아닌
      국제금융시장에 신용규제를 불러온 연쇄적인 경제위기를 말한다.

      경제 위기 상황에서 빠르게 대응하지 못했던 기존 금융권에 대해 
      소비자들이 불신하기 시작하면서, 빠르게 발전한 IT기술의 등장은
      기존 금융이 담당하던 서비스를 새로운 플랫폼으로 대체했다.

핀테크의 전망

      전통적으로 금융 산업을 보수적이라고 한다.
      금융 산업은 변화가 적고, 크게 변하기도 어려운, 안정을 위주로 성장할 수 밖에 없다.

      하지만 IT산업은 개방적이다. 빠르게 변화하고, 주변의 기술을 받아 들이며,
      창의성을 기반으로 성장한다.

      즉, 보수적인 금융 산업과 개방적인 IT산업이 융합하는 지금의 핀테크는 
      흔치 않은 일임에 분명하다.

핀테크로 인한 모바일 시대 변화

      2009년 애플의 아이폰3Gs가 국내에 들어오기 시작하면서,
      우리는 모바일 시대라는 말을 줄곧 언급한다.

      스마트 혁명, 스마트 시대라고도 불리는 최근의 변화는 
      과거 PC와 초고속 인터넷의 등장으로 인해 변화했던 흐름을 또 한번 뒤바꾸고 있다.

      그리고 이 흐름은 금융권에도 본격적으로 시작됐다.
      이제는 스마트폰을 이용해 PC에서 하던 작업을 모바일에서 진행할 수 있다.


      이로 인해 많은 변화가 일어났다.
      금융 서비스는 은행이나 증권사 등 금융 기관의 인증이 필요했는 데,
      모바일 시대로 변화하면서 점차 비 금융권 기업이 금융 서비스를 제공 중이다.

      알리페이, 애플페이를 생각해보자...
      알리페이의 알리바바, 애플페이의 애플은 금융기관이 아니다.

      그런데, 언젠가부터 이런 비 금융 기업이 금융 서비스를 제공하기 시작했다.
      그 이유는 바로 편리하기 때문이다.

      은행에 직접 찾아가서 송금했던 불편함을, 집에 있는 PC와 스마트폰을 이용해
      모바일 뱅킹으로 보낼 수 있다!

핀테크의 핵심

      핀테크의 핵심은 바로 편리함과 간편함이다.

      사용자들은 결제부터 송금, 그리고 대출까지... 기존의 금융 서비스를 보다 편리하게
      이용하기를 원한다.


      하지만 문제가 있다. 바로 보안, 인증 절차이다.
      온라인과 모바일상에서의 결제나 송금은 당사자가 맞는지 인증 절차를 거쳐야 한다.

      이제 사람들은 이 과정도 불편하다고 여긴다.
      페이발 서비스나 알리페이, 애플페이 등은 은행 계좌나 카드 등을 
      한번만 연결해놓으면 다음부터는 결제나 송금 등을 바로 이용할 수 있다.

      결제할 때 필요한 중간 과정은 알아서 대행해준다.
      금융 서비스의 핵심인 본인인증을 대신해주며, 카드 정보 입력, 계좌 번호 입력 등
      번거로운 과정도 대행해준다.

      즉, 계속 반복해서 입력해야 했던 과거의 방식에서 벗어나 한번 입력한 그 다음부터는
      보다 간편하고, 쉽고, 빠르게 해당 서비스를 이용할 수 있게 되는 것이다.

핀테크의 문제점

      지금까지 오프라인과 온라인을 지속적으로 결합하며 다양한 서비스를 선보였다.
      하지만, 핀테크는 금융과 기술의 직접 결합이라는 점에서 다른 분야와 비교해 
      높은 주목을 받고 있다.

      특히, 국내의 경우 핀테크 활성화에 대해 부정적인 의견이 많았지만, 올해부터는
      금융계 및 IT업체, 정부 등의 노력으로 핀테크 산업을 본격적으로 진행할 것으로
      예상 된다. 그 만큼 준비해야할 것은 더욱 많다.

      앞서 언급했던 본인 인증 등과 같은 절차의 간소화를 위해 실질적인 대책을
      마련해야 하며, 규제 중심의 금융계도 달라져야 할 것이다.

      또한, 금융 업체와 IT업체가 협력해 새로운 서비스를 고민하고, 
      사용자들에게 필요한 것을 제공해야 한다.

      마지막으로 금융 거래의 핵심인 '보안'도 빼놓을 수 없다.
      지금까지 보안은 금융권에서만 전담했지만, 이를 핀테크 업체와 협력할 수 있는
      방안을 찾아야한다. 절차의 간소화는 두 업계가 뭉쳐야만 가능하기 때문이다!

2016년 2월 16일 화요일

Smarty 설치하기


Smarty란, PHP 템플릿 엔진이다.

템플릿 엔진이란, 데이터베이스에 있는 정보들과 웹 템플릿에 있는 텍스트를 합쳐서
                      웹 문서로 만들어주는 역할을 의미한다.

Smarty 설치법

      Smarty를 설치하기 위해선 PHP 5.2 이상의 버전이 필요하다.

      http://www.smarty.net/docs/en/ 접속한 후에, 다운로드를 한다.

      압축을 해제한 후, libs 폴더 안에 있는 파일들을 모두 복사한다.


      다음으로, php.ini 파일을 열어서 include_path를 확인한다.


      빨간 줄이 기본 path인데, 필자는 기본 path에 Smarty라는 폴더를 생성한 후,
      새로 만든 폴더의 경로를 추가해주었다.

      Smarty폴더에 아까 복사한 파일들을 붙어넣기 해준다.

      마지막으로, 붙어넣기 한 폴더에 templates, templates_c, configs, cache 폴더를 생성!


      이것으로 모든 설치는 끝났다.

실제로 실행이 잘 되는 지 테스트를 해보자.

      templates 폴더에 index.tpl 파일을 생성한 후, 하기의 그림과 같이 실행을 하면


      Hello, Smarty! 라고 출력이 되는 걸 확인 할 수 있을 것이다!

2016년 2월 15일 월요일

자바스크립트의 정규표현식

자바스크립트의 정규표현식

자바스크립트에서 정규표현식은 크게 두 가지로 나뉘어 진다.

      1. 컴파일: 패턴을 찾는 걸 의미

      2. 실행: 찾은 패턴(대상)을 어떠한 작업을  할 것인지

컴파일 하는 방법

      1. 정규표현식 리터럴

            var pattern = /찾고자 하는 문자/;

      2. 정규표현식 객체 생성자

            var pattern = new RegExp('찾고자 하는 문자');

            여기서 RegExp는 regular expression의 약자이다.

      var pattern = /a/ 와 var pattern = new RegExp('a') 는 같은 의미이다.

정규표현식을 사용하는 경우

      1. 자신이 원하는 정보를 추출하고자 할 때

      2. 자신이 원하는 정보가 있는 지 없는 지 테스트 할 때

      3. 찾은 정보를 다른 텍스트로 치환할 때

이제, 실제로 정규표현식 패턴을 이용하여 정보를 추출해보자!

      ex) var pattern = /a/;

            pattern.exec('abcde') --->>> ["a"]

            정규표현식 패턴이 담긴 변수에 exec()메소드를 사용하여
            'a'를 추출하는 경우이다.

            'a'가 존재하므로 'a'가 출력되었지만, 만약 'a'가 없을 경우는 'null'이 리턴된다.

      ex) var pattern = /a./;

            pattern.exec('abcde') --->>> ["ab"]

            'a'뒤에 '.'이 있으므로 'a'뒤에 있는 텍스트가 같이 출력된다.

      ex) var pattern = /a/;

            pattern.test('abcde') --->>> true

            정규표현식 패턴에 담긴 변수에 test()메소드를 사용하여
            'a'가 존재하는지 안하는지 판단하는 경우이다.

            'a'가 존재하므로 true이고, 만약 없을경우 false를 리턴한다.

      ex) var pattern = /a/;

            var str = 'abcde';

            str.match(pattern) --->>> ["a"]

            여기서 match()메소드는 String.match() 구조이다.

            RegExp.exec()메소드와 같은 역할을 하고 있다.

      ex) var pattern = /a/;

            var str = 'abcde';

            str.replace(pattern, 'A') --->>> "Abcde"

            replace()메소드는 치환하는 메소드이고, String.replace() 구조이다.

            첫 번째 인자로 찾고자 하는 패턴을 기입하고, 두 번째 인자로 치환할 문자를 기입

      ex) var xg = /a/;

            "abcdea".match(xg) --->>> ["a"]

            여기서 'a'가 제일 앞과 제일 뒤, 총 2개 이지만 1개만 출력된다.

            'g'키워드를 이용할 경우 검색된 모든 결과를 리턴할 수 있다.

            var og = /a/g;

            "abcdea".match(og) --->>> ["a", "a"]

            이와 같이 'a'가 2개 출력된다.

마지막으로, 정규표현식을 이용하여 캡처를 해보자.

      여기서 캡처란, 괄호안의 패턴을 마치 변수처럼 재사용할 수 있는 걸 의미.

      ex) var pattern = /(\w+)\s(\w+)/;

            var str = "coding everybody";

            var result = str.replace(pattern, "$2, $1") --->>> everybody, coding

            먼저, pattern변수를 보면 \w는 word를 의미한다.

            여기서 word는 숫자, 영어 소문자,  영어 대문자, '_'을 가리킨다.
            \s는 공백을 가리킨다.

            replace()함수를 이용하여 치환을 하는 데, 두 번째 인자 값에 '$'가 있다.
            여기서 '$'는 그룹을 의미한다.

            즉, $2는 '(\w+)\s(\w+)'에서 두 번째 괄호를 가리키고,
            $1는 첫 번째 괄호를 가리킨다.

            두 번째 괄호인 'everybody' 먼저 출력되고 쉼표와 공백을 둔 후,
            첫 번째 괄호인 coding가 결과로 출력되게 되는 것이다.

2016년 2월 4일 목요일

Feedly

Feedly

Feedly란, 뉴스 종합 어플리케이션이다.

             다양한 웹 브라우저나 IOS, Android에서도 실행가능하고,
             클라우드 서비스도 가능하다.

Feedly는 RSS reader의 한 종류이다.    

      RSS란 Rich Site Summary의 약자로, 컨텐츠 업데이트가 자주 일어나는
      웹 사이트의 정보를 구독하기 좋게 요약하여 받아보기 쉽게 만든 서비스이다.  

Feedly는 third party를 제공하고 있다.

      Feedly에 저장해놓은 RSS주소들을 다른 Application,
      예를 들면 reader2 or Mr.reader 에서도 이용할 수 있다.

Feedly의 목적

      Feeldy는 사용자가 다른 사용자들과 다양한 온라인 서비스를 공유할 수 있고,
      뉴스를 편집할 수도 있다.

Feedly의 역사

      2006년 11월 DevHD의 공동창립자인 Edwin Khodabakchian이 만들었다.
   
      이 회사는 RSS feeds, social storage, social media intergration을 연결하고
      사용할 수 있는 플랫폼을 만들려고 추구했다.

      DevHD의 첫 번째 프로젝트인 Streets는 다양한 소스들을 업데이트 하고
      편집할 수 있는 데, 이것이 바로 Feedly의 기초이다.

      Feedly는 2008년 6월 15일에 처음으로 최적화된 RSS feed로 시판되었다.
   
      2013년 3월 15일에 Google Reader의 폐쇄로 인하여 48시간 만에
      500,000명이 가입을 했다고 한다.

Feedly의 방어

      2014년 6월 11일 ~ 13일에 Feedly는 해커로부터 공격을 받았다.
      해커들은 돈을 요구했지만, 결국 Feedly는 거부하고 공격을 막았다고 한다.

Feedly의 평가

      Feedly는 최소화된 디자인과 개인적인 인터페이스로 가장 긍정적인 리뷰를 받았다.

      하지만, 가끔 접근할 수 있는 영역이 제한되어 있어서 서비스 렐리가 막힌다는
      리뷰도 있었다.

2016년 1월 31일 일요일

PHP의 정규표현식(Regular Expression)

PHP의 정규표현식

cheat sheet: http://ult-tex.net/info/perl/

PHP의 정규표현식은 구분자로 시작해서 구분자로 끝난다.

      /php/ --->>> '/'가 구분자이다.
                         구분자는 정규표현식과 정규표현식이 아닌 것을 구분해주기 위함이다.
                         
                         '/'대신, '#', '+', '%' 같은 특수기호도 사용가능

      /jsp/i --->>> 'i'는 대소문자를 구분하지 않겠다는 의미

      /body$/m --->>> '$'은 가장 끝의 경계점을 의미한다.
                              'm'은 멀티라인이다.

                              ex) everybody
                                   body
                                   body
                                   Onebody

                                    'm'이 없었으면, 제일 마지막에 있는 One뒤의 body가
                                    선택되지만, 'm'으로 인하여 행 마다 있는 body가 다 선택된다.

\b: 단어의 경계를 의미한다.

      \bweb\b --->>> 'web'이라는 독립된 단어를 가리킨다. 즉, 'web'을 가리킴
                               'webscript'에서도 'web'이 있지만 선택되지 않는다.

\s: 공백을 의미한다.

preg_match()의 리턴 값은, 해당 패턴을 찾았으면 1
                                   찾지 못했으면 0
                                   문법적 에러는 false

capturing: preg_match함수의 결과 값으로 데이터를 따로 대입시키기 위해 '()'로 감싸는 것.

      ex) http://www.naver.com/index.html

            preg_match('/http:\/\/([^/]+)/', subject, result)

                  ([^/]+)로 감싸진, www.naver.com이 따로 결과 값으로 대입된다.

capturing할 때, 괄호 안에 '?:'를 기입하면 결과 값에 데이터가 따로 대입되지 않는다.

      ex) http://www.daum.net/index.html

            preg_match('/^(?:http://)?([^/]+)/', subject, result)

                  '^'는 행의 시작점을 의미한다. 만약 '[]'안에 있으면 Not을 의미
                  
                  가장 처음에 http://가 있는 지 판단하는 데, '?' 때문에 없을 경우와
                  존재한다면 1개만 등장하도록 한다.

                  서브패턴안에 '?:' 있으므로, 'http://'는 결과 값에 따로 대입하지 않는다.

                  즉, 결과 값은 www.daum.net

      ex) www.php.net

            preg_match('/[^.]+\.[^.]+$/', subject, result)

                  '[^.]+\.[^.]+$'의 의미는 $때문에 행의 끝에서 부터 본다.
                  
                  '[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'net'

                  '\.'는 '.'을 가리키니까, 즉 net의 앞에 있는 '.'

                  '[^.]+'는 '.'이 아닌 텍스트가 1개 이상인 경우, 즉 'php

                  결과는 php.net

capturing할 때, 괄호 안에 ?P<key>으로 할 경우, 결과 값이 연관배열로 대입된다.

      ex) foobar: 2008

            preg_match('/(?P<name>\w+): (?P<digit>\d+)/', subject, result)

                  '\d'는 숫자를 의미

                  '?P<name>'로 인해, <name> 키 값에 foobar이 밸류로 대입

                  '?P<digit>'로 인해, <digit> 키 값에 2008이 밸류로 대입

                  결과는, [name] => boobar, [digit] => 2008

2016년 1월 20일 수요일

MySQL utf 8 설정하기

MySQL charset 설정

OS가 window일 경우, my.ini
        Linux일 경우, my.cnf 를 수정해주어야 한다.

해당 파일을 열고,
[mysql] 하단 부분에 default-character-set=utf8

[mysqld] 하단 부분에 character-set-client-handshake = FALSE
                            init_connect = "SET collation_connection = utf8_general_ci"
                            init_connect = "SET NAMES utf8"
                            default-character-set = utf84
                            character-set-server = utf8
                            collation-server = utf8_general_ci

[client] 하단 부분에 default-character-set = utf8

[mysqldump] 하단 부분에 default-character-set = utf8

를 추가한 후, 저장하고 MySQL을 재시작한다.

mysql에 접속한 후, show variables like 'c%'; 입력


위 그림과 같이, utf8로 변경이 된다!

하지만, 아직까지 한글이 ????로 표시되고 있다...


여기서 몇시간을 투자했지만... 결국 해결하지 못하고 컴퓨터를 끄고 잤다...

my.ini를 수정하고 나서, table을 삭제하고 다시 create해도 똑같은 현상이 일어났었다.

오늘, MySQL Window Command Line에서 한글이 깨지는 거라는 걸 알게 되었다.

기본 클라이언트 문자셋은 utf8이지만, 클라이언트에서 자신의 문자셋을 변경할 수 있다.

윈도우즈 커맨드라인에서 입력하는 한글은 euckr이니 euckr로 변경을 해야한다는 것을...

set character set euckr; 입력 후, select 해보니 한글이 제대로 출력되었다!


환경변수를 변경하면 전체 적용되는 게 아닌가 생각했지만,

웹에서 확인해보니 클라이언트 문자셋은 자신에게만 해당되는 것이었고

기존 값 그대로 utf8이었다.






2016년 1월 18일 월요일

정규표현식3

수량자

{~~~}: 중괄호 안에 있는 값이 수량을 의미한다.

      ex) '*'는 {0,}과 같다.
         
          '+'는 {1,}과 같다.

          '?'는 {0,1}과 같다.

*?: '*'뒤에 '?'가 오면, 수량자 0을 의미한다.

      ex) One ring to bring them all and in the darkness bind them

          r.*? --->>> 'r' 하나만을 가리킨다.

            결과 First match: r
                   All matches: r, r, r, r ~~

+?: '+'뒤에 '?'가 오면, 수량자 1을 의미한다.

          r.+? --->>> 'r'과 'r'뒤에 문자 하나를 같이 가리킨다.

            결과 First match: ri
                   All matches: ri, ri, rk

??: '?'뒤에 '?'가 오면, 수량자 0을 의미한다.

          r.?? --->>> 'r'하나만을 가리킨다.

탐욕적인 수량자(Greedy quantifier)

      ex) <div>test</div><div>test2</div>

          <div>.+</div> --->>> <div>test</div><div>test2</div> 모두 선택된다.
          이렇게 맨 앞의 <div>와 맨 뒤의 </div>사이에 있는 모든 게 선택되는 것을
          탐욕적인 수량자라고 한다.

게으른 수량자(Lazy quantifier)

          <div>.+?</div> --->>> <div>test</div> 만 선택된다.
          이렇게 맨 앞의 <div>와 처음으로 나타난 </div>까지 선택되는 것을
          게르은 수량자라고 한다.

Character class

      ex) A1 B2 c3 d_4 e:5 ffGG88--__--

          \w --->>> 알파벳, 숫자, 언더라인('_')을 가리킨다
                              (\w를 'word'라고 부름)

            결과 First match: A
                   All matches: A1, B2, c3~~~

          \w* --->>> word를 0개 or 1개 or 2개 이상을 가리킨다.

            결과 First match: A1
                   All matches: A1, B2, c3, ~~~

          [a-z]\w* --->>> word앞에 a~z중 하나가 오는 것을 가리킨다.

            결과 First match: c3
                   All matches: c3, d_4, e, ffGG88
     
          [A-z0-9_] --->>> \w와 같다.

          \W --->>> 대문자 'W'는 word의 반대를 가리킨다.
                              (공백, 특수문자, '.', ',' 등)

          \d --->>> 0~9까지의 숫자를 가리킨다.

          \D --->>> 소문자 'd'의 반대 즉, 숫자가 아닌 것을 가리킨다.
   
      ex) Ere iron was b

          \b: 어떠한 단어를 식별할 수 있다.

          \b\w --->>> word가 시작되는 곳을 가리킨다.

            결과 First match: E
                   All matches: E, i, w, b

          \w\b --->>> word가 끝나는 곳을 가리킨다.

            결과 First match: e
                   All matches: e, n, s, b

          \b\w\b --->>> 단어가 하나인 것을 가리킨다.

            결과 First match: b

      ex) cat concat

          \bcat --->>> 앞에 있는 'cat'을 가리킨다.

          cat\b --->>> 뒤에 있는 'cat'을 가리킨다.

      \A: 시작점을 의미한다.

          \A.. --->>> 앞에 있는 'ca'을 가리킨다.

      \Z: 제일 뒤에 있는 경계를 의미한다.

          ..\Z --->>> 뒤에 있는 'at'를 가리킨다.

Assertions

      ex) AAAX----aaax---111---BBBXCCC

          \w+(?=X) --->>> word가 1개 or 1개 이상이어야 하고,
                                    옵션으로 대문자 'X' 앞까지 선택하라는 의미.

                                    '?='는 특수기호이다.
                                    문자열을 검색하는 데 'X'를 쓰지만, 선택할 때는 'X'를 제외.

          결과 First match: AAA
                 All matches: AAA, BBB

          \w+(?=\w) --->>> word가 1개 or 1개 이상이어야 하고,
                                      옵션으로 word가 아닌 문자가 있을 경우,
                                      word가 아닌 문자 앞에 있는 word를 기준으로,
                                      해당 기준까지 선택하라는 의미(기준을 선택되지 않음)

          결과 First match: AAA
                                 ('AAAX-'에서 'X'뒤에 '-'가 word가 아닌 문자이다.
                                  '-'의 앞 문자인 'X'를 기준으로 해당 기준까지 선택되고
                                  'X'는 선택을 받지 못한다.)
                 All matches: AAA, aaa, 11,  BBBXCC

2016년 1월 10일 일요일

딥 러닝(deep learning)

딥 러닝

Deep Learning

딥 러닝이란, 사람의 사고방식을 컴퓨터에게 가르치는 기계학습의 한 분야이다.


딥 러닝 정의

      여러 비선형 변환기법의 조합을 통해 높은 수준의 추상화를 시도하는
      기계학습 알고리즘의 집합이다.

      추상화란, 다량의 데이터나 복잡한 자료들 속에서 핵심적인 내용 또는
      기술을 요약하는 작업

      기계학습이란, 인공 지능의 한 분야로, 컴퓨터가 학습할 수 있도록 하는
      알고리즘과 기술을 개발하는 분야

딥 러닝의 구조

      인공신경망에 기반하여 설계된 구조이다.

      인공신경망이란, 생물학의 신경망(동물의 중추신경계, 특히 뇌)에서
      영감을 얻은 통계학적 학습 알고리즘이다.

딥 러닝의 핵심

      딥 러닝의 핵심은 분류를 통한 예측이다.
      즉, 많은 데이터 중에서 패턴을 발견하여, 사람이 물건을 구별하는 것 처럼
      컴퓨터가 스스로 객체를 분별한다.

      이러한 형식을 두 가지로 나뉘게 된다.
      지도학습과 비지도학습

      지도학습은 먼저 컴퓨터에 고양이 이미지를 학습시킨 후, 학습한 결과를 바탕으로
      이미지가 고양이인지를 판별한다.
      사전에 반드시 고양이 이미지를 인식시켜주어야 한다.

      비지도학습은 고양이 이미지를 컴퓨터에 인식시켜주지 않아도
      고양이라고 판별을 하게 된다.
     
      비지도학습이 지도학습보다 기술적으로 우수하지만,
      일반적인 컴퓨터에서는 구동이 어렵다고 한다.
      (일반적으로 사용하는 컴퓨터의 성능상으론 부족)

딥 러닝의 사용사례

      네이버의 음성인식서비스에 딥 러닝이 사용되고 있다.


      페이스북에서 딥페이스라는 얼굴인식에도 딥 러닝이 사용되고 있다.


2016년 1월 2일 토요일

CasperJS란

Casper.JS

casperjs란, QT기반의 WebBrowers를 이용해 웹 페이지을 불러와
JavaScript, dom객체 등을 컨트롤 할 수 있는 Phantomjs를
보다 쉽게 사용할 수 있도록 만들어 진 것이다.
이를 전부 JavaScript기반의 스크립트로 처리하게 된다.


QT란, 컴퓨터 프로그래밍에서 GUI프로그램 개발에 널리 쓰이는
크로스 플랫폼 프레임워크이다.

크로스플랫폼이란, 멀티 플랫폼이라고도 하며 컴퓨터 프로그램, 운영체제,
컴퓨터 언어, 프로그래밍 언어, 컴퓨터 소프트웨어 등이 여러 종류의
컴퓨터 플랫폼에서 동작할 수 있다는 것을 의미한다.

casperjs를 언제 사용할까

      프로그램을 테스트할 때 주로 사용한다.
      브라우저에 주소 치고, 클릭하고, 로그인 하고, 해당 웹 페이지 테스트를
      일일이 하나 하나 하지 않고도, 자신이 원하는 작업을 할 수 있다.
     
      casperjs는 쉽게 말하면 웹 브라우저이다.
      화면 없이 브라우저처럼 웹 페이지를 접근해서 데이터 형태로 읽을 수 있고,
      마우스와 키보드의 입력을 줄 수 있다.

casperjs 설치법

      윈도우 보다 리눅스에서 작업이 편리하기 때문에
      리눅스 설치 방법에 대해서 살펴보자!

      먼저, casperjs를 설치하기 위해선 phantomjs가 설치되어 있어야 하므로
      phantomjs를 설치한다.

      wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-i686.tar.bz2

      필자는 1.9.7버전을 다운 받았다.
      원레 1.9.8을 다운 받았는데, 접근한 웹 페이지의 HTML태그를 JavaScript로
      접근하려고 하니까 에러가 발생했다...
     
      알아보니까, 1.9.8 버전에서 일어나는 버그라고 한다.
      해결해보려고 1시간을 잡고 있었지만... 결국 다운그레이드를 했다...
      지금은 최신버전인 2.0이 출시되었다.

      다운받은 압출파일을 해제한다.
      tar -xvf phantomjs-1.9.7-linux-i686.tar.bz2

      이제 casperjs를 설치해보자.
      casperjs는 git을 이용해서 다운 받았다.
      git clone git://github.com/n2k0/casperjs.git

      casperjs디렉토리로 이동해서, 
      ln -sf 'pwd'/bin/casperjs /usr/local/bin/casperjs 입력하면 모든 설치가 완료되었다.

      만약 Node.js가 설치되어 있다면... 이러한 절차없이 바로 npm으로 설치할 수 있다.
      npm install -g phantomjs
      npm install -g casperjs

      필자는 npm으로 설치했으나... phantomjs가 1.9.8버전으로 설치되어서
      wget으로 다시 설치했다.
      만약 npm으로 했을 때 1.9.8이면 지우고, 다른 버전으로 설치하자!!

결혼이민비자 신청방법(F-6-1 국민의 배우자)

 제가 일본인 여자친구와 결혼 후, 한국에 귀국하기 위해 신청한 결혼이민비자에 대하여 작성해보도록 하겠습니다. 필자는 일본에서 근무하고 있었으며, 한국에서의 소득은 없었습니다. 결혼이민비자를 신청한 날짜는 2021-04-21 이며, 사증이 발급된 날짜...