작업의 흐름에 따라 작성함 일단 가장 기본적인 github에 등록하는거..public key / private key가 쌍으로 있으면private key는 내가 갖고, public key를 github에 등록하면 되는건 누구나 다 알것이다. 문제는.. 내가 쓰는 remote가 github만 있는게 아닐때..키를 일일히 eval $(ssh-agent -s) 한담에 ssh-add ~/.ssh/키이름 이렇게 해주기에는 콘솔이 다시 켜질때마다 저 작업을 일일히 해줘야 하니깐 여간 까다로운게 아니다. 그럴땐 ~/.ssh/config 파일을 관리하자. 없으면 만들면 된다. 내용은 열라 간단하다Host host명IdentityFile ~/.ssh/key파일이름 해주면 끝난다.공개키일 경우에는Host host명Pref..
작게 시작한 프로젝트 규모가 점점 커지면서 리팩토링을 하게 됐는데 크고 작은 실수가 몇개 있었다. 덕분에 엄청난 시행착오를 거쳐 오랜 시간걸렸다. 몇가지 실수를 적어 보겠다. 첫번째는 메세지 전달 부분에서의 의존성을 줄이지 못한 부분이다. 각 모듈을 DLL로 쪼개는 리팩토링을 감행 하였는데 여기서 각 DLL 간 의존성을 0으로 하고, 최대한 독립적으로 General 하게 코딩하려 했다. A DLL에서 B DLL로 메세지를 전달 하는 과정에서 상수값을 어쩔 수 없이 공유하게 됐는데, 차라리 A DLL에 SetListener 메소드를 구현하고, B DLL에서 해당 메소드를 콜해서 원하는 핸들러를 등록하게 했어야 했다. 두번째는, Data와 Controller를 완벽하게 분리 하지 못했다. 기본적으로 Data..
CRect의 생성자에 NULL을 넣어서 초기화 해주면 쓰레기 값이 들어간다. 예를 들어 CRect rt(NULL); 하면 rt에는 막 -2349823 이런 쓰레기 값이 들어간다 0으로 초기화 하는게 목적이라면 그냥 CRect rt 까지만 해주는게 제일 좋다. 이 차이가 어디서 발생하냐면 IsRectNull()과 IsRectEmpty() 의 성공 여부 때문이다. 나는 당연히 CRect rt(NULL) 한 다음에 rt.IsRectNull() 하면 TRUE가 리턴될 줄 알았다. 그런데 아니더라. IsRectNull()은 해당 CRect가 0으로 초기화 돼있는지를 검사하기 때문이다. 하지만 쓰레기 값이 들어있으니 rt(NULL)로 초기화 했다면 IsRectNull()로 FALSE가 나오는 것이다. 안전하게 rt..
MFC DLL에서 class에 vector를 담아서 Export 하려 시도 하였다. 처음에는 잘 되는 듯이 보였지만, class를 delete 하는 순간, 와장창 무너지기 시작했다. 계속해서 dbgheap.c의 _CrtIsValidHeapPointer(const void * pUserData) 안에 있는 HeapValidate( _crtheap, 0, pHdr(pUserData) ); 에서 FALSE을 리턴하여 ASSERT에 걸리게 되었다. 계속 디버깅을 해보니, vector의 소멸을 제대로 하지 못하고 있었다. vector의 소멸자를 따라가 보니 dbgheap.c의 _crtheap이 caller의 heap을 가리키고 있는 것이 보였다. 아니, 애당초 call stack의 소멸 지점이 callee 인 d..
위 사진은 굉장히 흥미로운 사진이다. 숫자로 구성된 String 텍스트를 무작위 위치에 배열 한 후, 각 텍스트에 대하여 Paint의 getTextBounds를 통해 차지하는 영역의 크기를 Rect로 받은 후, 해당 Rect를 이용하여 텍스트의 좌상단, 우하단에 붉은 점을 찍게 한 프로그램의 캡쳐본이다. 굉장한 사실은, 6, 8, 2, 11, 18, 13 등의 숫자를 잘 보면.. 빨간 점의 위치가 이상하다. "제대로 안찍혀 있다." 좌상단, 우하단에 찍힌 것이 아니라 이상한 위치에 찍혀있다. 이것이 버그인지 무엇인지 아직은 잘 모르겠다. 확실한 것은, getTextBounds 를 통해서 정확한 크기가 구해지지 않았다는 것이다. 헐~~~ measureText를 이용해야 하나??? 어찌해야할꼬~ --> 맙소..
Android의 SurfaceView를 이용하여 간단한 게임을 구현하고자 한다. 보통 다들 worker thread를 만들어서 holder에 lock을 걸었다가 풀어주면서 화면을 갱신해주는 방법을 쓰더라. 문제는, thread 내부의 무한 루프에서 발생한다. 무한 루프는, 계~~~~~~~~속 해서 돌며, CPU의 속도에 따라 도는 속도라 다르다. 따라서 빠른 CPU를 쓴다면 루프 속도가 빠를 것이고, 느린 CPU를 쓴다면 느릴 것이다. 그리고.. 무한 루프를 도는 동안에는 엄청나게 점유율이 높을 것이다.. 사람의 눈은 30fps면 웬만한 동작을 인지하는데 무리가 없기 때문에, 나는 surfaceview로 만든 게임을 30fps로 맞추고자 했다. 그렇게 해서 나온 소스는 다음과 같다. public clas..
평소 환경 변수를 통하여 윈도우->실행 을 통해 단축 명령을 자주 사용하는 나같은 사람들을 위한 팁 1. 네트워크 어댑터 창 Prompt로 열기 - network.bat ncpa.cpl 2. 유선 네트워크 어댑터는 켜고 무선 네트워크 어댑터는 끄기 - wired.bat wmic path win32_networkadapter where Name="Wireless Adapter Name" call disable wmic path win32_networkadapter where Name="Wired Adapter Name" call enable 여기서 Name안에 써주는 값은, 각자의 Network Adapter 이름을 써주면 된다. 그냥 GUI환경에서 이름을 확인해도 되고, 아래의 명령어를 통하여 얻어도 된..
- Total
- Today
- Yesterday
- NDK
- API
- linux
- algorithm
- Visual C++
- it
- 안드로이드
- database
- driver
- 리눅스
- 드라이버
- db
- kering
- Quiz
- gcc
- 프로그래밍
- 음악
- Cloud
- MFC
- android
- AWS
- winapi
- jni강좌
- Troubleshooting
- source
- C++
- C
- jni
- java
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |