How to fix unintentional changes to default browser settings

윈도우11에서 기본 브라우저를 크롬으로 해두는데 언젠가부터 컴퓨터를 재시작하면 엣지로 변경되는 일이 잦아짐. 윈도우에서 제공하는 앱 설정에서 변경을 해도 컴퓨터 재시작 하면 계속 해서 엣지로 변경, 도저히 참지 못해 구글링을 통해 찾아낸 글 중 레딧에서도 같은 증상을 토로하는 유저들이 많다는 걸 알았고 위 글에 보면 해결방법이 설명되어있음.

우선 위 글에 있는 설정을 적용했고 브라우저 기본설정이 다시 되돌아 가는지 확인해야겠음

How to run a custom command at startup in VSCode

VSCode 프로그램 시작 시 유저 정의 명령을 실행 할 수 있는 방법을 Gemini 와 토론 끝에 나름 해결방법을 찾아내여 글을 남긴다.

내가 원하는 명령은 다음과 같다.
[프로그램 시작 > 모든 터미널 닫기 > 새 터미널 열기]

Gemini 는 두 가지 해결 방법을 제시했다.
1. Auto Run Command 확장 프로그램 사용
2. VSCode Task Runner 사용

나는 Plugin 의 Auto Run Command 를 활용하는 방법을 선택했다.

다음과 같이 settings.json 에 커스텀 명령을 입력한 뒤 프로그램을 재 실행 하면 프로그램 로드가 모두 완료된 시점부터 위에 작성한 명령이 차례로 실행된다.

https://gemini.google.com/share/7bfbb8ab8509

VSCode Gemini-CLI 폰트 깨짐현상

VSCode 터미널에서 gemini cli를 실행하면 위 스크린샷과 같이 시작화면부터 깨지는 현상이 발생했다.
gemini 에게 물어보니 https://www.nerdfonts.com 에서 다음과 같은 폰트로 바꾸면 해결이 된다고 한다.
Hack Nerd Font
FiraCode Nerd Font
JetBrainsMono Nerd Font

Hack Nerd Font 를 적용한 뒤 모습

split window 에서 깨짐현상이 있는 점도 질문을 했었는데, vscode 에디터 글꼴을 Hack Nerd Font 로 바꾼후에는 발생하지 않은 걸로 보아서 글꼴 문제가 확실한 것 같다.

자세한 내용은 다음 gemini 채팅을 참고 하자.
https://gemini.google.com/share/740e380720d9

How to Properly Write ArrayBuffer Data to Files in Node.js with Fetch API

[fs.writeFile 사용 시 [object ArrayBuffer]로 저장되는 오류 해결 가이드]

https://g.co/gemini/share/d92649206484
https://g.co/gemini/share/a6fec857a7f6

다음의 코드에서

// file.ts
const exporter = new GLTFExporter();
exporter.parse(scene, (result)=>{
   const data = { buffer : result };
   fetch(url, {method: 'POST', body: data })
}, {binary: true})

// api/upload
POST( req : NextRequest ) {
   fs.writeFile('test.glb', req.body);
}

위 코드를 실행하고 난 뒤 서버에 생성된 test.glb 파일을 열어보면 다음과 같다

[object ArrayBuffer]

이유는 ArrayBuffer 나 바이너리 데이터는 api 를 호출해서 body 로 넘겨지면 브라우저가 이를 문자열로 변환을 시도하기 때문이다. 이는 body 를 직접 넣을 때 뿐만 아니라 FormData로 전달할 때도 마찬가지 이다. 따라서 바이너리 데이터 나 파일 데이터를 전달 할때는 Blob 또는 File 객체를 사용해야 한다.

따라서 다음과 같이 코드를 수정하면 문제가 해결된다.

// file.ts
const exporter = new GLTFExporter();
// exporter 의 결과물은 ArrayBuffer
exporter.parse(scene, (result)=>{
   const blob = new Blob([result], { type: 'model/gltf-binary' });
   const data = { buffer : blob };
   fetch(url, {method: 'POST', body: data });
}, {binary: true})

// api/upload
POST( req : NextRequest ) {
   fs.writeFile('test.glb', req.body);
}