나만의 'solved.ac' 티어 정리기

개요

여러가지 사건 사고와 맡았던 프로젝트를 하나 처리하고 나니 드디어 딴 짓(?)을 할 시간이 났다. 딴 짓이라고 해봐야, 알고리즘 문제 풀이를 다시 시작하는 것이지만…

나의 문제점은 항상 일을 끝내 놓고, 내 컴퓨터의 파일들은 잘 정리해도 프로젝트 자체는 잘 정리하지 않는다는 것이 문제였다. 그래서 작년부터는 그동안 풀었던 알고리즘 문제들 중 복구 가능한(?) 문제들을 복구해서 github에 정리하기 시작했다.

대표적으로 티어가 바뀐 문제 예시

문제는 정리를 하면서 발생했다. solved.ac의 티어 기준으로 문제를 풀고 정리했는데, 이게 바뀔 수 있다는 사실을 간과했다. (티어는 사람 손으로 매기는 걸 알면서… 왜 몰랐니…? 과거의 나…?)

알아채게 된 계기도 정말 웃기다… 지인과 풀이한 것을 되돌려보다가, 서로 기억하는 티어가 달라서 열어보니 바뀐 경우였다. 몰랐으면 몰랐지… 알아버린 이상 꼭 고쳐야 속이 편한데, 생각해보니 자동화해두지 않으면 나중에도 이런 문제가 발생할 것이 분명했다.

나만의 ‘solved.ac‘ 티어 정리기

그래서 만들었다 나만의 ‘solved.ac‘ 티어 정리기! 범용성은 매우 떨어진다. 애시당초… 내가 정리한 형식에 맞추어 다시 정리해주는 걸 짜는 것이라 그렇다. 그래도 나랑 비슷하게 정리했던 사람이라면 조금만 고치면 쓸 수 있을 수도?

구조

아무튼… 구조는 간단하다.

  1. 지정된 경로에 있는 폴더를 검사해서 문제 리스트를 만든다.
  2. 문제 리스트를 바탕으로 내가 적은 문제 티어와 문제 번호를 정규표현식을 이용해 가져온다.
  3. solved.ac의 api 서버에 request를 날려, 해당 문제의 현재 정보를 가져온다
  4. 티어 변화가 있는 문제들의 리스트를 만든다.
  5. 문제 README.md를 수정하고, 해당 티어 폴더로 이동시켜준다.
  6. github에 커밋은 수동으로 날린다! (혹시 모르니까 체크하고 보내기 위함!)

간단한 구조지만… 끝나고 나서 정리해서 그렇지 중간에 몇번 바꿨다. (원래는 API 서버에 요청하는 것도 아니고, 검색 기능을 이용해서 가져오고 있었다.) 그래서 그런지… “무지성 코딩”의 끝판왕이 되었다. 언젠가 성능 개선을 꼭… 해야겠다는 다짐을…

문제점

무지성 코딩의 발생 원인을 따져보니… 티어를 총 3가지 형식으로 나타내면서 문제가 발생했다.

1
2
3
dir : bronze
README.md : 브론즈 5
solved.ac : 1

브론즈 5 문제가 있다면, 위와 같이 세가지 형식으로 나타내야한다. 이걸 염두해두고, 처음부터 형식을 통일시키던가 변환해주는 함수를 하나만 만들어서 통일된 형태로 관리해야했는데 그러지 못해서 비교 한번 할때마다 변환해줘야 해서 복잡해졌다.

사용법

https://github.com/y2sman/algorithm_tier_modifier

아무튼... 일단 잘 돌아간다.

당장은 딴짓할 시간이 이제 없어서… 머리좀 정리되면 변수 정리해서 제대로 정리된 “나만의 ‘solved.ac‘티어 정리기 v0.2”로 돌아오겠다. (일단 작동은 하니까…???) 양심의 가책이 많이 남아서… 최대한 빨리 고쳐야겠다고 다짐하고, 그때까지… 아디오스…

GoSo Helper with python

개요

어쩌다보니 디시인사이드의 게시글들 중 특정 키워드를 가진 게시글을 가져와서 PDF로 만드는 자동화 작업을 한 적이 있었다. 그렇다. 고소를 위한 증거 수집이다. 이번 게시글은 그때 만들었던 코드를 일부 수정한 버전이다.

GoSo Helper?

사이트의 특성상 게시글이 너무 많다. 하지만 게시판 별로 태그가 충실히 나뉘어 있으며, 글번호도 게시판마다 다르다. 그래서 크롤링 자체는 쉽다… 라고 말하려고 했는데, 공개를 위해 테스트를 해보니 작동하지 않았다…

대충 이유를 찾아보니, 크롤러 방지용으로 User-Agent를 검사하는 기능이 추가된 것 같았다. 그래서 겸사겸사 수정하면서 개선버전을 만들었다.

개선된 GoSo Helper는 기존의 PDF 인쇄를 특정 외부 사이트에서 받아오는 형식으로 만드는 대신, pdfkit을 이용하여 자체적으로 출력하도록 개발하였다. 또한, 멀티프로세싱 관련 코드도 조금 더 개선하였다.

그래도 오래 걸린다. 이전의 기억을 되돌려보면… 10만건 확인하는데 3시간이었나…? 아무튼 오래 걸린다. 물리적으로 어쩔 수 없다. 이 이상으로 빠르면 서버에서 접속을 끊었던걸로 기억한다

변경점?

기존의 Goso Helper는 python의 pool을 이용하였다. 오래전 일이라 기억이 잘 안나긴 하지만, 당시 속도 문제와 신뢰성 문제가 존재했다. 그래서 Process로 변경하였다.

변경하면서 대충 나혼자 쓰려고 만들었던 코드들도 개선을 조금 했는데… 귀찮기도 하고 시간이 너무 많이 드는 것 같아 적당히 고쳤다. 그래서 코드가 좀 엉망이다. 그래도 잘 돌아가니까…? 괜찮은가?

기능

match_str에 리스트 형태로 키워드를 넣고, 시작 글번호와 끝 글번호를 넣어주면, 그 범위 내에서 게시글을 찾는다. 키워드를 가지고 있는 게시글의 경우에는 web archive 사이트로 보내고, PDF화 한다.

두가지를 동시에 하는 이유는 어차피 고소하려면 PDF로 뽑아서 가야하고, Web archive 사이트로 보내서 백업본을 만드려는 이유다.

사용법

https://github.com/y2sman/goso_helper

개선 버전은 정확히 확인을 못했다. 이전 버전으로는 게시글 10만건 까지 돌려봤었다. 하지만 이번 개선버전은 시간 부족으로 100개정도 까지만 확인했기 때문에, 너무 많으면 중간에 꺼질 수도 있다.

Twitch chat bot with python

개요

완성은 작년에 완성하여, 공개는 지금 하게되었다. 사실은 개인적으로 하고 있던 일에서 꼭 필요한 건 아니었지만, 막상 검색해보면 한글 자료는 많이 없어 이렇게 공개한다.

쉽게 만들었으니, 사용법 읽어보면 컴퓨터를 잘 못하는 사람도 사용할 수 있을 것이라고 믿는다.

채팅 Bot?

트위치라는 방송 플랫폼에서는 이미 많은 좋은 채팅 관리용 도구(싹둑, 나이트봇)가 있다. 19년 1월부터는 모더레이터 권한을 가진 유저라면, 특정 유저의 채팅 로그를 확인할 수 있는 기능도 추가되었다.

하지만 문제는 대부분의 이용자들은 이러한 기능들의 EASY 버전만 사용한다는 것이다. 사실 이러한 봇을 추가로 사용할 이유가 없는데도, 대부분의 모더레이터들에게 나이트봇 메세지 수정 권한이 없기 때문에 추가적으로 사용하는 것도 이와 같다. (싹둑이는 모르겠다. 이런 기능이 존재하는지)

뭐… 그냥 개인 봇을 사용하는 것이 좋아서 그럴 수도 있고.

기능

사실 기능을 구상할 단계에서는 이제는 공식 기능으로 추가된 채팅 로그를 확인 할 수 있는 등의 여러가지 기능도 구상하였는데… 너무 늦게 만들었다.

특별한 기능은 없고, 머릿속에 있던 채팅 봇의 필수 기능에다가 자동 백업 기능만 추가했다. 기본은 트위치에서 제공하는 샘플 코드 GitHub - twitchdev/chat-samples에서 가져왔다. 그냥 약간 수정해서 필수 기능만 만들었다.

문제점?

작동에는 문제가 없다. 어쩌다보니 공개가 늦어져서, 테스트 기간을 1년 넘게 가졌고 자잘한 버그들은 이미 다 수정했다.

걱정되는 부분중에 하나는 IRC의 tags를 핸들링 하는 코드를 짜기 귀찮아서… 그냥 처리했다. 혹시 모더레이터가 명령어를 수정하지 못할 수도 있다. 그런 경우엔… 트위치에서 API를 바꾼 경우라… 수동으로 고쳐야한다.

그래도 1년간 딱 1번 있었던 경우라 가용성에는 문제가 없을 것 같다. 시간 나면… 추가하겠다.

사용법

사용하기 전에 여러가지 선작업이 필요하다. 당연히 본인 계정에서 돌릴 것이 아니라면, bot 계정을 만들어야한다. 그리고 Oauth를 발급받고, 봇을 등록하는 과정을 거쳐야하는데…

챗봇 만들기 20분만에 트위치 챗봇 만들기! — Steemit

그건 그냥 이렇게 다른 블로그에서도 설명하고 있으니, 보고 따라하면 된다. 사이트 디자인만 달라졌으니 여기서는 설명하지 않겠다.

그리고 가능하다면 봇에 모더레이터 권한을 발급하는 것을 주는 것을 추천한다. 초당 메세지 전송 갯수가 정해져있는데, 모더레이터의 경우 이런 경우에 일반 유저보다 더 많은 메세지를 전송할 수 있다.

진짜 사용법

https://github.com/y2sman/twitch-chat-bot

끝! 사실 전공자 입장에서는 되게 쉬운 작업이다. 그래도 다른 일 하면서 문의하는 사람들이 꽤 있어서… 늦었지만 공개하게 되었는데, 문제 없이 잘 돌아갔으면 좋겠다!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×