320x100

NDC/Dev 6

[NDC 2016] 구형맵에서는 어떻게 길을 찾아야 하나요?

Recast: 언리얼 엔진에서 내비게이션 메시로 사용하고 있는 오픈 소스 라이브러리 장점 - 메시 빌드 속도 - 길찾기 속도 - 유연한 셋팅 단점 - 근시로 인한 오차 - 에이전트 검색 속도 - 난해한 셋팅 Detour: Recast로 생성된 메시에서 길을 찾아주는 라이브러리 DetourCrowd: 에이전트들간의 충돌 회피를 하는 알고리즘 DetourTileCache: 동적 메시 생성을 위한 라이브러리 Recast: 내비게이션 메시를 생성하는 부분 RecastDemo: 비주얼라이제이션을 포함한 툴 Recast 내비게이션 메시는 여러 개의 폴리곤들과 그 폴리곤들 사이의 연결 정보로 구성되어 있음 1. 길을 찾을 때 폴리곤의 각 변의 중점을 따라 길을 찾음 2. 찾은 길의 폴리곤을 따라서 길을 똑바르게 편다..

NDC/Dev 2023.01.17

[NDC 2016] 유니티, iOS에서 LINQ 사용하기

LINK(Language Integrated Query): 데이터 저장소 종류와 관계 없이 저장소에 일관성 있는 인터페이스로 질의 - 동일한 인터페이스 사용 - 다양하고 편리한 기능 (Max, Min, Average, OrderBy, First ...) - 지연 실행 (성능 이점) - 간결한 High Level 코드 품질 - 컴파일 타임 에러 체크 int[] numbers = { 5, 10, 8, 3, 6, 12 }; Query syntax var result = from num in numbers where num % 2 == 0 orderby num select num * 2; Method syntax var result = numbers .Where(num => num % 2 == 0) .Order..

NDC/Dev 2023.01.15

[NDC 2014] 멀티쓰레드 프로그래밍이 왜이리 힘드나요?

멀티쓰레드 프로그래밍의 어려움 - Data Race: 2를 5천만번 더했는데 1억이 안나옴 -> lock을 사용해 해결 - 성능: 싱글 쓰레드보다 느려짐 -> lock을 쓰지 말자 - 컴파일러: 변수를 참조했는데 무시 -> volatile 키워드 또는 atomic으로 해결 - CPU: 프로그램 실행 순서를 자기 마음대로 변조 -> asm mfence 또는 atomic으로 해결 Lock-Free 알고리즘이란? 여러 개의 쓰레드에서 동시에 호출했을 때에도 정해진 단위 시간마다 적어도 한 개의 호출이 완료되는 알고리즘 호출이 다른 쓰레드와 충돌했을 경우 적어도 하나의 승자가 있어서, 승자는 delay 없이 완료 된다. LOCK을 사용하지 않는다고 해서 모두가 lock-free 알고리즘은 아니며, LOCK을 사..

NDC/Dev 2022.10.18

[NDC 2014] 파이썬과 친구들

웹 프레임 워크 - 종류는 꽤 많다. Django, web.py, CherryPy, web2py, Bottle, Flask, ... - 일반적인 웹 프레임워크에서 제공하는 많은 기능이 게임 서버에선 대부분 불필요 하므로 마이크로 프레임워크가 좋다. Flask, Bottle등 Flask $ pip install Flask from flask import Flask app = Flask() @app.rout('/') def hello(): return 'Hello World!' app.run(debug=True) # http://localhost:8080/ from flask import request, make_response @app.route('/login') def login(): user_id = ..

NDC/Dev 2021.12.06

[NDC2013] 테스트 꾸준히 잘하는 법

개발자 테스트와 테스트 자동화의 중요성 모듈 품질이 좋아짐 차후 모듈 수정이나 개선시에 개발 속도 향상 테스트를 꾸준히 잘하려면? 디자인과 구현이 잘 되어 있어야 한다(의존성을 줄이는 것이 핵심) 테스트를 꼭 해야 하는건 아니다 (Where, Oh Where To Test) 어느 레벨에서 테스트를 진행해야 하는가? 시스템 테스트가 좋은가? 유닛 테스트가 좋은가? => 핵심은 Cost(비용), Stability(안정성), Reliability(신뢰성) Cost(비용) 테스트 작성 비용 유지보수 비용 테스트 수행 시간 테스트를 적고 빠르게 만들 수록 좋다 => 테스트 스크립트 최소화, Mock 사용 최소화 Stability(안정성) 잘못된 피드백의 비용 Stable한 결과를 얻는데 드는 비용 고려 => UI..

NDC/Dev 2021.11.14

[NDC2013] 라이브 프로젝트에서 C++로 테스트 주도 개발하기

GoogleTest를 써라 TEST(AccountTest, ConstructorWidthBalance) { Account account = Account(10000); if (account.Balance() != 10000) { FAIL(); } } 장점 xUnit을 포괄하는 기능 GoogleMock과의 연계 Google이 개발 의존성을 끊어라 TEST(Player, Fall) { Player player; player.SetZ(1000); player.Fall(1.0f); EXPECT_EQ(900, player.GetZ()); } Player::Player(Server* s, string id) { s->ReceivePlayerInfo(this, id); } Player 객체를 생성할 때는 단독으로 생..

NDC/Dev 2021.11.13
320x100