2012/01/24 21:20 |
Posted by jollaman999 jollaman999
보안이 강화됨에 따라 윈도8에서는 기존의 키보드 타이핑 방식의 암호가 아닌 GUI 방식의 암호 입력 체계를 도입하였다. 필자는 여태 개발자 프리뷰 버젼을 써오면서 여태 이 사실을 모르고 있었는데 우연히 검색을 하다가 이전에 베타버젼인 빌드 7989에서도 비슷한 기능이 이미 있었음을 확인 하였다. 바로 요즘 스마트폰에 흔히 이용되는 패턴락 기능이다. 아래 동영상을 참고 하기 바란다. (외부에서 퍼온 동영상을 주요부분만 잘라낸 것이다. 출처를 밝히는 것이 옳긴 하지만 공개적으로 보여주고 싶지 않은 부분이 있기 때문에 구지 밝히지 않기로 하겠다...)
그리고 필자가 현재 사용하는 개발자 프리뷰 버젼(Windows Developer Preview) 에서 발견한 Picture Password 기능을 스샷을 하나씩 보면서 설명해 나가기로 하겠다.
먼저
Picture Password 기능을 이용하기 위해서는 메트로 UI를 통해서 제어판에 들어가야 한다.
다음으로 좌측 메뉴에서 "Users"를 선택해 주고 우측 화면에서 "Picture Password" 란에서 설정을 해준다. (여기서는 이미 설정한 상태이기 때문에 Change/Remove 로 표기가 되어있다.)
"Picture Password" 설정을 하기 위해선 기존의 사용자 암호 입력이 필요하다. 암호를 입력해주고 설정화면으로 진입한다.
진입하면 우측에 사진 선택 메뉴가 있다. 다음과 같이 "Picture Password"에 사용할 이미지를 선택해 준다.
(필자는 예전에 본체 케이스를 직접 만들어 보겠다 하여 밖에서 갖가지 공구와 상자를 구입하여 만든 자작 튜닝 케이스 사진을 선택했다...^^)
사진을 선택하고 나서 다음과 같이 마우스로 제스쳐를 그리며 3번 설정을 해준다. 한 번 입력이 완료되면 재확인을 위해 제스쳐 입력을 한번더 요구한다.
로그온 화면에 진입하여 설정한 "Picture Password"를 확인해 보자. (단축키 : 윈도키 + L)
(원의 경우엔 돌리는 방향도 일치해야 한다.)
필자가
"Picture Password" 기능을 직접 사용해본 결과 기존의 패턴락은 복잡하게 설정하였을 경우 외우기도 번거로 웠는데 그림에 익숙한 사람들에게 편의성을 제공하며, 마우스나 손으로(터치패드를 사용할 경우) 제스처를 그려가며 암호를 입력한다는 것이 흥미롭기도 하였다.
하지만 암호를 입력하고 있을때 누군가가 보고있다면 암호가 쉽게 유출될 가능성도 있어보인다. 필자 생각은 기존의 패턴락 기능도 유지한채 이 기능도 같이 추가하면 어떨까 하는 생각이 든다. 평소에 혼자 있을땐 편하게
"Picture Password" 기능을 이용하고 그렇지 않을 경우엔 직접 암호를 입력하거나 패턴락의 기능을 이용하는 것이 더 낳을것 같다고 생각한다.
2012/01/20 00:40 |
Posted by jollaman999 jollaman999
필자는 실제로 사용되는 신호등 프로그램의 구조를 본적은 없으며 필자가 아버지의 경험담을 듣고서 사거리에 설치된 신호등을 여러번 관찰하면서 비슷하게 작성해봤을 뿐이란 것을 미리 알린다.
일상생활에서 항상 보는 신호등, 항상 보게 되면서도 그것이 어떻게 작동해 나가는지에 대해선 잘 생각해보지 않고 그냥 지나치게 된다. 신호등이 어떤순서로 작동하며, 특히나 여기서는 이곳저곳에서 차가 오가는 사거리의 경우에 대해서 알아보기로 하자.
1. 먼저 사거리의 구조를 보자.
필자가 사는곳은 사거리가 대부분 저런 형태를 취하고 있다. 물론 여기서는 마름모 꼴의 사거리를 예로 들었지만 네귀퉁이의 삼각형 모양이 없는 일반 사각형 구조의 사거리도 같은 방식으로 생각해 볼 수 있다.
2. 이제 차가 지나다니는 방향을 생각해보자.
(음... 지나가던 개도 이보다 더 잘 그렸을지도 모르겠다...;;)
차가 방향을 전환할 때를 생각해보면 우회전 시에는 신호와 상관없이 바로 우회전이 가능하지만 좌회전을 할 경우에는 신호에 따라서 이동해야 한다.
3. 이번엔 자동차 신호등의 위치를 생각해보자.
위와 같이 방향개비 처럼 위치하고 있을 것이다.
4. 마지막으로 보행자 신호등을 생각해보자.
보행자 신호등은 대개 자동차 신호등 아래족에 같이 붙어있다.
5. 그럼 이제 프로그래밍을 어떻게 해나가야 할지 생각해보자.
사거리다... 그렇다 4개의 자동차 신호등을 각각의 상황에 맞게 신호를 표시해야 하며 보행자 신호등 역시 이에 맞추어 작동하도록 해야한다. 각각의 신호등이 개별적으로 작동한다면 어떤 사고가 일어날지 모를일이다...
이 많은 신호등을 어떻게 작동시켜야 할까... 필자도 처음에 이부분에서 막막했다. 위의 그림들을 찬찬히 보면서 감을 잡은 분들도 있을것이다. 아직도 어떻게 해야할지 막막하다면 다시한번 위의 그림들을 살펴보자.
그렇다 사거리중 어느 한 부분만을 생각해서 신호를 정하고 나면, 나머지 세곳은 차례차례 신호를 번갈아 바꾸어 주기만 하면 된다.
그럼 방금 필자가 말한대로 어느 한부분을 위주로 생각해보자. 위 그림에서 필자는 주로 아래쪽과 오른쪽의 횡단보도를 이용하기 때문에 동쪽에서 차가 오는 경우를 생각해보기로 했다.
차가 동쪽에서 온다면 동->서로 직진하는 차가 있는가 하면 우회전, 좌회전을 하는 차들도 있을 것이다. 따라서 이에 맞게 그림을 그려서 생각해보면 보행자가 다닐 수 있는 횡단보도는 위쪽의 횡단보도 뿐이다.
6. 이제 이 경우에 대해서 각 신호등의 신호를 어떻게 해야 할지 생각해보자.
(글씨나 표시가 잘 보이시지 않을 경우 클릭하시면 크게 보입니다.)
위에서 보듯이 자동차 신호등 중 ①번 신호등에 청색, 좌회전 신호가 들어오고 나머지 자동차 신호등에는 적색 신호가 들어온다. 보행자 신호등은 ⓖ, ⓗ번 신호등에 청색 신호가 들어오고 그외에는 적색 신호가 들어온다.
여기까지만 잘 따라왔다면 이제 절반은 끝났다고 봐도 된다. 이제 이 신호대로 네번을 차례로 번갈아 가면서 바꿔주기만 하면 된다.
단, 바뀌는 순서를 정할때도 그 순서에 따라 얼마나 효율이 있는지 알아볼 필요가 있다. 으음... 사실 필자는 실제로 처음에 이 부분을 일일이 수작업을 통해 각각의 경우에 대해서 하나하나 적어가면서 비교해봤지만... 실제로 따지고 보면 계속 반복이 되는 작업이기 때문에 경우의 수는 3가지 이다. (원모양으로 순서대로 도는 경우 1가지와 지그재그로 도는 경우가 2가지이다.)
구지 추천하고 싶지는 않지만... 혹시나 시간이 남는다면 여러분도 직접 각각의 경우에 대해서 연구해 보길 바란다... (추천인가...;;?)
우선, 각각의 횡단보도 위치를 다음과 같이 A, B, C, D 라 하자.
먼저, A->B->C->D 이렇게 원모양으로 순서대로 작동한다고 생각해보자.
어떻게 보면 이 경우가 제일 간단하고, 건너서 바로 꺾어질 수 있으므로 효율적으로 보일 수도 있다. 그러나 현재 사람들이 A에서 횡단보도를 건너고 있고, 여러분이 D에서 A로 건너야 한다고 생각해보자. 이건머... 모든 신호등이 다 한번씩 작동을 완료 할때까지 계속 기다리고 있어야 한다. 그러므로... FAIL.....
다음으로 지그재그 순서인 A->B->D->C와 B->A->C->D 두가지의 경우가 있는데 직접 따져본다면... 둘 중 후자가 더 효율적이다. (혹여나 필자의 계산 실수로 아닐 수도 있으나.. 실제로 후자방식의 순서로 진행이 되니 그렇다 치자...;;)
번호를 매겨서 다시 살펴보면 실제로 현재 사거리에 적용되어있는 횡단보도의 이용순서는 다음과 같이 된다. (일부 사거리에서는 하나씩 돌아가면서 작동하지 않고 한번에 두 곳의 횡단보도를 이용할 수 있게 작동되는 곳도 있다. 보행자 기준에서는 편할 수 있지만 자동차의 기준에서는 그렇지 못해보인다.)
이제 앞쪽에서 살펴보았던 신호를 그대로 적용하면 된다. 필자는 위에서 4번 위치에 대해서 살펴보았으므로 4->1->2->3 순서로 생각해 나가보기로 하자.
7. 대략적인 소스 코드
대충 이런 구조를 취하게 될 것이다. 본 내용은 실제 프로그래밍이 아닌 그냥 참고용으로 봐주길 바란다.
(참고로 보행자 신호등은 일정시간의 카운트(여기선 30초)가 존재하고, 네번의 신호가 각각 바뀔때마다 중간중간에 노란색 신호가 1초씩 대기한다는 사실을 잊지 말자.)
4번 위치에서 차가 이동해 올 때, 즉 필자가 ⓓ위치에서 3번 횡당보도가 열리길 기다리고 있을때, 필자는 바쁠경우 미리 앞으로 조금 나가있기도 한다. 그 위치에선 차가 다닐리가 없기 때문이다. (단, 여러분이 그 지역의 사거리 신호등 작동 순서를 명확히 알고 있을 때가 아닌이상 절대로 필자처럼 했다가 변을 보는 일은 없길 바란다!!)
이상으로 신호등 프로그래밍의 과정을 끝내며 다음 도전과제는 엘리베이터로 생각해보고있다...ㅎㅎ;;
5. 출력되었던 난수들과 사용자가 입력한 수들을 각각의 메모리 영역에 작은수 부터 큰 순서대로 정렬한다. (이렇게 재정렬 해주는 이유는 입력한 순서에 상관없이 같은 숫자만 있으면 맞춘 갯수를 증가하는 식으로 구성하기 위함이다.)
6. 난수들이 저장된 쪽의 인덱스와 사용자가 입력한 숫자들이 저장된 쪽의 인덱스를 하나씩 비교해 가며 수가 같으면 맞춘 갯수를 증가해 나간다.
7. 출력되었던 난수들과 사용자가 입력한 수들, 그리고 몇개중 얼마나 맞추었는지를 출력한다.
8. 사용자로부터 재시도를 할 것인지 그만둘 것인지 물어본다.
<Tip>
1. 난수함수 : 시스템으로 부터 임의의 숫자들을 얻어내는 역할을 한다.
1-1. 다음 헤더 파일들을 인클루드 해준다.
#include <stdlib.h>
#include <time.h>
1-2. 난수는 stdlib.h 에 있는 rand 함수를 이용한다.
대입할 변수명을 a라 하고 0~9범위네에서 난수를 뽑아낼 경우 다음과 같이 써준다.
a = rand()%10;
여기서 0~9범위 내의 난수를 얻기 위해 %10이라 써뒀는데 이 의미는 어떠한 수를 10으로 나누었을 때의 가능한 나머지들을 난수로 취한다는 것이다. 10으로 나누었을때의 나머지는 0~9에 해당하므로 이 범위내에서 난수를 취하는 것이다.
1-3. 난수 함수를 사용할 때 그냥 이 함수만 넣어두면 프로그램을 한 번 실행하고 다시 실행해보면 한 번 사용된 난수가 바뀌지 않고 같은 수가 이용됨을 알 수 있다. 때문에 이를 해결하기 위해 시스템으로 부터 시간을 가져와 시스템의 시간이 변경됨에 따라 사용되는 난수들을 변경 하는 방법을 취한다.
srand(time(NULL));
위에 적어둔 것을 난수함수(rand 함수)를 사용하기 전에 써두면 된다.
srand는 난수를 초기화 하는 함수이며 time.h 헤더파일에 있는 time 함수가 시스템으로 부터 시간을 가져오는 역할을 한다. 그외 세부적인 것은 이부분에서 다룰 부분이 아니므로;; 검색을 통해 더 알아보길 바란다...
2. 시스템 대기 함수 : 프로그램의 동작을 지정한 시간동안 잠시 멈추는 역할을 한다.
2-1. 다음 헤더 파일을 인클루드 해야 한다.
#include <Windows.h>
2-2. 기본구조는 다음과 같다.
Sleep(1000);
Sleep 함수를 사용하며 (대문자 S주의!!) 괄호안에는 ms단위의 시간을 적어넣어 준다.
3. 출력된 글자를 다른 글자로 덮어쓰기
3-1. printf("Hello World"); 라고 입력하였다고 치자, 그럼 화면에는 다음과 같이 출력이 될 것이다.
Hello World
3-2. 여기서 맨뒤에 \r 을 적어 넣고 ?를 써넣어주면 다음과 같이 맨뒤의 d가 사라지고 ?가 붙은채로 출력이 된다.
printf("Hello World\r?");
Hello Worl?
3-3. 출력된 글자의 일부를 안보이게 하고 싶다면 스페이스바로 가릴 부분 만큼 공백을 넣어 주면 된다. 예를 들어 World를 지우고 Hello 라고 출력한다고 치자, 그럼 다음과 같이 써넣으면 된다.
printf("Hello World\r ");
4. 메모리 할당 함수 : 포인터를 초기화 하고나서 해당 영역의 메모리의 크기를 지정하는 경우 사용한다.