2020.11_미국_대선2023. 5. 3. 16:59

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/644035  (2020.11.25)

 

이전에 정리했던 "2020년 미국 대선 관련, 미시건(Michigan)주 개표결과 분석 - 시바 아야두라이(Shiva Ayyadurai)"에서 이어지는 글. 여기서 다루는 내용을 이해하려면 우선 앞의 글을 정독하는 것이 좋겠다.

 

여기서 살펴보려는 동영상은 앞의 글에서 시바 아야두라이(Shiva Ayyadurai) 박사가 제시한 미시건(Michigan)주 개표결과 그래프의 경향성이 부정선거임을 나타낸다고 보기 어렵다는 취지의 주장을 담고 있다. 매트 파커(Matt Parker)라는 사람이 운영하는 "Stand-up Maths"라는 이름의 유튜브 채널이며, 아래의 동영상이다.

 

https://youtu.be/aokNwKx7gM8

 

여기서 주장하는 주요 내용은 아래와 같다.

x축을 정당투표(straight party vote)의 공화당 득표율, y축을 개별후보투표(individual candidate vote)의 트럼프 득표율에서 공화당 득표율을 뺀 값으로 설정하여 각 프리싱트(precinct)의 개표 결과를 점으로 찍어서 그린 산점도(scatter plot)를 그렸을때 선형 반비례 경향이 나온다.

그런데, 동일한 카운티(county)에서 민주당과 바이든의 득표율을 가지고 산점도를 그려 보니 역시 마찬가지로 선형 반비례 경향을 보여준다. 대량으로 트럼프의 표를 바이든의 표로 옮기는 형태의 조작을 했다면 바이든의 산점도에서 뭔가 차이가 나타나야 할 것 같은데, 동일한 경향이다. 양쪽 후보 모두 비슷한 경향의 산점도를 보이므로 큰 문제가 없다는 것이다.

 

 

과연 이 주장은 맞는 말일까? 깊이 생각하지 않고 들으면 그럴듯할 수도 있겠다. 그런데, 조금 자세히 따져 보면 얘기는 달라진다.

미시건주의 어느 카운티에 속한 "a프리싱트"와 "z프리싱트"를 가정해 보자.

a프리싱트는 공화당 우세 지역이라서 정당투표에서 공화당 득표율이 80%가 나왔다. 트럼프 그래프에서 a프리싱트의 x축 위치는 80% 지점이 될 것이다. 그렇다면 바이든 그래프에서 a프리싱트의 x축 위치는 어디가 될까? 20% 지점이 된다.

z프리싱트는 민주당 우세 지역이라서 정당투표에서 공화당 득표율이 20%가 나왔다. 트럼프 그래프에서 z프리싱트의 x축 위치는 20%에, 바이든 그래프에서 z프리싱트의 x축 위치는 80% 지점이 된다.

즉, 트럼프 그래프와 바이든 그래프의 x축에서 특정 프리싱트에 해당하는 점은 서로 반대쪽 영역에 위치하게 된다.

이제 시바 아야두라이 박사가 제시한 가중경쟁 알고리즘(weighted race algorithm)을 적용해서 선거조작을 한다고 생각해 보자. a프리싱트는 공화당 우세지역이므로 대량의 트럼프 득표를 바이든으로 옮겼다. 이렇게 하면 정당 득표수에 비해서 트럼프 개인 득표수가 줄어들게 되므로 트럼프 그래프에서 a프리싱트에 대응하는 점은 y축 위치가 아래로 이동한다. x=80% 지점에 있던 a프리싱트 좌표의 y축값이 아래로 내려갔다.

그렇다면 바이든 그래프에서 a프리싱트에 대응하는 점은 어떻게 될까? 바이든 개인 득표수가 증가하므로 이 점의 y축 위치는 위로 이동한다. x=20% 지점에 있던 a프리싱트 좌표의 y축값이 위로 올라갔다.

z프리싱트는 민주당 우세 지역이라서 가중경쟁 알고리즘을 적용하지 않는다. 따라서 양쪽 그래프에서 z프리싱트에 대응하는 점의 위치는 변화하지 않는다. z프리싱트의 x축 위치는 트럼프 그래프에서 x=20%, 바이든 그래프에서 x=80% 지점이다.

 

 

조작을 적용하면 트럼프 그래프에서 x축값이 큰 점들은 y축값이 아래로 내려가고(감소하고), 바이든 그래프에서 x축값이 작은 점들은 y축값이 위로 올라간다(증가한다). 양쪽 후보의 그래프가 둘 다 선형 반비례 경향을 나타내는 것이다.

다수의 프리싱트에서 약속이나 한 것처럼 이런 일이 벌어지면, 이것은 정상이라고 얘기할 상황이 아니라 조작을 의심해야 할 상황이다. 양쪽 후보의 산점도 경향이 비슷하기 때문에 문제가 없는 것이 아니라, 가중경쟁 알고리즘으로 조작을 하면 당연히 양쪽 후보의 산점도 경향이 비슷하게 나타난다.

동영상 후반부에는 y축을 득표율의 차이가 아니라 개별후보투표 득표율로 정의하여 그래프를 그려서 보여준다.

 

 

이 산점도는 트럼프와 바이든 둘 다 선형 비례 경향을 보여주고 있다. 공화당 득표가 많은 프리싱트에서는 트럼프 득표율도 높고, 민주당 득표가 많은 프리싱트에서는 바이든 득표율이 높아서 당연히 비례 경향을 보이기 때문에 문제가 없다고 주장한다.

그런데, 아야두라이 박사가 제시한 가중경쟁 알고리즘은 양쪽 득표율의 정비례 관계 자체를 뒤집는 것이 아니다. 득표율 비례관계의 기울기를 바꾸는 것이다.

공화당 우세 프리싱트에서 트럼프 득표율을 낮추고 바이든 득표율을 높이므로, 트럼프 그래프에서 x축값이 큰 영역의 점들은 아래로 내려오고 바이든 그래프에서 x축값이 작은 영역의 점들은 위로 올라간다. 따라서 기울기는 0보다는 커서 비례 경향은 유지하지만 기울기값은 실제보다 낮아진다.

1차 함수 y=mx+b를 가지고 세로축을 y 대신 y-x로 그래프를 그리면 어떻게 될까?

 

 

y = mx+b
y-x = mx+b-x = (m-1)x+b

기울기 m이 1보다 작으면 음수(-)가 되어 반비례하는 경향이 나타난다. 가중경쟁 알고리즘에 의한 조작이 적용되면 비례관계의 기울기를 낮게 만들기 때문에 차이를 세로축으로 하여 그리면 반비례 경향도 그만큼 뚜렷해질 것이다.

 

 

설명은 "이러한 경향은 문제가 없으며 조작이 없다"는 식으로 하고 있지만, 조작이 없다고 단정하기엔 이르다. 게다가 민주당 절대우위 프리싱트가 잔뜩 몰려 있는 웨인 카운티(Wayne County)에서는 이러한 선형 반비례 경향이 아예 나타나지 않았다.

728x90
Posted by 반달가면
bash script2023. 5. 3. 11:23

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/568477

 

expect 스크립트를 이용하면 rsync 원격 백업을 자동화할 수 있다. 이 방법은 예전에 올렸던 ssh 자동 접속 방법과 같은 맥락이다. rsync에 대한 내용은 이전 게시물을 참고하자. 여기로

 

스크립트 이름은 auto_rsync.exp로 하고, 인자(argument)는 원천(source) 디렉토리, 원격주소, 백업 디렉토리, ssh 접속암호 순서로 지정한다고 하자. 예를 들어 /home/john/my_dir 디렉토리를 192.168.0.10의 john 계정에 있는 /home/john/my_backup 디렉토리로 백업한다고 하면 아래와 같이 실행하게 될 것이다. 접속암호는 my_password라고 가정하자.

expect -f auto_rsync.exp /home/john/my_dir john@192.168.0.10 /home/john/my_backup my_password

auto_rsync.exp 스크립트는 아래와 같이 구성할 수 있다.

# auto_rsync.exp
# 변수 할당
set src_dir [lindex $argv 0]
set remote_host [lindex $argv 1]
set dst_dir [lindex $argv 2]
set password [lindex $argv 3]
# rsync 실행
spawn rsync -r -v -z -u "$src_dir" "$remote_host:$dst_dir"
# 암호 입력 메세지 기다림
expect -nocase "password"
# 암호 전송
send "$password\r"
# 이후 작업 권한을 사용자에게 넘김
interact

위 스크립트가 동작하는 과정을 간단하게 설명하자면 아래와 같다.

우선 각 인자를 변수에 할당한다(set). 첫번째 인자는 src_dir, 두번째 인자는 remote_host, 세번째 인자는 dst_dir, 네번째 인자는 password에 할당.

rsync 명령을 실행한다(spawn).

이후 암호를 입력하라는 메세지를 기다렸다가(expect) 접속암호를 보낸다(send).

암호를 입력하고 나면 rsync에서 알아서 백업이 수행되므로 실행권한을 사용자에게 되돌린다(interact).

수동으로 백업을 한다면 굳이 위와 같은 스크립트를 이용할 필요가 없으나, 다수의 디렉토리를 백업할 때 편리하다. 아래의 예시를 보자.

echo "john@192.168.0.10의 접속 암호를 입력해 주세요."
read password
# /home/john 하위에 있는 my_dir_a, my_dir_b, my_dir_c 백업
for src_dir in my_dir_a my_dir_b my_dir_c
do
  expect -f auto_rsync.exp "/home/john/$src_dir" john@192.168.0.10 "/home/john/backup_dir/$src_dir" "$password"
done

read 명령으로 접속암호를 한번만 입력 받은 후, 세개의 디렉토리를 원격에 순차적으로 백업할 수 있다.

728x90
Posted by 반달가면
리눅스2023. 5. 3. 10:56

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/573664

 

imagemagick 패키지를 설치하면 리눅스에서 그림 파일 형식을 변환하거나 크기조정(resize)을 간단하게 수행할 수 있다. 이미지 편집 프로그램인 GIMP를 사용해도 되지만, 여러개의 파일에 대해 반복 작업을 해야 하는 경우엔 터미널창에서 명령어로 작업하는 것이 훨씬 빠르다.

우선 imagemagick 패키지를 설치하자. 터미널창에서 아래와 같이 입력. (데비안/우분투 기준이다.)

# S/W 저장소 갱신
sudo apt-get update
# imagemagick 설치
sudo apt-get install imagemagick

이제 convert 명령으로 그림 파일을 변환할 수 있다. 형식은 아래와 같다.

convert [입력 옵션] 입력파일 [출력 옵션] 출력파일

예를 들어 test.png 파일을 test.jpg 파일로 변환하고 싶다면 터미널창에서 아래와 같이 입력하면 된다.

convert test.png test.jpg

jpg 파일의 화질(quality)을 지정하려면 -quality 옵션을, 크기를 조정하려면 -resize 옵션을 추가해 준다. -quality 옵션의 화질 수준은 1(저화질)에서 100(고화질) 사이의 값으로 지정해 준다.

# test.png -> test.jpg 변환, 화질 95, 크기 800*600
convert test.png -quality 95 -resize 800x600 test.jpg

-resize 옵션을 사용할 때, 가로 세로 비율을 유지하면서 가로 또는 세로 하나의 값만 지정할 수도 있다. 아래의 예시를 보자.

# test.png -> test_resized.png, 가로 크기 500 픽셀
convert test.png -resize 500 test_resized.png

# test.png -> test_resized.png, 세로 크기 500 픽셀
convert test.png -resize x500 test_resized.png

컬러 이미지를 흑백으로 바꿀 수도 있다. 입력 옵션에서 컬러스페이스(colorspace)를 변경해 준다.

# test.png -> test_gray.jpg, 흑백(grayscale) 변환, 화질 95
convert -colorspace gray test.png -quality 95 test_gray.jpg

위와 같이 하면 결과 이미지가 상당히 어둡게 나오는데, 원래의 밝기를 유지하기 위해 -gamma 옵션을 추가하자.

# test.png -> test_gray.jpg, 흑백(grayscale) 변환, 화질 95, 밝기 조정
convert -colorspace gray -gamma 2.2 test.png -quality 95 test_gray.jpg

여러 페이지로 구성된 pdf 파일도 convert를 이용해서 그림 파일로 변환할 수 있다. 이전 게시물을 참고하자. 여기로

그 외에도 엄청나게 많은 기능들이 있는 것 같다. 자세한 내용은 man 페이지를 참고해야 할 듯.

man convert

for 반복문과 조합하면 여러개의 이미지를 한꺼번에 변환할 수 있다. ~/pictures 디렉토리에 있는 모든 png 파일을 가로가 800 픽셀인 jpg 파일로 변환하는 경우를 생각해 보자. 아래와 같이 간단한 스크립트를 만들면 된다.

# ~/pictures 디렉토리로 이동
cd ~/pictures
# for 반복문
for file in `ls | grep "\.png$"`
do
  # 확장자(png)를 jpg로 바꾼 형태를 결과파일명 변수 result_file에 할당
  result_file=`echo "$file" | sed 's/\.png$/\.jpg/'`
  # 이미지 변환  (png -> jpg)
  convert $file -quality 95 -resize 800 $result_file
done

ls 명령의 결과에서 .png로 끝나는 것만 grep 명령으로 추려낸 것을 for 반복문에 적용해서 변수 file에 할당한다. 결과 파일명은 sed 명령을 이용해서 입력 파일명의 확장자만 변경한 형태로 만들어서 변수 result_file에 할당했다. (sed 명령을 이용한 문자열 대체는 이전 게시물을 참고하자. 여기로)

 

 

728x90
Posted by 반달가면
리눅스2023. 5. 3. 10:50

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/573003

 

칼리 리눅스(Kali Linux)의 최신 버전인 2016.1에서 한글 입력 기능을 추가하는 방법이다.

칼리 리눅스는 데비안(Debian)을 기반으로 해서 제작된 배포판인데, 설치를 해 보면 S/W 저장소(repository) 목록에 칼리만 있고 데비안은 포함되어 있지 않다. 데비안이 최신 버전보다는 검증된 안정성을 추구하는 배포판이고, 칼리 리눅스는 그보다는 최신 버전을 지향하고 있어서 호환성 측면에서 간극이 생겼기 때문에 데비안 저장소도 제외되어 있는 것이 아닌가 싶기도 하다. 커널 버전만 봐도 칼리 2016.1은 거의 최신에 가까운 4.3.0이다.

어쨌든, 영어만 쓰기에는 꽤나 불편하므로 한글 입력 기능은 추가해 볼만하다. 설치 과정은 대략 아래와 같다.

우선 칼리 리눅스 2016.1 버전을 설치한다. 칼리 리눅스 공식 홈페이지로 가서 다운로드 할 수 있다. 여기로.

개인적으로 언어 설정을 영어로 하는 것을 추천. 한국어로 할 경우 번역도 불완전하고 한글이 제대로 표시되지 않을 것이다. 영어로 설치한 후에 한글 폰트와 한글 입력기를 추가해서 사용하는 편이 더 나을 듯하다.

설치를 완료하고 루트(root) 계정으로 로그인한 후에 터미널창에서 작업을 진행한다.

우선 S/W 저장소 목록에 데비안 8(Jessie)의 공식 S/W 저장소를 추가하자. vi 편집기로 /etc/apt/sources.list 파일을 편집한다.

# vi로 /etc/apt/sources.list 파일 편집
vi /etc/apt/sources.list

/etc/apt/sources.list 파일에 아래의 내용을 추가하고 저장한다.

deb http://httpredir.debian.org/debian jessie main non-free contrib

이제 S/W 저장소 정보를 갱신하자. 터미널창에서 아래와 같이 입력.

# S/W 저장소 갱신
apt-get update

자, 이제 필요한 패키지를 설치하자. 한글 입력기는 나비(nabi)를 사용한다.

# 한글 입력기 설치
apt-get install nabi

# 한글 폰트 설치(은글꼴, 나눔글꼴)
apt-get install fonts-nanum fonts-nanum-coding fonts-unfonts-core

# 입력기 설정을 위한 im-config 설치
apt-get install im-config

패키지 설치를 완료하면 이제 입력기 설정을 해 준다. 터미널창에서 아래와 같이 입력.

im-config


입력기 설정을 수동으로 지정하겠느냐고 묻는데 "YES" 버튼을 클릭하면 설정창이 나온다. 여기서 입력기를 "hangul"로 선택하자. "OK" 버튼을 누르면 완료.

로그아웃하고 다시 로그인하면 한글 입력을 사용할 수 있다. 한영전환은 쉬프트(shift)+스페이스(space), 한자변환은 F9키를 사용한다.


앞에서도 언급했듯이, 데비안 저장소에서 시스템 관련 패키지를 이것 저것 마구 설치하면 칼리 리눅스와 충돌이 발생할 수 있다. 한글 입력을 설치하고 나면 /etc/apt/sources.list 파일에서 데비안 저장소 부분을 주석 처리하는 것이 안전할 듯.

 

 

728x90
Posted by 반달가면