본문 바로가기

분류 전체보기117

잠자리가 편안한 투자... 워런버핏 바이블 예전에 읽었던 '워렌 버핏의 재무제표 활용법'에 이어 또 한 권의 버핏 책을 골랐다. 여기에는 워런 버핏이 직접 쓴 버크셔 해서웨이의 주주서한과 주주총회 당시의 질의답변이 담겨 있다. 바이블... 우리말로 성서라는 뜻의 이 제목은 버핏의 투자 인생이 고스란히 옮겨져 붙은 듯하다. 편역자분의 센스가 느껴진다. 역시 첫장은 주식 투자다. 뉴턴의 투자실패 사례를 소개하며 천재들도 사람들의 광기는 계산할 수 없다는 진리를 알려준다. 즉, 투자에 감정이 들어가는 순간 결코 수익을 볼 수 없다는 말이다. 투자는 분석하는 것이지 짐작하는 것이 아니다. 주식으로 많은 돈을 번 사람들에게는 특별한 공식이 있다고 믿기 쉽다. 그래서 버핏에게도 수많은 사람들이 물어봤을 것이다. 과연 버핏은 어떻게 답했을까? 공식보다는 자신.. 2019. 9. 23.
삼각행렬로 연립방정식 단번에 구하기 학창 시절.. 행렬이 수학책의 첫 단원이라 본의 아니게 공부했던 기억이 있다. 아마 나만 그랬던 건 아닐 것이다ㅎㅎ 어잿든 십수 년 코딩을 해오면서도 이제야 왜 행렬이 첫 번째인지 그 깊은 뜻이 헤아려진다. 머리가 나빠서 이론은 건너뛰고 실전코딩부터 했던터라 지금까지 해 오던 것이 선형대수학의 내용인지조차 몰랐었다. 왜 필요한지도 모른채 행렬부터 공부하다 보니 연결이 어려웠던 걸까.. 주입식 교육의 폐해다ㅎㅎ 뒤늦게 다시 선형대수학을 공부하며 하나하나 정리해 가고 있는데.. 삼각행렬로 연립방정식을 구하는 손쉬운 방법을 소스로 만들어 보았다. php로 짰지만 다른 언어로도 쉽게 변경 가능하다. //삼각행렬 function triangularMatrix(&$matrix) { $j_count = count($.. 2019. 8. 19.
마음은 어떤 모양일까... 시냅스와 자아 뇌는 우리를 움직이게 한다. 생각을 하고 판단을 하며, 사랑, 슬픔, 기쁨 등의 감정도 느낀다. 그래서 인류의 오랜 궁금중은 "뇌는 도대체 어떻게 마음을 만들까"였다. 이런 물음에 "뇌과학"이란 이름으로 인류는 답을 찾고자 한다. 특성상 심리학과 밀접한 관계를 가지기도 하지만 최대한 생물학적 메커니즘으로 우리의 마음을 설명한다. 이 책은 다소 오래전에 출판되었지만 뇌과학의 입문서로써, 대중과학도서로써 전혀 손색이 없다. 나는 인공지능의 더 넓은 지식을 얻으려고 읽어보았는데 역시 둘은 무척이나 닮았다. 뇌의 기본 세포는 그 유명한 뉴런이다. 하지만 중요한 것은 시냅스다. 시냅스란 뉴런 사이의 살짝 띄어진 연결 공간인데 입력과 출력을 담당한다. 입력과 출력이 어떤 방식으로 이루어지느냐에 따라 완전히 다른 결.. 2019. 7. 22.
drawText의 문자가 밑으로 삐져나오지 않게 하기 커스텀 뷰를 만들어 쓸때 drawText로 문자를 출력한다. 그런데 문자 위치가 살짝 밑으로 치우쳐 있는 느낌을 받곤 한다. 처음엔 기분탓이라고 생각했지만... 계속된 찝찝함에 확인해 보니... 아주 미세하게 아래로 내려와 있다는 사실을 깨달았다. 한 예이다. override fun onDraw(canvas: Canvas) { super.onDraw(canvas) val rect = RectF(100f, 100f, 300f, 300f) val rectPaint = TextPaint().apply { flags = Paint.ANTI_ALIAS_FLAG color = Color.LTGRAY } val text = "Test" val textPaint = TextPaint().apply { flags = P.. 2019. 6. 24.
목적을 담자 그것도 확실히... 문서작성 최소원칙 우리는 살면서 좋든 싫든 문서를 접한다. 어릴때부터 글과는 거리가 멀었던 나에게도 문서를 쓸 일이 생기니 말이다. 이왕 이렇게 된거 제대로 써보자. 짐작하겠지만 역시 문서는 간결함이다. 기본적으로 사람들은 문서를 싫어한다ㅎㅎ 그러니 간결해야 그나마 보지 않겠는가. 하지만 간결하다고 다 볼까? 역시 이도 아닐것이다. 핵심을 딱 집아낸 간결한 문장.. 짧지만 꽉차게 느껴지는 문서... 일명 "깊은 간결함"이 있어야 사람들에게 내 글이 읽히게 된다. 말이야 쉽지 도대체 이런 글을 어떻게 써야 할까?? 결론부터 말하면 목적이다. 목적에 충실한 문서. "재주가 없어서가 아니라 목적이 없어서 실패한다" 라는 말이 있다. 문서 작성도 그렇다. 아무리 내용이 좋아도 목적에 맞지 않다면 "괜히 읽었네" 하는 소리가 나올.. 2019. 5. 26.
FragmentPaper에서 ListView가 매번 초기화되지 않도록 하기 대부분의 앱은 탭과 리스트로 구성된다. 많은 정보를 간편하면서도 체계적으로 보여줄수 있기 때문이다. Android에서 이러한 구조는 보통 FragmentPaper에 ListView를 넣어 구현한다. FragmentPaper는 메모리 관리를 위해 사용자가 보고 있는 페이지과 양옆의 페이지만 유지하고 나머지는 죽이는데 내 경험상 완전히 죽이는것이 아니라 Fragment의 생명주기만 끝내는것 같다. 결과적으로, 페이지를 옮길때마다 Fragment가 초기화되어 그 안의 ListView 내용도 다 지워진다. 이를 방지하는 방법이 따로 있을지도 모르겠지만 나는 다음과 같이 onCreateView()에 몇줄을 코딩해 해결하곤 한다. Fragment의 생명주기는 다시 시작되지만 Class 자체의 객체변수들은 그대로 남.. 2019. 5. 23.
어림짐작인데 정확할거야... 생각에 관한 생각 프로젝트 "보이는데로 믿지마라" 사람들이 항상 하는 말이다. 하지만 과연 우리는 얼마나 지키고 있을까? 경험을 통해 아무리 학습을 해도 인간의 심리란 합리적인 생각을 뒤로 할때가 많다. 경험이 잘못되었을수도 있지만 통계학자마저 확률과는 정 반대로 행동하고, 전문가들도 자기 분야에서 편향된 판단을 하는 경우가 적지 않다는것만 봐도 그렇다. 어쩌면 당연할지도 모른다. 인간이 신도 아니고 오히려 매사에 완벽한 판단을 하는것이 더 이상하다. 인공지능에 휴리스틱이란게 있다. 매번 모든 경우의수를 파악할려면 무한대의 시간이 걸리기 때문에 가장 있음직한 경우를 먼저 계산하는것을 말한다. 이것은 인간이 불확실한 상황을 마주했을때의 판단 과정을 알고리즘화 한건데 보통 우리는 "어림짐작" 또는 직감이라고 부른다. 어림짐작은 위에서.. 2019. 4. 8.
객체 속도가 빠를수록 충돌검사가 부정확해진다면 충돌검사는 기본적으로 두 객체의 좌표가 겹쳐있느냐를 보는것이다. 하지만 간혹 검사가 제대로 안될때가 있다. 객체의 좌표 이동거리가 자신의 크기보다 더 클때 그렇다. 다음과 같이 말이다. 게임은 프레임별로 동작하기 때문에 그림1에서는 Frame2와 Frame3에서 두 객체는 겹치지만 그림2에서는 Frame2와 Frame3에서 서로를 지나쳐 간다. 만약 프레임이 중간에 하나가 더 있었다면 충돌값은 참이었겠지만 거짓이 되었다. 이렇듯 이동거리가 자신보다 크면 프레임 사이에 공간이 생겨 원하는 결과를 얻지 못한다. 원인은 프레임이 현실세계에서처럼 한없이 짧을수는 없어 빠르게 움직이는 객체는 좌표의 이동값을 크게 잡아서 표현해야 하기 때문이다. 그래서 겹침과 함께 이동경로의 교점도 확인해야 한다. 교점은 두 객체.. 2019. 4. 2.
인과 관계... 인공지능:튜링테스트에서 딥러닝까지 코딩을 하다보면 언제나 그 끝은 인공지능으로 귀결되는듯 하다. 아무래도 좀더 나은 프로그램을 짜려다 보면 점점 자동화되는 부분이 많아지고 이것은 결국, 모든것이 자동화되는 순간.. 인공지능이 되기 때문이다. 매번 이렇게 느끼면서도 막연히 "인공지능은 어려워.. 지금 내가 어떻게 만들어" 하며 미루기만 했는데 이젠 때가 된것 같았다.. 아니, 더이상 미룰수 없다는것을 알았다. 인공지능의 관심도가 극도로 높아진 지금이 개발의 적기이며 지금 안하면 앞서가기 힘들지 않을까 해서다. 마음은 급하지만 천리길도 한걸음부터이니.. 기초부터 탄탄히 다지는것이 필요해 정독할만한 교재를 찾았다. 인공지능의 전반적인 내용을 기초부터 담고 있을것 같아 이 책을 골랐다. 2개월에 걸쳐 끝까지 봤는데.. 솔직히, 절반의 절반도 이.. 2019. 3. 25.
Dialog를 닫았는데 background로 나갔다 들어오니 다시 열린다??? 안드로이드에서 대화상자를 띄울때 DialogFragment를 사용한다. 그런데 사용후 닫았는데도 화면을 끄거나 홈버튼을 누르거나 다른 앱을 잠시 사용한후 들어오면... 닫혔던 DialogFragment 놈이 되살아나 다시 뜨는 경우가 있다. 알고보니 dismiss 리스너를 등록하면 그런다. 즉, setDismissListener에 리스너를 넣었다면 반드시 종료할때 dismiss()를 호출해주어야 한다. 그러지않고 back 버튼이나 바깥화면 터치로 닫으면 나중에 다시 떠버린다. 당황하지 말고 다음과 같이 하자... dialog.setOnDismissListener { //리스너 내용 } dialog.setOnKeyListener { dialogInterface, i, keyEvent -> if (keyEv.. 2019. 3. 13.