2013. 12. 11.

Project Euler - 문제 12번

Highly divisible triangular number

Problem 12

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Let us list the factors of the first seven triangle numbers:
 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
We can see that 28 is the first triangle number to have over five divisors.
What is the value of the first triangle number to have over five hundred divisors?

 문제 12번 : Triangle number의 수열은 자연수를 더하여 생성된다. 그래서 7번째 Triangle number는 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28이 될 것이다. 그리고 처음 10개의 항은 다음과 같다:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
이제 처음 7항의 약수들을 나열해보자:
 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
그러면 우리는 28이 처음으로 다섯 개의 약수를 가지는 Triangle number임을 알 수 있다. 그러면 처음으로 오백개의 약수를 가지는 Triangle number는 얼마인가?



 이 문제의 핵심은 약수의 갯수를 구하는 방법인 것 같습니다. 일반적으로 약수의 갯수는 소인수를 통해서 바로 알 수 있습니다. 임의의 숫자 \(L\)이 소인수 \(p_i\)들로 이루어져 있다고 할 경우, 약수의 갯수 \(n\)은 다음과 같이 주어집니다.
$$
L=p_1^{n_1} \times p_2^{n_2} \times \cdots \quad \Rightarrow \quad n=(n_1 + 1) \times (n_2+1) \times \cdots
$$
그러면 소인수분해를 한 뒤에 약수의 갯수를 위와 같이 구하는 코드를 작성하면 됩니다.

int num_div(int n)
{
 int num_cal = 1;
 int temp = 0;
 
    while(n%2 == 0)
    {
        n = n/2;
        temp++;
 }
    num_cal *= temp+1;

    for(int k = 3; k < sqrt(n); k += 2)
    {
  temp = 0;
     while(n%k == 0)
     {
      n = n/k;
      temp++;
     }
     num_cal *= temp+1;
     
     if(n == 1)
      break;
    }
    if(n != 1)
     num_cal *= 2;
     
    return num_cal;
}

 이처럼 소인수분해를 하여 바로 약수의 갯수를 리턴하는 함수를 이용하여 약수의 갯수가 500개를 최초로 넘어가는 숫자를 찾으면 결과는 아래와 같이 나타납니다.



2013. 11. 23.

Port Forwarding, 공유기를 통해 각종 포트 사용하기


 만약 집에서 공유기를 쓰고 계신다면 각종 프로그램에서 네트워크를 통해 다른 사람과 연결이 되지 않는 경우가 종종 있었을 겁니다. 예를 들어서 게임을 하는데 내가 서버를 열면 다른 사람이 내 서버로 접속을 하지 못한다거나, 내 컴퓨터에 웹페이지 서버나 FTP 서버를 열었는데 접속이 되지 않는 등의 문제가 생각보다 많이 발생합니다.

 이런 종류의 문제는 모두 공유기 때문에 생기는 일입니다. 공유기 밑에 컴퓨터가 3대가 있다고 하면, 외부 주소로 아무리 접속해도 공유기는 내부의 컴퓨터 3대 중에서 어떤 컴퓨터로 이 연결을 보내야할지 모르기 때문에 외부 요청이 차단되는 것이지요. 그래서 공유기를 잘 설정해줘서 원하는 프로그램이 원하는 컴퓨터에 연결될 수 있도록 해주는 것은 매우 중요한 일입니다. 그리고 이런 문제는 공유기가 여러 대가 있을 때에도 각각의 공유기를 모두 설정함으로써 해결이 가능합니다.




 1. 공유기 주소 찾기

 먼저 공유기를 설정하기 위해서는 공유기에 있는 설정 화면에 접속해야 합니다. 보통 이 화면은 http를 통해서 만들기 때문에 http://공유기 주소 를 입력하면 되는데 문제는 바로 공유기 주소가 어떻게 되는가 하는 점입니다. 일반적으로 제조사에서 IP를 고정하여 사용하기 때문에 제조사별 공유기 주소를 설명서 등에서 찾을 수 있지만... 공유기는 사실 Gateway의 역할을 하는 것이기 때문에 컴퓨터에서 간단한 명령어를 통해서 Gateway의 주소를 확인할 수 있습니다.


 "Windows 키 + R"을 눌러서 실행 화면을 열고 "cmd"를 입력합니다. 그 후에 "ipconfig"라는 명령어를 입력하면 아래와 같이 IP 주소를 얻을 수 있습니다.



 여기서 저는 "무선 LAN 어댑터"를 사용하기 때문에 이 부분을 보면 되고, 만악에 유선랜을 사용하실 경우에는 "이더넷 어탭터"를 보시면 됩니다. "IPv4 주소"는 제가 공유기에 의해서 받은 내부 IP 주소이며, 공유기의 주소는 "기본 게이트웨이"에 표시되어 있습니다.

 그러면 제가 사용하는 공유기의 주소는 "192.168.219.1"이 되겠군요. 이제 접속해 봅시다.



 2. 공유기 접속하기

 공유기에 접속하는 방법은 바로 위에서 얻은 IP 주소를 웹브라우저에서 주소창에 입력하시면 됩니다. 그러면 일반적으로 계정과 암호를 요구하는 화면을 보게 됩니다. 제가 사용하는 공유기는 오직 암호만 요구하는군요.


 계정과 암호의 기본값이 일반적으로 공유기의 사용 설명서에 적혀있거나 통신사에서 집에 방문하여 설치해주는 공유기의 경우는 암호를 공유기에 붙여놓거나 따로 알려주는 것이 보통입니다. 어쩌면 본인이 따로 설정해둔 계정과 암호를 쓸 수도 있겠지요.

 기본 계정과 암호를 바꾸었는데 잊어버렸다면 공유기의 뒤쪽에 난 작은 홈 속의 버튼을 10초가량 길게 눌러서 공유기를 완전히 초기화 시킨 후에 기본 계정과 암호를 사용하는 방법이 있습니다. 이제 암호를 입력하고 들어가 보도록 하겠습니다.


 이 화면은 공유기의 상태를 자세히 보여주고 있습니다. 여기서 "인터넷 연결 상태"를 보시면 IP 주소가 하나 나오는데, 이게 바로 외부에 연결되는 IP 주소 입니다. 추후에 외부에서 접속할 때에는 반드시 이 주소를 사용해야 합니다. 192로 시작되는 내부 주소를 사용할 경우에는 외부에서 접속이 당연히 되지 않습니다.



 3. 공유기 설정 하기

 이제 원래 목적이었던 Port Forwarding을 해보도록 하겠습니다. 일반적으로 이 옵션은 "고 설정"에 있는 경우가 많습니다. 공유기마다 "고급 옵션" 안에서도 위치가 다를 수 있으니 잘 찾아보시길 바랍니다.


 저는 운이 좋게도 "고급 설정" 첫 화면이  Port Forwarding으로 되어있군요. 이제 원하는 포트를 입력합니다. 앞서 포스팅한 IP cam의 경우는 8080이었으므로 8080이라고 쓰면 되고, FTP의 경우는 21, ssh의 경우는 22-23 등등 원하는 포트 번호를 입력하면 됩니다. 그 다음으로 아래에 IP 주소는 반드시 내가 연결하고 싶은 기기의 내부 주소를 입력하여야 합니다.

 제 IP cam은 주소가 192.168.210.124이므로 이 주소를 입력하고 포트는 0으로 놓습니다. 0일 경우는 외부에서 요구하는 포트에 저절로 내부 포트를 대응시켜 줍니다.


 추가를 눌러즈면 위와 같이 추가된 Port Forwarding 규칙을 볼 수가 있습니다. 그런 후에 반드시! 확인 또는 적용을 눌러주셔야 합니다. 그렇지 않으면 공유기에 이 설정이 저장이 되지 않고 그대로 날아가게 됩니다.


 확인을 누르면 공유기에서 설정을 적용중이라는 문구가 나오게 됩니다. 잠깐 기다리면 옵션이 적용되고 다시 원래 화면으로 돌아가게 됩니다. 이러면 Port Forwarding은 잘 적용되었습니다.



 4. 설정 확인하기

 이제 마지막으로 공유기의 설정이 잘 적용되었는지 확인하는 일만 남았습니다. 그러나 한 가지 문제점이 있다면, 내부 주소를 가진 컴퓨터나 핸드폰으로 외부 주소를 입력해서 테스트를 할 수는 없습니다. 즉, 공유기 외부의 네트워크에 연결된 기기로 테스트를 하여야 한다는 뜻입니다. 그래서 저는 제 아이폰에서 WiFi를 끈 상태로 테스트 하였습니다.

 테스트 방법은 역시 앞선 포스팅에서 했던 IP cam을 사용하려고 합니다. 이 포스팅에서는 내부 주소를 사용해서 IP cam을 연결했었는데, 이번에는 외부 주소를 통해서 연결해 보도록 하겠습니다.


 위와 같이 이번에는 외부 IP 주소를 입력해서 카메라를 세팅하고 나와보면 화면이 잘 나옵니다. 오른쪽 이미지에서 Camera 1은 외부 주소로 접속한 IP cam이고 Camera 2는 내부 주소로 접속한 IP cam 입니다. 잘 동작하는군요.



안드로이드 IP cam에 접속하는 여러 가지 방법


 앞선 포스팅에서 안드로이드 폰을 이용해서 IP cam을 만드는 방법에 대해서 소개하였습니다. 그러면 이제 IP Webcam 앱을 통해서 제공되는 server에 접속하는 방법을 알아볼까 합니다. 사실 거의 다 비슷한 원리인데 그래도 자세히 소개해 보려고 합니다.



 1. 웹 브라우저로 접속하기

 먼저 가장 쉬운 방법은 웹 브라우저에 서버 주소를 입력하고 접속하는 방법입니다. 이 방법은 다른 IP cam 관련 어플리케이션이나 프로그램에서는 동작하지 않을 수 있으며 안드로이드의 IP Webcam 앱에서는 잘 동작합니다.

 앞서 만든 서버에 내부 주소를 통해서 접속해보면 다음과 같은 화면을 볼 수 있습니다.





 2. IP cam 전용 프로그램으로 접속하기

 프로그램을 통해서 IP cam에 접속하는 방법은 결국은 네트워크로 스트리밍되는 주소를 입력해서 받아오는 방법입니다. 그 중에서 한 가지 방법은 일전에 소개해 드린 iSpy라는 프로그램을 사용하는 방법입니다. (링크 : http://lamanus.blogspot.kr/2013/11/ispy-ip-cam-cctv.html)

 그러나 그저 화면을 보고싶을 뿐인데 복잡한 프로그램을 통해서 화면을 보는 것은 매우 곤란한 일입니다. 그래서 가장 편한 방법중에 하나는 바로 VLC 프로그램을 통해 네트워크 스트리밍을 연결하는 것입니다.  (VLC 프로그램 링크 : http://www.videolan.org/vlc/index.html) 가장 간편한 방법은 1번으로 접속해서 맨 위의 메뉴를 클릭한 뒤에 playlist.m3u를 받아서 VLC로 실행하는 방법입니다.

 또는 VLC 프로그램을 실행하여 직접 접속하는 방법입니다. 먼저 VLC 프로그램을 실행하면,


이와 같은 화면이 나타납니다. 여기서 네트워크 스트림 열기를 들어가면,


 주소를 입력하는 화면이 나오고 여기에 http://주소:포트/video 라고 입력하게 되면 화면에 바로 연결이 됩니다.





 3. 스마트폰을 통해서 접속하기

 가장 이동성이 높은 방법은 바로 또 다른 스마트폰을 통해서 IP cam에 접속하는 방법입니다. 이 역시도 앱이 필요한데 제가 사용하는 IP cam viewer 라는 프로그램은 안드로이드와 아이폰에 모두 있습니다. 제 본래 핸드폰은 아이폰인 관계로 아이폰을 가지고 살펴보도록 하겠습니다.

 먼저 IP cam viewer lite라는 프로그램을 받습니다. (pro도 있습니다만 유료라서..)


 그리고 프로그램을 실행하면 demo IP cam들이 나옵니다. 무시하고 카메라 설정으로 들어가보면 IP cam의 Type을 입력하는 화면이 나옵니다.


 제가 사용하는 카메라는 안드로이드의 IP webcam이라는 앱이기 때문에 이를 찾아서 등록해주면 됩니다. 아마 다른 앱들은 이런식으로 바로 연결이 불가능하고 일일히 수동으로 설정을 하여야 할 수도 있습니다.


 IP cam의 Type을 지정해 주었으면 이제 IP를 입력하고 Port를 정확히 입력합니다. 그 후에 test를 누르면 정보를 받아왔는지 확인하고 아래에 화면이 뜨게 되죠. 이제 Save를 하고 밖으로 나가서 카메라를 눌러보면 마지막 사진과 같이 화면이 나타나게 됩니다.



 지금까지 공유기 내부 주소를 통해서 IP cam에 접속하는 방법을 알아보았습니다. 공유기 외부 주소를 이용하시려면 (통신사 제공 IP) 공유기에 들어오는 외부 IP 주소를 적어놓으신 후에 공유기에서 Port Forwarding을 통해서 외부에서 원하는 기기의 포트를 사용하기 위한 요청을 내부에서 정확히 그 기기로 연결해 주어야 합니다. 이런 과정이 없다면 외부 주소를 통해서 아무리 접속을 시도해도 매칭이 되지 않아서 접속이 되지 않습니다. 다음 포스팅을 참고하시길 바랍니다.


IP Webcam, 안드로이드 폰으로 IP cam 만들기


 아이폰과는 다르게 안드로이드 폰에는 정말 다양한 앱들이 많습니다. 제가 아이폰 유저임에도 불구하고 아이폰으로 IP cam을 만들기가 힘들어서 결국 굴러다니던 안드로이드 폰을 사용하게 되었습니다. 아이폰에도 앱은 있는데 유료이거나 무료는 많이 부족한 느낌...


 먼저 안드로이드 폰을 IP cam으로 쓸 수 있게 만들어주는 앱을 받아야 합니다. 그 이름은 바로 IP Webcam 입니다.


 앱을 받아서 실행하면 다음과 같은 화면이 나옵니다. 인터넷 상태에 따라서 Resolution을 적당히 골라주고 Quality 역시 적당히 고르시면 됩니다. 그리고 보안 설정을 위해서 Login/Password에 들어가면 계정과 암호를 설정할 수 있습니다만 저는 건너뛰었습니다. 포트는 편의상 기본인 8080 포트를 쓰도록 하겠습니다. 그 후에 Start Server를 선택하면 서버에서 전송하게 되는 화면이 IP 주소와 함께 나타납니다.


 이제 서버가 작동하고 화면이 나타납니다. 화면 캡쳐를 해서 그런지 화면이 검게 나오는데, 실제로는 제가 카메라로 보는 화면이 나타났습니다. 이 상태에서 가만히 두시거나 Action에서 Run in background를 선택하면 여전히 카메라 화면이 스트리밍이 되지만 화면은 꺼져있는 상태가 됩니다.

 그리고 제 IP cam은 공유기에 무선으로 연결되어 있어서 주소가 내부 주소로 표시됩니다. 공유기 외부에서 접속하고 싶으면 공유기가 물려있는 외부 주소를 내부 주소 대신에 사용하시면 됩니다. 접속 방법은 따로 포스팅 하겠습니다.


2013. 11. 20.

혜성 ISON 관측 후기


 서울에서 혜성을 보기란 쉽지 않다는 것을 다시 한 번 깨닫게 되면서 눈으로는 제대로 관측도 못하고 사진만 남겼네요. 사진도 혜성인지 아닌지 분간도 잘 되지 않을 정도이지만 기록용으로 남겨볼까 합니다.



 먼저 원본 사진입니다. 뭐가 보이시나요? 아주 자세히 보면 하얀 점 몇 개가 보이는데 별들입니다. 분간이 잘 안되시죠? 서울 도심이라 광해가 너무 심해서 그렇습니다. 빛이 대기중에서 반사되어서 하늘이 노랗게 보이는 것이죠.

 이를 보정하기 위해서 다른 사진하고 합쳐서 얻은 배경 이미지를 빼주면 아래 사진처럼 나옵니다.


 원본보다 하얀 점 찾기가 더 쉬워졌습니다. 그리고 안보이던 별들이 보이는데, 등급이 낮아서 잘 보이지 않다가 배경을 제거해주니 이제서야 좀 보이는군요. 가장 어두운 별이 사진에서는 +8등급 입니다. 대체로 사진의 아래보다 위에서 어두운 별이 잘 나왔는데, 아래쪽은 대기가 두터워서 +7등급이 최대더군요.

 그러나... 아직도 ISON이 어딨는지 전혀 감이 안옵니다. 사실, ISON은 위 사진에서 별과 같이 찍혔습니다. 혜성의 가스는 밝기가 상당히 어두운데 광해때문에 가스는 보이지 않고 핵 부분이 마치 별처럼 찍힌 것이죠. 그러면 이제 위 사진에서 별들을 일일히 찾아서 표시해 보겠습니다.


 생각보다 별들이 많아서 오래 걸렸네요. 노란색 원은 +5~+6등급, 하늘색 원은 +6~+7등급의 별들을 표시한 것이고 혜성 ISON은 빨간색 원 안의 정 가운데에 있습니다. 이게 정말 ISON인지 의심스러울 만도 합니다. 그저 별 같이 나와서 원...

그렇지만 자세히 보면 다른 별들과는 달리 초록색이고 별처럼 뚜렷하지 않고 약간 희미합니다. 구별하기 힘들지만 정말 ISON 맞습니다... 참고하시라고 사진을 찍을 당시의 skymap을 Stellarium에서 얻어서 첨부합니다.


 위 지도에서 녹색 박스가 제가 찍은 사진의 범위입니다. 별들의 위치를 대조해보면, 빨간 원이 ISON이라는 것을 금새 알 수 있습니다. 아쉽게도 이번 달에는 점점 고도가 낮아져서 ISON은 곧 태양에 가장 가까운 지점을 지나갈 것 같습니다. 다음 달에는 다시 동쪽 하늘에서 올라올 예정이기 때문에 다음을 기약하며 기록용 사진만 남겨야 할 것 같습니다. 저도 혜성 꼬리 한 번 찍어보고 싶네요.


 촬영 정보

  • 촬영 일시 : 2013년 11월 19일 06시 09분
  • 촬영 장소 : 서울 마포구 어딘가의 집 베란다
  • 촬영 기기 : Nikon D700
  • 조리개 : F2.8
  • 초점 거리 : 200mm
  • 노출 시간 : 1s
  • ISO : 3200


 사진 정보

  • 보정 사진은 원본 사진 두 장을 교차하여 배경이미지를 얻은 후, 각각의 사진에서 배경 제거하고 더한 사진입니다. 밝기도 약간 손을 본 것으로 실제 서울 하늘에서는 원본 사진과 같이 보입니다.


2013. 11. 17.

Project Euler - 문제 11번

Largest product in a grid

Problem 11

In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

 문제 11번 : 아래 주어진 20×20 격자에서 대각선으로 놓인 숫자 4개가 빨간색으로 표시되어 있다. 그 숫자들의 곱은 26 × 63 × 78 × 14 = 1788696 이다. 그러면 같은 방향(위, 아래, 왼쪽, 오른쪽, 또는 대각선)으로 붙어있는 숫자 4개의 가장 큰 곱은 얼마인가?



 먼저 당면한 과제는 위에 주어진 숫자들을 어떻게 받아올 것인지 하는 부분입니다. 결국은 무식하게 숫자 사이사이에 , 를 넣고 2차원 배열을 이용해서 받았는데... 별로 권장하고 싶은 방법은 아니더군요. 계속 주어진 숫자를 이용하는 문제들이 나오는데 좋은 방법을 찾아봐야 할 것 같습니다.

 아무튼 숫자들을 배열에 넣고 나면 사실, 코드 자체는 어려울 것이 없습니다. 같지만 다른 방향으로 4번만 반복하면 되기 때문이지요. 수평방향, 수직방향, 그리고 대각선 두 방향을 각각 생각해 주시면 됩니다. For문을 통해서 계산을 할 것이기 때문에 어떤 경우에 index가 1부터 20까지 가야 할 수도 있고 어떤 경우에는 1부터 17까지만 가야 할 수도 있습니다. 18을 넘어가면 숫자가 3개만 남는 경우가 생기기 때문이지요.

 int result = 0;
 // vertical
 for(int i = 0; i < 20; i++)
 {
  for(int j = 0; j < 17; j++)
  {
   int temp = num[j][i];
   for(int k = 1; k < 4; k++)
   {
    temp = temp*num[j+k][i];
    if(temp == 0)
    {
     j += k;
     break;
    }   
   }
   if(temp > result)
    result = temp;
  }
 }

 제가 짠 수직방향 코드만 첨부합니다. 다른 방향은 index만 살짝 고쳐주면 되기 때문에 별로 어려운 부분은 아닌 것 같네요. 중간에 값이 0인 경우는 빠른 계산을 위해서 건너뛰게끔 했는데, 이 부분은 대각선 파트에선 지워버렸습니다. 대각선에서는 숫자를 대각선으로 카운팅해야 건너뛰는게 성립되는데 영 복잡해져서 약간의 시간을 감수하고 없애버렸네요.


 결과는 바로 잘 나왔습니다. 시간도 거의 걸리지 않네요. 그래봐야 겨우 400개짜리 숫자들이었으니... 다만 격자가 커진다면 결과가 많이 달라지겠지요. 코드가 거진 \(O(n^2)\) 정도이기 때문에 숫자가 크면 꽤나 불리한 코드입니다.



혜성 ISON 근황 (2013년 11월 17일)


 현재 ISON의 등급은 +5.66 등급이네요. 눈으로 보기 쉽지 않은 등급입니다. 위치는 처녀자리에서 가장 밝은 별인, Spica의 위에 있어서 찾기는 쉬울 것으로 보입니다. 다만 관측 가능한 시간이 해뜨기 직전인 새벽 6시부터 짧은 시간 동안만 관측이 가능하기 때문에, 혜성을 찾아서 보기란 쉽지 않습니다.

 먼저 ISON Tracker에서 현재 위치를 알아보았습니다.


 이렇게 보니 위치가 잘 감이 안옵니다. 그래서 11월 18일 기준 새벽 6시와 6시 20분에 서울에서 본 화면을 스텔라리움(Stellarium)이라는 프로그램으로 다시 한 번 찾아보았습니다.



 새벽 6시에 기껏해야 혜성의 고도는 15도밖에 되지 않습니다. 이후로는 혜성이 태양으로 점점 접근하기 때문에 더 낮아질 것이고요. 6시 20분 정도에는 이미 해가 뜨면서 하늘이 점점 밝아지기 때문에, 그 빛에 의해서 혜성이 보이지 않을 것 같습니다. 이렇게 매우 제한적인 조건에서 혜성을 찍으려면, 동쪽이 탁 트인 곳에서 해가 뜨기 전에 낮은 고도의 혜성을 찍어야 한다는 결론이 나옵니다.

 그나마 희망적인 부분은 처녀자리의 1등성인 Spica 근처에 있어서 찾기는 매우 쉽다는 정도입니다. 어두운 새벽에 카메라로 사진을 찍으면 나올 수도 있을 듯 한데... 요새 서울 날씨가 좋지 않아서 가능할 지 모르겠군요. 다른 분들도 한 번 시도해 보시길 바랍니다.



2013. 11. 16.

iSpy, 컴퓨터로 IP cam을 연결해서 CCTV처럼 사용하기


 흥미로운 프로그램 하나를 소개할 까 합니다. 이름은 제목에 언급한 iSpy라는 프로그램 입니다. 이 프로그램의 목적은 ip 주소가 있는 카메라에 연결해서 CCTV처럼 ip cam을 모니터랑 할 수 있는 프로그램입니다.




 이 프로그램인 일단 프리웨어인 점에서 만족스러운데, 더욱 대단한 것은 유료 프로그램에 맞먹거나 뛰어넘는 막강한 기능들을 보유하고 있습니다. 다만 단점은 막강한 기능들을 사용하기 위해서는 다양한 옵션을 설정해 주어야 하는데, 이 옵션들이 너무 많네요...

 저는 홈페이지에서 다운로드 받을 때에, 윈도우용 64비트 버전을 찾아서 받았습니다. 기본으로 32비트가 설정되어 있으니 참고하시길 바랍니다. 이제 iSpy의 인터페이스를 살펴보도록 하겠습니다.


 기본적으로 간단한 메뉴들과 모니터링하는 내 화면, 그리고 아래쪽에는 내가 저장한 비디오나 이미지들이 나오며 전체 모니터에 명령을 내릴 수 있는 명령창이 있습니다. 이제 모니터를 설정해 보도록 합시다.


 메뉴에서 Add를 선택하면 다양한 옵션들이 나타납니다. 제가 연결하고 싶은 것은 IP cam이기 때문에, IP Camera with Wizard를 선택하도록 하겠습니다.



 그러면 제일 먼저 카메라 모델을 고르도록 나옵니다. 제가 현재 테스트 하고 있는 IP cam은 안드로이드에서 제공하는 IP cam이라는 app이기 때문에, Android IP cam을 선택하면 됩니다. (핸드폰으로 IP cam을 만드는 방법은 추후 게시글에서 다루도록 하겠습니다.)



 보안 설정은 아래와 같이 나오지만, 제가 설정을 해 두지 않은 관계로 보안 부분은 그냥 건너뛰겠습니다.



 그 후에 IP cam에 연결하기 위한 주소 입력 화면이 나타납니다. 저는 집 안의 공유기 아래에서 테스트를 하고 있기 때문에 internal ip 주소를 사용하지만, 외부에서 사용할 시에는 반드시 공인된 external ip 주소를 사용함과 동시에 port forwarding을 통해서 해당 포트를 IP cam에 연결시켜 주어야 합니다. (추후 자세히 다루도록 하겠습니다.)



 이제 카메라에 연결하기 위한 기본 과정은 끝났습니다. 이 과정을 지나면 해당 주소에 연결할 수 있는 video 연결 링크를 테스트하게 되는데, 여기서 해당 주소들이 제대로 연결이 되지 않으면 활성화 가능한 링크가 없다고 표시되면서 아무것도 연결이 되지 않습니다. 반드시 주소와 포트를 다시 한 번 체크하신 후에 진행해서 가능한 연결이 화면에 뜨는지 확인합니다.

 저의 경우는 자동 연결과정을 건너뛰고 수동 화면에서 Video Source를 VLC Plug-in을 통해서 연결하였습니다. 주의점은 VLC를 통해서 연결하려면 반드시 VLC 프로그램이 설치되어 있어야 합니다. (VLC 프로그램 링크 : http://www.videolan.org/vlc/index.html)



 제가 IP cam으로 사용하는 안드로이드 프로그램의 경우는 VLC의 주소가 http://ip:port/video 로 주어지는 것 같습니다. 이제 이 과정을 넘어가면, 드디어 IP cam에 대한 자세한 설정을 요구하는 화면이 나타납니다. 옵션 설정시 주의할 점은, 자동으로 레코딩이 안되도록 하는 것만 잘 하시면 큰 문제 없습니다. (기본적으로 화면이 움직일 경우 녹화가 되도록 되어 있더군요...)


 위의 옵션창에서 제일 먼저 Alerts 탭으로 가셔서 Alerts Enabled를 체크 해제합니다. (굳이 안하시면 화면이 움직일 때마다 컴퓨터에 알림이 작게 표시됩니다.) 그 다음으로 Recording 탭으로 가셔서 No recording을 선택합니다. 다른 옵션을 선택하면 화면이 움직이거나 할 때마다 전부 녹화시켜 버립니다...


 그리고 이제 다시 처음의 Camera 탭으로 돌아오면 중간에 Microphone 탭이 있습니다. 여기서 Audio 설정을 해 줄 차례입니다. [...] 버튼을 클릭하셔서 New를 선택하면 Audio 설정 화면이 나타납니다.



 제가 사용하는 안드로이드 IP cam에서는 Audio 소스를 따로 제공하고 있습니다. 그래서 FFMPEG를 선택하고 http://ip:port/audio.wav를 입력하였더니 정상 작동하였습니다. IP cam이 작동중일 때에 test를 해 보시면 OK라고 떠야 정상입니다. 이제 추가한 화면을 켜보면 아래와 같이 나타납니다.


 보시다시피 화면이 잘 나오고, 화면 아레 작게 LIVE라고 써인 창이 Audio인데, Audio도 정상으로 잘 작동하고 있습니다. 이 상태에서 화면을 우 클릭한 뒤에 Edit을 하면 처음 Camera 셋팅시에 나왔던 옵션 창이 나타납니다. 여기에서 Recording 탭에 가셔서 적당한 필터를 고른 후에 Finish로 종료 후, 화면을 다시 우 클릭하여 Start Recording을 하시면 녹화 및 녹음을 바로 진행할 수 있습니다.

 자세한 녹화 옵션은 이것저것 직접 시도해 보셔야 할 겁니다. 적당한 Resolution이라던지 아니면 FPS라던지 하는 부분은 IP cam의 성능이나 네트워크에도 밀접한 연관이 있기 때문이지요.


 집에서 고양이가 뭐하고 노는지 지켜보고자 어머니가 쓰시던 안드로이드 폰을 어머니께서 IP cam이라는 앱을 깔아 저에게 어떻게 이걸 외부에서도 볼 수 있냐고 여쭤보시면서 시작된 저의 IP cam 탐사기는 결국 제 컴퓨터에 CCTV처럼 IP cam을 살펴볼 수 있는 프로그램을 설치하게끔 하였고 심지어 이제는 녹화까지 가능하게 되었네요. 덕분에 많은 기능을 새로 배웠습니다.




 2013. 11. 22. 추가

 iSpy는 절대 간단하게 IP cam을 설정할 수 있는 방법이 아닙니다. 각종 앱을 알아본 결과, 간단하게 컴퓨터와 스마트폰을 이어주는 앱들이 여럿 존재하는 것을 발견하였습니다. 이를 통해서 녹화도 가능합니다. 다만 모션 인식, 모션 인식, 그리고 다중 IP cam을 볼 수 있는 등의 세부적인 옵션들이 있기 때문에 용도에 맞게 프로그램을 선택해서 사용하시는 것이 좋습니다.