7월, 2015의 게시물 표시

#1 <담론>을 읽으며...(2)

1부까지 읽으며 공자,노자,맹자 등 중국 철학자들의 얘기를 주로 읽었다. 저자가 추천한 3권 논어 , 자본론 , 노자를 꼭 읽어보리라 마음 먹었다. 또한 계속 읽어나가면서 느끼는 것이지만 정말 문장이 간결하고 섬세하며 정확하다. 이 책에서 배워야 할 것이 인문과 됨됨이 뿐 아니라 문장력도 배우고 싶다. 이제 감명 받았던 부분을 좀 써내보려고 한다. P.148쪽 장자의 반기계론에서 외모가 아닌 자기 정체성을 중시해야한다는 내용이 있다. 사람의 정체성은 노동에서 비롯된다. 이 내용에 굉장히 동감했다. 칸트의 행복 3대 원칙에도 "열심히 일 할 것"이라는 것이 첫번째 원칙이다. 부모님이 일을 안하시면 불안하고 힘들어하시는 것 같다. 엄마한테도 일 그만하고 여행 좀 다니시라고 말씀드린다. 연세도 많이 있으시니 형한테 맡기고 좀 쉬셔도 될텐데 이 글을 읽으면서 조금은 이해할 수 있엇다. 하지만 이번 달에 처음으로 싱가폴에 갔을 때 외국에서 처음 해보시는 것들이 많아 괜히 죄송했다. 부모님들이 해놓은 것들을 나만 누리고 있는 것이 아닌가 싶었다. 장자의 반기계론에서 나는 부모님의 노동에 대한 불가피성을 생각했다. 전체적인 부분에서 보면 전혀 다른 얘기일 수 있지만 한 부분만 보면 내가 느낌 감성이니 뭐 틀리면 어떤가. P.168쪽 묵자의 일화를 소개하는 부분이 있다. "묵자가 여각에서 비를 피하려 했지만 여각 무지기가 들여 주지 않았다고 합니다. 전쟁으로 공을 세운 사람은 세상이 알아주지만 평화를 위해서 일하는 사람은 알아주지 않는다는 말을 덧붙이고 있습니다." 이 부분을 읽고 옛날이나 지금이나 다를 게 없다고 생각했다. 정보보호학과 재학생으로서 보안에 대한 뉴스나 글들을 자주 접한다. 해커나 프로그래머들은 굉장히 능력을 알아주지만 보안 전문가에 대한 능력은 일반 사람들이 접하기 힘들다. 그래서인지 보안 전문가들의 근무 환경 또한 열악하다. 뚫리면 욕 먹고 잘해도 티가 안나기 때문이다. 하지만 해커들은 잘하면 해킹을...

#1 <담론>을 읽으며...(1)

이미지
책 정보 저자 : 신영복 출판사 : 돌베개 신영복 교수님이 쓰신 "담론"을 읽고 있는 중이다. 아직 초반부지만 느끼는 바가 많다. 느끼는 바를 글로 좀 남겨야겠다는 생각이 들었다. 책을 읽으면서 시를 좀 읽어야겠다는 생각을 다시 하게 됐다. 박웅현 저자인 "책은 도끼다"라는 책을 읽었을 때도 잠시나마 시를 많이 읽었다. 그래서 내가 좋아하는 저자인 헤르만 헤세가 쓴 시집도 샀었다. 그 시집을 처음에 너무 많이 읽어 조금만 읽어야지 했다가 점점 안읽게 되버렸다. "책은 도끼다"에 나온 시 중에 제일 좋아하는 시이고 "담론"에 언급되면서 재고하게 된 시를 남기고 싶다. 안도현 '스며드는 것' 꽃게가 간장 속에 반쯤 몸을 담그고 엎드려 있다 등판에 간장이 울컥울컥 쏟아질 때 꽃게는 뱃속의 알을 껴안으려고 꿈틀거리다가 더 낮게 더 바닥 쪽으로 웅크렸으리라 버둥거렸으리라 버둥거리다가 어찌할 수 없어서 살 속으로 스며드는 것을 한 때의 어스름을 꽃게는 천천히 받아들였으리라 껍질이 먹먹해지기 전에 가만히 알들에게 말했으리라 저녁이야 불 끄고 잘 시간이야 -안도현 시집 <간절하게 참 철없이> 수록 시- 정말 보는 시각에 따라 많은 것을 느낄 수 있다.  보통 사람들은 간장 게장을 보면서 군침을 삼키며 껍질에 밥 비벼 먹으면 맛있겠다고 생각한다. 여기서 안도현 시인은 꽃게를 한 꽃게 가족의 엄마로 대입시켜 죽으면서 아이를 안심시키는 상황으로 생각했다.  요즘에 읽은 책들 보면 "관점"에 대한 내용이 많았던 것 같다.  박용후 저자의 "관점을 디자인하라" 박웅현 저자의 "책은 도끼다" 지금 읽고 있는 신영복 교수님의 "담론" 세 책 모두 시의 중요성을 강조하는 것이 비슷하다....

데이터베이스와 빅데이터에 대한 나름대로의 고찰

이미지
파일시스템의 단점 1. 파일 시스템에 있는 데이터를 읽고 메모리에 올리는 부분이 컴퓨터의 연산 과정 중에 제일 느리다. 왜냐하면 파일시스템은 목차가 없는 책처럼 원하는 정보에 대한 위치를 모르기 때문에 처음부터 끝까지 찾아야한다. 2. 동시성 제어라는 문제가 있다. 어떤 두 사람이 같은 데이터를 사용할 경우 발생하는 문제를 말한다.  3. 보안 문제. 파일에 데이터를 저장해 놓으면 파일에 접근할 수 있는 사람은 누구나 데이터를 볼 수 있으며 악의적인 사용자라면 남용할 수 있다. 데이터베이스 데이터 베이스는 위와 같은 파일시스템의 단점들을 보완하고 편의성을 높이기 위해 고안해낸 것이다. 그리고 데이터베이스를 도서관으로 비유하자면 , 도서관의 구성요소는 책, 책꽂이, 도서 관리 시스템이라 할 수 있다. 책은 데이터라 할 수있고 책꽂이는 테이블이라 할 수 있으며 도서 관리 시스템은 데이터 베이스의 종류 중 하나 일 것이다. 테이블 & 기본키 테이블은 데이터를 잘 정리해 나열해 놓은 곳이라 할 수 있다. 우리가 사용하는 표처럼 열(column)과 행(row)로 구성되어 있다.  각 데이터은 기본키를 가져야한다는 기본 규칙을 따라야한다. 기본키는 테이블에서 각각의 데이터를 유일하게 구분하는 키라고 한다. 책으로 예를 들자며 도서관에서 그 책만이 가지는 식별값을 가져야한다는 것이다. 식별값 중에 ISBN을 예로 들 수 있겠다. 정규화 정규화란 의미 있는 데이터끼리 하나의 테이블에 속하게끔 테이블을 분리하여 정리하는 것이다.  3개 이상의 규칙이 있지만 보통 3번째까지만 정규화를 한다. (http://wiki.gurubee.net/pages/viewpage.action?pageId=1507663) 정규화의 기본 원칙은 한 테이블에 중복된 데이터를 없애는 것이다.  제 1 정규화 제 2 정규화 ...

프로젝트 오일러 17

프로젝트 오일러 17 1부터 5까지의 숫자를 영어로 쓰면 one, two, three, four, five 이고, 각 단어의 길이를 더하면 3 + 3 + 5 + 4 + 4 = 19 이므로 사용된 글자는 모두 19개입니다. 1부터 1,000까지 영어로 썼을 때는 모두 몇 개의 글자를 사용해야 할까요? 참고:  빈 칸이나 하이픈('-')은 셈에서 제외하며, 단어 사이의 and 는 셈에 넣습니다.   예를 들어 342를 영어로 쓰면 three hundred and forty-two 가 되어서 23 글자,   115 = one hundred and fifteen 의 경우에는 20 글자가 됩니다. ----------------------------------------------------------------------------- #include void main() {  int sum = 854;  // 1부터 99까지 합  int num[9] = { 3, 3, 5, 4, 4, 3, 5, 5, 4 }; //백의 자리 글자 one 부터 nine 까지  long long i,part;   long long result=0;  for (i = 0; i < 9; i++) //one 부터 nine 까지 9번 반복  {   part = num[i] *100 + 997 + sum;  // 백의 자리 글자 100번과 hundred and 99번과 hundred 1번과   result += part;                       ...

프로젝트 오일러 14~15

이미지
프로젝트 오일러 14 양의 정수 n에 대하여, 다음과 같은 계산 과정을 반복하기로 합니다. n  →  n  / 2  ( n 이 짝수일 때) n  → 3  n  + 1  ( n 이 홀수일 때) 13에 대하여 위의 규칙을 적용해보면 아래처럼 10번의 과정을 통해 1이 됩니다. 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 아직 증명은 되지 않았지만, 이런 과정을 거치면 어떤 수로 시작해도 마지막에는 1로 끝나리라 생각됩니다. (역주: 이것은 콜라츠 추측 Collatz Conjecture이라고 하며, 이런 수들을 우박수 hailstone sequence라 부르기도 합니다) 그러면, 백만(1,000,000) 이하의 수로 시작했을 때 1까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까? 참고:  계산 과정 도중에는 숫자가 백만을 넘어가도 괜찮습니다. ----------------------------------------------------------------------- #include #define  num 1000000 //num을 백만으로 초기화 long long calc(long long, long long); //사용자 함수 void main() { long long count = 0, n = 0, max = 0; long long i, j; for (i = 2, j = 2; i < num; j++) //i 가 num일 때까지 반복 { while (true) //짝수홀수 계산하여 i 가 1 일때까지 무한루프 또한 계산한 것을 count 함. { i = calc(i, n); count++; if (i == 1) break; else continue; } if (j == 2) //처음 count 값을 ...

웹과 모바일 앱에 대한 나름대로의 고찰

이미지
웹이란 무엇인가 웹은 사용자들이 웹 주소로 요청했을 때 제공되는 웹문서(프론트엔드) 와 이 문서들을 제공하는 웹 서버(백엔드) 모두를 합한 '웹 서비스'라고 말한다. 사용자가 이용하는 어플리케이션과 같은 부분을 프론트엔트라 하고, 서버와 같은 부분을 백엔드라고 한다. 웹 서비스를 동작하게 하기 위한 과정 1. 웹 페이지를 개발하고 그 웹 페이지가 서브시할 서버를 구성 2. 웹 서비스 프로젝트를 서버에 배포한다. 3. 웹 서버에 가동시킨다. 1번 작업은 서비스 운영시  한 번만 수행되고 2,3번 작업은 지속적으로 수행된다. 웹의 구성요소 통일된 웹 자원의 위치 지정 방법 : URL || URI 웹 자원에 접근하는 프로토콜 : HTTP 웹 자원들을 표시하는 언어 : HTML (reference : http://namsieon.com/190) 위의 그림처럼 서버로부터 받은 HTML 언어로 되어 있는 텍스트 문서만 받아도 웹 브라우저의 해석을 통해 웹 서핑을 할 때 여러 홈페이지를 링크를 통해 쉽세 이동해 다닐 수 있다. 종합해보면, 1. URL이라는 주소를 통해 원하는 곳을 찾아가서 2. HTTP라는 통신방식을 통해 서로 데이터를 주고 받으며 3. HTML이라는 언어로 구성되어 있는 문서를 받아서 4. 웹 브라우저가 해석해 화면에 보여준다. 웹을 위한 필수적인 기술들 -JavaScript & CSS 사용자가 HTML로만 이루어진 문서를 받았을 때는 단순히 그 문서에 포함된 정보를 확인하거나 다른 페이지로 이동하는 것 밖에 할 수 없다는 말이다. 예를 들어보자. 만약 내가 사진첩 웹 서비스를 만든다고 해보자. 이 웹 서비스에는 한 페이지에 사진 50장씩 작게 표시 되고 마우스 커서를 한 사진 위에 갖다 놓으면 그 사진만 확대되는 기능도 있다. 이러한 기능을 구현하기 위해서는 JavaScript 와 CSS가 필요하다. 마우스를 사진 위에 가져다 놓는 행동을 찾아내야하고...

프로젝트 오일러 12~13

프로젝트 오일러 12 1부터 n까지의 자연수를 차례로 더하여 구해진 값을 삼각수라고 합니다. 예를 들어 7번째 삼각수는 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28이 됩니다. 이런 식으로 삼각수를 구해 나가면 다음과 같습니다. 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 이 삼각수들의 약수를 구해봅시다.  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 위에서 보듯이, 5개 이상의 약수를 갖는 첫번째 삼각수는 28입니다. 그러면 500개 이상의 약수를 갖는 가장 작은 삼각수는 얼마입니까? --------------------------------------------------------------- #include void main() { __int64 n = 1, i, count = 0, k; while (1) { k = (n*(n + 1)) / 2; for (i = 1; i <= k; i++) { if (k%i == 0) count++; } printf("%d\n", k); if (count == 500) break; n++; count = 0; } printf("%I64d\n", k); } -------------------------------------------------------------------- 이건 몇 분이 걸린지도 모르겠다. 다른 사람들이 푼 것들을 보니까 0.1초까지 단축이 되기도 한다. 알고리즘이라는 게 참 시간 단축에 굉장한 기여를 하는 듯하다. 오일러 프로젝트 13 아래에 50자리 숫자가 100개 있습니다. 이것을 모두 더한 값의 첫 10자리는 얼마입니까...

프로젝트 오일러 11

Reference  http://forum.falinux.com/zbxe/index.php?document_srl=408129&mid=C_LIB http://forum.falinux.com/zbxe/?document_srl=408126&mid=C_LIB&sort_index=readed_count&order_type=desc 프로젝트 오일러 11 아래와 같은 20×20 격자가 있습니다. 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 ...

프로젝트 오일러 9~10

프로젝트 오일러 9 세 자연수  a ,  b ,  c  가 피타고라스 정리  a 2  +  b 2  =  c 2  를 만족하면 피타고라스 수라고 부릅니다 . 예를 들면  3 2  +  4 2  = 9 + 16 = 25 =  5 2 이므로 3, 4, 5는 피타고라스 수입니다. a  +  b  +  c  = 1000  인 피타고라스 수  a ,  b ,  c 는 한 가지 뿐입니다. 이 때,  a  ×  b  ×  c   는 얼마입니까? --------------------------------------------------------------------------------------------------- #include int main() { int a,b,c,mult; //a,b,c,mult 초기화 for(c=300;c {                              900은 넘을리 없다고 생각해서 반복문을 최소화함. for(a=1;a { for(b=1;b { if(a+b+c == 1000 && c*c == a*a + b*b) //조건을 충족시키는 {                                                 ...

싱가폴 여행

7월 6일 ~ 7월 11일

프로젝트 오일러 7~8

프로젝트 오일러 7 소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다. 이 때 10,001번째의 소수를 구하세요. -------------------------------------------------------------------------------------- #include #include void main(void) { int count=0,i,num=3; while(count!=10001) { for(i=2;i { if(num%i==0) break; //나눠지면 그 때의 num 값은 아웃! else if(i==num-1)   //나눠지지 않고 i 값이 num-1 까지 반복문을 돌면 {                         그 값은 조건을 충족시킨 값이므로 count 값을 1 더                                                   한다. count++; printf("%d번째 소수는 %d이다.\n",count+1,num); } } num++; } } -------------------------------------------------------------------------------------------- 쉽게 생각했다가 못 풀었던 문제. 이 코드는 댓글(http://euler.synap.co.kr/forum_list.php?p=7&pg=20)에서 본 깔끔한 코드다. 우선 if문의 if(num%i==0) b...

프로젝트 오일러 5~6

프로젝트 오일러 5 1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다. 그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까? ---------------------------------------------------------------------------------------------- #include void main() { int num[10] = {11,12,13,14,15,16,17,18,19,20}; //1~10은 제외(Or이 아니라 And이기 때문) int result = 1;   //1부터 차근차근 더해가며 조건을 찾음 int i,count=0; while(1) { for(i=0;i { if(result%num[i] == 0)   //num 배열에 있는 숫자를 하나하나 넣어가며 count++;             조건이 성립 될 때마다 count 값을 1씩 더함 else break;              //나눠지지도 않으면 그냥 아웃 } if(count == 10) //num 배열 중 숫자 10개를 모두 만족시키는 값을 출력 { printf("%d\n",result); break; //while 문 나옴 } count = 0; //count 값을 다시 0으로 만들고  result++;       result 값을 하나씩 올려가며 조건이 모두 성립되는 값을 찾음 } } ---------------------------------------------------------------------------------------------- 소수인 11,...

프로젝트 오일러 1~4

프로젝트 오일러 1 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면 얼마일까요? ----------------------------------------------------------------------------------------------- #include int main(void) { int num = 0; int result = 0; int i; for (i=1; i < 1000; i++) { num++; if (num % 3 == 0 || num % 5 == 0)   //3 혹은 5로 나누어 지는 num { result += num; //result 값에 num을 더함 } } printf("%d", result); return 0; } ---------------------------------------------------------------------------------------- 프로젝트 오일러 2 피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다. 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까? --------------------------------------------------------------------------------------------- #include #define limit 4000000 void main(){ unsigned int num[300] = {1,2}; int i=1,result=0; while(1){  num[i+1] = num[i-1] + num[i]; //두번째 첫번째 전 항을 더해 새로운 항을 만듦 if(num[i+1] % 2 ==0) r...