전체 글

개발은 좋은데 뭘로 개발할까
개인 프로젝트/[2020] 카카오톡 봇

[카카오톡 봇 만들기] 2. 명령어로 조작하기(3) : 테스트

그동안 카카오톡 봇 관련 글을 쓰면서 이론적인 내용이나 코드만 담았을 뿐 실제 결과물을 사진으로 넣은 적은 없어서, 결과물 스크린샷을 기록하고자 한다. 카카오톡 봇을 개발하다보면 메신저봇 이라는 핸드폰 어플리케이션 안에서 코딩을 하고 디버깅을 해야하는데, 폰코딩이라는 것이 생각보다 쉽지가 않았다. 그래서 핸드폰 화면을 컴퓨터에 띄워두고 컴퓨터로 코딩하는 것을 떠올렸다. 삼성의 경우 samsung flow 라는 앱이 그 기능을 지원해주었다. 근데 이 앱은 정말 말 그대로 핸드폰 화면을 컴퓨터에 그대로 출력해주는 앱이라 모바일에서 화면 사이즈때문에 한번에 볼 수 있는 정보량이 제한된다는 단점이 그대로였다. 그리고나서 알게된 Dex는 정말 최고였다. 역시 삼성.. 핸드폰 환경을 컴퓨터에 맞게 옮겨서 실행시켜주..

개인 프로젝트/[2020] 카카오톡 봇

[카카오톡 봇 만들기] 2. 명령어로 조작하기(2) : 알고리즘 구현(2)

어제 블로그 글을 쓰면서 생각을 정리해보니 내가 뭔가 착각을 하고 있었다는 걸 깨달았다. 제 3자를 경유하려고 한 이유는 일반적인 상황에서 내가 봇과 대화중일 때 봇이 답장을 보내도 봇이 보낸 답장을 알림으로 받지 못하기 때문이다. 봇이 보낸 답장을 알림으로 받지 못하면 스크립트에서 해당 내용을 처리하는 코드가 실행이 안된다. 그런데 듀얼메신저를 사용하면 이야기가 달라진다. 듀얼메신저를 사용하면 내 핸드폰에 카톡이 2개가 깔려있는 셈이된다. 따라서 내가 원래 쓰던 카톡으로 봇과 대화를 하며 메세지를 보내면, 내가 보낸 메세지에 대해 봇카카오톡에서 알림이 뜬다. 그리고 중요한 것은 메신저봇 어플이 봇카카오톡에 대한 알림도 내 원래의 카카오톡 알림과 동일하게 받아들여 인식한다는 것이다. 가령 내 이름이 "김..

개인 프로젝트/[2020] 카카오톡 봇

[카카오톡 봇 만들기] 2. 명령어로 조작하기(2) : 알고리즘 구현(1)

앞서 작성했던 알고리즘을 실제 코드로 구현해보았다. 우선 봇은 "마스터" / "관리(매니저)봇" / "커맨드봇" 으로 구분된다. 마스터봇은 내 원래 계정으로 들어오는 알림을 처리한다. 매니저 봇은 내가 내린 명령어를 받아들이고 커맨드봇은 매니저 봇이 받은 명령을 전달받아 나한테 전송하는 봇이다. 그럼 마스터봇이 커맨드봇에게 받은 명령대로 변수를 조작한다. 마스터봇/커맨드봇 이 두개는 듀얼메신저를 통해 하나의 휴대폰에 들어있다. 따라서 이 두 계정으로 들어온 알림은 모두 하나의 스크립트에 의해 처리된다. const scriptName = "test"; const manager = "관리봇"; const worker1 = "커맨드봇"; const master = "실명"; //var let date; let..

개인 프로젝트/[2020] 카카오톡 봇

[카카오톡 봇 만들기] 2. 명령어로 조작하기(1) : 알고리즘 설계

현재 카카오톡 봇은 간단한 내 비서역할을 수행중이다. 잘때는 잔다고, 수업들을 떈 수업듣는다고 알려주는 정도이다. 나는 여기에 새로운 기능을 추가했다. 알람이 온 뒤로 30분뒤에도 답이 없다면 상대방에게 나 대신 봇이 답을 해주는 기능이다. (답을 해준다기보다는 일방적인 안내메세지에 가깝다..) 타이머 기능을 이용해 구현해봤고, 나쁘지 않게 작동하였다. 그런데 치명적인 문제가 있었다. 알람이 온뒤로 바로 읽지는 않았지만, 30분이 지나기 전에 읽어서 답장을 한 경우 나는 분명 읽어서 답장했는데, 30분이 지나면 타이머에 의해 답장이 보내진다. 안타깝게도 메신저봇에는 수신한 메세지를 감지하여 자동 답장을 할 뿐이기 때문에, 내가 임의로 보낸 메세지를 감지한다거나, 읽지 않은 메세지가 사라지는 것을 감지하는..

개인 프로젝트/[2020] 카카오톡 봇

[카카오톡 봇 만들기] 1. 수업시간 / 취침시간 자동응답 구현하기

옛날에 읽었던 소설책이 떠올라 최근에 다시 읽기 시작했다. 그 책 속에 천재 프로그래머가 자신에게 온 문자를 상황에 맞게 봇에게 대신 답장하도록 하는 장면이 나왔다. 그 내용을 보고나서 카카오톡 자동응답 봇을 만들어 보고 싶다고 생각했다. 이 책을 처음 읽었을 때도 같은 생각을 했었는데, 이번에는 컴공과에 재학하면서 배운 내용도 있으니 뭔가 할 수 있을 것 같다는 생각이 들었다. 또 최근 피곤해서 평소보다 일찍 잤던 적이 있었다. 그 때 내가 안잘거라고 생각한 친구가 카톡을 보냈었고, 나는 답장하지 못했었다. 만약 그럴 때 내가 자고 있다는 자동응답을 보냈다면, 그 친구는 하염없이 기다리지 않아도 되지 않았을까? 이런 계기로 나는 관련 정보를 찾기 시작했다. 구글을 통해 알아보니 능력있으신 분들이 이미 ..

알고리즘 (PS)/BOJ

[BOJ][Python3/PyPy3] 5639 - 이진 검색 트리

이전의 등산 문제와 마찬가지로.. 수많은 "맞왜틀?!!" 을 외치게 만든 문제. 분명 알고리즘은 맞는 것 같은데, 다른 사람의 정답 알고리즘과 같은 틀의 알고리즘인데 왜 런타임에러가 나고, 시간초과가 발생하는 것인지 몰라서 고생했던 문제이다. 다른 사람의 코드와 내 코드를 비교하면서 배운 점들을 기록해보고자 한다. 다음은 내가 비교했던 분의 정답코드가 담긴 블로그 주소이다. https://developmentdiary.tistory.com/442 [Python]트리 백준 5639 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 � developmentdiary.tis..

알고리즘 (PS)/BOJ

[BOJ][Python3/PyPy3] 16681 - 등산 (다익스트라)

교내 동아리에서 진행한 알고리즘 스터디의 마지막 수업으로 다익스트라를 배웠다. 연습 문제 중 이 문제가 개인적으로 막힌 부분이 많았고, 그로부터 배운 것들을 정리하고자 한다. 우선 이 문제를 풀기 위한 아이디어도 떠오르지 않았다. 결국엔 동아리 스터디 내용을 통해 아이디어를 얻고, 아이디어를 구현하여 제출하였다. 아이디어는 다음과 같다. 집에서 갈 수 있는 모든 산의 정상들 학교에서 갈 수 있는 모든 산의 정상들 이 두가지를 따로 구한다음 각각에서 구한 산의 정상의 교집합을 취하여 문제가 원하는 방식대로 계산하면 된다. 만약 교집합이 없다면, 답이 없다는 뜻. 나는 다익스트라를 구현하고, 다익스트라의 결과로 나온 집/학교에서 출발 했을 때 갈 수 있는 모든 산의 정상들 (노드) 번호, 각각의 노드로 가는..

알고리즘 (PS)/BOJ

[BOJ][Python3/PyPy3] 17503 - 맥주축제 (우선순위큐, 그리디)

지난 번에는 맥주축제를 제일 먼저 떠올랐던 이분탐색으로 풀어보았다. 이번에는 학습 목적에 맞게 우선순위 큐로 풀어보고자 한다. 우선순위 큐로 풀 때는 다음과 같은 알고리즘을 사용하였다. 1. 맥주를 도수가 낮은 순으로 우선 정렬하고나서 선호도 순으로 정렬한다. 2. 맥주가 있는 리스트를 돌면서 맥주를 하나씩 뽑는다. 2-1. 뽑은 맥주의 도수를 현재 도수로 한다. 2-2. 뽑은 맥주의 선호도를 우선순위 큐에 넣는다. 2-3. 우선순위 큐에 있는 선호도 합과 기준 합을 비교한다. 2-4-1. 기준 합보다 크거나 같다면 find변수를 True로 바꾸고 현재 도수를 출력한다. 2-4-2. 기준합보다 작다면 우선순위 큐에서 선호도가 가장 작은 원소를 pop한다. 3. 2번과정을 반복한다. 4. 만약 find변수..

인턴/델파이

[델파이 DB조작 예제] 3. Banded Table 사용해보기

이번엔 새롭게 코드를 추가한다거나 하기보다는 새롭게 '퀀텀그리드'를 사용하는 방법을 배웠다. 그 내용을 복습/실습 해보고자 작성한 포스팅이다. 이전 포스팅 내용에서 사용한 그리드를 삭제하고 새롭게 퀀텀 그리드를 넣었다. grid를 검색한 후 DevExpress 탭에서 두번째 컴포넌트이다. 일반 그리드와 다르게, 사용자가 자세한 부분을 직접 컨트롤 할 수 있다는 장점이 있지만, 단점은 자세한 부분까지 하나하나 컨트롤 해줘야 사용할 수 있다는 단점이 있다. 우선 퀀텀 그리드를 적절히 배치한다. 이런 식으로 나왔다. 우측하단을 보면 뭔가 있다. 그리드에서 레벨을 추가할 수 있고, 레벨에서 뷰를 추가할 수 있다. 아직 레벨, 뷰가 정확히 뭔지 와닿지는 않는다.. 이 퀀텀 그리드는 지난 포스팅에서 사용했던 그리드..

인턴/델파이

[델파이 DB조작 예제] 2. DB 데이터 조작하기

DB내 데이터를 출력해보았으니 이제는 DB내 데이터를 추가/수정/삭제 하는 작업을 해보고자 한다. 이 작업은 DB데이터 조회와 거의 비슷하지만, 몇몇 과정이 추가된다. 우선 데이터를 추가/수정 하려면, 추가하려는 내용, 수정하려는 내용을 적어야 할 것이다. 그 내용을 적을 칸을 만들어야한다. "지금 상태에서도 그리드의 표를 클릭하니 바로 수정이 되지 않는가?" 어떻게 보면 편리하지만, 어떻게 보면 불편하다. 수정할 생각 없이 그냥 클릭했는데, 키보드를 잘못 눌렀더니 데이터가 수정되어버린다? 사용자의 의도에 맞지 않는 기능을 수행하는 프로그램은 그저 버그 덩어리 프로그램일 뿐이다. 사용자가 수정을 원할 때만 수정이 가능한 프로그램을 만들어보자. 우선 edit 을 검색해보자 형광펜으로 표시한 3번째 컴포넌트..

에버듀
Blog. 에버듀