2021년 8월 15일 일요일

핀란드의 묵직한 충고 "혁신 위해선 불확실성 안고 나아가는 방법뿐"

출처: https://www.hankyung.com/politics/article/2019061178361

문 대통령의 질문을 받은 일카 니에멜라 알토대 총장의 대답은 간명했다. 그는 “늘 불확실성을 안고 산다는 걸 감안해야 한다. 앞으로 나아가는 건 이 방법뿐이라고 생각하고 정진하는 것뿐”이라고 답했다. 이어 “반대를 극복하기 위해선 환경이 조성돼야 한다. 늘 만나고 마음을 열고 서로의 얘기를 경청했다”고 강조했다. 니에멜라 총장은 “충분한 시간을 가지고 이야기하는 과정에서 목표를 잃지 않기 위한 노력이 중요하다”고 조언했다.

결론

"충분한 시간을 가지고 이야기하는 과정에서 목표를 잃지 않기 위한 노력이 중요하다" 누군가를 설득하는 방법일 것이다. 이 과정에서 목표를 잃지 않으면, 나의 방법의 오류도 찾을 수 있을 것이다.

2017년 3월 23일 목요일

One Size Fits None - (Everything You Learned in Your DBMS Class is Wrong)

출처: http://slideshot.epfl.ch/play/suri_stonebraker

머리에 남는 것

  1. column store
    1. OOP 대신에 DOD로 디자인을 바꿀까나?
  2. single thread
    1. latching 타임에 대한 저평가. 메모리를 나눈다.


2017년 3월 20일 월요일

.unitypackage 에디터 없이 풀기

참고: https://upu.derfunk.com/

  1. Downloads에서 Standalone을 내려 받아 압축을 푼다.
  2. 원하는 패키지 파일을 끌어다 놓는다.
  3. "Unpack now"를 클릭하고 원하는 폴더를 지정한다.

Visual Studio C#에서 폴더 안의 파일을 모두 프로젝트에 추가하기

참고: http://stackoverflow.com/questions/392473/how-do-i-add-an-existing-directory-tree-to-a-project-in-visual-studio

방법

  1. 프로젝트 디렉토리에 소스 구조를 넣는다
  2. 솔루션 탐색기의 툴상자에서 "Show All Files"를 클릭
  3. 원하는 디렉토리를 오른클릭하고 "Include in Project" 클릭

2016년 12월 22일 목요일

.NET에서 Exception 사용하기

출처: http://mattwarren.org/2016/12/20/Why-Exceptions-should-be-Exceptional/

위의 글에서 다음과 같은 결론을 내고 있다.

Conclusion

  1. Rare or Exceptional exceptions are not hugely expensive and they should always be the preferred way of error handling in .NET
  2. If you have code that is expected to fail often (such as parsing a string into an integer), use the TryXXX() pattern
  3. The deeper the stack trace, the more work that has to be done, so the more overhead there is when catching/handling exceptions
  4. This is even more true if you are also fetching the entire stack trace, via the StackTraceproperty. So if you don’t need it, don’t fetch it.
좀 더 요약하면
  1. 예외는 보통 그렇게 비싸지 않다
  2. 자주 일어나는 예외는 TryXXX() 패턴을 사용하라
  3. 깊은 스택 추적을 사용할 때, 오버헤드가 있다
  4. StrackTrace 프로퍼티를 사용하면 오버헤드가 크니 필요없으면 사용하지 마라

2016년 5월 25일 수요일

객체지향(OOP), 데이터 지향(DOD) 그리고 동시성

게임 프로그래밍을 하면서 가장 많이 듣는 용어들이지만, 제대로 정리해 본 적이 없다. 이번 기회에 좀 더 심도 깊게 알아본다.
  1. 객체 지향 프로그래밍(OOP)
  2. 데이터 지향 설계(DOD)
  3. 동시성
  먼저, OOP는 시스템에 대한 이해와 변경에 중심을 둔다. SOLID원칙과 UnitTest를 기반으로 하면, 이해하기 쉬우면서 변경에 안정적인 프로그래밍을 할 수 있다. 하지만, OOP를 할 수록 성능에 대한 두려움을 떨치기가 힘들다. 막연하게 Big-O 정도만 고려하면서 작업을 한다.
  DOD는 현재 컴퓨터의 성능 병목이 CPU와 메모리에서 발생하는 것에 주목한다. 그래서, 캐쉬 친화적인 설계에 중심을 둔다. 반복적으로 사용되는 메모리를 선형적인 배열에 두고 처리할 수 있도록 설계를 한다.
  Concurrency Data Design(CDD)는 데이터의 응답 속도에 중심을 둔다. 데이터에 대한 요청이 얼마나 빨리 이뤄져야 하는지를 기반으로 설계를 한다.

결론

제대로 돌아가게 만들고, 최적화는 나중에 한다는 실천법을 적용해보면, OOP를 통해서 시스템을 제대로 돌아가고 이해하기 쉽게 만들고, DOD를 적용하여 성능을 최적화 한다. 그리고 나서 CDD를 통해서 빠른 응답이 필요한 데이터를 추려내는 것이 합리적인 방법이다.
  물론, 어떤 설계는 초기에 결정하지 않으면 변경하기 어려울 수 있다. 그런 부분은 미리 DOD나 CDD를 반영하자. 하지만, 20/80처럼 모든 부분에 적용할 필요는 없다.

참고자료

2016년 1월 28일 목요일

C++에서 deprecated 설정하는 방법

게임을 오래 서비스 하다 보면, 기존 코드를 수정하거나 대체하게 되는데 컴파일러 차원에서 deprecated를 지원해주면 좋다.

방법
  1. #pragma deprecated(identifier, ...)
  2. __declspec(deprecated) void func()
  3. [[deprecated]]
    void func()

1번은 키워드를 지정할 수 있다. 2번은 함수에 지정할 수 있다. 3번은 C++14부터 지원된다.

참고자료
  1. https://msdn.microsoft.com/en-us/library/c8xdzzhh.aspx?f=255&MSPPError=-2147217396
  2. https://msdn.microsoft.com/en-us/library/044swk7y.aspx?f=255&MSPPError=-2147217396
  3. http://josephmansfield.uk/articles/marking-deprecated-c++14.html