갱스
지난 수십년간 금리가 낮아져 온 것은 자본주의라는 게임에 고인물이 많아져서 그렇다. 초보는 포션을 먹으며 약한 몬스터를 잡아서 약간의 경험치와 약간의 골드를 얻지만 고인물은 고가의 피흡세팅을 갖추고 강한 몬스터를 편하게 잡아서 많은 경험치와 많은 골드를 얻는다. 포션이 필요없으니 포션살 돈도 아끼게 된다. 고인물은 그 게임 시스템이 허용하는 범위 내에서 가장 사기적인 장비옵션과 스킬들의 조합을 연구하고 찾아낸다. 대표적으로 Path of Exile 이 그렇다. 하지만 게임사 입장에서는 모든 직업과 조합에 대해 같은 성능을 갖도록 밸런스를 맞춘다는건 불가능하기때문에, Path of Exile에서는 매 시즌마다 가장 사기적인 조합이 1개~2개정도만 존재하게 된다. 자본주의가 지구상에 나타난 지 수백년이 지났..
Effective C# 3판의 목차이다. 책을 읽고나서 목차만 수시로 봐줘도 큰 도움이 될 것 같다 CHAPTER 1 C# 언어 요소 아이템 1: 지역변수를 선언할 때에는 var를 사용하는 것이 낫다 아이템 2: const보다는 readonly가 좋다 아이템 3: 캐스트보다는 is, as가 좋다 아이템 4: string.Format()을 보간 문자열로 대체하라 아이템 5: 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라 아이템 6: nameof() 연산자를 적극 활용하라 아이템 7: 델리게이트를 이용하여 콜백을 표현하라 아이템 8: 이벤트 호출 시에는 null 조건 연산자를 사용하라 아이템 9: 박싱과 언박싱을 최소화하라 아이템 10: 베이스 클래스가 업그레이드된 경우에만 ..
shared_ptr로 관리되는 객체를 생성하는 방법은 두가지가 있다1. shared_ptr(new Object)2. make_shared() 이 두가지 방식에 차이점이 있을까? 있다면 어느 방식이 더 좋을까?아래 링크는 이 의문에 대한 좋은 답변이다https://stackoverflow.com/questions/20895648/difference-in-make-shared-and-normal-shared-ptr-in-c 답변을 간략히 정리해보았다 1. 메모리할당 (heap allocation) 횟수가 다르다shared_ptr(new Object)를 쓰면 Object 객체를 생성할 때 한번, reference count 관리를 위한 control block을 생성할 때 한번. 총 두번 메모리 할당이 발생한..
우선 rvalue와 lvalue를 구별할 수 있어야 한다. 아래 포스트에 잘 설명되어있다.http://itguru.tistory.com/189 move 개념이 등장하기 전까진 move와 copy 모두 copy방식으로 구현해왔었다. 하지만 move와 copy를 구별해서 코드를 짜면 불필요한 메모리할당과 복사를 피할 수 있다. 굳이 copy를 하지 않고 move만으로 기능구현이 가능하다면 move를 하도록 하자. 특히 라이브러리나 엔진같은 기반코드를 작성하는 프로그래머라면, 본인이 만들 클래스가 이동될 것인 지 복사될 것인 지를 잘 디자인해야 한다. 만약 이동만으로 충분하다면 복사생성자와 복사대입연산자를 지워버리고(= delete) 이동생성자와 이동대입연산자만 제공하는 것을 고려해본다. 아래 코드는 move..
C++ 프로그램에 Python embedding을 해보았다. Python을 설치하면 생기는 헤더/라이브러리 파일만을 이용해 개발할 수도 있지만 C++가 아닌 C로 개발해야 해서 생산성이 떨어진다boost::python은 그것을 클래스로 잘 래핑해놓은 것이다. 아래 기록은 삽질해보면서 기록한 거라 정리된 상태가 아니다 boost 다운받고 압축 푼다. boost 경로에서cmd> boostrap.bat project-config.jam 파일이 생겼을 것. 이 파일을 열고using python : 3.6 : C:\Users\pknam\Anaconda3 : : : 64 ;라인을 추가한다 다시 boost 경로에서cmd> b2 -j4 --toolset=msvc-14.0 --build-type=complete arch..
matplotlib에서 IplImage 객체도 알아서 출력해준다 단, 컬러배열순서를 BGR에서 RGB로 변환해줘야 제대로 된 색상이 나온다 interactive shell을 이용해 이미지처리를 더 쉽게 할 수 있을 것 같다
python의 decorator 개념 이해를 돕는 예제이다 args와 kwargs가 도대체 무엇인지 이 코드를 보면 이해할 수 있다 꼭 직접 실행해보자
Unity에서 camera의 projection matrix를 다루는 간단한 예제이다 Unity에서는 projection matrix를 수정한다고 해서 camera transform 객체의 position이나 rotation값이 바뀌지 않는다. game view에 화면이 뿌려지기 직전에 projection matrix가 반영되므로, transform 객체와는 아예 별개라고 생각하면 된다.
오른쪽과 같은 1 channel thresholded image를 얻었을 때 각 blob의 사각 영역들을 구하는 것이 목적이다. http://martinblog.tistory.com/826 처음엔 이 분의 코드를 가져다 써봤지만 C#으로 포팅하고 나니 프레임이 확 낮아져서 BFS로 다시 구현했다 C# 구현은 opencvsharp을 사용했다 opencvsharp을 사용하면 사실 OpenCvSharp.Blob.CvBlobs 클래스를 그냥 가져다 써도 된다. 성능 차이는 없어 보인다. 사용할 때는 MyBlobLabeling blobs = new MyBlobLabeling(); blobs.Label(thresholdedImg); // 1 channel IplImage Debug.Log("blob size : "..
$ ssh [user]@[hostname] -p [port] 매 번 ssh 접속을 할 때마다 위 명령어를 치는 건 너무 귀찮다 자주 접속하는 서버/계정은 아래와 같이 설정해두자 ~/.ssh/config 파일을 생성하고 다음과 같이 입력한다 Host host1 HostName host_name1 Port port_number1 User root Host host2 HostName host_name2 Port port_number2 User root 이젠 이렇게 접속할 수 있다 $ ssh host1