분류 전체보기 149

어느 봄날

오늘도 막내아들 손을 잡고 어린이집에 갔다. 다른 때 같으면 하루 일과 중 가장 힘든 일 중 하나였겠지만 오늘은 아주 즐거운 경험이었다. 이렇게 편안해지기까지 6년의 시간이 필요했다. 청소를 마쳤는데 내게 와서 이렇게 말한다. "아빠, 나이 먹는다고 계속 키 크는 건 아니죠?" "응" "그럼 얼마만큼 커요?" "니가 크고 싶은 만큼. 넌 얼마만큼 크고 싶어?" 내 앞에 있는 식탁 벤치에 올라선다. "이렇게 아빠 만큼이요." 내가 키가 큰 편은 아니다. 손을 내 머리보다 높이 들고 말한다. "아빠보다 더 클 수도 있어." 엄청 새로운 사실이었는지 아들 눈이 잠깐 커진다. "그래도 아빠만큼 클래요." 'ㅎㅎ 귀여운 녀석.' 어린이집 갈 준비를 마쳤는데 콩순이 컴퓨터를 하고 싶다고 한다. 요즘에는 웬만하면 다..

다둥이아빠 2020.02.11

세상

우리가 사는 세상은 모두가 뜻하는 바를 이룰 수 있는 경이로운 곳이다. 뜻하는 바가 무엇인지만 정확히 알아내면 된다. 다른 사람의 목소리에 흔들리지 않고 내 목소리를 들으면 뜻하는 바가 무엇인지 알 수 있다. 상호존중! - 우리는 수평적 존재이다. 다른 존재에 해가 되지 않는 한 무한한 자유를 누릴 수 있다. 항상 감사하라. 항상 겸손하라. 항상 말조심하라. 말은 강력한 힘을 가지고 있다.

잡동사니 2020.02.11

앎의 단계

우리는 하얀 스크린을 보면서 시작한다. 거기에는 하얀빛만 가득하다. 그래서 우리는 아무 것도 볼 수 없다. 점차 빛이 없는 곳은 어둡다는 것을 알게 된다. 그래서 우리는 흑백을 구분할 수 있게 된다. 하지만 우리는 종종 흑과 백을 동등한 무엇으로 생각하는 오류를 범한다. 흑과 백을 잘 구분하는 것이 많이 아는 것이라 생각한다. 그러면서 흑은 단지 빛이 없는 것이었음을 잊는다. 흑과 백을 구분하는 능력이 발전하면서 점차 회색도 구분할 수 있게 된다. 회색에 익숙해지면 회색에도 밝은 회색, 어두운 회색이 있음을 알게 된다. 흑부터 백까지 다양한 단계의 색이 있음을 구분할 수 있게 된다. 우리는 이제 단색 영화를 본다. 어느 순간 우리는 무채색만 있지 않다는 것을 알게 된다. 우리는 드디어 색을 볼 수 있다...

잡동사니 2020.01.25

Go in Windows - runtime.LockOSThread()

Go언어에서 IWebBrowser2 를 사용하는 프로그램을 만들었는데, 잘 실행되다가 갑자기 종료되는 현상이 있었다. 여러 가지 시도를 해봤는데 빈도의 차이가 있을 뿐 확실하게 해결되지 않았다. 10여일 간 검색과 시행착오를 반복한 끝에 드디어 답을 찾았다. 답은 바로 runtime.LockOSThread() 이다. IWebBrowser 사용 중에 Access violation(0xc0000005), Application hang(0xcfffffff) 등으로 비정상 종료되었는데 runtime.LockOSThread()를 main()에서 실행한 후에 해결되었다.

Go in Windows - Interface

Go언어에서 윈도 인터페이스를 구현하는 경우 매개 변수의 형식은 uintptr 또는 이와 같은 크기의 변수(int,uint,포인터)만 가능하다. HRESULT Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr ); 위의 경우를 Go언어에서 구현하면, 아래와 같은 형태가 된다. func Invoke(idMember int,riid *GUID,lcid uint,flags uint, dispParams *DISPPARAMS,varResult *VARIANT, excepInfo *EXCEPINFO..

Go in Windows - BSTR

Go언어에서 윈도 dll을 사용할 때 BSTR이라는 데이터 형식은 조금 다르게 처리해야 한다. BSTR은 uint16 값들의 배열을 가리키는 포인터로 생각할 수 있다. 한 가지 다른 점은 이 포인터 앞에 int32 값으로 문자열의 길이를 가지고 있다는 것이다. 이 때문에 BSTR을 Go언어의 *uint16으로 처리하는 경우 잘못된 메모리 접근(memory access violation)이 발생할 수 있다. 아래와 같은 코드는 제대로 동작할 수도 있고(길이값을 사용하지 않을 때), 아닐 수도 있다(길이값을 사용할 경우). func WrongBstr(s string) *uint16{ return syscall.StringToUTF16Ptr(s) } 대신에 윈도우의 SysAllocString 함수를 이용해야 ..

안드로이드폰 파일 싱크 프로그램

아이폰을 쓰다가 안드로이드폰으로 바꾸고 나서 불편했던 것 중에 하나가 사진을 컴퓨터로 옮기는 것이었다. 그래서 직접 만들어 봤다. 겸사겸사 Go언어도 공부했다. 그리하여 Go 언어를 공부하고서 처음 만든 프로그램. kfilesync [소스 파일] 컴퓨터에 핸드폰 연결하고 명령 프롬프트에서 kfilesync MTP0:\DCIM D:\Pictures 하면 끝. 혹시 필요한 분들이 있을까 하여 실행파일 공유합니다.

물리, 한의학을 만나다 - 머리말

나는 한의학을 좋아한다. 그중에서도 특히 사상체질에 관심이 많다. 뭔지 모르는 끌림이 있기 때문이다. 사랑하고도 비슷하다. 그런데 사랑하는 사람이 손가락질당한다면? 화가 나거나 슬퍼질 것이다. 사상체질은 상당히 유용한 체계이기는 하지만 완전하지는 않다. 그래서 공격도 많이 받고, 비과학적이라고 비판 받기도 한다. 지난겨울 사상체질에 대한 나의 이 불편한 감정을 해결해 보기 위해서 몇 가지 시도를 해보았다. 우리 몸을 보일러의 구조에 비유해서 체질을 설명해 보려 한 것이다. 나름의 성과가 있었지만 중간중간 설명이 깔끔하지 못한 부분이 있어서 아쉬웠다. 왜 설명이 깔끔하지 못한지 생각해보다가 우리 집이 떠올랐다. 나는 한옥을 리모델링한 집에 살고 있다. 기존 구조를 그대로 둔 채로 우리 가족이 필요한 대로 ..

잡동사니 2019.03.27