오라클 클라우드, 정말 이게 맞는거냐
·
Others
일어나서 디코를 보는데 봇이 응답이 없는 게 아니겠나. 또 미처 처리하지 못한 예외라도 발생했는가 싶어 인스턴스 콘솔에 연결하려고 했는데 연결이 안 된다. 잉???? 다시 봇을 보니 완전히 오프라인 상태인 게 아닌가! 그래서 급히 콘솔로 달려갔는데 아래와 같은 현실이 날 마주했다. 아니 이건 뭐... 프리 트라이얼 끝나자마자 바로 접근을 다 막아버리네... 중요한 자료가 없었기에 다행이지, 만약 그런 게 있었다면 아주 천불이 났을 것이다. 일단 이 상황이 상식적으로 이해가 되지 않는다. 트라이얼 끝날 동안 업그레이드 안한 놈은 꺼져라 뭐 이런 건가? 그냥 계정에서 그 어떤 활동도 할 수가 없다. 계정 업그레이드도 안된다는 뜻. 가입도 라이브 챗으로 문제를 해결했는데, 이 또한 아주 지랄 같은 상황이 아닐..
[Python] Pyppeteer를 버리다
·
Study/Python
여하튼 오래 걸리는 작업이다. Selenium보다 Pyppeteer가 빨랐지만, 결국 브라우저가 페이지의 많은 부분을 렌더링 해야만 하는 무거운 작업의 연속이었기에 해결책이 필요했다. 물론 Yahoo! Finance가 짧은 주기로 주가를 실시간 갱신해 주고, 다른 사이트는 이 정도로 신속하게 갱신해 주지 않기에 최대한 이를 활용하면서 속도를 올리고 싶었다. 하지만 너무 느린 속도를 감당할 수 없어서 갱신 주기를 포기하고 좀 더 가벼운 사이트를 찾기로 했다. 쓸만한 사이트를 찾은 것 같다 Stock Analysis라는 사이트를 발견했다. 처리 속도가 빠른 데스크탑에서 비교해도 명백히 이쪽이 빠르다. 아후는 무거운 렌더링 과정 없이 데이터를 가져올 수 없었지만 여기는 lxml을 통해 빠르게 가져올 수 있었다..
[Python] 스크래핑 과정 최적화를 위한 시도
·
Study/Python
동적 웹을 스크래핑하는 과정은 필수적으로 JS 렌더링이 필요하기 때문에 그 부하가 크고 시간이 오래 걸린다. 이전에 Selenium을 썼지만 이 녀석, 너무 느리다. 내 아마존 프리티어 VM이 감당하기엔 너무 큰 짐이 아니었나 싶기도 하다. 그래서 아래와 같은 방법들을 모색해 봤다. 1. 클라우드 변경 조금 더 속도가 빠른 클라우드를 찾기 위해 구글링을 거듭했다. 약간의 돈이라면 지불할 용의도 있었다. 그러다 문득 뇌리에 스친 Oracle Cloud. 1개의 OCPU를 제공한다는 뜻은 2개의 스레드를 돌릴 수 있다는 뜻이다. 일정 사용량을 초과하지만 않으면 평생 무료이기도 하니 이것으로 낙점. 한 달짜리 무료 크레딧도 받은 김에 12 코어짜리 VM도 설정했다. 내 봇엔 너무 과한 스펙이지만 어차피 사라질..
[Python] Aim Smoothing
·
Study/Python
Aim Smoothing이란 말 그대로 FPS게임 등의 에임봇이나 컨트롤러 유저를 위한 Aim Assist에 사용되는 개념이다. 조준을 수행할 때, 적에 자석처럼 붙는 것이 아니라 자연스럽게 적에게 에임을 이동시키게 해 주는 기술이라 할 수 있다. 에임 어시스트에 관한 영상으로 아래의 영상을 참고할 수 있다. https://www.youtube.com/watch?v=-RQbAO9jx_I 방법은? 적이 있는 좌표와 내 에임 사이의 좌표 간의 이동을 보간해 구현할 수 있다. 일단 각각의 차이를 보자. 보간X 아주 찰싹 달라붙는다. 빈말로도 자연스럽다고 할 수 없다. 비선형 보간법 움직임이 비교적 자연스럽다. 여전히 어색하지만 가감속도 들어가 있고 그나마 봐줄 만하다. 선형 보간법을 사용하면 저기에 가감속이 ..
[C#] 자동화 플러그인 수정
·
Study/C++ & C#
근래에 FFXIV 무인도 컨텐츠의 자동화를 도와주는 플러그인을 발견했기에 당장 써보기로 결정했다. 재미있지도 않은 미친 노가다를 안 할 수 있다니 혹하지 않을 수 있을까. 채집 노드를 알아서 따라가며 지정한 루트는 잘 돌아주지만 다른 문제가 있었으니... 1. 클라이언트 언어의 차이 무인도엔 "워크샵"이라는 컨텐츠가 있고, 각 사이클마다 상품 생산을 예약하고 생산 및 판매해 고유 화폐를 얻는 식으로 구성되어 있다. 최고 효율을 얻는 상품 생산 구성을 매 사이클마다 제공해 주는 디스코드가 있는데, 아이템 이름을 영어로만 제공한다. 저 포맷을 그대로 복사해 플러그인에 붙여 넣기 하면, 플러그인이 알아서 아이템 이름만 뽑아내 게임 데이터와 일치하는지 확인한 후 생산 예약에 등록하는 식으로 작동한다. # 위는 ..
[Python] 봇 개선 및 커맨드 추가
·
Study/Python
새로운 기능으로 주식 정보를 가져오는 명령어를 만드려고 했다가 아주 큰일이 됐다. 굳이 손대고 싶지 않았던 귀찮은 부분들에 손을 대기로 했다. 1. 메인 봇 코드 다이어트 기존엔 명령어를 별도로 빼는 것이 아니라, 아래처럼 그 명령어 함수 안에 구동부를 다 때려 넣은 형식이었다. #region sync @client.tree.command(name='sync', description='Owner only') async def sync(interaction: discord.Interaction): if interaction.user.id == OWNER_ID: await interaction.response.defer(ephemeral=True) await client.tree.sync() await in..
Starfield, 망한 건 아니지만 망했다
·
Thoughts
0. Disclaimer 게임을 제대로 평가할 만큼 많은 시간을 플레이하지 못했다. 최소 10회 차는 플레이해야 한다고 생각한다. 2회차 플레이 후 작성하는 초기 의견을 담았다. 23/09/06 3회차 중간 쯤. 일부 내용 수정. 2023년 9월 1일. 대망의 「Starfield」 얼리 엑세스 당일. 스카이림을 12년, 폴아웃 4를 8년을 해온 진짜 드로거인 나에게 있어서 가장 중요한 날. 자신의 로망을 이룰 수 있는 힘을 가진 토드 하워드는 자신의 진심을 기다리는 유저들에게 「갓겜」의 형태로 전해줄 것이라 믿어 의심치 않았다. 하지만 나는 배신감을 느끼고 말았다. 1. 와 커마 지렸다 2023년에 출시되는 게임이라고 커스터마이징이 전작들에 비해 비약적으로 발전했다. 전작에선 모드를 통해 구현해야 했던 ..
[C++ / Python / DB] ProcedureGenerator
·
Study/C++ & C#
이전에 Protobuf를 사용한 패킷 핸들러를 자동화할 때와 동일하게, Python과 Jinja2를 활용할 것이다. 1. XML 파서 작성 서버 소스가 아니라 Python에서 사용할 XML 파서를 작성해야 한다. import xml.etree.ElementTree as ET class XmlDBParser: def __init__(self): self.tables = {} self.procedures = [] def parse_xml(self, path): tree = ET.parse(path) root = tree.getroot() for child in root: if child.tag == 'Table': self.tables[child.attrib['name']] = Table(child) for..
[C++ / DB] ORM
·
Study/C++ & C#
자체적인 ORM을 작성해 보기로 했었다. 이제 필요한 것은 실행 시 XML 파일과 실제 DB를 비교하고 동기화하는 것이다. 1. 클래스 작성 양이 많아서 일부만 옮긴다. A. ConsoleLog 먼저 콘솔에 로그를 더 효율적으로 찍기 위한 클래스를 작성한다. // ConsoleLog.h #pragma once enum class Color { BLACK, WHITE, RED, GREEN, BLUE, YELLOW, }; class ConsoleLog { enum { BUFFER_SIZE = 4096 }; public: ConsoleLog(); ~ConsoleLog(); public: voidWriteStdOut(Color color, const WCHAR* str, ...); voidWriteStdErr(..
[C++ / DB] XML Parser
·
Study/C++ & C#
게임에만 버전이 있는 것이 아니라 DB에도 버전이 있다. 따라서 게임 버전에 DB 버전을 매칭시킬 필요가 있다. 예를 들어서 게임에서 A와 B라는 테이블이 있었는데, 업데이트로 인해 C, D 테이블을 새로 활용하게 됐다. 하지만 DB는 여전히 A와 B, 2개의 테이블만 갖고 있다고 한다면 문제가 생길 수밖에 없을 것이다. 이런 과정을 자동화 할 수 있는 도구를 「Object Relational Mapping (ORM)」이라고 한다. 자체적으로 비교적 단순한 ORM을 만들어 볼 것이다. 엄밀히 말하면 도구라기 보단 방법에 가깝지만 ORM Tool이라고 생각하자. 1. 밑작업 XML과 파일 입출력을 사용할 것이다. 따라서 XML 파서 및 파일 입출력용 함수를 준비할 필요가 있다. XML 파싱을 위해 Rapi..