HTMLInputElement.files를 리셋하는 방법

  input[type=file,multiple] 요소가 있고, 파일이 선택될 때마다(onchange) 큐에 파일을 쌓고 input 요소는 초기화해야 하는 경우가 생겼습니다.   처음엔 HTMLFormElelment.reset()으로 해결을 할까 했는데, 그렇게 되면 다른 폼 구성요소들도 모두 초기화가 되기 때문에 안 되겠더라고요.   그래서 혹시나 하고 input 요소의 value를 ""(empty string)으로 설정하니 files 필드 역시 비워지는 것을 확인 했습니다.   즉, value를 비워버리면 files 필드 역시 비워진다는 의미입니다. 생각보다 간단하죠? 저도 그래서 놀랬습니다.

ASP.NET IFormFile 패러미터에 항상 null이 넘어온다면 고려해야 할 것

  <form>  엘리먼트의 enctype 이 multipart/form-data 로 지정되었는지 확인하고, 안 되어있다면 해당 값으로 변경.   TagHelper를 사용해도 마찬가지.  기본값은 enctype이 지정되지 않으므로 htmlAttributes 에 new { enctype = "multipart/form-data" } 를 넘길 것.

JetBrains IDE에서도 GitHub Copilot을 사용할 수 있습니다.

이미지
    Copilot이 처음 나오고 얼마 지나지 않았을 때 다른 IDE에서 사용이 가능한지 찾아봤지만 VSCode에서만 사용 가능하다는 정보를 접하고 이후 다시 찾아보지 않고 있었습니다.   그러다가 오늘 새벽에 Copilot이 절실해지는 순간이 찾아왔고, 전 예전에 접했던 정보를 바탕으로 당연히 Rider에 Copilot이 없을거라 생각해 VSCode를 키고 작업을 하고 있었습니다...만,   불편하면 방법을 찾는 게 제 성격인지라 JetBrains의 강력한 FileLayout기능을, 심지어 사용자 정의한 기능을 사용할 수 없는 것에 열이 받아서 JetBrains Rider Copilot으로 검색해봤는데...! JetBrains 플러그인에 대놓고 있었다.   JetBrains 플러그인 페이지 에 대놓고, 당당히, 평점 4.5에 가까이, 작년 10월 29일부터 등록되어 있더군요.   기본적으로 VSCode의 Copilot과 크게 다르지 않고, IDE가 다르므로 UI의 차이점은 다소 존재합니다만, 거기서 거기입니다. 잘 활용하면 코딩 속도가 어마무시하게 빨라진다는 점은 당연히 같으므로 기존에 VSCode에서 사용하시던 분이라면 꼭 설치해 사용하시기 바랍니다.

Windows 10/11 높은 DPC latency 문제의 원인이 뭘까

 High DPC Latency Problem   윈도우 10/11에서 높은 DPC Latency로 인한 불편함을 겪는 빈도가 작년부터 갑자기 급증했습니다. LatencyMon등으로 확인해보면 주로 NVidia 드라이버, 혹은 NTFS 드라이버 쪽에서, 혹은 둘 다에서 높은 DPC 레이턴시가 확인됩니다.   이로 인한 증상으로는, 당연히 전체적인 Windows의 성능 저하가 있으며 체감되는(짜증나는) 증상으로는 Windows Explorer 혹은 일부 Windows Forms 앱, 대부분의 WPF 앱을 드래그/리사이즈 할 때 마우스에 렉이 걸리며 끌리는 현상이 발생하고, 그보다 더 심하게 드래그/리사이즈 하는 윈도우가 미친듯이 늦게 반응하는 현상이 있습니다. 원인 파악   저는 작년 6월 혹은 7월부터 이러한 증상을 인지하기 시작했습니다. 사실 생각해보면 재작년 말 쯤부터 이런 증상이 있었던 것 같긴 한데 그건 정확하지 않고, 확실히 아 뭔가 있구나  하고 인지한 것은 위 시각부터입니다.   인지하게 된 계기는 Windows 11 프리뷰 버전을 설치하면서 발생한 마우스 렉 및 Windows Explorer, 일부 Windows Forms app, 대부분의 WPF app의 리사이즈/드래그시 발생하는 끌림 현상을 목격하면서 이러한 문제가 있다는 것을 인지하게 됐습니다. 이런 증상이 무엇 때문인지 알 수 있게 도와주는 프로그램을 찾다가 LatencyMon 을 알게 되었고, 해당 프로그램을 돌려보니 엔비디아 관련 드라이버 또는 NTFS 관련 드라이버, NTOS 관련 드라이버에서 평균 3ms, 최대 200ms의 DPC Latency가 발생했습니다.   처음에는 Windows 11 문제인 줄 알고 Windows 10으로 롤백했었고, 실제로 롤백한 뒤 얼마동안은 괜찮았기에 Windows 10을 쭉 사용하려 했으나 얼마 지나지 않아 Windows 10에서도 비슷한  증상이 발생하기 시작했습니다. 여기서 비...

Acrobat DC 설치 실패 코드 1603

방금 뱅킹 사이트에서 다운로드한 PDF 파일을 엑셀에 삽입하려 하니 암호가 걸려있어서 안 된다고 하더군요. 그래서 암호를 해제하고자 Acrobat DC를 오랜만에 설치하려 하는데, 계속 설치 실패가 뜨더라고요. Third party payload installer Adobe Acrobat\Setup.exe failed with exit code: 1603   그냥 일시적 오류인가 싶어 한 번 재시도를 해봐도 똑같은 오류가 나오길래 해당 키워드로 검색을 해보니, Print Spooler 서비스가 꺼져 있으면 발생하는 문제 라고 합니다.   그래서 services.msc 에서 Print Spooler를 사용 설정하고 키니 정상적으로 설치되네요. 심지어 설치 속도도 매우 빠릅니다. 아마 서비스 상태를 확인하는 타임아웃이 길어서 실패하기까지 오래 걸렸나 봅니다.

Flags Attribute를 사용해보세요.

개발 중에는 때때로 하나의 enum 타입을 가지고 여러 value에 대해 분기해 처리해야 하는 경우가 생깁니다. public enum EnumExample { A, B, C } 위와 같은 enum 타입이 있을 때, 상황이 항상 A이거나, B이거나, C이거나 셋 중 하나로 끝나면 매우 바람직하겠지만 대개 그렇지 않죠. A이거나, A와 B이거나, A와 C거나, B거나, ... 이런 상황이 자주 나옵니다. 그럼 어떻게 코딩해야 할까요? 아래처럼? if (value == EnumExample.A) { // ... } else if (value == EnumExample.A && value2 == EnumExample.B) { // ... } 말이 안 되죠. System.FlagsAttribute Class MSDN 문서 에 따르면, 이 어트리뷰트가 적용된 enum은 비트 필드로 취급될 수 있다고 합니다. 즉, C언어 등에서 사용되는 비트 필드마냥 사용할 수 있게 된다는 뜻이죠. 다음 예시를 보세요. [Flags] public enum FlagsExample { NONE = 0, A = 1, B = 2, C = 4, D = 8, E = 16, } 위와 같이 선언된 enum은 각각의 값이 비트 필드로 취급됩니다. 즉 0은 0000 0000 0000 0000, A는 0000 0000 0000 0001, B는 0000 0000 0000 0010, C는 0000 0000 0000 0100, D는 0000 0000 0000 1000, E는 0000 0000 0001 0000과 같은 식으로 생각하시면 됩니다. 이렇게 되면 어떤 방식의 코딩이 가능해지냐? enum 값에 대한 비트 연산이 가능해집니다. var abc = FlagsExample.A | FlagsExample.B | FlagsExample.C; // abc = A, B, C 따라서 위와 같이 하나의 enum 변수에 여러...

Visual Studio 2022에서 현재 열린 문서를 솔루션 탐색기에 표시하는 몇 가지 방법

이미지
제목에는 VS Code와 구분짓기 위해 VS 2022를 사용했으나 Visual Studio 2019, 2017 모두 사용 가능한 방법입니다. 첫 번째 방법: 솔루션 탐색기의 활성 문서 동기화 버튼 수동으로 활성 문서 동기화 버튼을 클릭해 동기화하는 방법입니다. 해당 버튼을 누르면 현재 에디터에 열려있는 문서 [1] 가 솔루션 탐색기에 동기화됩니다. 두 번째 방법: 활성 문서 동기화 단축키 사용 마우스를 사용할 필요 없이 단축키를 사용해 동기화하는 방법입니다. 기본 단축키는 Ctrl+[, Ctrl+S 또는 Ctrl+[, S 입니다. 저는 이 바로가기 키가 불편해 Ctrl+Shift+Alt+[, Ctrl+ShiftAlt+; 로 변경해 사용하고 있습니다. 여기서 지정된 단축키를 누르면 첫 번째 방법 의 동기화 버튼을 클릭한 것과 같은 액션이 실행됩니다. 주의할 점 은, 일부 단축키와 충돌이 날 수 있으니 저처럼 사용되지 않는 단축키 위주로 조합하시기 바랍니다. 예를 들어 단축키 조합에  Ctrl+; (기본값: 솔루션 탐색기 검색)과 같은 키가 조합되어 있을 경우엔 작동하지 않을 수 있습니다. 세 번째 방법: 항상 자동으로 동기화 이 방법은 항상 현재 활성화된 문서가 솔루션 탐색기에 자동으로 동기화되도록 설정합니다. 그렇기 때문에 이 옵션이 켜져있을 경우 첫 번째 방법의 활성 문서 동기화 버튼이 표시되지 않습니다. 이 옵션을 키기 위해서는 옵션 - 프로젝트 및 솔루션 - 일반 메뉴의 솔루션 탐색기에서 활성화된 항목 추적 옵션을 체크하시면 됩니다. 포커스된 문서. 즉, 분할 창일 경우에는 마지막으로 활성화된 문서. ↩︎