우선 고등학교에서 수열은 배우셨을거라고 생각하고 간단한걸 이야기해보겠습니다

1 2 4 8 16 32 64 ?

다음에는 무엇이 올까요?
눈치빠른 사람은 128이라고 할겁니다.

이런걸 많이 해보셨다면 패턴이 눈에 보이니까요.
뒤의숫자=2x앞의숫자

2 3 5 9 17 33 65 ?
이건요?

129라는 숫자가 보이셨나요? 아까 수열에 +1이 된 패턴입니다. 생각보다 쉽죠?
뒤의숫자 = 2x앞의숫자+1

이제부터는 조금 다른 문제입니다.

0 1 3 7 15 29 63 127

여기서 잘못 된 숫자를 고쳐보세요.

이것의 답은 29가 아닌 31입니다. 아까 패턴에서 -1을 한건데 엉뚱한 녀석이 있습니다.
그래서 그 부분을 수열의 패턴을 "학습"을 통해 알아냈고 잘못 된 부분을 "복원"했습니다.

어쨌건 우린 일부가 망가진 수열에서 잘 못된 부분을 찾아서 고칠 수 있게 되었습니다. 왜냐하면 패턴을 함수형태로 알고 있으니 이 함수에서 벗어난 부분을 고치면 되니까요.

이번엔 일부가 망가진 수준이 아닌 모두 망가진 수열을 준비해봅니다.
이 수열은 우리가 알아낸 함수와 맞는 부분이 하나도 없습니다.

3 54 19 7 284 16 34 18

이중에 아무거나 하나를 붙잡고 복원해봅시다
저는 19를 기준으로 하겠습니다
7 11 19 36 67 131

역시 제일 위에서 알아낸 수열에서 -3을 한 것으로 했습니다. 하지만 19말곤 같은 숫자가 없네요.
이건 거의 "무에서 유를 창조"한 수준입니다. 어찌됐건 우리가 학습한 패턴에 맞게 "복원"을 했습니다.

우리는 이런식으로 "패턴을 학습"했고 이에 맞추어 "복원"했지만 사실상 "창조"에 가까운 짓을 해버렸습니다.


그런데 이 수열이라는게 말입니다. 우리가 보자마자 알아낼 수 있을 정도로 쉬운녀석들만 있는 것이 아닙니다.

이게 뭐지 싶은 규칙성따위 안 보이는 수열도 참 많습니다. 대부분의 자연현상들이 그러합니다. 그러나 과학자들은 그걸 최대한 복잡한 함수화해서 근사값형태로 중간값들을 뽑아내지요. 데이터들을 최대한 모아서 오차를 점점 줄여나가서 기어코 설명할 수 있을 정도로 수치화 합니다.

그림도 사실 규칙성따위 보이지 않는 수열입니다. 심지어 이건 그냥 수열도 아니고 2차원 수열입니다. 이걸 우린 행렬이라고 부릅니다. 고등학생때 수학을 포기한적이 없다면 한번은 들어보셨을겁니다.

정제가 잘 된 그림들을 모아 행렬로 표시하고 행렬들의 패턴을 알아내 함수 형태로 가지고 있는겁니다. 다만 그 함수가 굉장히 길고 복잡해서 여백이 부족해 적기 힘든겁니다.

하지만 컴퓨터는 단순노동으로 그 긴 함수계산을 빠르게 할 수 있고 "학습"이라는 이름하에 패턴파악을 할 수 있습니다. 그리고 인간이라는 놈들은 말도 안되는 다 망가진 노이즈 덩어리를 가지고 복원하라고 던지는거고 컴퓨터는 불평없이 복원을 하는겁니다.
매번 그림을 뽑을때마다 결과가 달라지는 것도 던지는 노이즈그림이 달라지기 때문입니다.

그렇기에 학습되지 못 한 그림은 만들지 못 하는 것이고 단순히 기존 그림들을 조합하는것도 아니라는 이야기가 되는 겁니다. 그렇기에 단순히 기존 그림들의 조합이 아니라는 것일 겁니다.

여기까지가 가장 이미지 생성알고리즘, 그 중 Stable-diffusion의 기초적인 이론입니다.

,

DJMax Technika Q는 2019년에 서비스 종료된 게임입니다.
하지만 Technika시리즈가 인기를 엄청끌었고 특히 북미지역에서 독립영화도 만들정도로 상당히 인기가 많았기에 사설서버가 만들어졌습니다

httpd, php, sqlite만으로 만들어지기에 아키텍처 관계없이 제작이 가능해서 라즈베리파이에 구축하고 동시에 DHCP서버를 구성해서 라즈베리파이로 접속만 하면 문제없이 구동되도록 제작해봤습니다

https://github.com/jbl428/DMTQ-ubuntu

 

GitHub - jbl428/DMTQ-ubuntu: 우분투 기반 테크니카 Q 사설서버

우분투 기반 테크니카 Q 사설서버. Contribute to jbl428/DMTQ-ubuntu development by creating an account on GitHub.

github.com

여기의 내용을 참조했으며 여기서 ubuntu로 된 사용자 이름을 pi로 바꿔주면 됩니다.
/home/ubuntu 이런걸 /home/pi 이렇게요.

sudo apt update
sudo apt upgrade -y
sudo apt install apache2 php php-sqlite3 bind9 -y
git clone https://github.com/jbl428/DMTQ-ubuntu.git
cd DMTQ-ubuntu/
sudo cp -v sites-available/* /etc/apache2/sites-available/
sudo cp -rv ssl /etc/apache2/
sudo cp -vf bind/* /etc/bind/
sudo a2enmod rewrite ssl
sudo a2ensite server ssl
sudo a2dissite 000-default
sudo systemctl restart apache2

그 다음 /etc/apache2/sites-available의 server.conf를 열어
DocumentRoot /home/ubuntu/(어쩌고 저쩌고)
요렇게 된걸
DocumentRoot /home/pi/(어쩌고저쩌고)

이렇게 바꿔주셔야 합니다.
물론 라즈베리파이 OS설치할때 그냥 이름을 ubuntu로 하면 그대로 쓸 수 있지만 보통은 이름을 그냥 기본값으로 쓰니까 pi로 고쳤습니다. buster 버전(일명 Legacy버전) 기준 기본 이름은 pi, 비밀번호는 raspberry입니다.

그런데 bullseye로 들어오면서 방식이 바뀌었습니다. 개인적으로는 LTS인 buster를 추천하지만 bullseye버전을 쓰신다면 조금 다르게 만들어야 합니다.

이미지를 구운후에 userconf.txt파일을 만들어서 사용하거나(고급사용자용https://github.com/raspberrypi/documentation/blob/develop/documentation/asciidoc/computers/configuration/headless.adoc 에서 Configure a User 부분 참조 openssl을 사용해서 암호화해줘야 합니다.)
그냥 Raspberry Pi Imager를 사용하면서 이름을 pi로 해주시면 됩니다.

그리고

mv /home/pi/DMTQ-server/www.neonapi.com/api/accounts_server/ /home/pi/DMTQ-server/www.neonapi.com/api/accounts
sed -i 's#C:.dmtq.db3#/home/pi/DMTQ-server/_info/dmtq.db3#' DMTQ-server/dmqglb.mb.pmang.com/score/index.php DMTQ-server/dmqglb.mb.pmang.com/djmaxQ/_vendor/_config.php DMTQ-server/pmangplus.com/accounts/v3/global/login_dmq.php DMTQ-server/www.neonapi.com/api/accounts/v3/global/login_dmq.php

그 다음
DMTQ-server/_vendor/controller/UserController.php
파일을 열어서 45번째 줄을

memberId = UserModel::nextUserId(0);

이렇게 바꿔주시면 됩니다. 이제 서버 자체는 구축이 되었습니다만 DNS설정을 해주셔야 합니다. 이 부분이 상당히 골치 아픈데 저는 hostapd를 구축해서 라즈베리파이에 와이파이 접속을 하면 DNS설정을 한번에 할 수 있게 만들기로 했습니다. 어차피 로컬 서버이니 인터넷까지 갈 필요가 없으니까요. 오로지 집에서 테크니카를 하기 위한 방법입니다.

hostapd와 dnsmasq는
https://limjunho.github.io/2020/08/25/Raspberry-Pi-AP%EB%A7%8C%EB%93%A4%EA%B8%B0.html

 

Raspberry Pi AP(Access Point)만들기 - limjunho

라즈베리파이를 AP로 만드는 방법을 소개한다. 쉽게말해 wifi를 만들 수 있는데 즉 스마트폰이든 노트북이든간에 접속이 가능하다. 파일을 실행 시킬 수 있고, 로봇으로 동작시킬 수 있는등 활용

limjunho.github.io

여기 내용을 적용했습니다

우선 필요한 패키지를 설치합니다.
sudo apt install hostapd dnsmasq

sudo systemctl stop hostapd
sudo systemctl stop dnsmasq

일단 이렇게해서 서버를 잠시 정지합니다. 설정이 필요하거든요. 우선 DHCP서버와 고정IP설정을 합니다. 특히 고정IP가 중요한데 라즈베리파이가 호스트이자 게임서버가 될 예정이므로 주소가 바뀌면 문제가 생깁니다

sudo nano /etc/dhcpcd.conf
nano를 이용해서 편집을 해도 되고 vi를 써도 됩니다. 저는 간단하게 하기 위해 이렇게 합니다.
내용은

interface wlan0
static ip_address=192.168.0.82/24
nohook wpa_supplicant

저는 귀찮아서 192.168.0.82로 했지만 원하시는 IP가 있다면 바꿔주시면 됩니다. 후에 이것이 라즈베리파이의 IP가 됩니다.
sudo service dhcpcd restart
이걸로 다시 DHCP서버를 다시 시작합니다.

그 다음 hostpad 수정

sudo nano /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=AP 이름
hw_mode=g
channel=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AP 비밀번호
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

여기서 비밀번호는 평문입니다. 채널은 1번을 쓰지만 원한다면 바꾸셔도 됩니다.
그 다음
sudo nano /etc/default/hostapd
여기에 다음 내용을 추가합니다.

DAEMON_CONF="/etc/hostapd/hostapd.conf"

이걸로 hostapd에 필요한 내용이 들어갑니다.

그 다음 dnsmasq.conf 수정
sudo nano /etc/dnsmasq.conf
server=라즈베리파이의 IP(저는 192.168.0.82를 썼습니다).

로 지정해주시면 bind9로 만들어진 DNS와 연동이 됩니다. dnsmasq로 bind9을 안 쓰고도 구성이 가능할 수도 있는데 이미 만들어진 소스를 쓰기위해 이렇개 했습니다.
이제 서버를 다시 구성해봅시다.

sudo systemctl unmask hostapd.service
sudo systemctl start hostapd
sudo systemctl start dnsmasq
sudo systemctl restart apache2

이제 테크니카Q에 SSL파일을 넣어야 하는데 APK수정이 필요합니다.
이쪽은 자세하게 이야기 하지 않겠습니다.

apktool -d TechnikaQ.apk
이렇게 해서 우선 APK파일을 디컴파일링 하고
/home/pi/ubuntu-DMTQ/ssl에 있는 rootCA.crt파일을 복사해서
디컴파일링 된 폴더/res/raw/rootCA.crt에다가 덮어버립니다. 그리고 다시
apktool -b (디컴파일링된 폴더)

이렇게 하면 디컴파일링 폴더에 dist라는 폴더가 만들어지게 되고 여기에 apk파일이 만들어지게 됩니다.
이걸 signapk툴로 다시 사이닝하고 안드로이드 기기에 설치하시면 됩니다.

그리고 기기에서 와이파이 접속 메뉴로 들어가면 아까 라즈베리파이 설정할때 만든 SSID를 찾을 수 있는데 여기 접속 합니다. 인터넷이 안 된다고 뜰텐데 무시합시다. 당연히 인터넷이 안 됩니다.

테크니카를 이제 실행하면...뭔가 업데이트를 하면서 실행이 됩니다. 만약 오류로 꺼진다면 다시 실행해보시면 됩니다.
다만.. 커스텀롬의 경우 gapps가 없으면 오류가 나니 구글 관련 패키지가 설치되어 있지 않으면 설치해주세요. 플레이스토어가 꼭 설치되어야 실행이 됩니다.


하지만 이걸 일일이 만드는건 귀찮으니 그냥 제가 만든 라즈베리파이 이미지를 공유합니다.

https://mega.nz/file/qU8myQxR#YHR8orG3m5Pd2P4UkcAf_FB2DeKh_nJMhTB1rRgvWmQ

 

4.43 GB file on MEGA

 

mega.nz

waveshare의 LCD를 적용한 상태로 백업 되었기에 /boot파티션의 config.txt를
https://github.com/waveshare/LCD-show/blob/master/boot/config-nomal.txt

 

GitHub - waveshare/LCD-show

Contribute to waveshare/LCD-show development by creating an account on GitHub.

github.com

여기로 바꾸고
root파티션의 /etc/rc.local 파일 중

sleep 7
fbcp &
con2fbmap 1 0

요 세줄을 삭제하면 HDMI가 작동합니다. 어차피 CLI지만...

추가로 root파티션의 /etc/default/hostapd.conf를 수정해서
ssid와 wpa_passphrase를 수정해주시면 와이파이 이름과 와이파이접속 비밀번호 수정이 가능해집니다.

root파티션은 리눅스환경이 필요하니 윈도우에서는 가상머신을 사용하는걸 추천합니다.

,

원신은 인기있는 게임입니다.

일단 한국어가 지원이 되고 한국어 음성이 지원이 되고 그래픽도 나쁘지 않고 그냥 오픈월드 통틀어서 상당히 수작입니다.

 

하지만 지원 되는 운영체제는 윈도우, 안드로이드, iOS입니다. 하지만 스팀덱 출시이후 많은 사람들이 스팀덱에서 이 게임을 하고자 하였고 결국 성공했습니다.

 

다만... 안티치트를 제거하는 방식이기에 계정밴을 당할 위험이 있습니다. 다들 해당 방식에 대해 경고하고 있습니다.

 

방법은 일단 간단합니다.

https://github.com/an-anime-team/an-anime-game-launcher

 

GitHub - an-anime-team/an-anime-game-launcher: An Anime Game launcher for Linux with automatic patching fixing detection of Linu

An Anime Game launcher for Linux with automatic patching fixing detection of Linux/Wine and telemetry disabling Our discord server: https://discord.gg/ck37X6UWBp - GitHub - an-anime-team/an-anime-...

github.com

위 프로젝트에서 진행하는 런처를 사용하면 됩니다. 정식 미호요에서 지원하는 런처가 아닌 리눅스용으로 따로 만들어진 런처입니다. 해당 런처는 Wine을 설치하고 필요한 패치를 진행해서 리눅스에서 원신을 실행할 수 있게 도와줍니다.

 

Release에 가면 Appimage로 된것을 다운로드 받을 수 있습니다. 이것을 이용하면 편리합니다.

https://github.com/an-anime-team/an-anime-game-launcher/releases

 

Releases · an-anime-team/an-anime-game-launcher

An Anime Game launcher for Linux with automatic patching fixing detection of Linux/Wine and telemetry disabling Our discord server: https://discord.gg/ck37X6UWBp - an-anime-team/an-anime-game-laun...

github.com

물론 Flatpak을 이용해도 좋고 아치리눅스라면 AUR을 쓰는 것이 제일 편할 것입니다. 저는 우분투라서 Appimage 를 사용합니다.

Appimage를 다운로드 받고 속성에서 실행을 허용해주세요.

Appimage파일의 속성에서 권한 탭에 들어가 실행허용 관련 내용을 찾자

그리고 Appimage파일을 더블클릭하면 왠지 공식 런처와 비슷하게 생긴 무언가가 실행됩니다.

그 전에 필요한 패키지를 설치해야 합니다.

 

sudo apt install unzip tar git curl xdelta3 cabextract libnotify-bin

의외로 xdelta3를 제외하고 기본적으로 설치해서 쓰곤 하는 패키지입니다.

 

암튼 실행 후에 30초를 기다리신 뒤에 OK I Understand 버튼을 눌러주세요.

해석하면 "공식 런처가 아니고 정상적인 방법으로 실행되는것이 아니니 모든 위험은 본인이 감수해라" 대충 이런겁니다. 즉, 밴당해도 우리한테 뭐라하지 마라 이겁니다.

화면은 이런 식입니다.

이미 설치 버튼을 누른 상태다....

원신 공식 런처랑 비슷하게 생겼습니다. 다만 언어가 한국어가 아닐 뿐입니다. 우선 Install Wine을 눌러서 Wine을 설치합니다.

그러면 오른쪽 아래에 없었던 톱니바퀴 버튼이 생깁니다.

 

오른쪽 아래에 톱니바퀴를 눌러서 설정을 하나 해야합니다.

다른것보다 Voice Pack 을 한국어로 바꾸는 것이 필요합니다. 기본이 영어라 이걸 안 바꾸면 영어로 말하는 페이몬을 볼 수 있습니다. 역시 페이몬은 한국어로 떽떽 거려야 제맛.

 

그리고 이제 본격적으로 게임설치를 합시다. Install

게임 본편을 다운로드 하기 때문에 꽤 시간이 걸립니다.

 

그 다음 기다리면 Apply Patch 버튼이 생기는데 이게 핵심입니다. 게임이 업데이트되면 패치가 나올때까지 리눅스는 손가락 빨아야 합니다. 해당 패치는 안티치트를 무력화하는 패치이며 많은 분들의 노력과 분석을 통해 만들어 집니다. 아무튼 Patch를 적용하고 Launch버튼을 누르면...

Apply patch버튼이 활성화 되지 않는다면 아직 리눅스에서 실행이 불가능한 것이다. 기다리자...

게임이 실행이 됩니다. 이제 로그인을 하고 윈도우에서와 같이 기다리면 드디어 원신을 리눅스에서 할 수 있게 됩니다.

 

게임 자체는 아무 문제없이 진행이 되며 dxvk로 Vulkan으로 돌아가게 됩니다. 모바일도 아직 OpenGLES 인걸 생각하면 Vulkan모드로 돌아간다는건 엄청난 이득입니다. 윈도우도 DX11이라 DXVK를 쓰면 상당한 성능향상을 본다고 하니까요.

 

암튼 이방법을 쓰면 원신을 리눅스에서 할 수 있긴합니다만...

안티치트 무력화라는 조금 위험한 방식을 쓰고 있기때문에 조심해야 할 것 같습니다.

 

사실 제일 좋은 것은 원신이 스팀덱을 지원하는 것이지만요.

,