공감하기
본문 바로가기
  • [!] Manual from the past has just arrived

Python4

[Python] Call-by-value vs Call-by-reference c언어에서는 포인터를 통해 변수에 직접 접근하여 값을 변경할 수 있다. void swap(int *x1, int *x2) { int temp = *x1; *x1 = *x2; *x2 = temp; } int main(void) { int arr[2] = {0, 3}; swap(&arr[0], &arr[1]); return 0; } python은 명시적으로 call-by-reference와 call-by-value를 구분하지 않는다. 대신에, mutable한 객체와 immutable한 객체에 따라 동작이 달라진다. int, string과 같은 immutable한 객체는 call-by-value를, list와 같은 mutable한 객체는 call-by-reference 처럼 동작하게 된다. 따라서 위 swap.. 2023. 11. 16.
[봇 운영&유지보수] 새로운 닉네임 시스템에 대응하기 얼마전 디스코드 닉네임 시스템에 변화가 있었다. (아래 아티클 참고) https://support.discord.com/hc/ko/articles/12620128861463-새로운-사용자명-디스플레이-이름 내용은 즉슨, 기존 사용자명의 표시 형식은 홍길동#1234와 같은 닉네임 + 식별코드로 구성되어 있었는데, 고유한 사용자명 시스템을 도입한다는 것이 주요 골자다. 필자 역시도 이런 시스템이 도입된다는 안내를 받고 새로 사용자명을 작성해둔 상태이다. 그런데 봇에도 미묘한 변화가 생겼다. 왼쪽이 기존의 음성 채팅방 알림이고, 오른쪽이 시스템 도입후 표시되는 채팅방 알림이다. 따로 필자가 건드린 코드는 없지만 새로운 시스템이 도입됨으로써 의도치 않게 변화가 발생한 케이스이다. 문제는 저렇게 영문 사용자명으로.. 2023. 8. 11.
[MongoDB] MongoDB Atlas로 디스코드 봇 데이터 관리하기 이미 시중에는 많은 DBMS가 존재한다. 필자는 전통적인 RDBMS가 아닌 NoSQL DBMS를 사용해보고 싶어졌다. 마침 가벼우면서도 어플리케이션, 웹 서비스 등에서 자주 이용하는 MongoDB를 알게 되었고, 이를 디스코드 봇에 적용시켜 데이터를 관리하고자 한다. MongoDB는 확장에도 용이하다고 하니 추후를 고려해서도 MongoDB를 선택하는 것이 유리하다고 생각했다. 또 mongoDB의 장점은 클라우드에서도 db를 제공한다는 것이다. 마침 필자의 봇은 로컬환경에서 구동되는 것이 아니라 repl.it에서 구동되므로 repl.it에서 클라이언트를 구축하여 서버로부터 db를 받아올 수 있게 되는 것이다. 이를 위해 먼저 mongoDB에 회원가입하고 클라우드 서버 환경을 설정해준다. 필자는 아래의 글을.. 2022. 12. 28.
[Discord.py 2.0] poetry로 기존 프로젝트 import 하기 필자는 디스코드 봇 24시간 구동을 위해 repl.it에서 봇을 돌리고 있었다. 이 repl.it에는 한가지 특징이 있었는데, python으로 프로젝트를 생성하면 알아서 poetry로 의존성을 관리해주는 것이었다. 참 편리하다고 생각해서 이 poetry를 통해 내 새로운 맥북(!)에 라이브러리를 일일이 설치하지 않고 통으로 설치해보도록 하겠다. 먼저 homebrew로 poetry를 설치해준다. (파이썬이 설치되어 있어야 한다) brew install poetry repl.it에서 pyproject.toml과 poetry.lock을 다운로드해준다. 이 파일은 각각 프로젝트 관리 파일과 패키지의존성 관리 파일이라고 보면 된다. 국룰 위치인 프로젝트의 root에 파일을 옮겨주자. 이제 의존성 파일에 명시된 라.. 2022. 12. 27.