수요일, 7월 27, 2016

OpenCV 다운로드 및 시작하기 with Visual Studio 2012 (Visual C++)

수요일, 7월 27, 2016
How to download and start OpenCV?


Opencv는 이미지/영상 프로세싱을 해주는 대표적인 오픈소스 중 하나이다. C언어의 라이브러리 형태로 제공되기 때문에 쉽게 다룰 수 있으며, C++, Java, Python 등 다른 언어들과도 호환이 된다는 장점이 있다.

물체인식, 안면인식 등에 사용되는 유용한 툴인 OpenCV를 다운로드하고 개발환경을 세팅하는 법을 알아보겠다. C++언어를 사용하는 것을 전제로 진행하겠다.

우선 준비물은 2가지이다. 첫 번째는 대표적인 C/C++ 개발용 IDE인 Visual Studio 2012이고, 두 번째는 바로 OpenCV 라이브러리 파일이다.

Visual Studio 2012는 다음의 링크에서 다운로드받을 수 있다. 반드시 2012 버전을 다운받기를 권한다. 상위버전을 사용할 경우 Compiler의 버전이 다르기 때문에 OpenCV가 정상적으로 동작하지 않을 수도 있다.


그리고 다음의 링크에서 자신의 운영체제에 맞는 OpenCV 라이브러리를 다운로드 받으면 된다.


다운로드가 완료되었다면, OpenCV 압축파일을 압축해제해서 사람의 손길이 닿지 않는(?) 경로에 두면 된다. 되도록이면 경로명에 한글이 포함되지 않도록 주의한다.

그 다음엔 (Window를 기준으로) 고급 시스템 설정에 가서 OpenCV의 bin 디렉토리를 환경변수를 추가해주어야 한다. 압축해제한 경로에 가보면 opencv라는 루트 디렉토리가 있고 그 안에 build라는 디렉토리가 있을 것이다. 자신의 운영체제에 맞게 x64 혹은 x86이라는 디렉토리에 들어가면 vc11, vc12라는 두 개의 디렉토리가 있을 것이다. vc11이 Visual Studio 2012를 뜻하는 것이고 vc12가 2013 버전을 뜻하는 것이기 때문에, vc11 디렉토리로 이동한다. (자신이 사용하는 Visual Studio의 뒤에 붙은 연도의 끝 두 자리에서 1을 뺀 것과 같음) 이제 이 디렉토리 안의 bin 디렉토리를 환경변수 (PATH)에 추가해주면 된다.

예시: C:\opencv\build\x86\vc11\bin

환경변수까지 추가했다면 이제 Visual Studio와 연동시킬 일만 남았다. Visual Studio 2012를 실행한 뒤 Visual C++ Win32용 콘솔 응용프로그램으로 빈 프로젝트를 하나 만들어준다. 앞으로 진행할 간단한 물체인식 예제를 해보는 차원에서 프로젝트 이름은 BallDetection으로 지었다.


프로젝트가 생성되었으면 프로젝트(P) 탭의 속성(P)로 간다. 처음으로 나타나는 화면인 구성속성 - 일반에서 플랫폼 도구 집합이 Visual Studio 2012 (v110)으로 올바르게 설정되어 있는지 확인한다.


확인을 완료했으면 구성속성 - VC++ 디렉터리로 넘어간다.



여기서 첫 번째로 포함 디렉터리 (Include Directory) 편집에 들어가서 'OpenCV를 설치한 곳\opencv\build\include'를 추가해준다.
그리고 두 번째로 라이브러리 디렉터리 (Library Directory) 편집에 들어가서 'OpenCV를 설치한 곳\opencv\build\x86 또는 x64 (자신에게 맞게)\vc11\lib'를 추가해준다.

예시: C:\opencv\build\x64\vc11\lib

두 개 다 추가를 완료 했다면 구성속성 - 링커 - 입력으로 넘어간다.


추가 종속성 편집에 들어가서 다음의 목록들을 붙여넣기 한다.

opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib

추가종속성 편집까지 완료됐다면, 이제 OpenCV를 시작할 준비가 된 것이다.

화요일, 7월 26, 2016

PostgreSQL 다운로드 및 시작하기

화요일, 7월 26, 2016

PostgreSQL은 오픈소스 DBMS로, MySQL나 MariaDB 등의 대표적인 DBMS들과는 달리 친숙하진 않지만 꽤 널리쓰이며 성능면에서 우수하다고 정평이 나있다. 무엇보다 SQL의 표준을 대부분 따른다는 특징 때문에 SQL을 학습하는데 효율적이다.

앞으로 PostgreSQL을 활용한 DB 및 SQL 학습에 대해 연재하기에 앞서 PostgreSQL를 다운로드하고 사용할 준비를 하는 과정을 살펴보겠다.

다운로드는 매우 간편하다. 아래 링크를 타고 자신의 운영체제에 맞는 것을 다운로드하면 된다.


Installer로 설치하는 과정에서 왠만한 것은 다 무시하고 다음으로 넘어가면 된다. 진행을 하다보면 포트 번호, 아이디, 비밀번호 등 여러 정보들을 설정해야 하는데, 다음과 같이 엔터 키로 다 생략하고 비밀번호만 본인이 원하는 것으로 설정하면 된다.

Server [localhost] : Enter key
Database [postgres] : Enter key
Port [5432] : Enter key
Username [postgres] : Enter key
Password for user postgres : Your password

이때 비밀번호는 로컬이든 외부든 간에 해당 DB에 접근할 때 필요한 암호이다. 복잡하게 설정하면 매번 DB에 접근할 때마다 고생을 해야하므로 최대한 간단하게 설정하자. 그리고 나중에 웹 서비스와 연동할 때 이 비밀번호가 노출될 가능성도 있기 때문에 범용적으로 은행계좌나 온라인 계정에 사용하는 메타(?) 비밀번호는 가급적 사용을 자제하자. 1234를 추천한다.

눈치가 빠르다면 설치되는 DB의 접근 주소가 사용중인 컴퓨터의 IP주소 (localhost)와 5432번 포트를 default로 사용하는 것을 알 수 있다. 이 두 개만 있으면 어디서든 간편하게 접근할 수 있다. 물론 방화벽 문제나 포트포워딩 등의 문제는 논외로 한다.

다운로드가 완료되었으면,


이렇게 생긴 아이콘이 시작메뉴에 나타날 것이다. 만약 설치 도중 설정사항을 바꿔서 시작 메뉴에 나타나지 않는다면, postgreSQL을 설치한 폴더로 이동해서 runpsql.bat이라는 파일을 실행하면 된다. 이 파일은 scripts라는 폴더 안에 있다.
설치 경로를 따로 변경하지 않았다면,

"C:\Program Files\PostgreSQL\9.5(다운로드한 버전)\scripts\runpsql.bat"

이 경로에서 발견할 수 있을 것이다. 이 파일을 바탕화면에 바로가기로 만들어두는 것이 사용에 편리할 것이다.

실행을 하면 터미널 (cmd.exe)이 열리면서 설치시에 입력했던 포트번호, 유저명, 비밀번호 등을 입력하라고 할텐데 Enter key로 넘어갔기 때문에 역시 Enter Key로 넘어가준다.
비밀번호만 올바르게 입력하면 다음과 같은 화면을 볼 수 있다.


그렇다면 PostgreSQL을 사용할 준비가 끝난 것이다.

월요일, 7월 25, 2016

PDF 파일에 필기하기 with Adobe Acrobat Reader DC

월요일, 7월 25, 2016

PDF 파일이랑 메모장 (혹은 Word) 사이에 왔다갔다하면서 필기하는 것은 매우 불편하다.

PPT 슬라이드에는 슬라이드 노트에 필기를 하거나 텍스트 박스를 만들어서 필기를 할 수 있는데, 제공되는 자료가 PDF 형식이라면 곤란한 경우가 많다. PDF 파일에 필기를 하는 방법을 알아보도록 하자.

사용할 프로그램은 Adobe Acrobat Reader DC이다. 아래 링크에서 쉽게 다운로드 받을 수 있다.


프로그램을 통해 PDF 파일을 열면 다음과 같은 화면을 만날 수 있다.


여기서 좌측 상단 "홈" 탭 옆의 "도구" 탭을 선택하면 여러가지 앱들이 나타난다.


이중 첫 번째인 주석을 선택한다.


그러면 주석 도구가 포함된 바가 열린다. 이제 유용한 몇가지 도구들을 알아보도록 하자.

우선 중간에 T라고 되어있는 것은 화면 위에 글씨를 쓸 수 있게 해주는 기능이다. 글꼴이나 글자 크기를 설정할 수도 있어서 매우 유용하고 가장 많이 쓰는 도구 중 하나이다.


그리고 바로 오른쪽에 위치한 텍스트 상자 도구는 빨간색 텍스트 상자를 만들고 안쪽에 글자를 넣어주는 도구인데, 결론이나 페이지 요약 등을 쓸 때 눈에 잘 띄어서 유용하다.


이 두 도구들은 다음과 같이 작성 뒤에 언제든지 마우스 드래그로 위치를 옮길 수 있다.


또한 텍스트 상자 도구 바로 오른쪽에 펜처럼 생긴 도구는 그림판처럼 자유롭게 선을 그릴 수 있는 도구이다. 중요한 부분에 동그라미나 별표, 혹은 밑줄을 그을 때 쓰인다.


하트를 그려보았다. <3
바로 오른쪽에 있는 지우개 도구로 언제든 원하는 만큼 지울 수도 있다.

그리고 맨 앞에서 두 번째에 위치한 것은 바로 형광펜 도구이다. Adobe에서는 기본적으로 PDF 파일에 글자 인식 알고리즘을 활용하여 마우스로 글자들을 블록 설정할 수 있도록 해준다. 따라서 이 형광펜 도구를 선택하고 글자들을 드래그하면 형광펜이 다음과 같이 칠해진다.


하지만 이 글자인식 알고리즘은 아직 완벽하지 않기 때문에, 몇몇 텍스트들은 제대로 인식이 되지 않아서 드래그가 안되는 경우도 있다. (예를 들어, 필기체나 손글씨를 제본 뜬 경우)
이런 경우에는 형광펜 도구로 완벽하게 칠할 수 없으니 주의해야 한다.

다음으로 살펴볼 도구는 가장 첫 번째에 위치한 스티커 노트 도구이다. 필기할 공간이 없거나 간단한 메모를 할 때 사용하기 좋다. 현실 세계에서 포스트잇 (Sticky note)을 붙이는 것과 동일하다고 보면 된다.

이 도구에 메세지를 입력하면,


다음과 같이 메시지는 가려지고 말풍선 모양의 스티커만 깔끔하게 남게 된다.


이상태에서 스티커 위에 마우스 커서를 올려놓으면,


이렇게 입력해둔 메시지가 보이게 된다.

자주 사용되는 툴들은 여기까지이고, 나머지 툴들도 매우 유용하니 한 번씩 써보는 것을 추천한다.

PDF 파일이라서 필기를 못한다며 강의 슬라이드와 함께 Microsoft Word나 메모장을 옆에 켜놓고 왔다갔다 필기하는 것보다, 이렇게 바로바로 PDF 파일 위에 필기를 할 수 있다면 필기하기도 편하고 나중에 복습을 할 때도 편할 것이다.

다른 Adobe Acrobat Reader들은 모두 사용해 본 것이 아니라서 이 기능이 포함되어 있는지는 모르겠지만 제품설명을 보면 주석 앱이 포함되어 있는지 아닌지 확인할 수 있을 것이다. 다른 버전의 Adobe Acrobat Reader를 사용한다면 꼭 이를 확인하고 다운받아야 한다.

일요일, 7월 24, 2016

게시물 페이지와 홈 페이지 사이에 차이두기

일요일, 7월 24, 2016

대부분의 블로그들은 홈 화면과 특정 게시물 페이지가 다른 모습을 보인다.

예를 들어, 홈 화면에서는 게시물들의 제목만 목록으로 나열해주고 클릭 시 해당 게시물 페이지로 이동하게 해준다거나, 홈 화면의 게시물들은 미리보기만 제공하고 게시물 페이지에서는 댓글 작성이나 공유 기능 등을 사용할 수 있게 할 수 있다.

홈 페이지에서의 게시물 내용과 게시물 페이지 자체에서의 게시물 내용을 구분하는 것은 비교적 간단하다.

Source Code
게시물이 표시되는 부분인 <article> 태그 내에서 다음과 같은 조건문들을 사용하면 된다.
<b:if cond='data:blog.pageType != &quot;item&quot;'>
</b:if>
우선, 위의 조건문은 홈 페이지에서 표시되는 게시물인지를 체크하는 것이다.

그리고 다음의 조건문은 게시물 페이지 자체 내에서의 게시물인지를 체크하는 것이다.
<b:if cond='data:blog.pageType == &quot;item&quot;'>
</b:if>
따라서, <article> 태그 내부의 첫 줄에
<b:if cond='data:blog.pageType != &quot;item&quot;'>
This post is on the home page!
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
This post is not on the home page!
</b:if>
이렇게 코드를 포함시키면 다음과 같은 결과가 나온다.

(1) 홈 페이지일 때

(2) 홈 페이지가 아닐 때

Blogger 게시물에 설정된 태그 표시하기

일요일, 7월 24, 2016

외부 템플릿을 적용하여 블로그를 꾸미다보면 원래 표시가 되어야 할 콘텐츠들이 생략되는 현상이 흔히 일어난다. 게시물에 설정된 태그를 표시하는 방법을 알아보자.

Source Code
우선 게시물은 <article>이라는 태그 안쪽에 위치 한다. 따라서 다음의 코드를 <article> 태그 안쪽 부분 원하는 곳에 붙여넣으면 태그 목록을 표시할 수 있다.


<b:if cond='data:post.labels'>
  <span class='label-info'>
    <i class='fa fa-tags'/>
    <b:loop values='data:post.labels' var='label'>
      <a expr:href='data:label.url' rel='tag'>
        <data:label.name/>
      </a>
      <b:if cond='data:label.isLast != &quot;true&quot;'>
      ,
      </b:if>
    </b:loop>
  </span>
</b:if>
위의 코드를 넣으면 다음과 같은 결과가 나올 것이다.
물론, css를 적용해서 아이콘의 색깔과 배경색 등을 변경해 놓은 모습이다. <i>태그와 <span> 태그에 style 속성을 부여해서 바꾸면 간편하다.

Blogger에서 페이지 URL 변경하기

일요일, 7월 24, 2016
How to change page URL in Blogger?


Blogger에서 새로운 페이지를 생성하면,

http://arkainoh.blogspot.kr/p/blog-page_16.html

이렇게 원치 않는 URL로 생성이 되는 것을 확인할 수 있다.

페이지 설정창을 아무리 뒤져봐도 URL을 수정할 수 있는 곳은 없다.



그래서 구글에서 임의로 만들어준 URL을 사용하거나, 페이지라는 시스템을 전혀 사용하지 않는 블로거들도 많다.

그런데, 페이지 URL이 생성되는 기본적인 메커니즘을 이해한다면, 편법을 통해서 비교적 쉽게 페이지 URL을 마음대로 설정할 수 있다.

원하는 URL로 페이지 만들기
How to create a new page with customized URL

페이지의 URL은 언급했듯이 임의적으로 설정이 되는데, 이는 "blog-page_숫자.html"로 생성된다. 이러한 이름으로 설정이 되는 순간은 페이지 생성 버튼을 누르고 일정 시간이 지났을 때이다.

페이지 생성 창에서 일정 시간이 지나면 Blogger는 자동으로 내용을 임시저장하고, 작성된 내용에 따라서 URL을 생성해준다. 저장이 되는 시점에 아무 내용도 작성이 안되어 있다면 "blog-page_숫자.html"이라는 기본설정을 따라서 URL을 생성하는 것이다.

따라서 저장이 일어나기 전에 URL로 사용하기 원하는 문자열을 작성해두면 된다.

예를 들어, PROJECTS라는 URL을 사용하고 싶다면, 페이지 생성버튼을 누르자마자 빠르게 다음과 같이 입력하면 된다.


이렇게 하면 "http://arkainoh.blogspot.kr/p/projects.html"이라는 URL이 생성된다.


기존 페이지의 URL을 변경하기
How to change URLs of old pages

그런데, 이는 페이지를 생성할 때만 해당되는 내용이기 때문에, 사실상 기존에 이미 URL이 확정된 페이지의 URL을 변경하는 것은 사실상 불가능하다.

따라서 기존에 사용하던 페이지의 URL을 변경하려면, 다음과 같은 편법을 사용하면 된다.

1. 앞서 언급한 방법으로 원하는 URL을 가진 페이지를 생성해둔다.

2. 기존에 사용하던 페이지의 HTML 코드 전부를 복사해서 새로 생성한 페이지에 붙여넣는다.


p.s. 같은 방법을 통해 게시물들의 URL도 바꿀 수 있다.

일요일, 7월 17, 2016

개인정보 유출사고, "가만히 앉아서 당하고 계세요"

일요일, 7월 17, 2016
There is nothing to do with personal information leakage in Korea

A양은 평범한 여대생이다. 그녀는 최근 두 달간 네 다섯 명의 낯선 남자로부터 "랜덤채팅에서 얘기한 여성이 아니냐"는 내용의 카카오톡 메세지를 지속적으로 받았다. 충격적인 사실은 그 남성들이 A양의 이름, 휴대폰 번호, 학교, 학과를 정확히 알고 있었으며, 무려 두 세 달 전에 카카오톡 프로필 사진으로 설정했던 A양의 사진들을 가지고 있었다. 사진 중에는 A양 뿐만 아니라 A양의 어머니, 언니 등 가족의 얼굴도 포함되어 있었다.