티스토리 스킨을 보면 '인덱스(index)'와 '퍼머링크(permalink)' 라는 것이 있습니다. (참고 : 티스토리 스킨 가이드 - 글 ) 이 둘은 뭔지 알아보겠습니다. 1. 인덱스(index) 페이지 인덱스 페이지는 '목록 구성 요소'가 '목록 + 내용' 혹은 '내용'일 때 나오는 페이지를 의미합니다. 홈을 이렇게 설정하면 아래와 같이 목록(포스트 리스트)과 포스트 내용이 함께 나옵니다. 빨간 네모를 보면 인덱스 페이지 치환자가 동작한 것을 알 수 있습니다. 2. 퍼머링크 (Permalink) '고유 주소'라는 의미가 있는데..... 그냥 포스트 내용을 의미합니다. 포스트를 클릭해서 들어가거나 주소를 입력해서 들어가면 볼 수 있는 페이지입니다. 3. 필요한가? 이런 이유로 구분되어 있지만 보통은 퍼..
블로그를 이전할 계획 중이라 티스토리 스킨을 만질 생각이 없었는데..... 티스토리의 몇 가지 개편들과 부트스트랩의 다음 버전이 나오면서 손을 안 댈 수 없는 상황이 되었네요. 그래서 일단 기존 '부트스트랩(bootstrap) + 티스토리(tistory)' 샘플을 업데이트하고 있습니다. 참고 : 티스토리 부트스트랩 테스트 부트스트랩 기본 예제인 "Carousel" 티스토리 기본 스킨인 "Whatever"를 기반으로 작업하였습니다. 1. 부트스트랩 5 에서 변경된 내용 1) 5버전으로 버전업 되면서 기본 아이콘 세트가 제외되었습니다. 용량도 많이 차지하면서 다른 아이콘 세트를 사용하는 사람이 많아서 제외된 거 같네요. 원하는 아이콘 세트가 있으면 자유롭게 넣을 수 있지만 일단 이 샘플에서는 아이콘을 모두 ..
'SocketAsyncEventArgs'의 이해를 위한 글을 여러 번 썼었는데..... '.NET 5' 이후로는 'SocketAsyncEventArgs'가 이전과 살짝 다른 동작을 합니다. 그래서 '.NET 5'로 넘어가기 전에 총정리 겸 단계별 샘플을 만들었습니다. 연관글 영역 0. 구조 각 샘플은 거의 같은 구조로 되어 있습니다. 샘플 소스 : dang-gun/DGSocketAssist/ dang-gun/DGSocketAssist/DGSocketAssist1/ 라이브러리 형태로 만들어져 있어 "DGSocketAssist_Server", "DGSocketAssist_Client"만 참조하여 서버/클라이언트 프로그램을 만들 수 있습니다. 1. 'DGSocketAssist1_Server' 이해하기 'DGS..
이전 포스팅에서 ASP.NET Core 프로젝트에 NPM을 올리는 작업을 했습니다. 이 프로젝트에서 이것을 제대로 쓰려면 결국 js파일과 css(여기서는 sass)를 빌드(혹은 미니마이징)해서 웹페이지에서 사용해야 합니다. 이 포스팅은 webpack와 sass를 이용하여 js,css파일을 출력하고 MVC를 통해 이 파일을 사용하도록 하겠습니다. [ASP.NET Core 6] ASP.NET에 NPM 세팅하기 (feat. Task Runner) [ASP.NET Core 6] ASP.NET MVC + NPM (feat. webpack, sass) 1. 프로젝트 생성 ASP.NET Core MVC로 프로젝트를 생성한 후 이전 포스팅에서처럼 npm을 설정합니다. package.json 설정은 다음과 같습니다. 1..
기본템플릿에는 'startup.cs'가 없습니다. 모든 기능이 'Program.cs'하나로 작동할 수 있도록 구성되어 있습니다. 왜 없어졌는가? 덕지덕지 연결된 구성을 간단하게 코드 몇 줄로 구성할 수 있도록 한 것입니다. (참고 : Andrew Lock | .NET Escapades - Comparing WebApplicationBuilder to the Generic Host ) 'Program.cs'에서 'Startup.cs'로 진입하는 구조는 왜 저런 구조가 되었는지를 이해하지 않으면 쓸데없이 파일만 2개로 나눈 듯한 느낌을 받게 되죠. 이렇게 기존 구조가 제거된 구문을 '최 상위문(top-level statements)'이라고 합니다. (참고 : MS Learn - 자습서: 배우는 동안 최상위 ..
별생각 없이 콘솔로 프로그램을 만들었는데.... 기본적으로 있는 콘솔 모드들 때문에 이상한 동작을 하는 경우가 있습니다. 대표적인 것이 "빠른 편집 모드(Quick Edit Mode)"라는 것인데 콘솔 창을 클릭하거나 드레그하면 응용프로그램이 멈추는 현상입니다. 이 모드를 바꾸는 방법을 알아봅시다. 연관글 영역 1. WinApi를 사용해야 한다. 몇 가지 방법들이 있지만 결국은 WinApi를 이용하는 것이 가장 편합니다. WinApi로 콘솔 모드를 변경하려면 1) 디바이스(여기서는 콘솔)의 핸들을 받아서 2) 콘솔 모드 설정값을 받아온 뒤 3) 받은 설정값이 원하는 설정을 추가(혹은 제거)하고 4) 콘솔 모드 설정값을 다시 설정합니다. 설정값이 uint(UInt32)로 된 플래그(flag) 값이라 비트연..
다른 포스팅에서 타이머의 정밀도 문제로 FPS(Frames Per Second)를 구하면 정확하지 않다고 이야기를 했었습니다. (참고 : [.NET] 게임 루프(Game Loop)를 구현할 때는 'Environment.TickCount'를 사용하면 안 된다. ) 스톱워치(Stopwatch)를 이용한 정밀 타이머를 만들어 보고, 이것을 이용하여 둘의 차이가 얼마나 나는지 알아봅시다. 1. 타이머 구현 스톱워치 타이머를 구현하려면 1) 무한 루프를 돌리고 2) 우리가 원하는 간격에 이벤트를 보내는 3) 비동기 쓰래드를 만들어야 합니다. 구현은 아래와 같이 합니다. public async Task Start() { bool bLoop = true; long nLastTime = 0; Stopwatch sw =..
언제부터인가 비주얼 스튜디오에 핫 리로드(Hot-Reload) 라는 것이 생겼습니다. 소스 코드를 수정하면 바로 화면을 갱신하여 보여주는 기능입니다. 보통 ASP.NET와 WPF에서 사용하는 기능인데.... 이게 저장하면 바로 새로고침을 해버려서 참 불편한 기능입니다. 물론 순수하게 UI만 수정하는 경우에는 쓸만합니다. 옵션의 위치 도구 > 옵션 > 프로젝트 및 솔루션 > ASP.NET Core 에서 - CSS 핫 다시 로드 - 자동 빌드 및 새로 고침 옵션 을 원하는 대로 수정하시면 됩니다. '자동 빌드 및 새로 고침 옵션'을 보면 저장만 해도 지 혼자 빌드한다는걸 알 수 있습니다;;;; 전 마음 편하게 없음으로 바꿨습니다 ㅋ 마무리 WPF에서는 엄청 유용한데(거긴 자동 빌드를 안 하니까...) ASP..
.NET으로 사운드 파일을 재생하려면 보통 'SoundPlayer'를 사용합니다. 근데 이놈은 한 번에 하나의 파일만 재생이 가능합니다. 여러 파일을 재생하려면 'DirectX SDK', 'Windows Media Player SDK', 'NAudio' 같은 외부 라이브러리를 이용하거나 'WinAPI'를 이용해야 합니다. 이 포스팅에서는 'WinAPI'의 'mciSendString'를 이용하여 재생하겠습니다. 1. 'SoundPlayer'를 사용해 보자 'SoundPlayer'를 사용하여 파일을 재생해봅시다. 아래와 같이 개체를 초기화하고 private SoundPlayer _soundPlayer1; this._soundPlayer1 = new SoundPlayer(); this._soundPlayer1..
Environment.TickCount를 써서 게임 루프(Game Loop)를 만들었는데 계산한 FPS와 다르게 나옵니다??? 1. 'Environment.TickCount'의 문제원인을 찾던 중 발견한 내용MS Docs - <a href="https://docs.microsoft.com/ko-kr/dotnet/api/system.environment.tickcount?view=net-6..