글쓴이 보관물: snowall

snowall에 대하여

onecup, research department

소프트웨어 개발 방법론

소프트웨어를 개발하는데에는 여러가지 방법이 있다. (그리고 이건 예상 시험문제다.)

그래서, 소개해 보자.

우선, 폭포식 방법이 있다. 이건 밥을 짓는데

1. 몇인분을 지을 것이고, 쌀은 얼마나 넣어야 하고, 물은 얼마나 넣어야 할지 정한다. 쌀과 물의 양을 정확히 알기 위해서는 많은 경험이 필요하지만 실제로 그건 곤란하다.

2. 밥을 짓기 위한 요구사항을 정확히 분석한다. 밥에 어떤 성분들이 들어가야 하는지 고객의 요구에 맞춰서 분석해야 한다. 보리밥을 원하는지 현미밥을 원하는지 흰밥을 원하는지.

3. 밥을 어떻게 할 것인지를 생각한다. 우선, 전기밥솥으로 할건지 가스밥솥으로 할건지 가마솥으로 할건지 파악한다. 물은 생수를 쓸건지 수돗물을 쓸건지 정하자. 쌀을 얼마나 불릴 것인지도 정해야 하고, 밥솥에 사용할 메소드로 압력솥을 쓸건지 그냥 끓일건지 아니면 쪄낼건지 정해야 한다.

4. 밥을 한다.

5. 밥맛을 본다.

6. 준다.

이 방법은, 한번에 많이 할 때 써먹을만하다. 그리고 일단 해놓은걸 물리기 없이 그냥 내놓을 수 있을때 가능하다. 단점은, 밥맛에 대한 피드백이 불가능하기 때문에 맛 없어도 복불복.

이 방법을 조금 개선해서 V자형 방법이 있다. 이것은 폭포식 방법을 그대로 따라가는데, 여기에 추가적으로 밥맛을 보고 맛없으면 다시 하는 과정을 포함한다. 물의 양이 적절한지 계속해서 검증하고, 불린 시간이 적절한지 계속 검증하고, 밥짓는 방법이 적절했는지 계속 검증한다. 각 단계별로 검증해서 최종적으로는 맛있는 밥이 완성된다. 이것은 다른 조건보다 “맛있는 밥”이라는 절대적인 목표를 달성하기 위한 경우에 적절하다.

일정 중심의 모형도 있다. 이건 폭포식 방법을 따라서 밥을 짓는데 중간에 그냥 내놓는다. 밥을 하기 위해서 필요한 요소들 중에 우선순위가 높은 것들을 일단 만족하다가 밥때 되면 그냥 내놓는 것이다. 가령, 현미에 생수를 쓴 압력밥솥에 한 밥을 하고 싶다고 하자. 그리고 우선순위를 현미, 생수, 압력솥 순서대로 정해져 있다고 하자. 근데 현미랑 생수가 있는데 압력솥이 제작중이다. 당장 밥은 먹어야 하는데 압력솥이 올 때까지 기다리려면 그 전에 굶어죽을수도 있다. 따라서 일단 있는 걸 갖고 밥을 해서 내놓는다. 이것은 “밥때는 절대로 놓치면 안된다”는 목표를 달성할 때 적절하다. 우선순위가 높은것부터 해결하는 방법이다. 다만, 나중에 압력솥이 오더라도 이미 밥을 먹은 상태기 때문에 압력솥을 괜히 주문했다는 아쉬움은 남을 것이다.

프로토타이핑 모형을 쓸 수도 있다. 쌀을 적당히 불려서 하얗게 만들어 놓고 밥그릇에 담은 후 “이정도의 밥이면 됩니까?” 물어보는 것이다. 폭포수 방법과 다른 점은, 밥이 별로 맛이 없어 보이면 이것저것 바꿔볼 수 있다는 것이 장점이다. 다만, 밥먹을 사람이 “오오, 이정도면 이제 밥은 금방 나오는거지?”라고 착각하게 될 수 있다는 점이 문제다. 그리고 때깔만 좋은 밥을 보고 맛도 좋을 거라는 착각에 빠질 수 있다는 점이다. 밥이 맛있을지 없을지 불안할 때 사용한다.

점증적 모형은 밥을 조금씩 하는 방법이다. 일단 밥을 해서 내놓고, 점점 더 많은걸 추가한다. 쌀밥을 내놓고, 현미밥을 내놓고, 잡곡밥을 내놓는 방식이다. 일단은 밥을 먹일수 있다는 점에서 애자일하다고 할 수도 있다. 교재에서 나중에 나온다고 하는 익스트림 밥짓기 방법과 유사하다고 한다. 배고프다.

나선형 모형은 밥짓는 과정에 숨어있는 위험요소를 찾아내서 미연에 방지한다. 가령 압력솥이 밥짓다가 터질 수도 있는데, 그걸 방지하기 위해서 그냥 냄비에 밥을 할 수 있다. 이것은 밥짓기가 실패할 수 있는 위험을 사전에 막는 방법이다. 그리고 일단 밥을 해서 성공한 후, 압력솥을 써서 다시 성공시킨다.

진화적 밥짓기 모형은 일단 밥을 내놓은 후 밥먹는 사람의 반응에 따라 빠르게 밥을 새로 지어서 바꿔주는 것이다. 프로토타이핑이랑 비슷할 수 있는데, 프로토타이핑은 먹기 전에 일단 대충 겉보기에만 좋게 만들어 놓고 나중에 밥을 해주는 것이고, 진화적 밥짓기는 일단 먹여보고 반응을 살펴서 그 다음의 밥짓기에 반영한다는 점이 다르다.

자, 이제 당신도 맛있게 밥짓기를 할 수 있다.

청주의 추억

청주에 갔었을 때 찍은 사진 한장.

나는 달리기를 싫어하는 주제에 “달리는 느낌”은 좋아한다. 하지만 과속을 즐기지도 않는다. 실제로 달리는 것을 그다지 좋아하지 않으며, 단지 “달리는 느낌”만을 좋아할 뿐이다.

뿌리깊은 하청관계

우리나라에서 “하청”이라든가 “하도급”이라는 걸 빼면 사회 구조를 이해할 수 없을 것이다.

집앞에 있는 횟집인데…

이젠 횟집에서도 갑-을-병 관계가 존재한다. 을은 어디간거야…(도망?)

카메라 마운트하기

리눅스에서 후지필름 J10이 마운트가 안되는 바람에 검색신공을 펼쳤다.



Requisites:


gphotofs

Usage
(mounting):


mkdir mount_point

sudo gphotofs -o allow_other
/path/to/mount_point

Usage (unmounting):


sudo
umount /path/to/mount_point

이랬더니 잘 된다.

어려운 수학문제 : 임의의 n분 만들기


수학자들은 습관적을 일반화시키기를 좋아한다. (거의 직업병임.)


http://snowall.tistory.com/1852

일단 이 글을 읽고나서, 다음과 같은 문제를 풀어보자.

정확히 1시간동안 타는 도화선이 여러개 있다. (얼마든지 쓸 수 있다.)

이 도화선을 이용해서 1분부터 59분까지, 각 1분 간격으로 모든 시간을 잴 수 있을까?

잴 수 있다면 어떻게 가능한가?

모든 경우에 대해서 불가능하다면, 가능한 경우가 있고 불가능한 경우가 있을 것인데, 어떻게 구별할 수 있을것인가?

일단, 앞에 이미 썼던 쉬운 경우의 문제에 대해서, 15분, 30분, 45분이 가능함은 쉽게 증명할 수 있다. 또한, 만약 n분을 잴 수 있다면 n+15분, n+30분, n+45분을 잴 수 있다. (이것은 쉽게 증명된다.) 따라서 1분부터 14분까지 잴 수 있다는 것만 증명하면 된다.

또한, 만약 n분을 잴 수 있다면 15-n분도 잴 수 있다. (이것 또한 쉽게 증명된다. 15분과 n분을 동시에 재기 시작한 후, n분이 다 끝난 시간부터 15분이 끝날 시간까지 재면 15-n분이 된다.) 따라서 1분부터 7분까지 잴 수 있다는 것만 증명하면 된다.

n분을 잴 수 있고 m분을 잴 수 있다고 하자. 여기서 m과 n은 둘 다 임의의 자연수이고 m>n이라고 하자. 그럼 m-n분도 잴 수 있다. (앞에서 15-n분을 잰 것과 같다.)

만약 n분을 잴 수 있다면 임의의 자연수 m에 대해서 m*n분도 잴 수 있다.(n분을 재는 것을 m번 반복하면 됨.) 따라서 1분을 잴 수 있다면 이 문제는 모두 해결된다.

7분을 잴 수 있다고 하자. 그럼 앞에서 말한 방법을 통해 15-7=8분을 잴 수 있다. 그럼, 따라서, 8-7=1분도 잴 수 있다.

따라서 7분을 잴 수 있다는 것만 증명해도 이 문제는 모두 해결된다.

만약 4분을 잴 수 있으면 8분을 잴 수 있다. 그럼 7분도 잴 수 있고, 따라서 이 문제는 모두 해결된다.

만약 2분을 잴 수 있으면 4분을 잴 수 있으므로 문제가 해결된다.

즉, 1분, 2분, 4분, 7분 중의 하나만 잴 수 있어도 이 문제가 해결된다.

(좀 더 정확히 말하면, 3과 5의 배수가 아닌 분 중의 하나라도 잴 수만 있으면 이 문제는 해결된다.)

이후로는…아직 생각이 안난다.

그럼, 이제 좀 더 어려운 문제에 도전해 볼 수 있다.

정확히 1시간동안 타는 도화선이 여러개 있다. 이 도화선을 이용해서 주어진 유리수 k에 대해서 k분의 시간을 잴 수 있을까?

그리고 좀 더 자극적인 것을 원하는 사람을 위하여 다음과 같은 문제를 준비해볼 수 있다.

정확히 1시간동안 타는 도화선이 여러개 있다. 이 도화선을 이용해서 주어진 실수 k에 대해서 k분의 시간을 잴 수 있을까?

추가하자면, 이 문제는 대수학 문제다. 군의 정의와 확장이 필요하다.

간단한 수학 문제 : 45분 만들기

어느 회사의 면접 문제였다고 한다.

도화선 두 가닥이 있습니다. 둘다 한 시간만에 완전히 타서 없어집니다.

하지만, 도화선의 두께가 일정치 않아서, 타는 속도는 제멋대로입니다.

10분동안 절반이 타버릴수도, 1/20만 타서 사라질 수도 있습니다. 어쨌든 불을 붙이면 정확히 한 시간 후에는 모두 탑니다.

이 두 가닥의 도화선을 이용해서, 45분을 측정해 보세요.


http://kldp.org/node/113998

KLDP의 회원들은 이것저것 따지고 있는데, 어쨌든 이 문제를 잘 풀기 위해서는 제시된 것 이외에는 그냥 이상적인 상황을 가정하는 것이 좋다. 문제에 제시된 것 이외의 내용을 임의로 가정할 필요는 없다.

풀이는 나중에.

풀이

*이 풀이는 KLDP의 해당 글타래에 이미 제시된 풀이이다. 그닥 snowall만의 독창적인 풀이는 아님.




도화선 1개를 양쪽에서 동시에 불을 붙인다. 그럼, 이 도화선이 다 타는데에는 정확히 30분이 걸린다. (고정점 정리)




도화선 1개를 양쪽에서 동시에 불을 붙일 때, 동시에 남은 하나의 도화선에 불을 붙인다. 그럼 이 도화선은, 양쪽에 불을 붙인 도화선이 다 탔던 순간, 남은 부분은 30동안 타게 된다. 이제, 양쪽에 불을 붙인 도화선이 다 타는 순간에 한쪽에서만 불을 붙인 도화선의 반대쪽 끝에 불을 붙인다.

위 부분을 마우스로 긁어보면 풀이가 보임. 너무 쉬운 문제이기 때문에, 최소한 2시간 이상 고민 해보고 풀이를 볼 것을 권장함.




게임 동영상

챌린저 호와 천안함

옛날옛날에, 우주왕복선 챌린저호가 발사된 직후에 폭발하는 사고가 있었다. 미국 정부에서는 이 사고를 조사하기 위해서 유명한 과학자인 리처드 파인만을 불렀고, 어쨌든 파인만은 문제의 원인을 찾았다. 그 원인은 아주 작은 고무링이었는데, 이 고무링이 극한 상황에서 성질이 변하는 것을 대비하지 못해서 사고가 났던 것이다. 그리고 파인만은 고무링이 문제의 원인이라는 것을 TV에서 실험으로 보여줬고, 그것은 국민들이 그 사고를 이해하는데 큰 도움을 주었다.

우리나라에는 아직 물리학 분야의 노벨상 수상자는 없으니까, 그건 그렇다 치고, 이번 천안함 사고에 대해 과연 제대로 된, 과학적인 조사결과가 나올 것인지, 그리고 그 조사 내용을 발표했을 때 과연 국민들이 이해할 수 있을만큼 충분히 쉽게 전달할 것인지, 과학적 근거에 따른 조사 내용이 발표되었을 때 그 내용을 이해할 수 있을만큼 국민들의 과학 교양의 수준은 어느정도인지, 심히 걱정된다.

아직 배 전체를 인양한 건 아니니까 원인을 규명하기에는 무리가 있을 것이고, 어쨌든 추측과 논란이 있을 수밖에 없다. 하지만 언론에서 원인을 추측하는 것이 과학적인 근거에 따르기 보다는 자기네 정치적 성향에 따라 갈라지는 것 같아서 굉장히 우려스럽다. (이건 언론사의 이념적 성향을 막론하고 대부분 그런듯 싶다.)

천안함 사고 취재에 정치부/사회부 기자들 말고 과학부 기자들을 파견해야 그나마 좀 괜찮은 기사가 나오지 않을까.