전체 글 166

앎의 단계

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

잡동사니 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

고혈압 - 누가 병든 것인가

건강 검진에서 혈압이 높아지면 병원에 간다. 병원에 가면 혈압을 낮춰주는 약을 처방해 준다. 그때부터 사람들은 혈압약을 달고 산다. 그럼 행복하게 오래오래 살까? 장기적으로 볼 때 혈압약으로도 혈압 조절은 잘 안 된다. 그러면 약을 바꾸거나 복용량을 늘려야 한다. 점차 다른 증상들이 나타나면 또 다른 약을 추가해야 한다. 약을 배가 부르도록 먹어야하는 시점이 온다. 무엇이 문제인가? 고혈압을 치료 대상으로 간주하는 것이 문제이다. 고혈압은 질병의 근원이 아니고 말단에서 나타나는 증상의 하나일 뿐이다. 혈액 순환이 잘 안되니까 몸이 살아보겠다고 혈압을 올리는 것이다. 그런데 이걸 막고 혈압을 낮추면? 필요한 곳에 피가 잘 돌지 못해서 다른 질병이 생긴다. 그럼 왜 고혈압을 질병으로 간주하는가? 누군가에게 ..

다둥이아빠 2018.07.06