[컴][안드로이드] 안드로이드폰을 pc에서 control 하는 방법 - scrcpy

get your phone alternative/ 폰을 windows 에서 control 통제 / 맥에서 통제 / 안드로이드폰 / 안드로이드 pc 에서 조정 / mac에서 조정 / 맥에서 조정

scrcpy

adb 를 통해서 android 를 pc 에서 제어할 수 있게 해주는 tool 이다.

설치

아래 경로에서 download 해서 설치하면 된다.

chocolatey 로 설치

chcolatey 로도 설치가 가능하다.
choco install scrcpy
choco install adb    # if you don't have it yet

over TCP/IP

기본적으로 adb 는 usb 를 연결해서 사용하는 것이었다. 그런데 이제, 무선으로도 사용할 수 있게 됐다. 그래서 자연스럽게 adb 를 이용하는 scrcpy 도 무선으로 사용가능하다.

하지만 초기설정은 usb 로 해줘야 한다. 이것도 rooting 이 되어 있다면, ADBWireless 같은 app 을 이용해서 phone 에서 할 수 있다.
  1. 폰은 당연히 '개발자 옵션' 에서 'usb 디버깅' 옵션을 켜 놔야 한다.
  2. usb를 꽂고,
  3. adb tcpip 5555, (다른 port 도 가능하다 adb tcpip 5557)
  4. usb 를 뺀다.
  5. adb connect 192.168.0.20 (다른 port 인 경우 adb connect 192.168.0.20:5557)
  6. 핸드폰에 usb 디버깅을 허용하겠냐는 화면이 뜬다. 수락한다.
  7. scrcpy 를 실행
  8. 혹시나 다시 usb mode 로 가고 싶다면, adb usb 를 하면 된다.
  9. 기본 bit-rate 가 8Mbps 라고 한다. 이것을 좀 낮추고 싶다면, scrcpy --bit-rate 2M --max-size 800 (5555 port 가 아니라면,scrcpy --bit-rate 2M --max-size 800 -s 192.168.0.20:5557)로 하면 된다.(참고)
C:\scrcpy>adb kill-server
C:\scrcpy>adb tcpip 5555
restarting in TCP mode port: 5555

C:\scrcpy>adb connect 192.168.0.20
* daemon not running; starting now at tcp:5037
* daemon started successfully
failed to authenticate to 192.168.0.20:5555

C:\scrcpy>adb connect 192.168.0.20
already connected to 192.168.0.20:5555

C:\scrcpy>adb devices
List of devices attached
192.168.0.20:5555       device

C:\scrcpy>scrcpy --bit-rate 2M --max-size 800

back, home 버튼

Add On Screen buttons · Issue #7 · Genymobile/scrcpy · GitHub 에서 대략적으로 필요한 버튼의 정보를 얻을 수 있다.
  • home 버튼 : 마우스 가운데 버튼(또는 ctrl+h)
  • back : 마우스 오른쪽 버튼(또는 ctrl+b)
  • app : ctrl + s
  • ?? : ctrl+m
기타 다른 shortcut 은 아래 link 에서 확인할 수 있다.

options

그밖의 좋은 option 들이 있다. 자세한 사항은 README.md 를 확인하자.
scrcpy --always-on-top
scrcpy --fullscreen
scrcpy --turn-screen-off --stay-awake
scrcpy --render-expired-frames
scrcpy --show-touches 
scrcpy --push-target /sdcard/foo/bar/

한글 붙여넣기

Gcopy and paste 부분에서 설명하는 것처럼, 일반적인 붙여넣기(ctrl+v) 는ascii 만 제대로 붙여넣기가 된다.

제대로 붙여넣기를 하려면, android clipboard 에 옮기고 붙여넣는 방식(ctrl+shift+v) 를 사용해야 한다.

scrcpy-noconsole.exe

다른 os 에서도 제공하는 것인지는 모르겠지만, scrcpy-noconsole.exe 이 있다. 이것을 이용해서 '바로가기' 를 생성하면 된다.




[컴] Head-Of-Line blocking

네트워크 / 이더넷 /

HOL blocking

from: https://en.wikipedia.org/wiki/Head-of-line_blocking#/media/File:HOL_blocking.png

switch 에 여러개의 input queue 가 있고, input queue 들로 들어오는 packet 들은 어떤 output 으로 갈지 정해져 있다. 이런 구조에서 1번 input queue 에서 output 4로 가려는 packet 이 들어왔고, 3번 input queue 에도 output 4 로 가려는 packet 이 들어왔다고 해보자.

그리고 이것들이 동시에 처리되는 시점에 있다고 하자. 그러면, 둘 다 4번 output 으로 보내야 하지만, output 은 한번에 1개밖에 보낼 수 없다. 그래서 1번이나 3번 input queue 중에 선택을 해야 한다.

그래서 만약 3번을 택했다면, 1번 input queue 는 자신의 packet(4번으로 가려는) 을 "3번 input queue 의 packet" 이 처리된 후에 처리해야만 한다.

그렇게 되면 어쩔 수 없이, 이번 clock 에는 아무런 일도 할 수 없다. 그냥 쉬게 된다.

이런식으로 block 이 되는 것이 Head-Of-Line blocking 이다. 당연히 이로 인해 처리능력이 줄어들게 된다. 그래서 이를 해결하기 위한 방법중 하나로 Virtual output queueing 이 쓰인다고 한다.

Reference

  1. Head-of-line blocking - Wikipedia
  2. [RE] Head of Line Blocking Prevention(HOL)이란? | NETMANIAS

[컴][DB] MySQL 의 collation 변경 방법

collation 확인 / 변경 / modify / 문자 utf8 변경 방법 / 확인방법 / character set

MySQL 의 collation 변경 방법

위 링크에서 collation(텍스트의 교정, 대조확인) 이 어떤 것인지 알려준다. 간단하게 이야기 하면, 'a' 와 'A' 를 비교할 때 같은 것으로 판단할지 다른 것으로 판단할지 등을 결정해주는 것이다.

system 전체의 collation 을 확인

SHOW VARIABLES LIKE 'collation%';
runtime 에 변경하려면 아래처럼 하면 된다. 하지만 현재 권한에 따라 변경가능한 듯 하다. 자세한 것은 링크를 참고하자.
SET SESSION collation_database = utf8_unicode_ci;

server 를 실행할 때 server의 character set 과 collation 설정

자세한 내용은 ref.2 를 확인하자.
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

현재 Database 의 character_set 과 collation 확인

USE mydb;
SELECT @@character_set_database, @@collation_database;

생성 시점에 설정

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_unicode_ci;

변경방법

가능한 character set 확인

SHOW CHARACTER SET;

table 의 collation 변경

ALTER TABLE `my_test_table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci

database 의 collation 변경

ALTER DATABASE mydb CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Reference

  1. MySQL :: MySQL 8.0 Reference Manual :: 10.3.3 Database Character Set and Collation
  2. MySQL :: MySQL 8.0 Reference Manual :: 10.3.2 Server Character Set and Collation

[컴][머신러닝] 기계학습 절차


from : 헬로, 데이터 과학 p.214 ~ p.217

기계학습 절차

지금까지 기계학습의 기본 개념을 살펴보았다. 이제 주어진 문세에 대해 기계학습 기법을 적용한는 과정을 알아보자.

학습 기법 결정하기

기계학습의 첫 번째 단계는 학습기법을 결정하는 것이다.

학습기법은 다음 2개를 통칭
  • 학습대상을 표현하는 학습 모델
  • 데이터를 바탕으로 모델을 만드는 학습 알고리즘
앞에서 살펴보았듯이 상황에 따라 다양한 학습 기법이 나와있기 때문에 주어진 문제에 맞는 기법을 결정하는 과정이 필요하다.
  • 주어진 문제의 특성 : 학습 기법 결정에는 우선 주어진 문제의 다양한 특성을 고려해야한다.
    • 만약 이미 주어진 정답을 맞추는 알고리즘을 원한다면 지도학습 기법(supervised learning)
    • 데이터에 내재된 패턴을 찾기 원한다면 자율학습 기법(unsupervised learning)
    을 사용해야 할 것이다. 또한 지도학습 중에서도 예측하고자 하는 값이 카테고리형인지 수치형인지에 따라 사용해야 할 기법이 달라진다.
  • 주어진 데이터의 특성 : 학습 기법의 큰 방향은 주어진 문제의 특성에 따라 정해지지만, 구체적인 모델과 알고리즘의 선택은 주어진 데이터의 특성에 따라서 결정되어야 한다. 예를 들어 주어진 데이터가 많을 때 사용하는 학습 모델과 적을 때 사용하는 학습 모델은 다르다. 데이터가 적으면 단순한 모델만 학습할 수 있는 반면에, 데이터가 많으면 복잡한 모델을 학습할 수 있기 때문이다. 학습 알고리즘의 경우에도 그 종류에 따라 성능이 큰 편차를 보인다.
  • 학습된 모델의 용도 : 학습 모델 결정의 마지막 기준은 학습된 모델이 사용될 용도다. 학습 모델의 용도는 크게 
    • 학습된 모델 자체에 관심을 갖는 경우: 이를 통해 주어진문제에 대한 더 나은 이해에 도달하려는 경우
    • 학습 결과에 관심을 갖는 경우: 학습 모델을 현실적인 문제 해결에 활용하려는 경우
이 두 가지를 구분하는 이유는 기계학습 모델에 따라 학습된 모델이 해석 가능한 정도가 다르기 때문이다. 예컨대 선형 모델이나 의사결정트리 모델은 학습된 결과가 선형함수나 의사결정트리 형태를 띠기에 결과를 해석하기가 비교적 용이하다.
  • 선형 모델 / 의사결정트리 모델 : 학습된 모델의 해석에 유리
하지만 신경망이나 앙상블 모델의 경우 그 학습된 모델은 직관적으로 이해할 수 있는 형태가 아니다. 따라서 학습 결과 해석이 목적이라면 전자의 유형에 해당하는 모델을 사용해야 할 것이다.
  • 신경망 / 앙상블

학습 모델 만들기

사용할 모델을 결정했다면 실제로 학습 모델을 만들어야 한다. 학습 모델을 만든다는 것은 결국 주어진 데이터와 학습 일고리즘에 기반하여 최저의 예측 결과를 낼 수 있는 매개변수를 결정하는 과정이다. 실제 학습은 알고리즘에 의해 이루이지지만 이 과정에는 다양한 고려사항이 존재한다.
  • 학습 및 평가를 위한 데이터 나누기 : 기계학습을 위해 주어진 데이터를 모두 모델을 만드는 데 사용할 수 있는 것은 아니다. 학습 과정이 제대로 이루어졌는지를 확인하고, 사용 목적에 맞는 성능을 갖추었는지를 검정하기 위해서는 일단 만들어진 알고리즘을 제대로 평가해야 하고, 이를 위해서는 학습에 사용되지 않은 별도의 데이터가 필요하기 때문이다. 따라서 1000이라는 양의 데이터가 주어졌다면 그중 통상적으로 50~70을 학습에, 30~50을 평가에 사용하는 것이 일반적이다.
    하지만 제대로 된 학습 및 평가를 하기에 주어진 데이터가 부족한 경우가 많다. 교차검정은 이럴 때 활용할 수 있는 기법으로, 주어진 데이터를 n개의 그룹으로 나누고, 그중 처음 n-1 개의 그룹을 사용하여 모델을 만들고 마지막 한 개의 그룹을 가지고 모델을 평가한다. 평가에 사용되는 데이터를 바꿔가면서 이를 n번 반복하면 전체 데이터에 대한 평가결과를 얻을 수 있다. 이렇게 하면 데이터의 모든 부분이 학습 및 평가 용도로 사용되므로, 주어진 데이터를 최대한 활용할 수 있는 방식이다.
  • 모델 만들기 : 일단 데이터를 나누었다면 모델을 만들어야 한다. 이 과정에서는 위에서 만든 학습용 데이터가 활용된다. 최근에는 다양한 라이브러리 및 툴킷이 나와 있어 모델을 직접 구현하는 경우는 많지 않지만, 현업에서 요구되는 성능 및 유지보수의 편의성을 위해 직접 구현하는 경우도 있다. 모델의 종류에 따라 추가적인 설정값이 존재하는데, 이는 문제 및 데이터의 특성에 따라 적절히 결정한다. 
  • 모델 성능 : 마지막으로 학습된 모델 성능은 평가용 데이터를 활용하여 알아볼 수 있다. 문제 유형에 따라 다양한 평가 지표가 존재하는데, 회귀 기법 평가에는 예측값과 실제값의 차이를 제곱하여 평균한 RMSE(Root Mean Squared Error)가 가장 많이 쓰이고, 분류 기법의 평가에는 전체 데이터 가운데 올바로 분류된 항목의 비율을 나타내는 정확도(Accuracy)를 주로 사용한다.

[컴] 크롬캐스트 자료

구글캐스트 / 크롬캐스트 / chromecast / chrome cast / google cast



크롬캐스트 자료




[컴][리눅스][유틸] service 명령어와 systemctl 명령어 차이

차이 / service 명령어와 systemctl 명령어 차이 / service vs systemctl / script

service 명령어와 systemctl 명령어 차이

service 는 wrapper script 이다.
이 script 는 systemd service 의 start, stop, status 와 관련된 일들을 할 수 있도록 해준다.
내부적으로 service script 가 initctl or systemctl or the /etc/init.d 를 사용한다.
복잡한 일을 할 때는 직접 systemctl 등을 이용해야 하지만, start, stop, status 관련 작업은 service script 가 더 낫다. 추가적인 작업을 해주기 때문이다.
예를 들어, socket 과 관련된 systemd service 인 경우 먼저 socket 을 stop 해준다. 이외의 자세한 사항은 위 script 나 ref. 1 을 참고하자.

Reference

  1. Difference between systemctl and service commands - Ask Ubuntu

[컴] 프리랜서 사이트

freelancer / job / 일 / 개발일 / 프로그래머 직장 / 일감 / 프리 / 프리랜서

프리랜서 사이트

한국 프리랜서 사이트

기타