C# Selenium Driver 자동 설정 라이브러리

Selenium의 특성상 브라우저의 드라이버가 브라우저의 버전과 정확히 일치하여야 되는 단점이 있어 설치된 브라우저의 버전을 읽고 해당하는 드라이버를 자동으로 다운로드 및 캐싱해주는 프로젝트를 생성하였습니다.

링크

현재는 Edge와 Chrome만 지원합니다만, 차후 지원 브라우저를 늘릴 예정입니다.

원클릭으로 영상 프레임을 두배로 늘려주는 프로그램 Frame Interpolation

참고 소스 : https://github.com/nihui/dain-ncnn-vulkan

클릭 한번으로 영상의 프레임을 늘려주는 프로그램입니다. DAIN을 사용하였으며, 성능은 아래의 영상을 확인해주세요.

※ GPU를 사용하나, 프레임 보간이 매우 오래걸립니다. 이 점 참고해주세요.
※ 현재로써는 실행 파일 경로와 변환 파일 경로에 특수문자나 한글이 있으면 안됩니다 (1.2.0 업데이트로 해결됨)

프로그램 UI
DAIN 성능 비교 영상

다운로드
소스코드

변경 내역 :
* 1.0.0 : 최초 공개
* 1.1.0 : 프레임 보간 작업에 대한 프로그래스바 추가
* 1.2.0 : 프로그래스바 오류 수정 및 특정 상황에서 프로그램이 종료되는 오류 수정

안드로이드 기기에서 오디오 지연값을 자동으로 계산하는 방법

아래 메소드를 이용하면 기기상의 오디오 설정을 인식하여 계산된 레이턴시 값을 반환합니다.

원래는 Android SDK상에서 제공되는 메소드입니다.
하지만 Private 메소드라서 일반적인 접근이 불가능하여 Reflection을 이용, 접근 후 값을 가져오는 방식입니다.

public int getAndroidLatency() {
   int latency = 0;
   AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
   try {
      Method m = am.getClass().getMethod("getOutputLatency", int.class);
      latency = (Integer) m.invoke(am, AudioManager.STREAM_MUSIC);
   }
   catch (Exception e) {
   }
   return latency
}

Windows 10의 파일 탐색기 바닥 우클릭 메뉴에 폴더 경로를 전달하여 Windows Terminal을 실행하는 옵션을 추가하는 방법

상단의 준비물을 받아주시고, 레지스트리 에디터를 실행합니다.
레지스트리 에디터를 열어 아래 경로로 이동해줍니다.

Computer\HKEY_CLASSES_ROOT\Directory\Background\shell\

레지스트리 폴더에 새로운 키를 생성해줍니다. 키 이름은 WT로 설정합니다.

새로운 키 생성하기

새로 만든 키에 command라는 이름의 키를 추가합니다.

command 키 생성

Windows+R 단축키를 눌러 뜨는 창에 %LOCALAPPDATA%를 입력, 뜨는 폴더에 terminal 폴더를 생성합니다. 이후 생성된 폴더에 위의 아이콘 파일인 wt_32.ico 파일을 넣어줍니다.

이후, terminal 폴더에서 탐색기 주소창 오른쪽의 빈 공간을 클릭하여 경로를 복사해줍니다.
예시) C:\Users\kck41\AppData\Local\terminal

그 다음 레지스트리 편집기에서 생성한 WT키에 Icon이라는 문자열 값을 생성합니다.
값은 위에서 복사한 폴더의 경로를 설정 마지막에 \ 문자를 추가하여 wt_32.ico 파일을 지정해줍니다.
예시) C:\Users\kck41\AppData\Local\terminal\wt_32.ico

WT 키의 (Default) 값은 우클릭 메뉴에서 보여질 옵션 제목을 적어주세요.
예시) Open Windows Terminal

WT 하위 키의 command 키의 (Default)값을 설정하기 위해 Windows + R키룰 눌러 %LOCALAPPDATA%를 입력합니다.
입력하여 나오는 창에서 Microsoft폴더를 들어가 WindowsApps폴더에 들어갑니다.

방금전과 마찬가지로 탐색기의 주소창 우측 빈공간을 선택하고 경로를 복사합니다.

WT하위 키의 command 키의 (Default)값을 더블클릭하여 방금전의 경로를 붙여넣고 마지막에 \wt.exe -d “%V”를 지정합니다.
예시) C:\Users\kck41\AppData\Local\Microsoft\WindowsApps\wt.exe -d “%V”

이제 파일 탐색기를 열어 아무 폴더에서나 레지스트리를 통해 추가한 옵션을 선택할 수 있습니다.

이 방법은 Windows Terminal 앱의 기본 쉘을 Ubuntu로 설정하였을 때, 쉘에 디렉토리를 전달하여 터미널을 통해 열 때 유용합니다.

탐색기에서 클립보드의 이미지 및 텍스트를 자동으로 파일로 저장해주는 프로그램 – Instant Clipboard Save

프로그램을 실행하면 탐색기에서 아무것도 선택하지 않는 경우의 우클릭 메뉴에 Instant Clipboard Save라는 메뉴가 생깁니다.
(프로그램 실행 이후 따로 뜨는 창은 없습니다)

클릭시 클립보드의 이미지(.png 파일) 또는 텍스트(.txt 파일)파일을 해당 폴더에 저장합니다.

프로그램 위치가 옮겨지는 경우 프로그램을 다시 실행해주세요.

프로그램 삭제시 탐색기 우클릭 메뉴에 남아있는 메뉴를 삭제하고싶으시다면,
레지스트리 편집기를 열어 아래 적혀진 위치의 키 및 하위 항목을 지워주세요.

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\Instant Clipboard Save

변경 로그:
1.0.0 : 최초 배포
1.1.0 : 메모리 누수 현상 해결
1.2.0 : 관리자 권한이 필요한 경우 관리자 권한 요청

XPS 9560, 9360, 9550의 SST 설정을 고정하는 방법

이 글의 방법을 조금이라도 다르게 적용하면 기기가 벽돌이 될 수도 있습니다.
저는 방법을 따라하다가 생기는 벽돌현상에 대한 책임을 지지 않습니다.

출처는 이쪽입니다

XPS 9560, 9360, 9550의 경우 ThrottleStop을 사용해도 BIOS에서 SST가 활성화되지 않아 간혹 절전모드의 해제등의 이유로 SST 설정이 고정되지 않습니다.
결과적으로 TurboBoost가 활성화 돼있어도 클럭이 올라가지 않아 베이스클럭 이상으로 나오지 않습니다.

이는 CPU가 SST를 지원하나 BIOS가 아닌 ThrottleStop이 소프트웨어적으로 활성화 시킨 이후로 ThrottleStop의 버그로 인해 SST설정이 풀리는 현상입니다.

따라서 SST설정을 BIOS에서 활성화시키면 해당 문제가 발생하지 않습니다.

BIOS에서 SST설정을 활성화 시키기 위한 준비물이 필요합니다.
아래 파일을 받아 압축을 풀어주세요.

먼저 Universal BIOS Backup ToolKit 2.0관리자 권한으로 실행해주세요.
실행하면 아래와 같은 창이 뜹니다.

먼저 Read를 누른 뒤 시간이 지난 이후 완료 메시지가 뜨면 닫아주고 Backup을 눌러 BIOS 이미지를 저장해주세요.
이후 프로그램을 닫아주시면 됩니다.

다음으로는 UEFITool을 실행해주세요.
그리고 드래그 앤 드롭으로 방금 추출한 BIOS 이미지 파일을 열어주세요.

BIOS 이미지 파일을 열은 뒤 “Ctrl + F” 단축키를 통해 탐색 창을 열어주시고 GUID탭으로
이동
한 뒤
899407D7-99FE-43D8-9A21-79EC328CAC21 를 복사하고 텍스트 창에 붙여넣어주세요.
아래의 사진을 참고하시면 됩니다.

그러면 아래의 사진과 같이 Search 탭에 줄이 하나 생깁니다.
이 줄을 더블클릭 해주세요.

그러면 아래의 사진과 같이 Setup이라는 항목이 선택되는데요
우클릭 하고 Extract as is를 눌러주세요.

아래와 같이 파일을 저장하는 창이 뜰겁니다.
파일 이름을 Setup.bin으로 지정하고 저장해주세요.

이제 UEFITool을 닫아주세요.

Setup.bin파일을 추출했으면 Universal IFR Extractor를 열어주시고 추출한 파일을 선택해줍시다.
그리고 Extract 버튼을 눌러주세요.
아래의 사진을 참고하시면 됩니다.

Extract를 누르면 txt파일을 저장하게됩니다.
파일명은 상관없으니 파일을 저장하고 txt파일을 메모장으로 열어주세요.
파일이 크다보니 여는데 시간이 조금 걸릴 수도 있습니다.

메모장이 열리면 “Ctrl + F” 단축키를 통해 찾기 창을 열어주시고 “Speed Shift Technology“를 검색해주세요.
그러면 아래와 같은 단락이 검색될겁니다.

Speed Shift Technology 설정 주소를 알아냈습니다
단순 예시이므로 꼭 각자 여기까지 단계를 거쳐주세요

저와 같은 경우 선택된 텍스트 우측에 0x4AD라고 적혀있습니다.

2019년 10월 기준 XPS 13 9360을 사용하는 사용자는 저와 같이 0x4AD라고 적혀있을겁니다.
하지만 기종마다 차이가 있을 수 있고 잘못 입력하면 벽돌현상이 발생할 수 있으므로 같은 모델을 사용하는 분이라도 꼭 위 과정을 따라주세요.

텍스트 우측의 Variable 값을 기억해주세요.
이 값을 메모리 주소라고 하겠습니다.

다음으로 USB 메모리를 준비해주세요.
그리고 준비물에 있는 “EFI-shell.zip“파일의 압축을 풀어주고 USB 메모리에 복사해주세요.
이후 메모리를 꽂은 뒤 재부팅하고 F2를 연타하여 BIOS 설정에 들어가주세요.

BIOS의 Boot Sequence 설정에 들어가줍시다. 그리고 Add Boot Option 버튼을 눌러주세요. 아래와 같은 화면이 뜰겁니다.

XPS 13 boot bios에 대한 이미지 검색결과

File을 직접 지정해줘야됩니다.
… 버튼을 눌러 USB 메모리를 선택해주고 방금 압축을 풀은 폴더에 있는 “bootx64.efi“를 지정 후 OK를 눌러주세요.

File system type : Dell UEFI

OK를 누른 다음 Boot Option Name을 아무렇게나 지정해주신 뒤 제일 첫번째 부팅 옵션으로 지정해주세요.

옵션 지정 이후 재부팅하시면 콘솔창이 뜹니다. 콘솔에 아래와 같이 입력해주세요.

setup_var (메모리 주소) 0x1

만약 메모리 주소가 0x4AD라면 setup_var 0x4AD 0x1 입니다.

입력 이후 글자가 뜰텐데 다시 입력커맨드가 뜰때까지 기다려주시고 reboot을 입력하여 재부팅해주세요.
USB 메모리는 제거하셔야됩니다.

재부팅하면 이제 ThrottleStop을 사용해도 SST 설정이 해제되는 현상이 사라집니다.

만약 SST 설정을 해제하고싶으시다면, 같은 단계를 따라 위의 setup_var 명령어의 맨 마지막 값을 0x0으로 설정하시고 재부팅하면 원래 설정대로 돌아옵니다.

BIOS 설정 초기화, BIOS 업데이트 등의 이유로 SST 설정이 풀릴 수도 있습니다.
이 경우 다시 설정을 진행해주셔야합니다.

SST 설정의 활성화 여부HWiNFO를 통해 알아보실 수 있습니다.
ThrottleStop 실행 전에 아래와 같이 HWiNFO 실행 이후 SST 항목이 초록색인지에 따라 활성화 여부를 확인할 수 있습니다.

이상 XPS 9560, 9360, 9550 시리즈의 SST 활성화 방법에 대해 알아봤습니다.
감사합니다!

WPF 프로그램의 ScrollViewer에서 Windows PTP(Precision Touch-Pad) Driver를 사용하는 터치패드로 스크롤시 스크롤이 너무 빨라지는 오류 수정법

결론부터 말하면, WPF의 버그이다. 같은 SDK를 사용하는 Win Forms에서는 나타나지 않는 현상이다.

문제가 되는 현상은 WPF 프로그램ScrollViewer를 사용하는 UI Element에서 PTP 드라이버를 사용하는 터치패드(요즘 나오는 랩탑에서는 많이 사용한다)로 스크롤하면 스크롤 속도가 말도 안되게 빨라지는 현상이다. 거의 스크롤 거리에 비해 10~20배는 빠르다.

이를 수정하려면 ScrollViewerPreviewMouseWheel 를 설정해야한다.

원리는 간단하다. PreviewMouseWheel에서 EventArgsHandledtrue로 설정하면스크롤이 되지 않는다. 이 때 EventArgsDelta를 받아와 일정 threshold를 넘지 않게 스크롤 시켜주면 된다.

아마도 오류 자체는 Delta값이 매우 커지는 것과 관련된 것같다. PreviewMouseWheel 이벤트가 과도하게 불리는 것은 아니라는 것이다.

또한, 경험상 threshold 값은 int값 48이 가장 적당했다.

PreviewMouseWheel 이벤트 메소드의 예시 코드는 아래와 같다.

public static void HandleScroll(object sender, MouseWheelEventArgs e)
{
    int threshold = 48;
    ScrollViewer scrollViewer = (ScrollViewer)sender;
    double target = scrollViewer.VerticalOffset - Math.Min(Math.Max(e.Delta, -threshold), threshold);
    scrollViewer.ScrollToVerticalOffset(target);
    e.Handled = true;
}

Windows에서 권한문제로 실행되지 않는 파일 및 폴더 삭제하는 방법

간혹 윈도우를 사용하다가 권한의 문제로 삭제가 되지 않는 파일이나 폴더가 있습니다.

이러한 현상이 발생할 때 대부분의 경우 작동하는 삭제 방법을 알려드립니다.

아래 파일을 받아 압축을 풀어줍니다.

이후 아래 과정을 따라주세요.

  • 다운로드 받은 압축 파일을 압축 해제한 뒤 Add Take Ownership Option.reg 파일을 실행하여 뜨는 창들에서 모두 “예”를 선택합니다.
  • 이후 삭제가 되지 않는 파일이나 폴더를 우클릭 하고 Take Ownership 이라는 메뉴를 클릭합니다.
  • 클릭 후 검정색 창이 뜨고 사라질 때 까지 기다립니다 (파일 수가 적으면 즉시 사라지니 까만 창이 뜨지 않았다면 기다릴 필요가 없습니다)

위 과정을 제대로 따라했다면 이제 파일이나 권한 문제로 삭제되지 않는 파일이나 폴더를 정상적으로 삭제할 수 있습니다.

삭제 이후 Take Ownership 메뉴가 필요 없다면 Remove Take Ownership Option.reg 파일을 실행하여 위와 마찬가지로 뜨는 창들에서 모두 “예”를 선택해주세요. 그러면 더이상 탐색기 우클릭 메뉴에서 뜨지 않습니다.