SlideShare a Scribd company logo
1 of 62
정원사들 (일일커밋, TIL 모임)
출석체크 만들기
김준호, 잉여코더
@junho85
저는요
개발자 in 판교
정원사들?
Github에 커밋 하면
초록색이 채워짐
초록색은
잔디
잔디심는 사람은
정원사
TIL
Today I Learned
혼자보다 정원사들
혼자 할때 2015년
그래도 작심 6일은 했
...
정원사들에 참여하고 나
서
Before
After
지식공유회(지식나눔)
친목(네트워킹)
혼자 보다 정원사
지식공유회
잔디콘
https://jandi-gardening.github.io/
일일커밋 하면 뭐가 좋을까
?
눈에 보이는 결과물
성취감
나의 지식 사
전
쉽고 빠른 검색
CMD + F
내가 만드는 노하우
응용
gitbook
Github 보고 연
락 드립니다. 책
한번 써보실레
요?DevFest 발표 기회
좋은 일이 생길거야
~
정원사들 시즌4
2019.10.01 시작
꾸준히 하려면 역시
출석 체크
벌금도 정산해야죠
(한번 빠지면 1,000원
)
출석 체크
어떻게 할까?
후보
Project100 Slack
Slack 에서 합시다
Slack Github 봇
연동하면
push 메시지를
받을 수 있음
어떻게 출석 체크를 할 수 있을까?
Slack 에 쌓인 메시지로
Slack 에 들어온
메시지 시간으로
출석 체크
Slack 메시지 시간을 보
고
구글 시트에
한땀한땀...
인증시간은 다음날 새벽 4시 까지라 날짜만으로는 어려움시간도 추가
@_@
눈이 팽팽 돌아간드아
인간이 할 일이 아님
좀 더 쉽게 출석 정보를 수집하
려면?펭귄도 그렇게 안한
다
Slack API 로 메시지를
모을 수 있음
https://api.slack.com/methods/channels.history주의: 한번에 최대 1000개 메시지 조회 가능
Python 으로 하면 겁나 쉬움
$ pip install slackclient
$ python
>>> import slack
>>> client = slack.WebClient(token="xoxp-...")
>>> response = client.channels_history(channel="CNPL...", count=1)
>>> print(response)
{'ok': True, 'messages': [{'bot_id': 'BNGD110UR', 'type': 'message',
'text': '', 'user': 'UNR1ZN80N', 'ts': '1572770390.091000', 'team':
'TNMAF3TT2', 'bot_profile': {'id': 'BNGD110UR', 'deleted': False,
'name': 'GitHub', 'updated': 1569307567, 'app_id': 'A8GBNUWU8', 'icons':
...
코드 네줄로 slack 메시지 가져오기
날짜별 출석 인정 되는 내역을 불러오
자2019-10-24
2019-10-25 2019-10-25 12:33:31.063000
2019-10-26 2019-10-27 00:35:39.067000
2019-10-27 2019-10-27 23:03:44.070000
2019-10-28
2019-10-29 2019-10-29 10:40:50.075000
2019-10-30
2019-10-31 2019-10-31 10:50:22.080000
2019-11-01 2019-11-01 11:48:52.086000
2019-11-02 2019-11-02 23:53:08.089000
출석 인정 시간은
0시~28시 (다음날 새벽4시)
CSV 로 만들면 구글시트에 붙여 넣기 수월
함2019-10-25 00:24:10.062000,2019-10-25 18:17:03.063000,2019-10-26
14:12:32.066000,2019-10-27 03:17:31.068000,2019-10-28
23:31:08.074000,2019-10-29 12:17:41.075000,2019-10-30
20:43:30.079000,2019-10-31 17:08:05.083000,2019-11-01
23:57:53.087000,2019-11-02 20:40:37.089000,
2019-10-24 23:07:18.061000,2019-10-25 23:34:16.065000,2019-10-26
23:24:22.067000,2019-10-27 23:01:33.069000,2019-10-28
22:13:02.073000,2019-10-29 23:14:24.076000,2019-10-30
23:38:02.079000,2019-10-31 22:33:24.084000,2019-11-01
23:26:02.087000,2019-11-02 23:47:24.089000,
,,,,2019-10-28 16:16:47.071000,,2019-10-30 16:47:12.078000,,,,
2019-10-24 16:00:44.057000,2019-10-25 22:57:28.064000,,2019-10-27
07:10:02.068000,2019-10-28 13:13:55.071000,2019-10-30
01:35:40.077000,2019-10-31 02:05:26.080000,2019-11-01
01:24:24.085000,2019-11-01 17:13:41.086000,2019-11-02
23:27:29.089000,
2019-10-24 23:08:54.061000,2019-10-26 00:13:44.065000,,2019-10-28
02:55:48.070000,,2019-10-29 16:38:13.075000,,2019-10-31
22:06:57.084000,2019-11-02 01:54:08.088000,2019-11-03
01:12:11.089000,
2019-10-24 07:57:00.056000,2019-10-25 23:37:57.065000,,2019-10-27
20:40:18.069000,2019-10-28 08:07:05.071000,2019-10-29
21:48:24.076000,2019-10-30 07:47:03.078000,,2019-11-01
20:10:44.086000,,
,2019-10-25 12:33:31.063000,2019-10-27 00:35:39.067000,2019-10-27
23:03:44.070000,,2019-10-29 10:40:50.075000,,2019-10-31
10:50:22.080000,2019-11-01 11:48:52.086000,2019-11-02
23:53:08.089000,
,,,,,,,,,,
Slack API 매번 호출하려니 느리다
호출량에는 제한이 있다
조회된 데이터를 DB 에 넣자
MariaDB 에 넣으려니
Slack Message 파싱해서 넣기 귀찮
MongoDB 에 넣자
{'ok': True, 'messages':
[{'bot_id': 'BNGD110UR',
'type': 'message', 'text':
'', 'user': 'UNR1ZN80N',
'ts': '1572770390.091000',
'team': 'TNMAF3TT2',
'bot_profile': {'id':
'BNGD110UR', 'deleted':
False, 'name': 'GitHub',
'updated': 1569307567,
'app_id': 'A8GBNUWU8',
'icons': ...
MongoDB 세팅
$ docker run --name mymongo -p 127.0.0.1:27017:27017 -d mongo
# garden db, slack_messages collection 을 만들고 ts 를 unique index 겁니다
$ mongo --host localhost
> use garden
> db.createCollection("slack_messages")
> db.slack_messages.createIndex({ts:1}, {unique: true})
Docker 를 쓰면 간단 하게 설치 가능
DB 에 넣는 거도 참 간단
response = self.slack_client.channels_history(channel=self.channel_id)
mongo_collection = db.get_collection("slack_message")
for message in response["messages"]:
# 검색편의를 위해 datetime 으로 변환
message["ts_for_db"] = datetime.fromtimestamp(float(message["ts"]))
mongo_collection.insert_one(message)
다들 출석은 잘 하고 있나?
눈으로 보고 싶다
데이터 시각화 with Google Sheet
개인별/날짜별 출석률
나의 순위
그래프도 추가
출석률이 떨어진다아아...
언제까지 손으로 출석부를 작성할 것인
가
귀찮귀찮...
조금 편해졌지만
여전히 구글 시트로 옮기는건 수동
귀찮을땐
자동화
그냥 웹사이트로 만들자
Google sheet api 이용할까?
더 많은 기능 제공 가능
Python 으로 하고 있었으니
버전1
정원사들 리스트와
특정 날짜의 출석부 확인
버전2. 그냥 전체 출석부를 보여주자
정원사들의 요구사항
간단히 순위 구현
GDD
Gardener Driven Development
구글 시트에서 그렸던 차트는?
Google chart API 로 간단히 추가
출석률을 높이려면? 알람을 보내자
매일 밤 10시 미출자를 부른다
진행률? 전체 출석
률?
오늘 출석부?
주말에 출석률이 떨어지네요? 요일별 출석
률은?
몇시에 출석을 많이 하나요?
개인화 기능이 있다면
좀 더 관심을 갖지 않을까?
개인별 커밋 내역
모아 보기
Slack Markdown 은
Github Markdown 과 다름 $ pip install python-markdown-slack
message = markdown.markdown(message,
extensions=[PythonMarkdownSlack()])*<https://github.com/junho85/TIL/compare/346f8733efe4...33
da42459485|1 new commit> pushed to
<https://github.com/junho85/TIL/tree/master|`master`>*
<https://github.com/junho85/TIL/commit/33da4245948542cb584
6369d982d7949360659ca|`33da4245`> - react - add event on
child
<p><strong><a
href="https://github.com/junho85/TIL/compare/346f8733efe4...3
3da42459485">1 new commit</a> pushed to <a
href="https://github.com/junho85/TIL/tree/master"><code>maste
r</code></a></strong>
<a
href="https://github.com/junho85/TIL/commit/33da4245948542cb5
846369d982d7949360659ca"><code>33da4245</code></a> - react -
add event on child</p>
하지만 python 이라면...
개인별 출석부
- 자주 등장하는 단어 빈도수
- 커밋 메시지 검색
- 커밋 분량이 많은 사람?
- 프론트엔드 개편 React
- 재미있는 기능들… (대선cg, 토토)
- ...
아직 못다한 기능들과 GDD(Gardener Driven
Development)
- Slack Github 봇을 이용하면 출석 자동화 가능
- Slack API 이용하면 Slack Message 쉽게 수집 가능
- Python 이용하면 더 간편
- Docker 이용하면 DB 쉽게 세팅 가능
- 데이터 시각화로 현황 파악
- GDD - Gardener Driven Development
- PDD - Presentation Driven Development
정리
소스코드
https://github.com/junho85/garden4
PR 환영
End of Document

More Related Content

Similar to DevFest Pangyo 2019 정원사들 출석부 만들기

GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf
데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf
데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdfDONGMIN CHO
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기성일 한
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트병한 유
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013명신 김
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Junyoung Lee
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
Writing Fast Code (KR)
Writing Fast Code (KR)Writing Fast Code (KR)
Writing Fast Code (KR)Younggun Kim
 
개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기Lee WonJae
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?주식회사 내일비
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기SuJang Yang
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체Mickey SJ Lee
 
Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)
Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)
Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)DongJun Lee
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angularredribbon1307
 
오픈소스따라하기
오픈소스따라하기오픈소스따라하기
오픈소스따라하기병대 손
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게Sungju Jin
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806juneyoungdev
 
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&CJavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&Csys4u
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 

Similar to DevFest Pangyo 2019 정원사들 출석부 만들기 (20)

GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf
데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf
데이터야놀자발표_데이터로토이서비스만들기_조동민 (2).pdf
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Writing Fast Code (KR)
Writing Fast Code (KR)Writing Fast Code (KR)
Writing Fast Code (KR)
 
개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
 
Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)
Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)
Kino - My Personal Assistant (개인용 Slack Bot을 통한 Quantified Self 프로젝트)
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 
오픈소스따라하기
오픈소스따라하기오픈소스따라하기
오픈소스따라하기
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806
 
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&CJavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 

DevFest Pangyo 2019 정원사들 출석부 만들기

Editor's Notes

  1. 출석체크 만들던 이야기 정원사들 모임에 대한 이야기와 출석체크 프로그램을 만들어 가는 이야기 입니다
  2. 판교에서 개발자로 일하고 있는 김준호입니다.
  3. 먼저 정원사들이 무엇인지에 대한 설명이 필요할거 같습니다.
  4. 직역하자면 오늘 배운것 정원사들은 오늘 배운것을 github 에 커밋으로 남기는 사람들의 모임입니다.
  5. 물론 혼자서도 할 수 있습니다. 하지만 함께 하면 좋은점이 많습니다.
  6. 혼자 할때는 망
  7. 다른 사람들이 보고 있다는 압박감. 결석할때마다 벌금이 천원.
  8. 지식공유회를 통해 다른 사람들이 공부하는 것도 같이 배울수 있습니다. 맛있는것도 먹고 이야기도 나누며 친목을 쌓아갈 수 있습니다.
  9. 지난 지식공유회에서 구성원들이 공유한 자료입니다.
  10. 시즌이 거듭될수록 참가자가 많아 진다는 것은 정원사들 모임이 좋다는 증거가 아닐까요?
  11. 그렇다면 일일커밋을 하면 뭐가 좋을까요?
  12. 커밋이 쌓여 가는 것이 눈에 보이기 때문에 성취감을 얻고 동기부여를 할 수 있습니다. 일종의 게임같은 느낌입니다. 경험치가 차는 느낌?
  13. 쌓여가는 정보들은 나의 경쟁력이 됩니다. 정보의 홍수속에서 나만의 최선의 방법을 남기고 빠르게 검색 할 수 있습니다.
  14. 온라인으로 출판하는 여러 방법을 통해 내가 수집한 지식을 공유할 수 있고 더 좋은 검색기능들도 활용할 수 있습니다.
  15. 그외에도 개인적으로 이런저런 좋은 일들이 생겼는데요. 오늘 DevFest 발표 기회도 얻게 되었구요. 출판사에서 연락이 와서 책을 써볼 기회도 얻게 되었습니다.
  16. 정원사들 모임은 지금 4번째 시즌이 진행 중이구요. 지난 10월 1일 시작해서 이제 절반 정도 진행 되고 있습니다.
  17. 매일매일 꾸준히 커밋을 해야 되는데 어떻게 동기부여를 할 수 있을까요? 출석체크가 하나의 방법이 될 수 있습니다.
  18. 출석 체크를 어떻게 하면 좋을까요?
  19. 여러 방법이 있는데, 크게 두 후보가 있었습니다. 시즌3에 사용했던 Project100 플렛폼을 이용하는 것과 Slack 을 이용하는 방법이었습니다.
  20. 구성원들의 의견이 Slack 으로 모아졌습니다.
  21. Slack 을 이용하면 GitHub 봇을 이용할 수 있습니다. Github 으로 커밋내용을 push 할때마다 slack 에 메시지가 오도록 만들수 있습니다.
  22. Slack 에 메시지가 쌓이기는 하는데 어떻게 출석 체크를 할 수 있을까요?
  23. Python, slack api, mongodb 콜라보로 출석정보는 쉽게 수집할 수 있게 되었지만 여전히
  24. GDD Gardener Driven Development 아이디어가 필요 할 땐 정원사들이 준다. 좋은 방법도 알려 준다.