마인크래프트 C++용 서버 

https://cuberite.org/



Minecon(마인크래프트 컨퍼런스)에서 클라이언트를 C#으로 만들고 있다고 한다.

   https://www.youtube.com/watch?v=e2MNYIa411k&t=16m30s


현재 움직이는 데모가 있고, 프리뷰는 2017년 초반 예정.

저작자 표시
신고
by 흥배 2016.10.11 08:50

MongoDB as a Service 이용하기

자체적으로 MongoDB 클러스터를 운용하지 않아도 될 가능성이 높다.

https://www.compose.io/mongodb/ 등의 관리 서비스 이용을 검토하자.

 


MongoDB Cloud Manager

https://www.mongodb.com/cloud/cloud-manager

간편하게 감시하려면 MongoDB, Inc.

공식 Cloud Manager( MMS)을 이용하면 좋다.

 

 

NewRelic MongoDB plugin

NewRelic 기반을 준비하고 있다면 https://newrelic.com/mongodb 을 쓰는 것이 좋다.

 

 

Datadog-MongoDB Integration

Datadog을 사용하고 있다면 https://docs.datadoghq.com/integrations/mongodb/ 도 좋다.

 

 

MongoDB Zabbix monitoring plugin

Zabbix의 감시 시스템을 구축하고 있다면 이 플러그 인을 쓰는 것이 좋다.

최신판의 Zabbix 3.0에는 대응하자 않을 것이다(2016년 여름 기준).

https://github.com/nightw/mikoomi-zabbix-mongodb-monitoring

 

 

MongoDB Munin plugin

Munin의 감시 시스템을 구축하고 있다면 이 플러그 인을 쓰는 것이 좋다.

https://github.com/comerford/mongo-munin

 

 

MongoDB Enterprise&Ops Manager

 

 


출처: http://qiita.com/tnir/items/91a946b8abb61390337c

저작자 표시
신고
by 흥배 2016.10.04 08:00

GitHub: https://github.com/Microsoft/vcpkg  

demo 영상: https://www.youtube.com/watch?v=y41WFKbQFTw

 

Visual C++에서 OSS의 라이브러리를 사용하기 위한 패키지 매니저.

 

인스톨 순서는 다음과 같다.

1. https://github.com/Microsoft/vcpkg.git 을 복제.

2. 복제한 디렉토리에서 powershell-exec bypass scripts\bootstrap.ps1 를 실행하여 빌드 한다.

3.  .\vcpkg integrate install 로 사용자 전체에 설치(첫 회는 관리자 권한 필요).

4. 패키지 설치는 아래처럼 한다
..\vcpkg install sdl2 curl

 

 

 

작업 예와 대응 패키지에 대해서:

https://github.com/Microsoft/vcpkg/blob/master/docs/EXAMPLES.md

 

MIT 라이선스.

 

 

출처: https://opcdiary.net/?p=32935

저작자 표시
신고
by 흥배 2016.09.30 08:00

아래 문서에서 일부 번역

Unity tips
http://www.slideshare.net/MakotoItoh/unity-tips

 

 

저작자 표시
신고
by 흥배 2016.09.23 08:00

유니버설 C런타임 라이브러리에 대해서

Visual C++2015에서는 C런타임(CRT) 라이브러리가 크게 리팩터링 되어서 Universal CRT(UCRT)와 그 이외의 런타임(vcruntime140.dll ) 2종류로 구성되어 있다.

 

UCRT에는 널리 이용되는 표준적인 C 런타임 라이브러리 코드가 구현 되어 있으며 안정된 API를 갖추고 있기 때문에 Visual Studio의 릴리스마다 버전 변경할 필요가 없는 Windows OS의 컴포넌트의 일부로서 자리 매김 되어 있다.

 

UCRT Windows 10에는 기본으로 설치되어 있지만 이전 OS에 대해서는 Visual C++2015 재 배포 가능 패키지를 사용하여 설치할 수 있다.

UCRT에 대해서는 아래의 블로그 글을 참조.

Introducing the Universal CRT

https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/  

 

애플리케이션 개발과 배포 시에 상기의 변경에 대해서 의식할 필요는 거의 없으나 CRT 배포 방법으로 "로컬 배치"를 검토하고 있는 경우에는 UCRT의 로컬 배치에 관하여 주의할 필요가 있다.

 

 

Visual C++2015에서 CRT 로컬 배치에 대해서

애플리케이션의 실행에 필요한 C 런타임 라이브러리를 실행 환경에 배포하는 방법으로는 재 배포 가능 패키지 등을 사용하여 시스템 폴더에 런타임을 설치하는 방법이 일반적이며, 이와 같이 시스템 폴더에 런타임을 설치하는 것을 "집중 배치"라 부른다.

 

이에 대한 시스템 요건 등에 의한 집중 배치를 채용하기 어려운 경우는 애플리케이션 배포 처 폴더에 런타임을 배치할 수 있으며 이러한 배치 방법은 "로컬 배치"라 부른다.

 

집중 배치와 로컬 배치에 대한 자세한 내용은 아래의 문서를 참조.

 

배치 방법 선택

https://msdn.microsoft.com/ja-jp/library/ms235316.aspx

 

로컬 배치할 때 Windows 10보다 이전의 OS에서는 전술의 UCRT도 실행 환경에 배치할 필요가 있다는 것에 유의하자. 구체적으로는 Visual Studio 2015를 설치한 환경에서 아래의 폴더에 있는 DLL을 모두 exe와 같은 폴더에 배치할 필요가 있다.

 

<UCRT 배포 원 폴더: 64 bit OS Visual Studio 2015를 설치하고 있는 경우>

(64 bit응용 프로그램용)C:\Program Files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x64

(32 bit응용 프로그램용)C:\Program Files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

 

또한 UCRT 이외의 CRT는 기존대로 redist 폴더 아래에 저장되어 있다.

 

<CRT 배포 원 폴더: 64 bit OS Visual Studio 2015를 설치하고 있는 경우>

(64 bit응용 프로그램용)C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\redist\x64

(32 bit응용 프로그램용)C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\redist\x86

 

 

Visual C++2015 응용 프로그램에서 C 런타임 라이브러리를 로컬 배치할 필요가 있는 경우에는 위 내용에 대해서 유의하자.

 

 

 

 

 

출처: https://blogs.msdn.microsoft.com/jpvsblog/2016/08/04/ucrt_local_deployment/

 

 

 

저작자 표시
신고
by 흥배 2016.09.20 08:00

C++로된 프로그램과 C#으로 만든 프로그램이 서로 패킷을 주고 받는 경우 외부 라이브러리를 사용하거나 C# 기본 기능을 사용한다.
외부 라이브러리로  CGDBuffer, protobuf, msgpack 등을 사용하거나 아니면 아래와 같이 직접 한다.

 

 

(C++)
// 패킷 헤더
struct PktHeader
{
 short PacketID;
 short BodySize;
};

 

// 로그인 패킷
struct PktReqLogin
{
 char UserID[17];
 char UserPW[17]
};

 

struct PktResLogin
{
 short ErrorCode;
};

 

 


[ C++ 서버로 패킷 보낼 때 ]
short packetID, string userID, string userPW;

 

var asciiUserID = System.Text.Encoding.Default.GetBytes(userID); // 멀티바이트 문자열. 유니코드 문자열은  System.Text.Encoding.Unicode.GetBytes
var dataUserID = new byte[16+1];
Buffer.BlockCopy(asciiUserID, 0, dataUserID, 0, asciiUserID.Length);

 

var asciiUserPW = System.Text.Encoding.Default.GetBytes(userPW);
var dataUserPW = new byte[16 + 1];
Buffer.BlockCopy(asciiUserPW, 0, dataUserPW, 0, asciiUserPW.Length);

 

List<byte> dataSource = new List<byte>();
dataSource.AddRange(BitConverter.GetBytes(packetID)); // 패킷 ID
dataSource.AddRange(BitConverter.GetBytes((Int16)(dataUserID.Length + dataUserPW.Length))); // 패킷 데이터(body)의 크기
dataSource.AddRange(dataUserID);
dataSource.AddRange(dataUserPW);

 

var send_data = dataSource.ToArray() // byte[]로 변환

 

 

[ C++ 서버에서 패킷 받았을 때 ]
var recvData = Network.Receive(); // receive로 데이터 받음

 

var packet = new PacketData();
packet.PacketID = BitConverter.ToInt16(recvData, 0);
packet.DataSize = BitConverter.ToInt16(recvData, 2);
packet.BodyData = new byte[packet.DataSize];

 

var errorCode = BitConverter.ToInt16(packet.BodyData, 0);
      

 

struct PacketData
{
 public Int16 PacketID;
 public Int16 DataSize;
 public byte[] BodyData;
}

 

 

 

이것 이외에도 방식은 있으니 구글링도 해보기 바란다

 

저작자 표시
신고
by 흥배 2016.09.05 08:00

unity의 메모리 최적화 관련 글을 보면 foreach를 사용하지 마라는 것을 자주 볼 수 있다.

이유는 foreach에서 메모리 할당을 발생시켜서 GC를 유발하기 때문이다.

 

이것은 C# 언어 자체의 문제가 아니고 mono쪽의 구현 문제이다.

C# 스펙 문서에도 foreach 최적화에 대해 언급이 있는데 mono에서 제대로 구현하지 않았다.

MS의 닷넷프레임워크에서는 이런 문제가 없다. 그리고 근래의 mono에도 없다.

 

unity는 오래된 버전의 mono를 사용해서 foreach가 문제가 된다.

 

다행히 얼마 전에 unity mono를 업그레이드 하겠다는 계획을 발표했다. 현재 개발자들이 테스트할 수 있는 버전이 나왔고 지금은 컴파일러 부분만 개선되었다(즉 라이브러리 업그레이드는 아직이다).

 

http://forum.unity3d.com/forums/experimental-scripting-previews.107/

이것을 설치해서 foreach를 사용해보면 문제가 해결된 것을 볼 수 있다.

 

장래에 unity를 공부할 때 오래된 글만 보면 실수 할 수 있으니 unity가 새 버전이 나올 때마다 잘 살펴보기 바란다.

 

 

출처: http://neue.cc/2016/08/05_537.html

번역 http://sitetrans.naver.net/?rel=http://neue.cc/2016/08/05_537.html&srcLang=ja&tarLang=ko

 

 

저작자 표시
신고
by 흥배 2016.08.25 08:00

Google Maps API

 

Lunar Unity Mobile Console

Unity 모바일 버전의 로그 툴.

Unity에서 만든 Mobile 용으로 최적화된 툴.

http://japan.unity3d.com/

 

Touch Script

Unity 멀티 터지 지원 FrameWork.

https://www.assetstore.unity3d.com/jp/#!/content/7394

http://touchscript.github.io/

 

Zenject

Unity의 의존 관계 등을 자동으로 해결 해주는 프레임워크.

https://github.com/modesttree/Zenject#theory

 

LeanTween

UnityTween 애니메이션을 만들기 위한 엔진.

https://www.assetstore.unity3d.com/jp/#!/content/3595

https://github.com/dentedpixel/LeanTween

 

Newtonsoft JSON

주로 C#에서 JSON을 다룰 때 사용하는 라이브러리.

 

 

 

출처: http://qiita.com/NoriakiOshita/items/29c56fe39e21b12d1527

 

 

저작자 표시
신고
by 흥배 2016.08.22 08:00
C++

https://www.infoq.com/news/2016/07/cpp17-feature-list-complete

핀란드 Oulu 미팅에서 ISO C++ 위원회는 C++17의 기능 목록 정의를 완료했다.

미팅에서는 다수의 새로운 언어 기능과 라이브러리 기능이 승인됐다.

여기에는 constexpr iftemplate<auto>, 구조화 제한 등이 포함 되었다.

 

위원회 멤버 Jens Weller씨에 의하면 이로써 기능 리스트는 종료 되었고, 리뷰 기간이 시작된다고 한다.

"다음 2회 미팅에서는 주로 각국 기관에 의해서 이루어진 검토, 피드백, 과제에 대하여 다룹니다.표준에 새로운 것을 추가하는 것은 없지만 마이너 혹은 중요한 변경이 더해질 가능성이 있습니다."

 

 

 

 

본인은 2009년부터 지금의 C++11을 공부했는데 2011년에 C++11이 나온 후 벌써 5년이나 흘렀고 이제 1년 정도 더 있으면 새로운 표준인 C++17이 나온다.

 

C++ 프로그래밍을 하는데 C++11이나 차기 표준인 C++17이 꼭 필요한 것은 아니지만 이 좋은 기능을 사용하지 않는 것은 엄청난 낭비라고 생각한다(물론 사용하고 싶지만 레거시 코드 때문에 사용 못하는 경우는 어쩔 수 없지만).

 

아직 C++11도 공부하지 않은 사람들이 꽤 있는 것으로 안다.

내년에 17까지 나오면 새로운 C++을 따라가기가 더 벅차질 테니 지금부터라도 조금씩 C++11을 공부해서 내년에는 C++17도 순조롭게 이어서 공부하기 바란다.

 

근래에 나온 C++ 책을 통해서 공부할 수 있고 아니면 구글링(특히 네이버)를 통해서도 C++11에 대해서 공부할 수 있으니 공부하는데 전혀 어려움은 없을 것이다.

 

저작자 표시
신고
by 흥배 2016.08.16 08:00

C#은 배열의 오버런을 방지하기 위해 자동으로 for 문으로 배열을 순회할 때 자동으로 경계 조사를 한다.

문제는 배열의 크기를 확실하게 알고 배열 경계를 넘지 않도록 프로그래머 주의를 해도 컴파일러가 경계 조사 코드를 만들어 버려서 성능 측면에서 손해를 볼 수 있다.

 

배열의 경계 조사를 하지 않고 싶다면 for 문에서 조건 검사를 배열의 Length 멤버를 사용한다

 

static void Test_SimpleAscend(int[] a) {

           for (int i = 0; i < a.Length; i++)

                     a[i] = i;  // We get this.

}

 



좀 더 자세한 내용은 아래 링크를 참조

https://blogs.msdn.microsoft.com/clrcodegeneration/2009/08/13/array-bounds-check-elimination-in-the-clr/

 

저작자 표시
신고
by 흥배 2016.08.08 08:00
| 1 2 3 4 5 6 ··· 71 |