RSS 스콧 한스만의 블로그 팔로우 제공된 링크는 미국의 작가이자 학교에서 컴퓨터 과학을 옹호하며, 수년 동안 마이크로소프트 개발자 커뮤니티 프로그램 공동 부의장인 스콧 한스만(Scott Hanselman)의 개인 블로그 사이트에 대한 것입니다. 이 블로그는 주로 컴퓨터 프로그래밍, 소프트웨어 개발 및 기술의 최신 동향에 대한 다양한 측면을 논의하는 데 중점을 둡니다. RSS feeds.hanselman.com Scott Hanselman's Blog hanselman.com
우주선이 죽은 건가요? 다음은 제공된 텍스트의 한국어 번역입니다.---"저자는 일본 목공예로 대표되는 전통적인 장인 정신과 아버지의 개인 작업실 활동에 대한 감사를 표하며 글을 시작합니다. 그는 이러한 직접적인 수작업 창작 활동을 IKEA 가구와 같은 대량 생산된 품목과 대조합니다. 저자는 35년간 전문적으로 코딩을 해왔음에도 불구하고, 현대 컴퓨팅 시스템이 여전히 지나치게 복잡하며 기계와 인간 모두 계속해서 오류를 범하고 있다고 지적합니다. 이러한 지속적인 복잡성은 어셈블리 언어에서 C로의 전환, 그리고 구문 강조(syntax highlighting), 인텔리센스(IntelliSense), 그리고 스택 오버플로우(Stack Overflow) 기반 개발의 광범위한 사용과 같은 프로그래밍의 역사적 기술 변화와 비교됩니다.핵심 주장은 기술 발전과 관계없이 진정한 가치는 여전히 좋은 취향, 장인 정신, 그리고 건전한 인간적 판단에 있다는 것입니다. 응집력 있는 시스템을 구축하는 것은 인테리어 디자인과 유사하게 묘사되는데, 이는 숙련된 조립이 필요한 사소하지 않은 작업입니다. 저자는 단순한 도구와 '일회성' 소프트웨어 솔루션에 현혹되는 것에 대해 경고하며, 개발자들이 더 이상 입출력(I/O) 속도에 제약을 받지 않음에도 불구하고 소프트웨어 개발은 본질적으로 여전히 어렵다는 점을 강조합니다.그는 서둘러 개발된 결과물로 인해 발생한 '엉성함(slop)'을 정리하는 데 상당한 미래 작업이 수반될 것이라고 예측합니다. 그러나 저자는 깊은 이해를 가진 사람들에게는 AI가 증강된 개발이 놀라운 결과를 약속한다고 믿습니다. 그는 현재 이러한 시대적 전환기에 학습 과정을 즐기고 있으며, 소프트웨어 개발의 근본적인 장인 정신은 지속된다는 점을 확인하고 있습니다." Is the craft dead? feeds.hanselman.com
자동으로 Azure 신뢰 서명, dotnet sign 및 GitHub Actions를 사용하여 Windows EXE 서명 작성자는 Windows Edge Light 앱을 만들었고, Mac Tahoe의 Edge Light 기능과 유사한 가상 링 라이트 기능을 추가하고 싶었습니다. 앱의 신뢰도를 높이기 위해 Microsoft에서 제공하는 클라우드 기반 코드 서명 서비스인 Azure Trusted Signing을 사용하기로 결정했습니다. 이 서비스는 자동 인증서 관리, GitHub Actions 통합을 지원하며 Windows에서 신뢰할 수 있어 SmartScreen 경고를 방지하는 데 도움이 됩니다. 작성자는 Azure Trusted Signing이 기존 코드 서명 방식보다 번거로움이 덜했지만, 여전히 설정 및 구성이 필요하다는 것을 알게 되었습니다. 서비스를 사용하기 위해 리소스 공급자를 등록하고, 신뢰할 수 있는 서명 계정을 만들고, 신원 유효성 검사를 완료하고, 인증서 프로필을 생성해야 했습니다. 그런 다음 Azure CLI를 사용하여 올바른 역할을 할당하고 올바른 범위로 로그인했으며, 실행 파일을 서명하기 위해 서명 도구를 설치했습니다. 또한 서명 권한이 있는 서비스 주체를 생성하여 GitHub Actions를 통한 자동 서명을 설정했습니다. 이 과정에는 설정 확인 및 일반적인 문제 해결을 포함한 여러 단계가 포함되었습니다. 전반적으로 작성자는 Azure Trusted Signing이 앱에 신뢰를 더하는 데 유용한 도구이지만, 설정 및 구성에는 어느 정도의 기술적 전문 지식이 필요하다는 것을 알게 되었습니다. Azure Trusted Signing에 대한 작성자의 경험은 대체로 긍정적이었지만, 일반적인 문제를 극복하기 위해서는 세심한 주의와 문제 해결이 필요하다는 점을 강조했습니다. Automatically Signing a Windows EXE with Azure Trusted Signing, dotnet sign, and GitHub Actions feeds.hanselman.com
OBS, Discord 및 웹사이트에서 무작위로 일시 중지되는 웹캠 - LSVCam 및 TikTok Studio 웹캠 관련 문제를 겪은 작성자는 이 문제를 해결하기 위해 다음과 같은 과정을 거쳤습니다.작성자는 웹캠을 사용할 때 정기적으로 일시정지 현상이 발생하는 문제를 겪었습니다. 이 문제는 OBS와 같은 스트리밍 애플리케이션에서도 발생했습니다. 작성자는 이 문제가 "LSVCam"이라는 가상 카메라와 관련이 있음을 발견했습니다. 이 가상 카메라는 윈도우 장치 목록에 표시되었지만 일부 애플리케이션에서는 인식되지 않았습니다.이 문제는 TikTok Live Studio와 관련이 있음을 작성자는 발견했습니다. TikTok Live Studio는 가상 카메라를 설치하지만, 이 가상 카메라는 완전히 설치되지 않거나 열거 과정에서 중단될 수 있습니다.작성자는 PowerShell 스크립트와 자바스크립트 코드 조각을 사용하여 연결된 장치를 열거하고 웹캠을 열거했습니다. 이 과정에서 "LSVCam"이 TikTok Live Studio 디렉토리의 DLL 파일과 연결되어 있음을 발견했습니다. 이 가상 카메라는 웹캠 액세스를 사용하는 다양한 애플리케이션에서 오류와 중단을 일으킬 수 있습니다.작성자는 "LSVCam"과 관련된 레지스트리 키를 발견하고 이 키를 삭제하여 문제를 해결할 수 있음을 발견했습니다. 그러나 이 해결책은 일시적이며, TikTok Live Studio를 실행할 때마다 레지스트리 키가 다시 나타납니다. 작성자는 이 문제가 TikTok Live Studio의 가상 카메라 구현에서 발생한 회귀 오류라고 믿습니다.작성자는 이 정보를 공유하여 유사한 웹캠 문제를 겪는 다른 사용자들에게 도움을 주고자 했습니다. 또한, TikTok Studio 개발 팀이 이 문제를 인식하고 해결할 수 있도록 희망했습니다. 레지스트리 키를 삭제하는 것은 개발자들이 적절한 해결책을 제공할 때까지 일시적인 해결책입니다. Webcam randomly pausing in OBS, Discord, and websites - LSVCam and TikTok Studio feeds.hanselman.com
오픈 소스 DOS 4 마이크로소프트는 8086 어셈블리 코드로 작성된 역사적인 운영 체제인 MS-DOS 4.00의 소스 코드를 공개했습니다. 이 공개는 IBM과의 협력이며 마이크로소프트의 오픈 이노베이션 이니셔티브의 일부입니다. 이 소스 코드는 연구원인 코너 "스타프로스트" 하이드가 레이 오지에게 보낸 미출시 베타 바이너리에서 발견되었습니다. 마이크로소프트와 IBM은 이 공개가 운영 체제 역사에서 가치 있는 부분이라고 믿습니다. 이 공개에는 MS-DOS 4.00의 소스 코드, 베타 바이너리, 문서, 디스크 이미지 등이 포함되어 있습니다. 마이크로소프트와 IBM은 추가 자료를 찾기 위해 아카이브를 계속 탐색하고 있습니다. 소스 코드는 깃허브에서 접근할 수 있습니다. 이 소프트웨어는 원래 IBM PC XT, 펜티엄 컴퓨터 또는 PCem과 86box 에뮬레이터에서 실행할 수 있습니다. 이 공개는 원래 저자들의 기여를 인정하며, 일부 저자들은 여전히 마이크로소프트와 IBM에서 일하고 있습니다. Open Sourcing DOS 4 feeds.hanselman.com
.NET 8로 업데이트하고, IHostBuilder로 업데이트하고, NUnit 내에서 헤드리스 또는 모든 OS에서 Playwright 테스트를 실행합니다. 2007년, 저자는 통합 및 브라우저 자동화 테스트를 위해 Selenium을 사용했습니다. 현재는 플랫폼 간의 유연성과 호환성을 이유로 Playwright가 선호됩니다. 종단 간 테스트를 보장하기 위해 Playwright 테스트는 Visual Studio 또는 VS Code를 사용하여 .NET 애플리케이션에 통합됩니다.이전에는 ASP.NET을 단위 테스트 내에서 시작하기 위해 WebApplicationFactory를 사용하는 해킹 방법이 사용되었습니다. 그러나 .NET 8에서는 IWebHostBuilder가 IHostBuilder로 대체되어 코드 변경이 필요합니다.저자의 목표는 NUnit 내에서 Playwright 테스트를 작성하는 것입니다. 이는 실행 중인 웹 애플리케이션과 정의된 URL을 가정합니다. WebApplicationTestBuilderFactory는 TestHost 내에서 웹 앱을 시작하고 동적으로 포트를 가져옵니다.빌더 팩토리는 MSBuild에 의해 생성된 매니페스트 파일을 사용합니다. 이는 .NET 8에서 필요한 회피책입니다. 그러나 이 해킹 방법은 .NET 9에서 제거될 수 있어 테스트를 더 직접적으로 만들 수 있습니다.이러한 개선 사항으로 인해 단위 테스트와 Playwright 통합 테스트를 모두 다양한 운영 체제와 환경에서 실행할 수 있어 .NET 8으로 업데이트된 사이트에 대한 포괄적인 테스트를 보장할 수 있습니다. Updating to .NET 8, updating to IHostBuilder, and running Playwright Tests within NUnit headless or headed on any OS feeds.hanselman.com
WSL과 Let's Encrypt를 사용하여 Azure App Service SSL 와일드카드 인증서 생성 WSL과 certbot를 사용하여 Azure 웹사이트에 와일드카드 인증서를 생성할 수 있습니다. Azure는 특정 PFX 형식을 요구하지만, certbot를 사용하여 인증서를 생성할 수 있습니다. 인증서에는 2048비트 개인 키, 중간 인증서 및 루트 인증서가 포함되어야 합니다. certbot로 인증서를 생성한 후, Windows에서 인증서를 가져오고 내보내야 하며, PFX 요구 사항을 충족해야 합니다. 생성된 PFX 파일을 Azure App Service의 Bring Your Own Cert에 업로드할 수 있습니다. 사용자 지정 도메인에 대해 새로 업로드된 인증서를 바인딩으로 선택할 수 있습니다. 이 프로세스는 자동화할 수 있지만, 와일드카드 인증서를 저렴한 비용으로 얻는 임시 솔루션을 제공합니다. Using WSL and Let's Encrypt to create Azure App Service SSL Wildcard Certificates feeds.hanselman.com
PowerShell용 CLI용 GitHub Copilot GitHub Next는 CLI에서 Copilot 기능을 확장하는 프로젝트를 발표했습니다. 이 프로젝트는 현재 대기자 목록 모드에 있지만, 이 명령어는 단순히 "github-copilot-cli" 실행 파일의 별칭입니다. 이 실행 파일을 사용하면 사용자 지정이 가능합니다. 이 사실을 알게 된 후, PowerShell에서 사용자 지정된 프롬프트를 "powershell을 사용하여"로 바꾸는 PowerShell 별칭이 만들어졌습니다. 완벽하지는 않지만, 이 것은 PowerShell 지원의 필요성을 보여주는 데 사용됩니다. 제공된 별칭에는 "??", "git?", "gh?"이 포함되어 있으며, 각 별칭은 수정된 프롬프트를 사용합니다. 또한, 별칭은 임시 파일을 사용하여 명령을 실행하고 결과를 표시하여 무결한 경험을 제공합니다. 작성자는 피드백과 개선 제안을 요청하며, 추가 사용자 지정 및 bash, wsl과 같은 다른 도구와의 통합 가능성을 강조합니다. GitHub Copilot for CLI for PowerShell feeds.hanselman.com
서버를 호스팅하지 않고 WebFinger 프로토콜을 사용하여 마스토돈에서 사용자 @ 도메인을 사용하여 검색 가능성을 개선합니다. 마스토돈은 사용자 검색 및 접근을 용이하게 하기 위해 WebFinger 프로토콜을 사용하는 분산형 오픈 소스 소셜 네트워크 서비스입니다. WebFinger를 통해 사용자는 이메일 주소 또는 기타 식별 정보를 사용하여 마스토돈 네트워크의 다른 사용자에 대한 정보를 찾을 수 있습니다.WebFinger는 사용자가 이메일 주소 또는 식별 정보를 사용하여 서버에 요청을 보내는 단순한 HTTP 기반 프로토콜을 통해 작동합니다. 서버는 요청된 정보를 포함하는 JSON 객체인 리소스 디스크립터를 응답합니다.리소스 디스크립터는 사용자의 이름, 프로필 사진, 소셜 미디어 링크 및 보안 연결을 설정하기 위한 공개 키를 포함한 사용자에 대한 다양한 정보를 제공합니다.마스토돈 사용자를 검색할 때 네트워크는 사용자의 서버에 특정 엔드포인트 형식을 사용하여 쿼리를 보냅니다. 사용자의 서버는 필요한 정보를 포함하는 WebFinger 응답을 반환합니다.WebFinger를 구현하려면 사용자는 자신의 도메인에 WebFinger API 엔드포인트를 만들고 필요한 정보를 제공하는 JSON 파일을 정의할 수 있습니다.또는 사용자는 마스토돈 서버의 WebFinger 응답을 사용하여 자신의 서버에 정적 JSON 파일로 저장할 수 있습니다.WebFinger는 사용자 검색 및 접근에 필수적인 마스토돈 네트워크의 핵심 기능으로, 사용자가 서버 위치에 관계없이 서로를 찾고 팔로우할 수 있도록 합니다.마스토돈은 분산형 및 ActivityPub와 같은 웹 표준을 준수하는 추가적인 이점을 제공하는 트위터와 유사한 경험을 제공합니다.마스토돈을 처음 사용하는 경우 시작하기 위한 포괄적인 가이드가 제공됩니다. Use your own user @ domain for Mastodon discoverability with the WebFinger Protocol without hosting a server feeds.hanselman.com
피곤해졌어요 20년간 꾸준히 블로그를 운영해오던 저자는 작년에 특별한 인생의 사건 없이 갑작스럽게 블로그를 중단했습니다. 이후 틱톡, 유튜브, 팟캐스트에서 즐거움을 찾았고 최근에는 마스토돈에 합류했습니다. 일관성을 유지하는 것은 어려운 일이지만 저자는 오랫동안 이를 유지해 왔습니다. 이들은 자신의 정신을 키우는 활동에 우선순위를 두고 있으며, 현재 블로그는 다른 활동에 밀려 뒷전으로 밀려났습니다. 앞으로도 여러 플랫폼에 글을 쓰고 공유하면서 자신의 글을 소유하고 작품을 보존하는 것의 중요성을 강조할 것입니다. 저자는 독자들에게 여전히 활발히 활동 중이며 곧 다시 만나기를 기대한다고 말합니다. I got tired feeds.hanselman.com
홈 어시스턴트를 사용하여 유니파이 프로텍트 G4 도어벨과 아마존 알렉사를 통합하여 방문자를 알리기 홈 어시스턴트는 연결된 장치, 사람, 조명 및 가전제품을 포함한 광범위한 제어를 허용하는 다기능 홈 오토메이션 플랫폼입니다. 클라우드 서비스에서 독립적으로 로컬에서 작동하여 개인 정보 보호와 독립성을 제공합니다. 홈 어시스턴트를 라즈베리 파이와 이더넷 전원 공급 장치(PoE)로 실행하는 것이 설정이 용이하므로 권장됩니다.통합 기능을 통해 홈 어시스턴트는 유니파이 프로텍트 도어벨과 같은 보안 시스템을 포함한 다양한 장치와 연결할 수 있습니다. 서드 파티 통합 기능을 통해 기능을 확장하고 사용자 지정 자동화를 활성화할 수 있습니다.유니파이 프로텍트 도어벨이 눌렸을 때 알림을 생성하려면 홈 어시스턴트 커뮤니티 스토어와 유니파이 프로텍트 및 알렉사 미디어 플레이어 통합 기능을 설치합니다. 두 통합 기능을 구성하고 알렉사 "모든 곳" 스피커 그룹을 생성합니다.홈 어시스턴트의 개발자 도구에서 알렉사 TTS(텍스트-음성 변환)가 작동하는지 확인합니다. 그런 다음 도어벨의 상태가 "켜짐"으로 변경될 때 트리거되는 자동화를 생성하고 알렉사 "모든 곳" 그룹에 알림을 보냅니다.자동화는 사용자 인터페이스와 자동화.yaml 파일 모두에서 정의할 수 있습니다. "to: 'on'" 트리거는 상태 변경 중에 중복 알림을 방지합니다.홈 어시스턴트는 편리함과 연결된 홈에 대한 향상된 제어를 제공하는 다양한 자동화 가능성을 제공합니다. Using Home Assistant to integrate a Unifi Protect G4 Doorbell and Amazon Alexa to announce visitors feeds.hanselman.com
비주얼 스튜디오 2022에서 React, Angular 또는 Vue와 함께 JavaScript 및 TypeScript 프로젝트 구축(.NET 포함 또는 미포함) Visual Studio 2022는 독립적인 JavaScript/TypeScript 앱을 위한 새로운 .esproj 프로젝트 유형을 도입합니다. 이 프로젝트 유형은 Angular, React 및 Vue의 네이티브 CLI를 사용하여 최신 템플릿을 제공합니다. Visual Studio 2022는 JavaScript 기반의 프론트엔드 앱과 JavaScript/TypeScript 컴포넌트가 포함된 ASP.NET 앱을 모두 지원합니다. MSBuild를 사용하여 앱을 빌드하기 위한 TypeScript NuGet 패키지를 제공합니다. Visual Studio 2022의 새로운 JavaScript/TypeScript 지원에는 TypeScript 기반의 완전한 JavaScript 언어 서비스가 포함되어 있습니다. 개발자는 프론트엔드에 .esproj와 백엔드에 .csproj를 사용하여 솔루션을 만들 수 있습니다. Visual Studio 2022는 개발자가 JavaScript/TypeScript 프론트엔드 앱에 ASP.NET Web API 통합을 추가할 수 있도록 해줍니다. 이렇게 하면 프론트엔드가 Web API 백엔드를 호출할 수 있습니다. React CLI를 사용하여 프론트엔드를 생성하여 원하는 버전의 React가 설치됩니다. Visual Studio 2022는 웹 서버와 웹 브라우저를 선택할 수 있는 유연성을 제공하여 개발자가 Launch.json 파일을 사용하여 선호하는 설정을 지정할 수 있습니다. 개발자는 또한 ASP.NET Core 프로젝트에서 TypeScript/JavaScript를 보조 컴포넌트로 사용하여 기존의 ASP.NET 앱에 JavaScript/TypeScript 기능을 추가할 수 있습니다. JavaScript and TypeScript Projects with React, Angular, or Vue in Visual Studio 2022 with or without .NET feeds.hanselman.com
OhMyPosh의 Nightscout 세그먼트는 내 Git 프롬프트에 실시간 혈당 수치를 표시합니다. 저자는 당뇨병 환자로서 이전에 명령 프롬프트에서 혈당 수치를 표시하는 방법을 만들었지만 이제 Oh My Posh를 사용하여 더 간소화된 방법을 개발했습니다. 이 새로운 접근 방식은 Nightscout라는 오픈 소스 플랫폼에서 실시간 혈당 데이터를 가져와 표시하기 위해 Oh My Posh 내에서 사용자 정의 "세그먼트"를 사용합니다. 이 세그먼트는 매우 구성 가능하며, 혈당 수치에 따라 개인화된 색상과 아이콘을 사용할 수 있습니다. 또한 5분마다 또는 프롬프트가 새로 고칠 때만 업데이트되므로 지연을 방지하기 위한 구성 가능한 타임아웃이 있습니다. 저자는 mmol 측정 지원을 추가하고 오래된 데이터 포인트를 시각적으로 표시하는 기능을 추가하여 세그먼트를 더욱 개선할 계획입니다. 이 솔루션은 다양한 운영 체제와 셸에서 원활하게 작동하며, 명령 프롬프트 내에서 혈당 수치를 모니터링하는 편리하고 사용자 정의 가능한 방법을 제공합니다. 저자는 커뮤니티의 기여를 권장하며 세그먼트 개발을 보여주는 유튜브 비디오의 링크를 제공합니다. 이 기사는 Auth0의 스폰서십 메시지로 끝나며, 그들의 인증 서비스를 홍보합니다. A Nightscout Segment for OhMyPosh shows my realtime Blood Sugar readings in my Git Prompt feeds.hanselman.com
20년 전 대학 프로젝트를 .NET 6로 업그레이드하기 - dotnet-upgrade-assistant 사용하기 2001년에 저자는 대학 과제를 위해 C#로 초기 버전의 소형 가상 운영 체제(Tiny Virtual Operating System)를 만들었고 나중에 초기 .NET 프레임워크에서 VB.NET으로 포팅되었습니다. 수년 후, 프로젝트는 GitHub로 이전되었고 .NET Core 2.0으로 업그레이드되어 리눅스, 도커, 라즈베리 파이와 같은 다양한 플랫폼에서 실행할 수 있게 되었습니다. 최근에 저자는 20년 된 애플리케이션을 .NET Upgrade Assistant를 사용하여 .NET 6으로 업그레이드하기로 결정했습니다. 업그레이드 과정은 상호작용적이었고 놀랍도록 매끄러웠으며, 프로젝트가 첫 시도에서 성공적으로 빌드되었습니다. 그러나 프로젝트 파일에 있는 구 버전 번호는 수동으로 조정해야 했습니다. "dotnet outdated" 도구를 사용하여 최신 패키지가 있는지 확인하고 그에 따라 업그레이드했습니다. 실행 명령어는 더 간단한 형식으로 현대화되었습니다. .NET 6을 사용하여 최종 애플리케이션은 크기가 11MB에 불과한 자체 포함형, 크로스 플랫폼 실행 파일로 패키징되었습니다. 이는 .NET 개발에서 지난 몇 년 동안 이루어진 상당한 진보를 강조합니다. Upgrading a 20 year old University Project to .NET 6 with dotnet-upgrade-assistant feeds.hanselman.com
NET 6 핫 로드 및 웹 소켓 때문에 "ws에 연결이 거부되었습니다: 콘텐츠 보안 정책 지침을 위반하므로". 보안을 개선하기 위해 ASP.NET Core 애플리케이션의 핫 리로드(Hot Reload)는 콘텐츠 보안 정책(Content-Security-Policy, CSP) 헤더를 이해해야 합니다. DasBlog은 NWebSpec 라이브러리를 사용하여 CSP 헤더를 구성합니다. 기본적으로 CSP 헤더는 "자신"으로의 연결을 제한하여 핫 리로드와의 통신을 차단합니다. 개발 환경에서 핫 리로드를 활성화하려면 CSP 헤더를 사용하여 개발 서버에 대한 WebSocket 연결을 명시적으로 허용해야 합니다. 예를 들어, "connect-src: wss://localhost:62895"와 같은 헤더를 사용할 수 있습니다. CSP 헤더는 개발 환경과 프로덕션 환경에서 다르게 구성되어야 합니다. 이렇게 하면 보안을 유지하면서 핫 리로드와 같은 개발 도구를 사용할 수 있습니다. 개발 편의성과 보안의 균형을 유지하려면 두 시나리오 모두에 필요한 헤더를 인식하는 것이 중요합니다. .NET 6 Hot Reload and "Refused to connect to ws: because it violates the Content Security Policy directive" because Web Sockets feeds.hanselman.com