리눅스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 반달가면
리눅스2023. 5. 3. 10:45

 

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

 

hexdump를 이용하면 텍스트 또는 이진(binary) 파일의 내용을 16진수로 출력할 수 있다. 우선 아래의 예시를 보자.

# my_file.txt 내용 확인
cat my_file.txt
this is a test file...

# 16진수로 출력(hexdump) - 2바이트(16비트) 단위로 해석됨에 유의
hexdump my_file.txt
0000000 6874 7369 6920 2073 2061 6574 7473 6620
0000010 6c69 2e65 2e2e 000a                   
0000017

hexdump에 아무런 옵션을 지정하지 않을 경우, 출력 내용이 2바이트(16비트) 단위로 구성되어 있음에 유의하자. 인텔 x86, AMD64는 모두 리틀-엔디안(little-endian, 작은 자리수 바이트가 주소값이 낮음) 구조이므로 파일을 읽어서 0x74 다음에 0x68이 나왔을 때 hexdump는 먼저 나온 0x74가 작은 자리수 바이트(LSB)라고 판단하여 위치를 뒤집어 출력해 준 것으로 보인다(0x7468 -> 0x6874).
 
파일의 내용을 볼 때는 그냥 1바이트씩 순서대로 출력하는 것이 더 낫다. -C 옵션을 이용하면 1바이트 단위로 16진수와 ASCII값을 나란히 출력하게 할 수 있다. 우리가 통상 hex 에디터에서 파일을 열었을 때 보던 모습이다.

# 16진수로 출력(-C 옵션, hex + ASCII)
hexdump -C my_file.txt
00000000  74 68 69 73 20 69 73 20  61 20 74 65 73 74 20 66  |this is a test f|
00000010  69 6c 65 2e 2e 2e 0a                              |ile....|
00000017

출력 형식을 직접 지정할 수도 있다. -e 옵션을 이용한다. 아래의 예시를 보자.

# 1바이트 4개씩 묶어서 출력
hexdump -e '4/1 "%02X " "\n"' my_file.txt
74 68 69 73
20 69 73 20
61 20 74 65
73 74 20 66
69 6C 65 2E
2E 2E 0A

-e 옵션의 내용을 보자면 1바이트 단위로 4개씩 묶어서(4/1) 2자리 16진수와 공백("%02X ") 형식으로 출력한 후에 줄바꿈("\n")을 출력하라는 뜻이다.

아래의 예시처럼 묶음 단위를 지정하지 않을 수도 있다.

# 1바이트씩 출력
hexdump -e '/1 "%02X "' my_file.txt
74 68 69 73 20 69 73 20 61 20 74 65 73 74 20 66 69 6C 65 2E *
0A

위의 출력 내용을 보면 0x2E가 반복되는 부분을 줄여서 아스테리스크(*)로 보여주는데, 만약 반복되는 부분도 그대로 출력하려면 -v 옵션을 추가한다.

# 1바이트씩 출력, 반복되는 부분도 그대로 출력(-v 옵션 추가)
hexdump -v -e '/1 "%02X "' my_file.txt
74 68 69 73 20 69 73 20 61 20 74 65 73 74 20 66 69 6C 65 2E 2E 2E 0A

이것 말고도 더 다양한 기능을 제공하고 있는 듯하나, 개인적으로 위에 언급한 옵션 정도만 사용하고 있다.

 

 

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

 

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

 

리눅스에서 pdf 파일을 jpg로 변환하는 방법이다. imagemagick 패키지를 이용한다. 이미 기본으로 설치되어 따라왔을 수도 있는데, 만약 설치되어 있지 않다면 설치부터 해 주자. 터미널창에서 아래와 같이 입력(데비안/우분투 기준이다).

# S/W 패키지 목록 갱신
sudo apt-get update

# imagemagick 설치
sudo apt-get install imagemagick

이미 설치되어 있다면 convert 명령으로 변환하면 된다. 기능이 엄청나게 많은 것 같은데 사실 pdf 변환에만 사용중이다;; 아무튼 터미널창에서 아래와 같이 입력하자.

# my_file.pdf를 my_file.jpg로 변환
convert my_file.pdf my_file.jpg

-quality 옵션을 이용하면 jpg 압축률을 지정해서 화질 수준을 정할 수도 있다. 범위는 1~100이고, 100이 최고 화질이다.

# 화질 수준 100(최고 화질)
convert my_file.pdf -quality 100 my_file.jpg

pdf 파일이 여러 페이지로 구성되어 있다면 my_file-0.jpg, my_file-1.jpg, 이런 식으로 여러개의 jpg 파일이 생긴다. 만약 특정 페이지만 변환하고 싶다면 아래와 같이 입력하자.

# 첫 페이지만 변환
convert my_file.pdf[0] my_file.jpg

# 두번째~네번째 페이지만 변환
convert my_file.pdf[1~3] my_file.jpg

페이지 번호를 0부터 계산한다는 점에 유의하자. 첫번째 페이지가 0, 두번째 페이지가 1 이런식이다.

 

728x90
Posted by 반달가면
2020.11_미국_대선2023. 5. 2. 18:53

 

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

 

https://youtu.be/Ztu5Y5obWPk

 

얼마전에 정리했던 조지아(Georgia)주 부정선거 의혹과 관련된 게시물인 "2020년 미국 대선 관련, 조지아(Georgia)주 재검표 근황"에서 댓글을 통해 알게 된 유튜브 동영상이다. 시바 아야두라이(Shiva Ayyadurai)라는 MIT 출신 과학자가 이번 미국 대선과 관련하여 미시건(Michigan)주 개표결과를 분석하여 소개하는 내용이다. 내가 이해한 수준에서 주요 내용을 정리해 본다.

 

이 문제를 살펴보려면 우선 미국 주(state)의 행정구역을 먼저 알아둘 필요가 있다. 하나의 주는 여러개의 "카운티(county)"로 구성되어 있다. 하나의 카운티는 여러개의 "프리싱트(precinct)"로 구성되어 있다.

즉, 프리싱트가 모여 카운티를 이루고 카운티가 모여서 주를 이룬다. 이 동영상에서 분석한 대상은 미시건주 특정 카운티의 프리싱트별(別) 득표율이 보이는 경향성이다.

또 한가지 알아둘 점은, 미시건주의 투표 방식이다. 유권자는 "정당투표(straight party vote)", "개별후보투표(individual candidate vote)" 이렇게 2가지 방식중 하나를 자유롭게 선택하여 투표할 수 있다.

이런 방식을 채택한 이유는 주에 따라 대선과 상원/하원 선거가 겹칠 수 있기 때문인 것으로 보인다. 예를 들어 정당투표를 선택하여 공화당에 투표하면 모든 공화당 후보에 대해 일괄투표한 것으로 간주된다.

반면에 예를 들어 대통령 후보는 공화당 후보를, 상원/하원의원 후보는 무소속 후보를 선택하고 싶다면 개별후보투표를 선택하여 각 후보에 기표하면 된다.

간단한 예를 들자면, 어떤 프리싱트에서 100명이 투표했는데, 60명은 정당투표를 선택해서 30명이 공화당에 기표했고, 나머지 40명은 개별후보투표를 선택해서 30명이 트럼프에 기표했다고 하자. 정당투표에서의 공화당 득표율은 30/60*100=50%가 된다. 개별후보투표에서의 트럼프 득표율은 30/40*100=75%가 된다. 이 프리싱트에서 트럼프의 전체 득표율은 60/100=60%가 될 것이다.

자, 그려면 정당투표와 개별후보투표의 통계적 경향성에 대해 생각해 보자. 예를 들어 미시건주 "Z"라는 카운티에 "A"라는 프리싱트가 있다고 생각해 보자. 이 프리싱트는 공화당 지지세가 강한 곳이라 정당투표를 선택하여 투표한 결과를 보니 공화당(트럼프) 득표율이 60%에 달했다. 그렇다면 이 프리싱트에서 개별후보투표를 선택하여 투표한 결과를 볼 때 트럼프(공화당) 득표율은 60%와 가까울 것인가, 아니면 무관할 것인가?

당연히 수치상의 차이는 있겠으나, 공화당 지지자들이 많은 프리싱트이므로, 개별후보투표를 선택한 사람들도 비슷한 비율로 다수가 공화당 후보인 트럼프를 선택할 것이다.

반대로 민주당 지지자들이 잔뜩 몰려 있는 프리싱트라면, 정당투표에서의 공화당 득표율도 낮고, 개별후보투표에서의 트럼프도 낮을 것이며, 득표율 차이가 아주 크진 않을 것이다.

이제 그래프를 그린다. X축은 정당투표에서의 공화당 득표율이고, Y축은 득표율 차이(개별후보투표에서의 트럼프 득표율 - 정당투표에서의 공화당 득표율)이다.

예를 들어 A 프리싱트에서 정당투표 공화당 득표율이 60%이고 개별후보투표 트럼프 득표율이 65%라면, 이 프리싱트를 그래프에 하나의 점으로 찍을 수 있다. X축은 60% 지점이 되고, Y축은 65 - 60 = 5% 지점이 된다. 아래의 그래프다.

 

 

특정 카운티에 대해 이런 그래프를 그리면, 여러개의 프리싱트가 있으므로 해당 카운티에 속한 프리싱트의 수만큼 점이 찍힌 산점도(scatter plot)가 생성된다.

이 산점도의 Y축 분포는 어떤 모습일 것인가? 아마도 Y=0% 기준으로 무작위로 점이 찍힐 것이라고 예상할 수 있다. 아래의 그래프다.

 

 

예를 들어 만약 트럼프가 공화당도 민주당도 지지하지 않는 중도층의 지지를 성공적으로 확보했다면, 또는 해당 카운티에서 공화당의 인기에 비해 트럼프 개인의 인기가 높다면, 개별후보투표에서의 트럼프 득표율이 정당투표에서의 공화당 득표율보다 높은 경향을 보일 수도 있을 것이다. 이렇게 되면 Y축값이 양수(+)인 점들이 많을 것이다. 아래의 그래프다.

 

 

반대로 공화당 지지자들 사이에서조차 트럼프 개인의 인기가 떨어졌다면, Y축값이 음수(-)인 점들이 많을 것이다. 아래의 그래프다.

 

 

이제 실제 개표결과를 가지고 몇개의 카운티에 대해 산점도를 그린다. 아래의 그래프는 미시건주 오클랜드 카운티(Oakland County)의 사전투표 결과다.

 

 

공화당 지지율이 높은, 즉 X축값이 큰 프리싱트일수록 트럼프 지지율이 떨어지는, 반비례하는 경향을 보인다. 그것도 직선으로 예쁘게 내려간다.

오클랜드 카운티의 당일투표 결과는 아래의 그래프다. 앞에서 보았던 사전투표와 같은 경향성을 보인다.

 

 

사전투표와 당일투표를 같이 놓고 보면 아래와 같다. 왼쪽이 사전투표, 오른쪽이 당일투표다.

 

 

무슨 이유인지 모르겠지만, 공화당 지지율이 높으면 높을수록 트럼프를 싫어하는 것 같다. 게다가 깔끔하고 예쁘게 직선형 경향성을 보이면서 말이다.

그렇다면 다른 카운티들은 어떨까? 아래의 그래프는 마콤 카운티(Macomb County)의 사전투표와 당일투표 결과다. 흥미롭게도, 오클랜드 카운티와 동일한 경향을 보인다.

 

 

또 다른 카운티를 보자. 아래의 그래프는 켄트 카운티(Kent County)의 사전투표와 당일투표를 하나의 그래프에 합해서 그린 것이다. 역시 동일한 경향을 보인다.

 

 

서로 다른 카운티가 있고 각 카운티마다 수많은 프리싱트가 있는데 이 모든 투표자들이 자기 취향대로 무작위로 각자 알아서 투표를 했다. 대체 어떻게 해야 저렇게 깔끔하게 비슷한 경향을 보이는 산점도를 뽑아낼 수 있을 것인가?

시바 아야두라이 박사의 주장은, 지리적으로 서로 떨어진 곳에서 투표자들이 각자 개인의 의사로 투표했다면 이런 식으로 계산한 듯한 경향성의 산점도가 나오는 것은 통계적으로 불가능하며, 개표/집계 소프트웨어에 선거조작 알고리즘이 포함되어 있을 가능성이 높다는 것이다.

공화당 지지율이 높은 곳일 수록 트럼프에게 간 표가 많을 것이므로, 공화당 지지율에 비례해서 트럼프의 득표를 바이든의 득표로 바꿔서 집계하도록 조작하면 이러한 경향성을 얻을 수 있다. 공화당 지지율이 높은 곳일수록 더 많은 수의 트럼프 득표를 가져다가 바이든 득표로 바꾸는 것이다.

공화당 지지율이 낮은 곳에서는 트럼프에게 간 표 자체가 적을 것이기 때문에 조작해야 할 대상도 적고 들킬 확률도 높다. 알고리즘으로 인하여 바이든 100%, 트럼프 0%의 득표율이 나오는 프리싱트가 속출하면 의심을 받을 수 있다.

"공화당 지지자들 중에서도 트럼프를 싫어하는 사람들이 많기 때문에 저러한 경향은 크게 이상하지 않다"라고 주장할 수도 있겠으나, 왜 서로 다른 카운티들이 저렇게 다 같이 약속이나 한 것처럼 깔끔한 선형 경향성을 보이는지 어떻게 설명할 수 있을 것인가?

이제 꽤나 재미 있는 그래프가 나온다. 웨인 카운티(Wayne County)다. 민주당의 아성(?) 디트로이트(Detroit)가 웨인 카운티에 속해 있으며 대다수의 프리싱트가 골수 민주당 지지자들로 바글거린다. 당연히 대다수의 프리싱트에서 공화당 득표율은 바닥일 것이고, 트럼프 득표율은 더 바닥일 것이라고 예상할 수 있을 것이다.

앞에서 언급했듯이, 만약 트럼프의 표를 바이든의 표로 바꿔서 계산하는 투표조작 알고리즘이 작동한다면 트럼프의 표 자체가 적을 것이기 때문에 효과도 별로 없고 오히려 들킬 확률만 높다.

그러므로 조작을 하려면 다른 방식을 써야 한다. 예를 들면 디트로이트 개표장인 TCF센터의 창문을 다 가리고 공화당 참관인들을 쫓아내고 개표작업을 중단한 후에 새벽의 어둠을 틈타 바이든에 기표된 가짜 투표지를 대량으로 쏟아붓는다던가 하는 방법을 써야겠다.

만약 부정선거가 애초부터 없었고, 단지 트럼프 개인의 이미지가 워낙 나빠서 공화당 득표율이 높을수록 트럼프 특표율이 낮아지는 것이 자연스러운 현상이라고 한다면, 웨인 카운티에서도 이러한 선형 반비례 경향성이 나타날 수 있을 것이다.

이제 그래프를 보자. 켄트 카운티와 마찬가지로 사전투표와 당일투표를 하나로 합해서 그린 것이다. 아래의 그래프다.

 

 

대체 이것을 어떻게 설명할 것인가? 오클랜드, 마콤, 켄트에서 보이던 깔끔한 선형성은 다 어디로 도망간 것인가?

게다가 공화당 지지율이 바닥인(X축값이 작은) 프리싱트에서 오히려 트럼프 개인의 지지율은 공화당 지지율보다 높아서 Y축이 양수(+)인 영역에 수많은 점이 찍히고, 공화당 지지율이 높은(X축값이 큰) 프리싱트에서도 트럼프 개인의 지지율이 더 높아서 Y축이 양수(+)인 영역에 대부분의 점들이 분포한다.

조작 알고리즘이 있었다는 가정하에 생각해 보자면, 최소한 다른 카운티에서 작동한 조작 알고리즘이 웨인 카운티에는 적용되지 않았음이 분명하다. 상식적으로 생각을 해 봐도, 민주당 절대우위 카운티이므로 이런 종류의 알고리즘은 당연히 적용하지 말아야 할 것이다.

수백만명이 무작위로 투표하는데 서로 다른 카운티에서 저런 식으로 서로 약속이라도 한 것 같은 경향성이 우연의 일치로 저렇게 나올 수 있을까? 게다가 민주당 절대우위인 웨인 카운티는 제외하고?

시바 아야두라이 박사의 주장을 요약하자면, 저렇게 많은 프리싱트가 모여서 다 같이 저렇게 깔끔한 선형 1차 함수의 경향성을 나타내도록 만드는 방법은 컴퓨터 알고리즘뿐이다. 이것은 가중경쟁 알고리즘(weighted race algorithm)이라고 불리며, 공화당 지지율에 비례하여 교체하는 트럼프 득표의 비율을 높이는 방식으로 구현되어 있는 것으로 추정된다.

미시건주 부정선거 의혹과 관련하여 예전에 정리했던 게시물에 있던 내용을 다시 가져와 보면 아래와 같다.

 

 

미시건주 공화당 의장(chairwoman) 로라 콕스(Laura Cox)는 금요일 기자회견에서 이렇게 말했다. "앤트림 카운티(Antrim County)에서 공화당쪽 표가 민주당표로 계산되어 6천표가 잘못 집계되었습니다. 카운티 사무원이 '집계용 소프트웨어에서 오류가 발생하여 표 계산이 잘못되었다'고 제보했습니다."

콕스는 "그 이후, 우리는 지금까지 47개 카운티가 동일한 소프트웨어를 사용하고 있다는 사실을 알아냈다"고 말했다. 미시건주의 총 83개 카운티중 절반이 넘는 비중이다. 콕스는 이 카운티들에서 "비슷한 오류가 발생하는지 철저하게 결과를 조사해야 한다"고 촉구했다.  트럼프 선거운동본부는 그녀의 언급을 트위터에 공유했다.

디트로이트 프리 프레스(the Detroit Free Press)의 보도에 의하면 앤트림 카운티에서 사용된 장비는 도미니언 보팅 시스템즈(Dominion Voting Systems)라는 업체의 장비다.


미시건주 공화당 의장 로라 콕스의 발언을 추가로 다시 가져와 본다.


직원들이 진실을 은폐하기 위해 TCF센터의 창문을 다 가렸습니다. 이것 말고도 무엇을 더 숨기고 있는 것입니까? 조셀린 벤슨(Jocelyn Benson, 미시건주 주무장관)은 투명한 선거를 약속했지만, 이번 선거는 전혀 투명하지 않았습니다.

우리가 정말로 납득할 수 없는 점은, 벤슨 장관이 유권자들에게 아직 개표되지 않은 표의 수가 얼마인지 말하지 못한다는 사실입니다. 단순한 산수일텐데도, 실제 상황에 전혀 근거하지 않은 이상한 수자를 얘기하는 것을 이해할 수가 없습니다. 주무장관이 투표 종료후 몇시간 내에 총 투표수가 얼마인지 미시건의 유권자에게 공표하는 것이 정상이라고 생각합니다.


우리나라의 지난 4.15 총선과 마찬가지로, 이것은 당장에 어느 한쪽으로 결론을 단정할 문제가 아니라 철저하고 면밀하게 조사하여 규명해야 할 문제다.

728x90
Posted by 반달가면