2016년 4월 7일 목요일

읽은 것을 이해하라

 내 친구 하나가 저학년 지리 수업을 평가해 달라는 부탁을 받고 학교를 방문했다. 그 친구는 책을 훑어보고는 이렇게 물었다.
 "여러분이 땅에 구멍을 파야 한다고 생각해 보세요. 수백 피트나 파야 해요. 다 파고 내려갔을 때 맨 밑바닥을 꼭대기보다 따듯할까요, 추울까요?"
 아무도 대답하는 사람이 없었다. 그러자 선생이 대신 입을 열었다.
 "학생들은 확실히 답을 알고 있습니다. 제 생각에는 선생님이 질문을 잘못하신 것 같아요. 제가 한번 물어볼게요."
 선생은 교과서를 들더니 이렇게 물었다.
 "지구 내부는 어떤 상태죠?"
 학생 절반가량이 즉시 대답했다.
 "지구 내부는 화성융합(igneous fusion)상태입니다!"

이런 종류의 사건은 초등학교에서만 일어난다고 생각할지도 모르겠다. 그러나 사실 대학생과 대학원생을 포함한 우리 대부분은 스스로 인식하는 것보다 훨씬 더 빈번하게 이런 일을 한다. 심지어 수학이나 역학과 같은 분야에서도 이런 상황이 흔히 벌어진다. '에너지', '운동량', '변화율', '진동주기', '가치', '사회정의', 등과 같은 용어를 분명한 이해없이, 때로는 그 의미를 전혀 이해하지 못한 채로 사용하곤 한다.


 아이는 자라면서 자신의 추론 능력과 지각을 통해 지식을 습득한다. 아이는 단어의 의미를 어떻게 배우는 걸까? '아빠'나 '고양이' 같은 명사는 대상을 가리키며 단어를 말하는 것으로 쉽게 의미를 전달할 수 있다. 그러나 추상명사나 동사 등 손짓 발짓으로 설명할 수 없는 단어의 의미는 어떻게 가르치고 배울까?

 모든 아이는 필연적으로 자기가 의미를 이해하지 못하는 단어를 수도 없이 사용할 수 밖에 없다. 어린아이들은 학교에서 시를 암송할 때도 자기가 말하는 단어의 의미를 모르고 사용하는 경우가 잦다. 이런 식으로 사람들은 어려서부터 정확한 의미를 조심스럽게 따져 보지 않고 단어와 문구를 말하는 습관을 들인다.
 이런 좋지 않은 습관에는 아주 어릴 때부터 단호하게 대처해야 한다. 아이는 자신이 쓰는 단어의 의미를 계속 물어야 한다. 어른은 아이에게 단어의 의미를 물으며 올바른 정신 자세를 가지도록 독려해야 한다. 아주 어렸을 때부터 사전을 이용하도록 엄격하게 이끌고, 단어나 문구를 우둔하게 사용하는 습관을 들이지 않도록 교육 목표를 세워야 한다. 의미도 모르는 표현을 사용하는 것은 모든 나쁜 습관 중에서도 최악에 속한다.

「How to Study, 공부책」 조지 스웨인
---

 새로운 것을 배울 때, 특히 처음에 내가 무엇을 모르는지 분명히 알아야 한다. 처음에 모든걸 이해할 순 없지만, 이해하지 않고 지나가는 것들이 쌓이면 분명히 무너지게 된다.
 느린 속도를 두려워 하면 결국 무너지게 된다.
 이해가 되지 않는 것은 꼭 기록해 두자. 그리고 나에게 필요한지 다시한번 생각한 다음 필요하다면 여러번 보아서 이해하자.


2016년 3월 30일 수요일

(E)How to create hierarchy labels(tree structure) in blogger, blogspot

This is How to make sublabels in tree structure tutorial
Main Idea is from this blog(How to create Sublabels / Hierarchical Labels in Blogspot) and I modify to use my blog
I'm new to web programming(and Javascript), so I'm hardly understand these codes, so just enough to make dTree

Sequece

1. Add Gadgets
    * blog-layout click
        1) sidebar-right-1, add 'HTML/JavaScript' gadget
            - title: 'Labels'
            - content: "." temporary
        2) sidebar-right-1, add 'tag' gadget
            - title: 'tag'
        => 'tag' gadget must be before 'HTML/JavaScript' gadget
             so change order if it's not
2. Add Template HTML Code
    * blog-template-HTML edit click
        1) add below code right after <head>
        these codes must work before dTree code usage
          I change location from reference blog.
<link href='https://sites.google.com/site/efekefek/file-js/dtree.css' rel='StyleSheet' type='text/css'/>
<script src='https://sites.google.com/site/efekefek/file-js/createdtree.js' type='text/javascript'/>
        2) find below code    
<b:widget id='Label1' locked='false' title='Labels' type='Label'>
<b:includable id='main'>
 ... 
</b:includable>
</b:widget>
          -> and change  ... to below code
          these code get each label count to be used at dTree
<script type='text/javascript'>
  var labelCountMap = {};
  <b:loop values='data:labels' var='label'>
     labelCountMap ["<data:label.name/>"] = "<data:label.count/>";
   </b:loop>
</script>
            - blue 'Label1' can be changed by the Label gadget number

3. Add 'HTML/JavaScript' Gadget content
    - add below code to Gadget content and change blue code by your own labels
     '<!--' and  '//-->' are erased. at first time I thought it should be there, but doesn't work
<div class="dtree">
<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

function addMap(d, startingNode, parentNode, map) {
 for (var key in map) {
  if (isEmpty(map[key])) {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
  } else {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
   startingNode = addMap(d, startingNode, startingNode-1, map[key]);
  }
  
 }
 return startingNode; 
}

var data = {
    'label1' : {
        'label2' : {}
    }
};
d = new dTree('d');
d.config.useLines = true;
d.config.useIcons = false;
d.config.inOrder = true;

d.add(0,-1,'');   
addMap(d, 1, 0, data);

document.write(d);
</script>
</div>

4. Result












(K)블로거(블로그스팟)에서 라벨을 트리구조로 생성하는 방법

google blog(blogspot, blogger)의 post 를 트리 구조로 정리하는 방법을 설명하였습니다.
Main Idea는 원글(How to create Sublabels / Hierarchical Labels in Blogspot) 이며, 구현 시에 잘 안되던 것들은 수정하여 적용 하였습니다.
웹 프로그래밍과 Javascript를 모르는 상태에서 이 기능을 구현하기 위해서 필요한 내용을 검색해서 익혔기 때문에 부족한 점이 있습니다.

적용 순서

1. 필요한 가젯 추가
    * 블로그-레이아웃 클릭
        1) sidebar-right-1 에서 'HTML/JavaScript' 가젯 추가
            - 제목: 'Labels'
            - 내용: "." 임시로 아무내용
        2) sidebar-right-1 에서 '태그' 가젯 추가
            - 제목: '태그'
        => 중요한 것은 '태그' 가젯이 'HTML/JavaScript' 가젯보다 위에 있어야 하는 것
             왜냐하면 순서대로 코드를 적용해야 하기 때문에
             그래서 만약 순서가 반대로 되어 있으면 수동으로 변경 필요
2. 템플릿 HTML 코드 추가
    * 블로그-템플릿-HTML 편집 클릭
        1) <head> 바로 아랫줄에 아래 코드 두줄 추가
        웹 참조한 블로그와는 위치를 다르게 했습니다.
<link href='https://sites.google.com/site/efekefek/file-js/dtree.css' rel='StyleSheet' type='text/css'/>
<script src='https://sites.google.com/site/efekefek/file-js/createdtree.js' type='text/javascript'/>
        2) 아래 형태로 되어있는 태그 위젯의 내용에서
<b:widget id='Label1' locked='false' title='Labels' type='Label'>
<b:includable id='main'>
 ...  
</b:includable>
</b:widget>
            - ... 으로 표시된 내용을 모두 지우고 아래 코드로 변경
            웹 보여줄 라벨들이 각각 몇번 사용되었는지 숫자를 기억해 놓기 위한 코드 입니다.
<script type='text/javascript'>
  var labelCountMap = {};
  <b:loop values='data:labels' var='label'>
     labelCountMap ["<data:label.name/>"] = "<data:label.count/>";
   </b:loop>
</script>
           - 파란색으로 표시된 'Label1' 속의 숫자는 태그 가젯의 수에 따라 변경될 수 있으므로 확인 하여야 한다. 

3. 'HTML/JavaScript' 가젯의 내용(코드 추가)
    - 아래 내용을 해당 위젯을 내용으로 붙여 놓고 코드내용 중 파란색으로 표시된 label 트리구조 변수를 내가 원하는 형태로 변경
    웹 참조한 블로그에 있던 '<!--' 와 '//-->' 는 없앴습니다. 처음에는 원래 형식이 그런 줄 알았는데 주석같아 보여서 제거 했습니다.
<div class="dtree">
<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

function addMap(d, startingNode, parentNode, map) {
 for (var key in map) {
  if (isEmpty(map[key])) {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
  } else {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
   startingNode = addMap(d, startingNode, startingNode-1, map[key]);
  }
  
 }
 return startingNode; 
}

var data = {
    'label1' : {
        'label2' : {}
    }
};
d = new dTree('d');
d.config.useLines = true;
d.config.useIcons = false;
d.config.inOrder = true;

d.add(0,-1,'');   
addMap(d, 1, 0, data);

document.write(d);
</script>
</div>

4. 최종 결과











2016년 3월 27일 일요일

2016 대한민국 20대 총선(국회의원 선거) 정보 확인을 위한 정리

4월 13일 진행되는 2016 총선에 참여하기 위하여 필요한 내용을 검토하기 위한 페이지 입니다.
선거 초보로서 알아본 내용을 정리해 보려고 합니다.
아는 내용이 추가될 때마다 업데이트 하겠습니다.

-----

1. 내 선거구 확인 방법
    1) 제20대 국회의원선거 국회의원지역선거구구역표(링크) 확인
    2) 선거통계시스템(링크)에서 구-시군, 읍-면-동 선택

2. 후보자 확인
    1) 선거통계시스템(링크)에서 구-시군, 읍-면-동 선택 후 오른쪽 화면 확인

3. 편리한 싸이트
    1) 네이버 국회의원 선거(링크)
    2) 중앙선거관리위원회 홈페이지(링크)
    3) 선거통계시스템(링크)
    4) 나무위키 20대 국회의원 선거(링크): 선거 전반적인 설명
    5) 우리동네후보 어플(안드로이드 O, IOS X)
        - 기사(링크)
        - 아직 써보지 못했지만 좋은 의도를 가진 어플인듯 합니다.



     

(K) Machine Learning 01 실습 - TensorFlow의 설치및 기본적인 operations

Tensorflow
    Google 의 Open Source Library
    Data  Flow Graph 를 사용하여 수학적인 연산을 하는 것
    Python 으로 만들어진 Library, pandas나 numpy 같이 import 해서 사용하는 것

Data Flow Graph
    Node는 수학적인 계산을 하는 Operation("+" 와 같이 연산을 한다) 이다.
    Edge는 Data Array(다차원, Vector) 이며 이 때 이 Data Array들을 Tensor 라고 부른다.
    이 형태는 모든 Machine Learning 과 관련된 연산을 할 수 있는 Format 이다.
    각각의 Node들은 하나의 CPU나 GPU 상에서만 있을 필요가 없다.(아직 이해 안됨)

Tensorflow 설치
    제 환경: Window 7, 64bit
    설치 진행
        1. Docker 설치
        2. Tensorflow 설치
        3. Jupitor Notebook 에서 Docker 설치 시 확인한 IP 를 주소로 사용
        4. Jupitor Notebook 실행하여 Tensorflow import 가능 확인

이후 이해 진행
    코드 한줄 한줄 이해가 필요


ML lab 01
TensorFlow의 설치및 기본적인 operations




김태길 교수님의 윤리학 강의 - 어떻게 살아야 하는가?

김태길 교수님이 김용옥 선생님의 논술강의에 초청되어 강의하셨던 2개의 윤리학 강의를 요약 하였습니다.

“광복 직후 도덕적 혼란에 빠진 한국에서 윤리 운동을 전개하려고 윤리학을 공부하기로 했다” 는 말에서 교수님의 인품을 느낄 수 있습니다. (관련 기사)

-----

강의 내용

1. 윤리학은 무엇인가?
2. 인간에게 윤리란 무엇인가?
3. 절대적인 윤리는 존재 하는가?
4. 윤리적인 회의론은 어떻게 극복 하는가?
5. 인간 행동의 가치 서열은 어떻게 측정 하는가?

1. 윤리학은 무엇인가?
    1) 철학의 큰 3가지 분류 중 하나 이다.
        a. 형이상학: 우주의 문제-우주가 어떻게 생겼느냐, 존재의 근본은 무엇이냐?(정신적인 것이냐, 물질적인 것이냐)
        b. 인식론: 지식의 문제-이간은 무엇을 할 수 있는가, 참과 거짓의 구별은 어디에 있는가, 알 수 있는 한계는 어디이며 무언가를 알게되는 방법은 무엇이냐
        c. 윤리학:가치의 문제-참된, 바람직한 삶이 무엇이냐, 선이란 무엇이고 악이란 무엇이냐, 훌륭한 사람 시원찮은 사람의 진정한 의미가 무엇이냐

2. 인간에게 윤리란 무엇인가?
    산다는 것은 행위하는 것이다.
    행위 중에는 해서 좋은 것이 있고, 해서 안좋은 것이 있다.
    그리고 해도 그만, 안해도 그만, 꼭 해야 하는 것 들이 있다.
    이 행위들을 구분해 주는 것이 윤리이다.

3. 절대적인 윤리는 존재 하는가?
    서양 윤리사상의 역사는 절대 타당한 윤리 규범의 탐구의 역사였다.
    많은 철학자들이 절대적인 철학의 원리를 찾아 보려고 애썼지만 아직 성공한 예가 없다.
    2,500년 간 여러 천재적인 철학자 들이 찾아 보았지만 없다는 것은 결국 없는 것이 아닌가?
    윤리에 절대적인 원리가 없다면 아무렇게나 살아도 좋다는 것이다.
    이 회의론을 어떻게 극복하느냐가 현대 윤리학의 과제이다.

4. 윤리적인 회의론은 어떻게 극복 하는가?
    크게 두가지 방법이 있다.
    1) 종교적 극복
    2) 삶의 지혜로서의 유용성

5. 인간 행동의 가치 서열은 어떻게 측정 하는가?
    아무렇게나 살지 않도록 어떤 행동이 더 가치가 있는지 비교할 수 있어야 한다.
    3가지의 척도(기준)이 있다.
    1) 가치가 오래도록 지속 되는 것
        - 오래가는 가치가 더 높다.
    2) 여러 사람에게 많은 혜택을 주는 것
    3) 목적적 가치가 수단적 가치보다 높다.
        - 사람의 건강, 생명이 의학, 약학 보다 높은 가치이다.
        - 의학, 약학이 높은 가치를 가졌지만, 사람의 건강과 생명을 위한 수단이기 때문이다.
   

동영상


김용옥 논술세대를 위한 철학교실 33윤리학개론


김용옥 논술세대를 위한 철학교실 34
한국사회 윤리의 재건




2016년 3월 25일 금요일

(K) Machine Learning 00

강의를 듣는데 필요한 단어

Linear regression
    종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법
Logistic regression
     독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용되는 통계 기법
classification

Neural networks
    생물학의 신경망(동물의 중추신경계, 특히 뇌)에서 영감을 얻은 통계학적 학습 알고리즘
Convolutional Neural Network
    feed-forward artificial neural network in which the connectivity pattern between its neurons is inspired by the organization of the animal visual cortex, whose individual neurons are arranged in such a way that they respond to overlapping regions tiling the visual field.
Recurrent Neural Network
    class of artificial neural network where connections between units form a directed cycle.
Tensorflow
    텐서플로우(TensorFlow)는 기계 학습과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리. 
    데이터 플로우 그래프(Data Flow Graph) 방식을 사용