2017년 2월 18일 토요일

[책 리뷰] 글자 전쟁




 김진명 작가는 개인적으로 좋아하는 작가이다. 군 복무를 할 때 처음 김진명 작가의 책을 접했다. 제목이 기억은 안나지만(이래서 리뷰를 남겨야한다.) 굉장히 재밌게 읽었고 그 후부턴 김진명 작가의 책은 출간되었다는 소식을 접할 때 마다 항상 관심을 갖게되었고, 고구려도 4편까진가 읽어 봤다. 아직 독서 량이 많지 않은 내가 특정 작가의 책을 이만큼 읽었다는 것은 매우 드문경우이다.(나름 팬이라는 의미..)

 김진명 작가가 쓰는 책은 뭔가 한국판 '다빈치 코드' 같다는 느낌을 읽을 때마다 받는다. 이게 소설인지 팩트인지 알 수 없는, 그래서 더 몰입하게 되는. 그래서 읽을 때 다른 책보다 더 숨막히는 느낌이 들고 뭔가 기록되지 않은 역사에 대해 알게 된 것 같은 성취감도 느껴진다고 해야하나... 아무튼 이책도 그런 느낌을 주는 책이었다 초반에는..

 대략적인 줄거리는 주인공이 작중의 어떤 작가가 쓴 소설을 지키고 세상에 공표하는 내용이다. 근데 작중에 등장하는 작가는 왠지 김진명 작가 본인을 의미하는 듯한 느낌을 받았다. (마치 셜록에서 셜록의 친구 왓슨이 코난 도일인듯한 느낌인 것처럼) 어쩃든 작중에 등장하는 소설의 내용은 한자가 한족이 만든 글자가 아니라 우리의 조상들이 만든 글자라는 흔적을 지우는 것을 막기 위한 내용이다. 책 표지에 나오는 답(畓)이라는 글자는 참 쉬운 글자이다. 논은 밭에다 물을 채웠다는 의미인데 중국인들이 쓰는 한자에는 저 답이라는 글자가 없다고 한다. 뭐 이런저런이유로 '한자는 동이족이 만든 글자' 라는 주장을 하는 내용의 소설인데 이 소설을 집필하던 작가가 신변의 위협을 받던 중 주인공에게 소설이 담긴 usb를 전달하고 그날 밤에 암살을 당한다.(...) 주인공이 usb에 담긴 소설을 읽어가며 진실을 추적하는 내용인데, 소설도 중간에 갑자기 끝나고 책의 마무리도 뭔가 급 마무리를 지은듯한 느낌이 들어 용두사미 같다는 느낌이 많이 드는 실망스러운 책이었다. 마치 책에 등장하는 작가가 김진명 작가 본인이어서 작중 소설과 마찬가지로 책도 중요한 부분에서 끊기는 듯한 느낌..? 작중 작가는 암살을 당했는데 주인공은 큰 생명의 위협을 느끼는 일도 없고 뭔가 개연성이 없다는 느낌을 받아서 이상했다. 읽고나서 뭐지 이거라는 생각이 들었던 책 뭔가 아쉽다.









[알고리즘] Suffix Tree

Suffix tree는 문자열의 모든 접미사들을 표현하는 trie 모양의 자료 구조이다.
prefix tree라 불리는 trie가 근간이 되는 자료구조인듯 한데 두 자료구조의 차이는 banana라는 단어가 있을 때 trie는 banana라는 단어만 저장을 하지만 suffix tree는 banana, anana, nana, ana, na, a 와 같이 banana라는 단어에서 나올 수 있는 모든 경우의 수를 다 저장한다는 것이다. 쓸데없이 모든 경우를 저장하는 이유는 문자열에 대한 검색을 할 때 필요하기 때문이다. Trie 자료구조 같은 경우에는 ban, ba와 같은 일부분의 단어로 banana라는 완전한 단어를 찾을 수 있지만 nan, ana와 같은 단어로는 banana를 찾을 수 없다. 이러한 문제를 해결하기위해 trie를 개선시킨 것이 suffix tree인듯 하다.

 Suffix trie는 trie에 모든 suffix들을 저장한 구조를 의미한다. 아래 그림은 abaaba라는 문자열 T를 suffix tree에 저장하는 예시이다. suffix tree나 suffix trie에 문자열을 저장할 때는 문자열의 끝에 $를 붙이는데 그 이유는 정확히 모르겠다... 아마 문자열의 끝을 알리기 위한 용도인 것 같다.

Suffix Trie의 형태


 위 그림의 왼쪽과 같은 모양이 suffix trie이다. 여기서 자식 노드가 1개 뿐인 것들을 합치면 오른쪽과 같은 모양이 되는데 저러한 형태의 자료구조를 suffix tree라 한다.

Suffix Tree



 이 suffix tree는 문자열의 길이만큼의 leaf node를 갖는다





 위 그림에서 오른쪽 그림은 tree의 edge label을 (offset, length)의 형태로 T를 나타낸 것이다.

Suffix tree의 label


 각 노드의 label은 root로부터 node로 연결된 edge의 label과 동일하다. 그리고 이것들은 명료하게 저장되어 있지는 않다.



 edge가 문자열 label을 가질 수 있기 때문에 두가지 의미의 'depth'에 대한 구분도 필요하다. 첫 번째는 노드 depth이다. 노드 depth는 root에서부터 노드까지 몇개의 edge를 통과해야 하는지에 대한 것이다. 두 번째는 Label depth이다. 이것은 root에서 노드까지의 경로에있는 edge에 대한 edge label의 총 길이를 의미한다.

음.. 정리를 하다보니 기반 지식의 부족함을 느껴 여기까지만하고 추가적인 공부후에 수정을 해야겠다..


--------------------------------------------------------------------
출처
https://www.cs.helsinki.fi/u/ukkonen/SuffixT1withFigs.pdf
http://www.cs.jhu.edu/~langmea/resources/lecture_notes/suffix_trees.pdf

2017년 2월 11일 토요일

[Web] 자바스크립트로 다운로드 버튼 구현하기

코딩 연습겸 웹 개발..을 하기전에 보고 배운것부터 정리.. 먼저 다운로드 버튼

<button class="btn" type="submit">다운로드</button>

button type을 submit으로 지정해주고 id를 download_btn으로 해준다. class는 신경안써도 될듯...?


<script type="text/javascript">      
   var contextPath = '${contextPath}/';   
   $(document).ready(function(){

      $("#download_btn").click(function() {
           download();
   });      

   function download() {
      var url = contextPath + "다운로드 url 경로";
      location.href=url;
   }
</script>


 버튼을 클릭하면 download() 함수를 호출하여 url을 통해 다운로드를 실행하면 완료. 쓰고 보니 아무것도 없이 딸랑 저것만 있으면 나중에 봤을때 나도 이해안될것 같다.. 그래도 정리안해놓는것보단 나을거라 생각하며...

2017년 2월 3일 금요일

[책 리뷰] 수학의 힘





 책 표지에 나와있는대로 수학에 상처받은 어른들을 위한 책이다. 수학이 필요하지만 수학에 대해 트라우마를 갖고 있어 선뜻 수학이 손에 잡히지 않는 사람들을 위한 책이라고 생각하면 될것 같다. 책 내용도 이러한 내용이나 공식들이 왜 필요한지 쉽게 설명해주고 두께도 얇은 편이어서 다시 수학을 공부해야하지만 겁을 먹고 있는 사람들에게 입문서로 좋다는 생각이 든다. 
 문제는 내가 수학에 대해 거부감이 없다는 점.. 수학을 좋아하는 편이라는 점이다. 책을 소장하는 것을 좋아해서 가급적이면 책을 사서 보는 편인데 이 책은 빌려보는 것이 더 현명하지 않았나 하는 생각이 든다. 수학에 두려움을 갖고 있는 사람에게 나눔이 가능할 정도..?

2017년 1월 13일 금요일

[책 리뷰] 완벽한 공부법: 모든 공부의 최고의 지침서





서평


 참 활용하기 나름인 책 같다. 단순히 학교 공부, 영어 공부가 아닌 범용적인 공부 혹은 진짜 공부를 하는 방법에 대한 지침을 알려주는 책 같다. 나 자신에 대한 믿음을 갖는 심리적인 요인 부터, 내자신의 심리 상태를 다스릴 수 있는 심리적인 요인, 공부한 것을 기억하는 방법 그리고 그것을 활용하는 방법에 이르는 모든 과정에 대한 지침을 해주는 책이다.

 기존의 책 같은 경우는 동기부여, 학습방법, 목표 설정 이런것들에 포커스가 맞춰져 있는 것으로 기억한다. 하지만 이 책은 기존의 공부법 책에서는 볼 수 없었던 사회성, 감정과 같은 영역까지 다루면서 어느하나 버릴게 없는 챕터로 구성되어 있다. 그리고 그 학습한 내용을 적용 시킬 수있는 분야인 영어 공부법과 회사 생활에 대한 지침까지 다루고 있다는 점이 인상적이다. 막 사회생활을 시작한 나에게 있어 앞으로 발전을 하기 위해 필요한 것이 무엇인지 스스로 되짚어보는 시간이 되었던것 같다.

요약


 책의 첫 장은 자신이 할 수 있다는 믿음을 가지라는 내용이다. 단순히 믿음을 가지세요 라는 말을 하는 것이 아니라 자신에 대한 믿음을 갖기 위한 방법을 말해주고 있는데 그 방법은 작은 성취를 통해 믿음을 갖는 것이다. 작은 일을 하고 성취를 이루면 그 정도의 일은 할 수 있다는 자신감이 생긴다. 그러면서 점점 큰 일을 성취를 하면 무엇이든 할 수 있다는 자신감을 갖게된다는 뜻이다. 크던 작던 누구나 무언가를 성취해 본 경험이 있을 것이다. 그리고 어떤일이던 간에 그 성취감은 언제나 뿌듯했을거라고 생각한다. 물론, 중요한 성과를 달성했을 때 더 기쁘기는 할 것이다. 첫 술에 배부를 수는 없기 때문에 작은 일부터 하나하나 해나가면서 점점 큰 성과를 거두며 자신에 대한 믿음을 갖는 것이 첫 번째 단계라고 이 책에 나와있다.

 두 번째는 나에 대한 인지이다. 내가 무엇을 알고, 무엇을 모르는지에 대해 파악하는 것, 이것을 이 책에서는 '메타 인지'라고 한다. 내 수준을 정확하게 파악하지 못하고 아무런 대책없이 너무 높은 목표에 도전하면 현실과 이상에 대한 격차로 인한 좌절감만 커질 것이다. 이를 위해서 필요한 것이 내가 무엇을 알고 모르는지를 인지하고 있는 '메타 인지'가 중요하다고 한다. 메타라는 것은 영어로 'about'이라고 이해하면 쉽다. '메타 인지'는 '인지 about 인지' 즉, 내가 인지하고 있는 것에 대한 인지 정도로 이해하면 된다. 이 책에서 이 부분이 제일 어려운 것 같다. 자신을 너무 과대평가해서도, 과소평가해서도 안되는데, 이러한 균형점을 찾는것이 어려운 일이라고 생각한다.

 그 다음은 기억에 관한 내용이다. 공부는 어렵게해야 한다. 쉽게한 공부는 쉽게 잊는다라는 뜻이다. 자꾸 반복해야하고 내가 잘 기억하고 있는지, 이해하고 있는지 스스로라도 테스트를 해야한다고 한다. 예를 들어 영단어를 외울 때 눈으로 외우고 그즉시 손으로 외운 내용들을 적으며 셀프 테스트를 진행해가며 외우는 것이다. 그리고 암기 없이 이해도 없다는 내용도 있다. 이 책의 장점 중 하나는 이 책만의 특별한 공부법 같은 것이 없다는 것이다. 전부 다 우리가 살아오면서 알고 있는 기본적인 내용에 대해 강조하고 있고, 왜 그런 기본적인 것들이 중요한지에 대한 설명이 자세하고 이해하기 쉽게 되어있다. 

 마지막으로 목표에 대한 내용으로 책의 요약을 마치겠다. 그 뒤에 중요한 내용들이 많이 있지만, 이 요약에는 내가 제일 못하고 있거나 준비되지 않은 것들에 대해서만 언급하려고 한다. 그리고 공교롭게도 이 책의 가장 앞부분이 내가 잘 실천하지 못하고 있는 것들이다. 목표를 세울 때는 먼저 BHAG(Big Hairy Audacious Goal)을 세우라고 한다. 장기적으로 바라봐야하는 크고 위험하고 담대한 목표를 의미한다. 조금 허황될 지라도 이렇게 목표를 잡고 스스로에게 왜 이런 목표를 세우고 달성하려고 하는지 끊임 없이 질문하라고 이 책은 말한다. 회사에 입사해서 기초 소양 교육을 받을 때 어떤 일을 하게되더라고 항상 Why? 라는 질문을 하라고 들었다. 이 일을 왜 해야하는지 스스로 인지하면 그 다음엔 How? 라는 질문으로 이어지는데 이러한 과정을 거치면 업무를 더 잘 처리할 수 있다고 배웠는데 책에서 말하는 내용과 일맥상통하는 것 같다. 책의 내용에서 How? 에 해당하는 부분은 SMART 목표이다. SMART 목표는 구체적이고 측정 가능하며, 실천할 수 있고, 현실적인 중장기 목표를 의미한다. BHAG 목표를 왜 실천하려하고 그 다음 어떻게 실천할지 고민을하며 큰 목표를 우리가 감당할 수  있는 중장기 목표로 나누어서 단계 별 목표를 세우라는 이야기이다. 이러한 내용은 앞부분 믿음에 대한 챕터에서 나온 작은 성취감을 통해 자신에 대한 믿음을 가지라는 이야기와 연결이 되는 부분인 것 같다. 뒤에 이어지는 챕터에서도 작은 것 -> 큰 것으로 이어지는 내용들이 있는 기본에 충실한 내용이 꽉 차있어 누구나 할 수 있다는 생각도 들고 또한, 익힌 것에 대한 활용도 강조하고 있어 500페이지 분량이 버릴 것 하나 없이 알차다고 느껴진다.

 그리고 각 챕터의 마지막에는 이 책의 공동저자들의 그 챕터와 관련된 자신들의 경험과 노하우에 대한 내용이 있어 독자들에게 더 와닿는 내용들로 채워져 있다. 앞으로 이 책을 통해 배운 내용을 바탕으로 내 실력을 끊임 없이 발전시켜야겠다는 생각이 든다. 책에서 소개한 내용들을 100% 지켜가며 생활하기는 힘들 것이다. 지킬 수 있는 것과 지킬 수 없는 것들을 구분하고 그에 따라 하고자 했던 일을 꾸준히 하는 한 해가 되도록 해야겠다. 매년 초에 각오를 다지기 위해 읽어야 할 책이라고 생각한다.








2017년 1월 10일 화요일

[번역] National Artificial Intelligence Research and Development Strategic Plan

2016년 10월에 발표된 National Artificial Intelligence Research and Development Strategic Plan 보고서의 Executive Summary 부분을 구글번역기로 번역한 후, 교정한 자료입니다.
---------------------------------------------------------------------------------------------

인공 지능은 엄청난 사회적 경제적 이익을 약속하는 혁신 기술입니다. 인공 지능은 우리가 살아가고, 일하고, 배우고, 발견하고, 의사 소통하는 방식에 혁명을 일으킬 잠재력이 있습니다. 인공 지능 연구는 경제적 번영의 증진, 교육의 기회와 삶의 질 향상, 국가 및 국토 안보의 강화 등 우리의 국가 우선 순위를 더욱 높일 수 있습니다. 이러한 잠재적 이익 때문에 미국 정부는 수년간 인공 지능 연구에 투자 해 왔습니다. 그러나 연방 정부가 관심을 갖는 중요한 기술과 마찬가지로 엄청난 기회뿐만 아니라 인공 지능에 대한 연방 기금 연구 개발의 전반적인 지침을 수립 할 때 고려해야 할 여러 가지 고려 사항이 있습니다.

2016 5 3 , 행정부는 AI의 연방 활동을 조정할 수 있도록 기계 학습 및 인공 지능에 관한 새로운 NSTC 소위원회를 구성한다고 발표했습니다. 이 소위원회는 2016 6 15 일 네트워킹 및 정보 기술 연구 소위원회 및 개발 (NITRD)을 통해 국가 인공 지능 연구 및 개발 전략 계획을 수립했습니다. 인공 지능에 관한 NITRD 태스크 포스는 AI R&에 대한 연방의 전략적 우선 순위를 정의하기 위해 형성되었으며 산업계에서는 다루기 힘든 분야에 특히 주의를 기울였습니다.

National Artificial Intelligence R&D Strategic Plan은 연방 정부의 자금 지원을 받는 인공 지능 연구의 목표를 수립합니다. 대상이 되는 연구는 정부 내에서 이루어지는 것과 학계와 같은 정부 외부에서 이루어지는 연방 기금 지원을 받는 연구입니다. 이 연구의 궁극적인 목표는 부정적인 영향을 최소화하면서 사회에 긍정적인 혜택을 제공하는 새로운 인공 지능 지식과 기술을 생산하는 것입니다. 이 목표를 달성하기 위해 이 AI 연구 개발 전략 계획은 연방 기금으로 조성 된 인공 지능 연구에 다음과 같은 우선 순위를 부여합니다.

전략 1: 인공 지능 연구에 장기적인 투자를 하십시오. 발견과 통찰력을 이끌어 내고 미국이 AI 분야의 세계적인 리더로 남을 수 있도록 차세대 AI에 대한 투자를 우선시하십시오.
전략 1에 언급된 향후 연구 영역으로는 데이터 정리 기술의 효율성을 향상시키고, 데이터의 불일치 및 이상을 발견하는 방법을 만들고, 인간의 피드백을 통합하는 접근법에 대한 개발, 데이터 및 관련 메타 데이터를 동시에 채굴 할 수 있는 새로운 방법, 로봇의 이동성과 조작, 다중 양식(multi-modality) 기계 학습, 분산 시스템에서 제어 된 방식으로 데이터 파이프 라인을 켜고 끄는 방법이 있습니다.

전략 2: 인간 - 인공 지능 공동 작업을 위한 효과적인 방법 개발해야 합니다. 인간을 대체하는 대신, 대부분의 인공 지능 시스템은 최적의 성능을 달성하기 위해 인간과 협업합니다. 인간과 인공 지능 시스템 간의 효과적인 상호 작용을 위한 연구가 필요합니다.
전략2에 언급된 향후 연구 영역으로는 인간 공학이 덜 필요한 시스템을 개발, 능동 학습을 비지도 학습 및 강화 학습에 통합하는 방법, 서로 다른 언어를 보다 쉽게 ​​일반화 할 수 있는 시스템을 개발, 언어 처리 시스템에서 쉽게 액세스 할 수 있는 형태로 유용하고 구조화 된 도메인 지식 습득에 대한 방법이 있습니다.

전략 3: AI의 윤리적, 법적 및 사회적 영향을 이해하고 다룹니다. 우리는 인공 지능 기술이 동료 인간을 지키는 공식 및 비공식 표준에 따라 행동 할 것으로 기대합니다. AI의 윤리적, 법적 및 사회적 의미를 이해하고 윤리적, 법적 및 사회적 목표에 부합하는 AI 시스템을 설계하는 방법을 개발하기 위한 연구가 필요합니다.

전략 4: AI 시스템의 안전과 보안을 보장하십시오. 인공 지능 시스템이 널리 사용되기 전에 시스템이 통제되고 잘 정의되고 잘 이해 된 방식으로 안전하고 안전하게 작동해야 한다는 확신이 필요합니다. 신뢰(reliable)할 수 있고 신뢰(dependable)할 수 있으며 신뢰(trustworthy)할 수 있는 인공 지능 시스템을 만드는 이 과제를 해결하려면 연구가 더욱 발전되어야 합니다.
전략 4에서 언급된 향후 연구 영역은 고도의 자율성이 요구되는 사이버 보안 시스템에서 AI의 구현이 있습니다.

전략 5: 인공 지능 훈련 및 테스트를 위한 공유 공용 데이터 세트 및 환경을 개발합니다. 교육 자료 및 리소스의 깊이, 품질 및 정확성은 AI 성능에 중요한 영향을 미칩니다. 연구원은 고품질의 데이터 세트 및 환경을 개발하고 고품질의 데이터 세트는 물론 테스트 및 교육 리소스에 대한 책임 있는 액세스를 가능하게 해야 합니다.

전략 6: 표준과 벤치 마크를 통해 인공 지능 기술을 측정하고 평가하십시오. AI의 진보에 필수적인 것은 표준, 벤치 마크, 테스트 베드 및 AI 참여를 평가하고 평가하는 커뮤니티 참여입니다. 광범위한 평가 기법을 개발하려면 추가 연구가 필요합니다.

전략 7: 국가 AI 연구 개발 인력의 필요를 잘 이해한다. 인공 지능의 발전은 인공 지능 연구원들의 강력한 공동체를 필요로 할 것입니다. AI에서 현재 및 미래의 R & D 인력 수요에 대한 이해가 깊어져 이 계획에 설명 된 전략적 연구 개발 영역을 해결할 수 있는 충분한 AI 전문가를 확보 할 수 있어야 합니다.

인공 지능 연구 개발 전략 계획은 다음 두 가지 권고안으로 마무리됩니다.

권고 1: 이 계획의 전략 1-6과 일치하는 과학 기술 기회를 확인하고 인공 지능 연구 개발 투자의 효과적인 조정을 지원하기 위한 인공 지능 연구 개발 구현 프레임 워크를 개발해야 합니다.


권고 2: 이 계획의 전략7과 일치하는 건강한 AI 연구 개발 인력을 창출하고 유지하기 위한 국가적 환경을 연구해야 합니다.

2016년 6월 11일 토요일

Grub 부트로더 복구하는 방법

리눅스를 설치하고 지우면서 boot하면 가끔 당하는 grub rescue>
막막합니다. 그럴때 boot rescue나 Live CD를 쓰지 않고 간단히 해결하는 방법
grub rescue> ls
그럼 partition들을 다 보여 줍니다.
(hd0) (hd0,msdos2) (hd0,msdos1)
근데 어떤 놈 일까요?
grub rescue> ls (hd0,msdos2)/
grub rescue> ls (hd0,msdos1)/
이런식으로 하나씩 내용을 보면  ext4 중 /lost+found     /sys      /bin  /boot .... /usr
요렇게 partition의 ls가  놈이 나오는게 있습니다.
(hd0,msdos2) 이 고놈이라고 치면 # 아래 msdos를 빼고 한다는 걸 까먹으면 도루묵!
grub rescue> set prefix=(hd0,2)/boot/grub
grub rescue> set root=(hd0,2)
grub rescue> insmod normal
grub rescue> normal
다 치고 나면 리눅스가 정상으로 시작 됩니다.
그럼 안도의 한숨 내쉬고 Shell 을 연 다음 
$ sudo update-grub
$ sudo grub-install /dev/sda

출처 - http://linuxmint.kr/4082