SlideShare uma empresa Scribd logo
1 de 71
Baixar para ler offline
그만 퇴근합시다!
똑같은 일을 하더라도 스마트하게 하기
이지호
1. 파이썬을 알고 있다면 더 적극적으로 쓰자
2. 파이썬을 사용해 일을 조금이라도 줄이기
3. 칼퇴근을 위해 필요한 개인의 자질
4. 파이썬을 어디에 사용할 수 있을까?
5. 라이브러리를 사용해 하던 일을 더 빠르게 하기
발표자 2분 소개
이름: 이지호
업으로 하는 일:
회사에서 시키면 다한다!
학교에서 하는 일:
매주 데이터베이스 관련 논문을 읽는다
그 외:
• 오픈소스 관련 세미나 발표 및 쉬어야 할 주말에 파이썬 강의
• 한빛미디어 ”파이썬 코딩 클럽” 공동 번역(2, 3권)
• 제이펍 “Flask 기반의 파이썬 웹 프로그래밍” 집필
• 사단법인 변화를 꿈꾸는 과학기술인 네트워크(ESC 창립회원)
한줄 소개:
공부를 하러 들어간 대학원에서 쓰라는 논문은 안쓰고 책을 집필하는 이 시대의
잉여!
파이썬을 알고 있다면 더적극적으로
저와 여러분이 알고 있는 단어 하나!
파이썬!
질문 하나
수 많은 언어 중에 왜 파이썬을 사용하고 있나요?
질문 하나
파이썬은 누구를 위해 만들어진 언어일까요?
질문 하나
파이썬을 사용하는 곳이 지정되어 있어야 할까요?
파이썬을 알고 있다면 더적극적으로
모든 일에는 알맞는 도구가 있습니다.
도끼로 요리를 하는건 어리석은 일이지만
메짜루나로 요리하는건 당연한 일입니다.
파이썬을 알고 있다면 더적극적으로
파이썬을 알고 있다면 더적극적으로
파이썬을 사용해 일을 조금이라도 줄이기
우리가 일상에서 흔히 겪을수도 있는 일
”지호씨, git에서 master 브랜치를 컴파일하고 B사 A팀장에게 보내요”
이런 일 쉽게 할 수 있습니다!
그런데 우리가 간과하는 일이 있습니다:
1. git에서 master 브랜치를 압축 파일로 보낸다.
git export 명령을 쓰면 해결되요
2. 외부에 브랜치를 보내면 태깅을 해야 합니다.
자주 잊어먹습니다. 그리고 push도 해야 하죠.
3. 메일을 보내기 위해 웹 메일이나 썬더버드를 엽니다.
여기에 들이는 시간도 만만치 않습니다.
파이썬을 사용해 일을 조금이라도 줄이기
우리의 시간은 소중합니다!!
최소한 연애할 시간은
있어야…
파이썬을 사용해 일을 조금이라도 줄이기
이런 일만 있을까요?
1. 캡쳐한 이미지나 문서를 메일로 보내기
2. 대용량 메일을 보내기
3. 에버노트나 드롭박스에 파일 업로드
4. SNS 공유하기
파이썬을 사용해 일을 조금이라도 줄이기
칼퇴근을 위해 필요한 개인의 자질
우리 모두 알고 있습니다. 사실 칼퇴근이란 단어가 없습니다.
대한민국 법은 법정 시간이 유효 근로 시간
현실은…
8
1. 호기심
2. 탐구심
3. 과학적 분석 방법!!
네? 이게 왜 필요하죠??
4. 그리고 게으름이라는 양념!
칼퇴근을 위해 필요한 개인의 자질
호기심
칼퇴근을 위해 필요한 개인의 자질
칼퇴근을 위해 필요한 개인의 자질
탐구심
칼퇴근을 위해 필요한 개인의 자질
과학적 분석 방법!!
칼퇴근을 위해 필요한 개인의 자질
그리고 게으름이라는 양념!
파이썬을 어디에 사용할 수 있을까?
1.OPENSSL 루트 인증서 및 클라이언트 인증서 생성
2.JKS 인증서 생성
a. 주의: keytool 로도 가능은 해요?
3.PDF 생성
4.프린터 하기
5.엑셀 파일 파싱
6.웹 크롤링
7.구글 문서 조작
8.VCS, 압축하기, 드롭박스나 에버노트 연동
9.응용: KDE Spectacle에서 캡쳐 후 에버노트로 보내기!
라이브러리로 하던 일을 더 빠르게 하기
OPENSSL 루트 인증서 및 클라이언트 인증서 생성
openssl - 애플리케이션이 보안 통신을 할 수 있도록 도와주는 프로그램
주된 일 중 하나는 루트 인증서와 루트 인증서를 사용해 인증 요청서에 서명
당장 구글 검색만 해도 수십가지 문서가 나오지만, 결국은 제각각 다른 방법…
마침 데비안 리눅스 배포본엔 쉽게 사용할 수 있는 CA.pl이 있었습니다. 이걸 파이썬으로 리팩터링
했습니다. 파이썬으로 다시 만들면서 느낀건 더 편하게 만들수도 있겠다 였습니다.
https://github.com/search5/ca.py
JKS 인증서 생성 – JKS: Java standard KeyStore
왜 사용하나? : 자바 애플리케이션이 안전함을 알리기 위해서 사용.
주의: 자바 keytool로도 만들 수 있고, keytool은 keystore 생성, CSR, 스토어 내 인증서 관리에 사용
사용례) Tomcat Connector 설정에 keystoreFile="keystore Path" keystorePass="keystore
Password”
[참고] - http://dimdim.tistory.com/entry/사설-인증서를-이용한-Tomcat-HTTPS-설정 [딤딤이의
블로그]
라이브러리로 하던 일을 더 빠르게 하기
그렇지만 java keystore를 새로 만들기보다 이미 만들어진 openssl 인증서를 사용하는 방법도
있습니다.
이 방법은 Java 6부터 지원합니다.
openssl 인증서를 변환하려면 다음 3개의 절차를 거칩니다.
1) 개인키와 인증서를 PEM 파일로 변환
2) openssl 파일을 사용해서 pkcs12 포맷으로 변환
3) keytool 도구로 pkcs12 포맷을 jks keystore로 변환
라이브러리로 하던 일을 더 빠르게 하기
그런데, 이렇게 변환 절차를 거치게 되면 몇번씩이나 개인키와 서명된 인증서의 비밀번호
입력은 물론이고 keystore에 비밀번호를 입력하게 됩니다.
이럴때 이런 절차를 모두 간소화할 수 있는 방법이 있습니다.
파이썬의 pexpect 로 변환, 키 입력 등을 사람이 하는 것처럼 흉내내게 하는 것이죠!
라이브러리로 하던 일을 더 빠르게 하기
잠깐만, 뭐라구요? 사람을 흉내내요?
라이브러리로 하던 일을 더 빠르게 하기
openssl 인증서를 jks 파일로 변환하기 위해서 생성한 파이썬 스크립트
pkcs12_cmd
openssl pkcs12 -export -inkey {PRIVATE_KEY_FILE} -in {MERGE_KEY_FILE}
-name server_cert -out {PKCS12_FILE}
pkcs12_child = pexpect.spawn(pkcs12_cmd, echo=True)
pkcs12_child.expect("Enter Export Password:")
pkcs12_child.sendline(PKCS12_PASSWD)
pkcs12_child.expect("Verifying - Enter Export Password:")
pkcs12_child.sendline(PKCS12_PASSWD)
pkcs12_child.interact()
전체 코드: https://github.com/search5/openssl_utils/blob/master/pem2jks.py
라이브러리로 하던 일을 더 빠르게 하기
openssl 인증서를 jks 파일로 변환하는 것처럼, 어떤 프로그램은 사람의 입력을 계속 요구할
수 있습니다.
우린 이때 방금 소개한 pexpect를 사용해 사람의 흉내를 낼 수 있습니다.
그런데, pexpect는 윈도우에서 사용할땐 프로세스 실행 코드 방법이 조금 다릅니다.
pexpect.spawn 대신 pexpect.popen_spawn.PopenSpawn 를 사용
http://pexpect.readthedocs.io
$ pip install pexpect
라이브러리로 하던 일을 더 빠르게 하기
지상 최강의 도구 – 그 이름은 엑셀…
누구나 한번쯤 엑셀 문서를 만들어보지만, 프로그래머가 된다면 역으로 이걸 해석해내기에 바쁩니다.
파이썬으로 엑셀 문서를 읽을 수 있는 라이브러리는:
xlrd, openpyxl, xlwings …
그런데 셀에 접근할 때 왜 컬럼의 이름이 아니라 A1, B1, C1, A2, .. 등으로 접근해야 하지?
게다가.. office 2007 이전 버전 엑셀은 xlrd 하나 밖에 사용할 수 없습니다.
라이브러리로 하던 일을 더 빠르게 하기
라이브러리로 하던 일을 더 빠르게 하기
그럼 컬럼 단위로 읽어주는 엑셀 라이브러리를 만들어보자는 생각이 번쩍 들었습니다.
그래서 시간을 내어 엑셀 파일 이름과 시트명을 주고 컬럼 이름으로 데이터를 읽어오는 라이브러리를
만들었습니다.
obj = ExcelLib('제5차국내외문서목록 테스트.xml')
obj.setWorksheet('2011 국내문서-낱장')
obj.buildStyles()
rows = obj.buildRows()
print rows[0]['기록철'].style.getUnderline()
라이브러리로 하던 일을 더 빠르게 하기
하지만, 제가 만든건 아주 크나큰 결점이 있습니다.
1) Office 2003 XML 파일 형식으로 저장되어 있어야 한다
2) XML을 DOM으로 해석하기 때문에 메모리가 커야한다.
그래도 사소한 장점이 아닌 장점도 있습니다.
1) 셀 별로 스타일을 엑셀 파일에 지정한대로 들고 오게 할 수 있다
2) XML 파일 이므로 읽고/쓰기가 모두 가능할 수도 있다.
만들고 나서 든 생각: 이걸 누가 쓰니?
https://github.com/search5/msoffice_2003_excel_xml
라이브러리로 하던 일을 더 빠르게 하기
규격화된 문서를 만들고 배포하기에 대중적으로 선호되는 포맷은 PDF 입니다.
PDF를 만들 수 있는 다양한 방법과 라이브러리가 있지만, 다음 2개만 소개합니다.
PyFPDF, ReportLAB 등..
라이브러리로 하던 일을 더 빠르게 하기
PyFPDF는 PHP에 있는 fpdf 라이브러리를 파이썬으로 포팅한 것입니다.
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
라이브러리로 하던 일을 더 빠르게 하기
FPDF는 파일로 PDF를 저장할 수도 있지만, 스트림 형태로 웹 브라우저에
보낼 수도 있습니다.
stream = pdf.output(dest='S').encode("latin1")
response_tuple = (stream, "200 OK", {'Content-Type': 'application/pdf'})
return make_response(response_tuple)
https://pyfpdf.readthedocs.io/en/latest/
라이브러리로 하던 일을 더 빠르게 하기
하지만, FPDF를 사용해 가장 구현하기 힘든건, PDF에 테이블을
집어넣는 일입니다.
아직까지 PyFPDF에 테이블을 넣는 효과적인 방법은 찾지
못했지만, 다행이 PHP로 만들어진 라이브러리가 있어 이를 직접
포팅 했습니다.
https://goo.gl/uQSaZq
라이브러리로 하던 일을 더 빠르게 하기
파이썬을 사용해 PDF를 만들 수 있는 라이브러리로 PyFPDF 외에도 ReportLAB 이
있습니다.
from reportlab.pdfgen import canvas
def hello(c):
c.drawString(100,100,"Hello World")
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()
라이브러리로 하던 일을 더 빠르게 하기
ReportLAB은 PDF를 캔버스 개념으로 다룹니다. 캔버스는 하얀 도화지와도
같기 때문에 앞의 코드만으로도 쉽게 PDF 파일을 만들 수 있습니다.
그리고, TrueType Font 적용 기능과 테이블 기능이 제공됩니다. 무엇보다
경량화된 FPDF에 만족하기 어렵다면 고급 기능을 제공하는 reportlab을
사용하세요. 하지만 프로페셔널은 유료에요!!!
http://www.reportlab.com/
라이브러리로 하던 일을 더 빠르게 하기
엑셀을 잠깐 맛보고 왔으니 이제 구글과 함께 놀아볼 겁니다.
여러분이 모두 인정하는 한 문장이 있죠. <= 구글신께 물어봐!
오늘은 여러분에게 구글을 신이 아니라 하인처럼 부려볼 겁니다.
라이브러리로 하던 일을 더 빠르게 하기
구글은 다양한 도구를 제공하는데
그 중 하나가 구글 드라이브입니다.
=> 처음엔 구글 문서도구로 시작.. 그럭저럭 쓸만한 온라인 오피스가 됐습니다.
아주 잠깐이지만, 파이썬을 사용해 구글 스프레드시트를 만들고 내용을
채워넣는 모습을 보여드릴겁니다.
=> 그리고 해야할 일을 알려드리겠습니다.
라이브러리로 하던 일을 더 빠르게 하기
구글 스프레드시트를 사용하는 것은 구글 API 클라이언트를
사용하는 것이 정석이지만 처음 쓰면 매우 다가가기 힘든
녀석입니다.
그래서 여러분은 pygsheets를 사용하시는게 좋습니다.
$ pip install
https://github.com/nithinmurali/pygsheets/archive/master.zip
라이브러리로 하던 일을 더 빠르게 하기
import pygsheets
gc = pygsheets.authorize()
sh = gc.open('PyCon 2017')
wks = sh.sheet1
wks.update_cell('A1', '안녕하세요. 파이콘 2017에서 만나뵙게
되어 대단히 반갑습니다')
wks.cell('A2').value = '오늘은 이 자리에 서게 되어 정말
기뻐요’
sh.share("search5@gmail.com")
라이브러리로 하던 일을 더 빠르게 하기
하지만, pygsheets를 사용하기 위해서는 다음의 일을 먼저 수행해야 합니다.
1. console.cloud.google.com에 접속해서 프로젝트 생성
2. oauth 정보 등록
3. oauth2.0 정보 생성
4. client….json 파일을 client_secret.json으로 변경
5. http://pygsheets.readthedocs.io/en/latest/ 참고하기!!
자동화를 위해서 아주 사소한 일이에요!
라이브러리로 하던 일을 더 빠르게 하기
앞서, 구글 스프레드시트를 다루는 일만 먼저 살펴봤습니다.
=>사실, 구글 오피스에서 자바스크립트 대신에 파이썬 스크립트를 대신
사용할 수도 있습니다.
여러분이 가져야 할 건,
영어에 대한 두려움이 아니라, 호기심과 탐구심이란걸 잊지 마세요!
라이브러리로 하던 일을 더 빠르게 하기
요즘 파이썬으로 가장 핫한 이슈 중 하나 ---> 데이터 크롤링
여러분 머릿속에서 뭘, 생각하고 계신가요?
다양한 데이터 소스에서 크롤링 할 수 있지만 여기서는 웹
크롤링을 살짝 들여다보겠습니다.
라이브러리로 하던 일을 더 빠르게 하기
웹 문서 크롤링을 한다면, 이런게 필요합니다.
1) 웹 브라우저
2) 크롤링할 주소
3) 크롤링할 콘텐츠 영역
2, 3번은 이해가 되는데 1번은 좀 갑작스럽습니다.
라이브러리로 하던 일을 더 빠르게 하기
웹 사이트는 접속하는 브라우저(웹 브라우저 포함)를 식별할 수 있습니다.
어떻게?
=> 브라우저가 웹 사이트에 자신이 누구인지를 밝히기 때문.
그러다보니?
=> 브라우저가 누구인지에 따라 HTTP 응답 또는 거절
그래서, 이들을 위해 웹 브라우저가 보내는 헤더를 미리 파이썬 사전으로 구성해둘
필요가 있습니다.
라이브러리로 하던 일을 더 빠르게 하기
headers = {'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'en-US,en;q=0.8,ko;q=0.6',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'opengov.seoul.go.kr',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/57.0.2987.110 Safari/537.36'}
라이브러리로 하던 일을 더 빠르게 하기
많은 사람들이 파이썬으로 웹 크롤링을 한다고 하면 구글 문서부터
찾아봅니다.
하지만, 오늘부터 이렇게 하세요.
$ pip install requests lxml
그리고 크롬이나 파이어폭스가 필요합니다.(IE는 어디로..)
라이브러리로 하던 일을 더 빠르게 하기
r = requests.get(url, headers =headers)
from lxml import html
tree = html.fromstring(page_str)
title = tree.xpath('//*[@id="comm-view"]//div[@itemprop="about"]')
lxml을 사용해 HTML 문서로부터 원하는 데이터를 뽑기 위해서 알아야
하는건, XPATH 문법 뿐입니다!!
라이브러리로 하던 일을 더 빠르게 하기
XPATH는 무엇인가요?
XML 관련 기술 중 하나로 문서 내에 있는 의미 구성 요소를 트리
단위로 찾기 위해 고안된 경로 문자열 검색 언어입니다.
이런 책이 있지만, 우리에겐 MDN(Mozilla
Developer Network)이 있습니다..
https://developer.mozilla.org/ko/docs/XPath
라이브러리로 하던 일을 더 빠르게 하기
S전자에는 무어의 법칙에 비견가는 황의 법칙(2008년에 깨짐)이란게 있다고
합니다.
메모리가 주기적으로 배수 만큼 커진다는 것인데, 컴퓨터 디스크도 95년도에
400MB만 해도 대단한 크기였습니다.
여전히 디스크 크기는 커지고 있지만 우리는 데이터를 저장하고 공유하기 위해 이제
온라인 저장공간을 사용하고 있습니다.
라이브러리로 하던 일을 더 빠르게 하기
널리 알려진 온라인 저장소로 아마존 S3, 구글 Cloud Bucket이 있지만...
잘 모르시죠? 그래서 준비했습니다.
Dropbox!
전세계에서 가장 유명한 온라인 스토리지입니다(귀도 반 로썸 아자씨가 여기에
계시다고)
라이브러리로 하던 일을 더 빠르게 하기
어떤때 사용하면 좋을까요?
웹 브라우저를 사용하기 어렵고, 파일 공유가 필요할때가 있을 것입니다.
아마 서버 컴퓨터가 이런 분류에 속하지 않을까요?
라이브러리로 하던 일을 더 빠르게 하기
드롭박스는 파이썬 SDK를 지원합니다(사실은 다른 언어도
지원해요.. ㅠ.ㅠ)
우린 파일 업로드만 살펴보겠습니다.
import dropbox
dbx = dropbox.Dropbox('19RV0X3pjA4...')
dbx.files_upload(open("samples.jpg","rb").read(), "/samples.jpg")
라이브러리로 하던 일을 더 빠르게 하기
어…어.. 뭔가 빠진 것 같지만 사실은 정말 정상적입니다.
그럼 이렇게 업로드된 파일을 다른 사람에게 링크만 보내거나 공동 작업자를
추가할 수도 있습니다.
그럼 업로드된 파일의 short url을 구해보겠습니다.
s = dbx.sharing_create_shared_link("/samples.jpg", True)
PathLinkMetadata(url='https://db.tt/WQqBexRWRY',
visibility=Visibility('public', None), path='/samples.jpg', expires=None)
라이브러리로 하던 일을 더 빠르게 하기
드롭박스는 sharing_create_shared_link 메서드
=> 공유 URL을 구하면 PathLinkMetadata 객체 반환
이제 PathLinkMetadata.url 을 알려주면 됩니다. 이것도 귀찮겠죠?
텔레그램이나 슬랙 봇을 만들어 내부 구성원에게 공유하거나 smtplib 모듈을 사용해 링크를
메일로 전달할 수 있습니다.
리눅스 KDE 데스크탑의 화면 캡쳐 프로그램인 스펙타클(Spectacle)을
사용한다면 캡쳐 이미지를 바로 드롭박스에 업로드 하는 것도 가능할
겁니다.
라이브러리로 하던 일을 더 빠르게 하기
하지만 드롭박스를 사용하기 위해서 다음은 꼭 지켜주세요.
https://www.dropbox.com/developers/apps 에 들어가서 API 키를
반드시 발급 받아야 합니다.
그렇지 않으면 드롭박스는 사용할 수 없습니다!!
설치는 언제 그렇듯..
$ pip install dropbox
라이브러리로 하던 일을 더 빠르게 하기
메모 프로그램에도 Dropbox와 비슷한 서비스가 있습니다. 바로
에버노트죠.
에버노트의 카피 문구는 “제 2의 뇌”입니다.
그런데 우리가 에버노트를 제2의 뇌로 잘 사용하고 있나요?
라이브러리로 하던 일을 더 빠르게 하기
전용 클라이언트가 있어야 하거나..
웹 브라우저로만 써야 한다거나..
스마트폰이 꼭 필요하다면..
이걸 꼭 써야 할 이유가… 없을겁니다.
라이브러리로 하던 일을 더 빠르게 하기
그래서 준비했습니다. 에버노트에 이미지 노트를 만드는 방법을.
먼저 에버노트 SDK를 설치합니다.
$ pip install
https://github.com/evernote/evernote-sdk-python3/archive
/master.zip
라이브러리로 하던 일을 더 빠르게 하기
그리고 API 키 정보와 개발 토큰을 다음 사이트에서 등록합니다.
http://dev.evernote.com/doc/
https://www.evernote.com/api/DeveloperToken.action
라이브러리로 하던 일을 더 빠르게 하기
노트 생성 시작하기
import hashlib
import binascii
import evernote.edam.type.ttypes as Types
from evernote.api.client import EvernoteClient
auth_token = "S=s135:U=dd6e77:E=16521625b0f…"
라이브러리로 하던 일을 더 빠르게 하기
client = EvernoteClient(token=auth_token, sandbox=False, china=False)
note_store = client.get_note_store()
note = Types.Note()
note.title = "PyCon2017"
image = open('samples.jpg', 'rb').read()
md5 = hashlib.md5()
md5.update(image)
hash = md5.digest()
라이브러리로 하던 일을 더 빠르게 하기
data = Types.Data()
data.size = len(image)
data.bodyHash = hash
data.body = image
resource = Types.Resource()
resource.mime = 'image/jpeg'
resource.data = data
note.resources = [resource]
라이브러리로 하던 일을 더 빠르게 하기
hash_hex = binascii.hexlify(hash)
hash_str = hash_hex.decode("UTF-8")
note.content = '<?xml version="1.0" encoding="UTF-8"?>'
note.content += '<!DOCTYPE en-note SYSTEM ' 
'"http://xml.evernote.com/pub/enml2.dtd">'
note.content += '<en-note>PyCon 2017<br/>'
note.content += '<en-media type="image/jpeg" hash="{}"/>'.format(hash_str)
note.content += '</en-note>'
created_note = note_store.createNote(note)
라이브러리로 하던 일을 더 빠르게 하기
에버노트과 파이썬 연계의 아쉬움…
아직 파이썬 2만 제대로 연동…
내부 특성이지만 ENML이라는 마크업 언어를 배워야 한다.
그리고… 개발에 대한 정보를 찾아보고 이해할 수 있어야 합니다.
라이브러리로 하던 일을 더 빠르게 하기
소스 코드 관리에 필수적인 도구 중 하나인 Git.
좋은 도구도 많고, 쉽게 사용 가능할 정도로 널리 알려져 있습니다.
그런데 하나의 일 처럼 보이는(최근 10개의 커밋 내역에서 변경된 파일만 끄집어
압축한다거나..) 것을 하려면
1. 커밋 내역을 확인한다.
2. 변경 파일 목록을 적는다.
3. 똑같은 폴더 구조 만들고 변경된 파일을 복사하기 시작한다.
라이브러리로 하던 일을 더 빠르게 하기
우리는…
원시 시대에 살고 있지 않습니다…
라이브러리로 하던 일을 더 빠르게 하기
이런 이유로… gitpython이있습니다.
설치는 이렇게 합니다.
$ pip install gitpython
설명서는...
http://gitpython.readthedocs.io/
라이브러리로 하던 일을 더 빠르게 하기
from git import Repo
repo = Repo(".")
commit = repo.commit("HEAD~10")
change_list = list(commit.stats.files.keys())
['static/img/glyphicons-halflings-white.png', 'templates/mngt/team.html',
'static/css/bootstrap.css', 'templates/asset/pc_list.html.bak’, …]
라이브러리로 하던 일을 더 빠르게 하기
from git import Repo
repo = Repo(".")
# archive
repo.archive(open(”../repo_latest.zip”, “wb”))
라이브러리로 하던 일을 더 빠르게 하기
gitpython은 아마 여러분이 명령어를 직접 사용해서 단계를
건너뛰게 해주는 효과를 줄여줄 것입니다.
하지만 여기에 필요한건, 여러분의 호기심이죠.
많은 개발자들이, 그리고 저와 여러분도,
디지털이라고 생각하는 아날로그 시대에 살고 있습니다.
앞서 많은 예제를 살펴봤지만 아직 할 수 있는게 더 많습니다.
예를 들면, cups를 사용한 프린팅 서버도 있을 수 있습니다.
여기에서 미처 소개하지 못했지만요..
마무리
지금까지 들어주셔서,
고맙습니다.

Mais conteúdo relacionado

Mais procurados

201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나JeongHwan Kim
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축Youngil Cho
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYHyun-woo Park
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기flashscope
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기성일 한
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희NAVER D2
 
T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기JIHUN KIM
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들Sewon Ann
 
언론사에서 개발자는 무슨 일을 하나요?
언론사에서 개발자는 무슨 일을 하나요?언론사에서 개발자는 무슨 일을 하나요?
언론사에서 개발자는 무슨 일을 하나요?슬 김
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
백엔드 서버 구축없이 모바일 앱앱 만들어보기
백엔드 서버 구축없이 모바일 앱앱 만들어보기백엔드 서버 구축없이 모바일 앱앱 만들어보기
백엔드 서버 구축없이 모바일 앱앱 만들어보기Sewon Ann
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Chanwoong Kim
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15Chanwoong Kim
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기Young D
 

Mais procurados (20)

201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDY
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희
 
T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
 
언론사에서 개발자는 무슨 일을 하나요?
언론사에서 개발자는 무슨 일을 하나요?언론사에서 개발자는 무슨 일을 하나요?
언론사에서 개발자는 무슨 일을 하나요?
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
백엔드 서버 구축없이 모바일 앱앱 만들어보기
백엔드 서버 구축없이 모바일 앱앱 만들어보기백엔드 서버 구축없이 모바일 앱앱 만들어보기
백엔드 서버 구축없이 모바일 앱앱 만들어보기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기
 
Django beginning
Django beginningDjango beginning
Django beginning
 

Destaque

Logistic Regression
Logistic RegressionLogistic Regression
Logistic RegressionMinHyeok Kim
 
4.representing data and engineering features
4.representing data and engineering features4.representing data and engineering features
4.representing data and engineering featuresHaesun Park
 
5.model evaluation and improvement
5.model evaluation and improvement5.model evaluation and improvement
5.model evaluation and improvementHaesun Park
 
해커에게 전해들은 머신러닝 #4
해커에게 전해들은 머신러닝 #4해커에게 전해들은 머신러닝 #4
해커에게 전해들은 머신러닝 #4Haesun Park
 
20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료JungGeun Lee
 
머신러닝 이해하기 (Sample)
머신러닝 이해하기 (Sample)머신러닝 이해하기 (Sample)
머신러닝 이해하기 (Sample)Ashal aka JOKER
 
빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)
빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)
빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)Dylan Ko
 
머신러닝 시그 세미나_(deep learning for visual recognition)
머신러닝 시그 세미나_(deep learning for visual recognition)머신러닝 시그 세미나_(deep learning for visual recognition)
머신러닝 시그 세미나_(deep learning for visual recognition)Yonghoon Kwon
 
해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3Haesun Park
 
Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례Lee Ji Eun
 
Linear regression analysis
Linear regression analysisLinear regression analysis
Linear regression analysismothersafe
 
7.woring with text data
7.woring with text data7.woring with text data
7.woring with text dataHaesun Park
 
6.algorithm chains and piplines
6.algorithm chains and piplines6.algorithm chains and piplines
6.algorithm chains and piplinesHaesun Park
 
인공지능 변호사 개발 1편 - Ai lawyer 개발을 위한 시도
인공지능 변호사 개발  1편 - Ai lawyer 개발을 위한 시도 인공지능 변호사 개발  1편 - Ai lawyer 개발을 위한 시도
인공지능 변호사 개발 1편 - Ai lawyer 개발을 위한 시도 jason min
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
해커에게 전해들은 머신러닝 #2
해커에게 전해들은 머신러닝 #2해커에게 전해들은 머신러닝 #2
해커에게 전해들은 머신러닝 #2Haesun Park
 
AlphaGo 알고리즘 요약
AlphaGo 알고리즘 요약AlphaGo 알고리즘 요약
AlphaGo 알고리즘 요약Jooyoul Lee
 
1.introduction(epoch#2)
1.introduction(epoch#2)1.introduction(epoch#2)
1.introduction(epoch#2)Haesun Park
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlowHaesun Park
 

Destaque (20)

Text summarization
Text summarizationText summarization
Text summarization
 
Logistic Regression
Logistic RegressionLogistic Regression
Logistic Regression
 
4.representing data and engineering features
4.representing data and engineering features4.representing data and engineering features
4.representing data and engineering features
 
5.model evaluation and improvement
5.model evaluation and improvement5.model evaluation and improvement
5.model evaluation and improvement
 
해커에게 전해들은 머신러닝 #4
해커에게 전해들은 머신러닝 #4해커에게 전해들은 머신러닝 #4
해커에게 전해들은 머신러닝 #4
 
20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료
 
머신러닝 이해하기 (Sample)
머신러닝 이해하기 (Sample)머신러닝 이해하기 (Sample)
머신러닝 이해하기 (Sample)
 
빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)
빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)
빅데이터 전문가 / 데이터 사이언티스트 커리어에 대한 고려 사항과 사례 - Gonnector 고영혁 (Dylan Ko)
 
머신러닝 시그 세미나_(deep learning for visual recognition)
머신러닝 시그 세미나_(deep learning for visual recognition)머신러닝 시그 세미나_(deep learning for visual recognition)
머신러닝 시그 세미나_(deep learning for visual recognition)
 
해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3
 
Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례Deep learning 기반TmapPOI 추천기술개발사례
Deep learning 기반TmapPOI 추천기술개발사례
 
Linear regression analysis
Linear regression analysisLinear regression analysis
Linear regression analysis
 
7.woring with text data
7.woring with text data7.woring with text data
7.woring with text data
 
6.algorithm chains and piplines
6.algorithm chains and piplines6.algorithm chains and piplines
6.algorithm chains and piplines
 
인공지능 변호사 개발 1편 - Ai lawyer 개발을 위한 시도
인공지능 변호사 개발  1편 - Ai lawyer 개발을 위한 시도 인공지능 변호사 개발  1편 - Ai lawyer 개발을 위한 시도
인공지능 변호사 개발 1편 - Ai lawyer 개발을 위한 시도
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
해커에게 전해들은 머신러닝 #2
해커에게 전해들은 머신러닝 #2해커에게 전해들은 머신러닝 #2
해커에게 전해들은 머신러닝 #2
 
AlphaGo 알고리즘 요약
AlphaGo 알고리즘 요약AlphaGo 알고리즘 요약
AlphaGo 알고리즘 요약
 
1.introduction(epoch#2)
1.introduction(epoch#2)1.introduction(epoch#2)
1.introduction(epoch#2)
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow
 

Semelhante a 파이콘 2017 그만퇴근합시다_이지호

CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지Sunwoo Park
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑Dongsik Yang
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰Eunhyang Kim
 
Hoodpub 기술 발표
Hoodpub 기술 발표Hoodpub 기술 발표
Hoodpub 기술 발표Hyun-min Choi
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017devCAT Studio, NEXON
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기Changwan Jun
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)정명훈 Jerry Jeong
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengeYoongi Kim
 
Python & Spark
Python & SparkPython & Spark
Python & Sparkitproman35
 
[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기
[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기
[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기OpenStack Korea Community
 
XECon + PHPFest 2014 XE 프로젝트 이야기
XECon + PHPFest 2014 XE 프로젝트 이야기XECon + PHPFest 2014 XE 프로젝트 이야기
XECon + PHPFest 2014 XE 프로젝트 이야기Sol Kim
 
[월간금융] 스마트워크 필수활용팁(1)
[월간금융] 스마트워크 필수활용팁(1)[월간금융] 스마트워크 필수활용팁(1)
[월간금융] 스마트워크 필수활용팁(1)규문 최
 

Semelhante a 파이콘 2017 그만퇴근합시다_이지호 (20)

JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
 
Hoodpub 기술 발표
Hoodpub 기술 발표Hoodpub 기술 발표
Hoodpub 기술 발표
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challenge
 
Python & Spark
Python & SparkPython & Spark
Python & Spark
 
[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기
[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기
[12월 번역 Meetup] 나의 오픈스택 번역 contributing 삽질 경험기
 
XECon + PHPFest 2014 XE 프로젝트 이야기
XECon + PHPFest 2014 XE 프로젝트 이야기XECon + PHPFest 2014 XE 프로젝트 이야기
XECon + PHPFest 2014 XE 프로젝트 이야기
 
[월간금융] 스마트워크 필수활용팁(1)
[월간금융] 스마트워크 필수활용팁(1)[월간금융] 스마트워크 필수활용팁(1)
[월간금융] 스마트워크 필수활용팁(1)
 

Mais de Jiho Lee

Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Jiho Lee
 
게임으로 배우는 코딩 - 마인크래프를 중심으로
게임으로 배우는 코딩 - 마인크래프를 중심으로게임으로 배우는 코딩 - 마인크래프를 중심으로
게임으로 배우는 코딩 - 마인크래프를 중심으로Jiho Lee
 
개발자, 그 이상 그리고 그 이하
개발자, 그 이상 그리고 그 이하개발자, 그 이상 그리고 그 이하
개발자, 그 이상 그리고 그 이하Jiho Lee
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업Jiho Lee
 
PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초Jiho Lee
 
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관Jiho Lee
 
사물 인터넷과 인공지능이 만나는 세계
사물 인터넷과 인공지능이 만나는 세계사물 인터넷과 인공지능이 만나는 세계
사물 인터넷과 인공지능이 만나는 세계Jiho Lee
 
인간이 아이에게 줄 수 있는 가장 최선의 것
인간이 아이에게 줄 수 있는 가장 최선의 것인간이 아이에게 줄 수 있는 가장 최선의 것
인간이 아이에게 줄 수 있는 가장 최선의 것Jiho Lee
 
소물 2017 네트워크로 감성 나누기
소물 2017 네트워크로 감성 나누기소물 2017 네트워크로 감성 나누기
소물 2017 네트워크로 감성 나누기Jiho Lee
 
10월의 하늘_2016_진도 공공도서관_이지호
10월의 하늘_2016_진도 공공도서관_이지호10월의 하늘_2016_진도 공공도서관_이지호
10월의 하늘_2016_진도 공공도서관_이지호Jiho Lee
 
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다Jiho Lee
 
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...Jiho Lee
 
2016 py con2016_lightingtalk_php to python
2016 py con2016_lightingtalk_php to python2016 py con2016_lightingtalk_php to python
2016 py con2016_lightingtalk_php to pythonJiho Lee
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flaskJiho Lee
 
라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘Jiho Lee
 

Mais de Jiho Lee (15)

Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
 
게임으로 배우는 코딩 - 마인크래프를 중심으로
게임으로 배우는 코딩 - 마인크래프를 중심으로게임으로 배우는 코딩 - 마인크래프를 중심으로
게임으로 배우는 코딩 - 마인크래프를 중심으로
 
개발자, 그 이상 그리고 그 이하
개발자, 그 이상 그리고 그 이하개발자, 그 이상 그리고 그 이하
개발자, 그 이상 그리고 그 이하
 
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
20111025 Excel의 VBA, 매크로. 그리고 파이썬으로 함께하는 반복작업
 
PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초
 
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
암호화폐로 시작하는 블록체인 이야기 - 2018년 10월의 하늘. 목포어린이도서관
 
사물 인터넷과 인공지능이 만나는 세계
사물 인터넷과 인공지능이 만나는 세계사물 인터넷과 인공지능이 만나는 세계
사물 인터넷과 인공지능이 만나는 세계
 
인간이 아이에게 줄 수 있는 가장 최선의 것
인간이 아이에게 줄 수 있는 가장 최선의 것인간이 아이에게 줄 수 있는 가장 최선의 것
인간이 아이에게 줄 수 있는 가장 최선의 것
 
소물 2017 네트워크로 감성 나누기
소물 2017 네트워크로 감성 나누기소물 2017 네트워크로 감성 나누기
소물 2017 네트워크로 감성 나누기
 
10월의 하늘_2016_진도 공공도서관_이지호
10월의 하늘_2016_진도 공공도서관_이지호10월의 하늘_2016_진도 공공도서관_이지호
10월의 하늘_2016_진도 공공도서관_이지호
 
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
생각과 프로그램 개발 - 10월, 소프트웨어에 물들다
 
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구(이렇게 책쓰면 성공...
 
2016 py con2016_lightingtalk_php to python
2016 py con2016_lightingtalk_php to python2016 py con2016_lightingtalk_php to python
2016 py con2016_lightingtalk_php to python
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flask
 
라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘
 

파이콘 2017 그만퇴근합시다_이지호

  • 1. 그만 퇴근합시다! 똑같은 일을 하더라도 스마트하게 하기 이지호
  • 2. 1. 파이썬을 알고 있다면 더 적극적으로 쓰자 2. 파이썬을 사용해 일을 조금이라도 줄이기 3. 칼퇴근을 위해 필요한 개인의 자질 4. 파이썬을 어디에 사용할 수 있을까? 5. 라이브러리를 사용해 하던 일을 더 빠르게 하기
  • 3. 발표자 2분 소개 이름: 이지호 업으로 하는 일: 회사에서 시키면 다한다! 학교에서 하는 일: 매주 데이터베이스 관련 논문을 읽는다 그 외: • 오픈소스 관련 세미나 발표 및 쉬어야 할 주말에 파이썬 강의 • 한빛미디어 ”파이썬 코딩 클럽” 공동 번역(2, 3권) • 제이펍 “Flask 기반의 파이썬 웹 프로그래밍” 집필 • 사단법인 변화를 꿈꾸는 과학기술인 네트워크(ESC 창립회원) 한줄 소개: 공부를 하러 들어간 대학원에서 쓰라는 논문은 안쓰고 책을 집필하는 이 시대의 잉여!
  • 4. 파이썬을 알고 있다면 더적극적으로 저와 여러분이 알고 있는 단어 하나! 파이썬!
  • 5. 질문 하나 수 많은 언어 중에 왜 파이썬을 사용하고 있나요? 질문 하나 파이썬은 누구를 위해 만들어진 언어일까요? 질문 하나 파이썬을 사용하는 곳이 지정되어 있어야 할까요? 파이썬을 알고 있다면 더적극적으로
  • 6. 모든 일에는 알맞는 도구가 있습니다. 도끼로 요리를 하는건 어리석은 일이지만 메짜루나로 요리하는건 당연한 일입니다. 파이썬을 알고 있다면 더적극적으로
  • 7. 파이썬을 알고 있다면 더적극적으로
  • 8. 파이썬을 사용해 일을 조금이라도 줄이기 우리가 일상에서 흔히 겪을수도 있는 일 ”지호씨, git에서 master 브랜치를 컴파일하고 B사 A팀장에게 보내요” 이런 일 쉽게 할 수 있습니다!
  • 9. 그런데 우리가 간과하는 일이 있습니다: 1. git에서 master 브랜치를 압축 파일로 보낸다. git export 명령을 쓰면 해결되요 2. 외부에 브랜치를 보내면 태깅을 해야 합니다. 자주 잊어먹습니다. 그리고 push도 해야 하죠. 3. 메일을 보내기 위해 웹 메일이나 썬더버드를 엽니다. 여기에 들이는 시간도 만만치 않습니다. 파이썬을 사용해 일을 조금이라도 줄이기
  • 10. 우리의 시간은 소중합니다!! 최소한 연애할 시간은 있어야… 파이썬을 사용해 일을 조금이라도 줄이기
  • 11. 이런 일만 있을까요? 1. 캡쳐한 이미지나 문서를 메일로 보내기 2. 대용량 메일을 보내기 3. 에버노트나 드롭박스에 파일 업로드 4. SNS 공유하기 파이썬을 사용해 일을 조금이라도 줄이기
  • 12. 칼퇴근을 위해 필요한 개인의 자질 우리 모두 알고 있습니다. 사실 칼퇴근이란 단어가 없습니다. 대한민국 법은 법정 시간이 유효 근로 시간 현실은… 8
  • 13. 1. 호기심 2. 탐구심 3. 과학적 분석 방법!! 네? 이게 왜 필요하죠?? 4. 그리고 게으름이라는 양념! 칼퇴근을 위해 필요한 개인의 자질
  • 15. 칼퇴근을 위해 필요한 개인의 자질 탐구심
  • 16. 칼퇴근을 위해 필요한 개인의 자질 과학적 분석 방법!!
  • 17. 칼퇴근을 위해 필요한 개인의 자질 그리고 게으름이라는 양념!
  • 18. 파이썬을 어디에 사용할 수 있을까? 1.OPENSSL 루트 인증서 및 클라이언트 인증서 생성 2.JKS 인증서 생성 a. 주의: keytool 로도 가능은 해요? 3.PDF 생성 4.프린터 하기 5.엑셀 파일 파싱 6.웹 크롤링 7.구글 문서 조작 8.VCS, 압축하기, 드롭박스나 에버노트 연동 9.응용: KDE Spectacle에서 캡쳐 후 에버노트로 보내기!
  • 19. 라이브러리로 하던 일을 더 빠르게 하기 OPENSSL 루트 인증서 및 클라이언트 인증서 생성 openssl - 애플리케이션이 보안 통신을 할 수 있도록 도와주는 프로그램 주된 일 중 하나는 루트 인증서와 루트 인증서를 사용해 인증 요청서에 서명 당장 구글 검색만 해도 수십가지 문서가 나오지만, 결국은 제각각 다른 방법… 마침 데비안 리눅스 배포본엔 쉽게 사용할 수 있는 CA.pl이 있었습니다. 이걸 파이썬으로 리팩터링 했습니다. 파이썬으로 다시 만들면서 느낀건 더 편하게 만들수도 있겠다 였습니다. https://github.com/search5/ca.py
  • 20. JKS 인증서 생성 – JKS: Java standard KeyStore 왜 사용하나? : 자바 애플리케이션이 안전함을 알리기 위해서 사용. 주의: 자바 keytool로도 만들 수 있고, keytool은 keystore 생성, CSR, 스토어 내 인증서 관리에 사용 사용례) Tomcat Connector 설정에 keystoreFile="keystore Path" keystorePass="keystore Password” [참고] - http://dimdim.tistory.com/entry/사설-인증서를-이용한-Tomcat-HTTPS-설정 [딤딤이의 블로그] 라이브러리로 하던 일을 더 빠르게 하기
  • 21. 그렇지만 java keystore를 새로 만들기보다 이미 만들어진 openssl 인증서를 사용하는 방법도 있습니다. 이 방법은 Java 6부터 지원합니다. openssl 인증서를 변환하려면 다음 3개의 절차를 거칩니다. 1) 개인키와 인증서를 PEM 파일로 변환 2) openssl 파일을 사용해서 pkcs12 포맷으로 변환 3) keytool 도구로 pkcs12 포맷을 jks keystore로 변환 라이브러리로 하던 일을 더 빠르게 하기
  • 22. 그런데, 이렇게 변환 절차를 거치게 되면 몇번씩이나 개인키와 서명된 인증서의 비밀번호 입력은 물론이고 keystore에 비밀번호를 입력하게 됩니다. 이럴때 이런 절차를 모두 간소화할 수 있는 방법이 있습니다. 파이썬의 pexpect 로 변환, 키 입력 등을 사람이 하는 것처럼 흉내내게 하는 것이죠! 라이브러리로 하던 일을 더 빠르게 하기
  • 23. 잠깐만, 뭐라구요? 사람을 흉내내요? 라이브러리로 하던 일을 더 빠르게 하기
  • 24. openssl 인증서를 jks 파일로 변환하기 위해서 생성한 파이썬 스크립트 pkcs12_cmd openssl pkcs12 -export -inkey {PRIVATE_KEY_FILE} -in {MERGE_KEY_FILE} -name server_cert -out {PKCS12_FILE} pkcs12_child = pexpect.spawn(pkcs12_cmd, echo=True) pkcs12_child.expect("Enter Export Password:") pkcs12_child.sendline(PKCS12_PASSWD) pkcs12_child.expect("Verifying - Enter Export Password:") pkcs12_child.sendline(PKCS12_PASSWD) pkcs12_child.interact() 전체 코드: https://github.com/search5/openssl_utils/blob/master/pem2jks.py 라이브러리로 하던 일을 더 빠르게 하기
  • 25. openssl 인증서를 jks 파일로 변환하는 것처럼, 어떤 프로그램은 사람의 입력을 계속 요구할 수 있습니다. 우린 이때 방금 소개한 pexpect를 사용해 사람의 흉내를 낼 수 있습니다. 그런데, pexpect는 윈도우에서 사용할땐 프로세스 실행 코드 방법이 조금 다릅니다. pexpect.spawn 대신 pexpect.popen_spawn.PopenSpawn 를 사용 http://pexpect.readthedocs.io $ pip install pexpect 라이브러리로 하던 일을 더 빠르게 하기
  • 26. 지상 최강의 도구 – 그 이름은 엑셀… 누구나 한번쯤 엑셀 문서를 만들어보지만, 프로그래머가 된다면 역으로 이걸 해석해내기에 바쁩니다. 파이썬으로 엑셀 문서를 읽을 수 있는 라이브러리는: xlrd, openpyxl, xlwings … 그런데 셀에 접근할 때 왜 컬럼의 이름이 아니라 A1, B1, C1, A2, .. 등으로 접근해야 하지? 게다가.. office 2007 이전 버전 엑셀은 xlrd 하나 밖에 사용할 수 없습니다. 라이브러리로 하던 일을 더 빠르게 하기
  • 27. 라이브러리로 하던 일을 더 빠르게 하기 그럼 컬럼 단위로 읽어주는 엑셀 라이브러리를 만들어보자는 생각이 번쩍 들었습니다. 그래서 시간을 내어 엑셀 파일 이름과 시트명을 주고 컬럼 이름으로 데이터를 읽어오는 라이브러리를 만들었습니다. obj = ExcelLib('제5차국내외문서목록 테스트.xml') obj.setWorksheet('2011 국내문서-낱장') obj.buildStyles() rows = obj.buildRows() print rows[0]['기록철'].style.getUnderline()
  • 28. 라이브러리로 하던 일을 더 빠르게 하기 하지만, 제가 만든건 아주 크나큰 결점이 있습니다. 1) Office 2003 XML 파일 형식으로 저장되어 있어야 한다 2) XML을 DOM으로 해석하기 때문에 메모리가 커야한다. 그래도 사소한 장점이 아닌 장점도 있습니다. 1) 셀 별로 스타일을 엑셀 파일에 지정한대로 들고 오게 할 수 있다 2) XML 파일 이므로 읽고/쓰기가 모두 가능할 수도 있다. 만들고 나서 든 생각: 이걸 누가 쓰니? https://github.com/search5/msoffice_2003_excel_xml
  • 29. 라이브러리로 하던 일을 더 빠르게 하기 규격화된 문서를 만들고 배포하기에 대중적으로 선호되는 포맷은 PDF 입니다. PDF를 만들 수 있는 다양한 방법과 라이브러리가 있지만, 다음 2개만 소개합니다. PyFPDF, ReportLAB 등..
  • 30. 라이브러리로 하던 일을 더 빠르게 하기 PyFPDF는 PHP에 있는 fpdf 라이브러리를 파이썬으로 포팅한 것입니다. from fpdf import FPDF pdf = FPDF() pdf.add_page() pdf.set_font('Arial', 'B', 16) pdf.cell(40, 10, 'Hello World!') pdf.output('tuto1.pdf', 'F')
  • 31. 라이브러리로 하던 일을 더 빠르게 하기 FPDF는 파일로 PDF를 저장할 수도 있지만, 스트림 형태로 웹 브라우저에 보낼 수도 있습니다. stream = pdf.output(dest='S').encode("latin1") response_tuple = (stream, "200 OK", {'Content-Type': 'application/pdf'}) return make_response(response_tuple) https://pyfpdf.readthedocs.io/en/latest/
  • 32. 라이브러리로 하던 일을 더 빠르게 하기 하지만, FPDF를 사용해 가장 구현하기 힘든건, PDF에 테이블을 집어넣는 일입니다. 아직까지 PyFPDF에 테이블을 넣는 효과적인 방법은 찾지 못했지만, 다행이 PHP로 만들어진 라이브러리가 있어 이를 직접 포팅 했습니다. https://goo.gl/uQSaZq
  • 33. 라이브러리로 하던 일을 더 빠르게 하기 파이썬을 사용해 PDF를 만들 수 있는 라이브러리로 PyFPDF 외에도 ReportLAB 이 있습니다. from reportlab.pdfgen import canvas def hello(c): c.drawString(100,100,"Hello World") c = canvas.Canvas("hello.pdf") hello(c) c.showPage() c.save()
  • 34. 라이브러리로 하던 일을 더 빠르게 하기 ReportLAB은 PDF를 캔버스 개념으로 다룹니다. 캔버스는 하얀 도화지와도 같기 때문에 앞의 코드만으로도 쉽게 PDF 파일을 만들 수 있습니다. 그리고, TrueType Font 적용 기능과 테이블 기능이 제공됩니다. 무엇보다 경량화된 FPDF에 만족하기 어렵다면 고급 기능을 제공하는 reportlab을 사용하세요. 하지만 프로페셔널은 유료에요!!! http://www.reportlab.com/
  • 35. 라이브러리로 하던 일을 더 빠르게 하기 엑셀을 잠깐 맛보고 왔으니 이제 구글과 함께 놀아볼 겁니다. 여러분이 모두 인정하는 한 문장이 있죠. <= 구글신께 물어봐! 오늘은 여러분에게 구글을 신이 아니라 하인처럼 부려볼 겁니다.
  • 36. 라이브러리로 하던 일을 더 빠르게 하기 구글은 다양한 도구를 제공하는데 그 중 하나가 구글 드라이브입니다. => 처음엔 구글 문서도구로 시작.. 그럭저럭 쓸만한 온라인 오피스가 됐습니다. 아주 잠깐이지만, 파이썬을 사용해 구글 스프레드시트를 만들고 내용을 채워넣는 모습을 보여드릴겁니다. => 그리고 해야할 일을 알려드리겠습니다.
  • 37. 라이브러리로 하던 일을 더 빠르게 하기 구글 스프레드시트를 사용하는 것은 구글 API 클라이언트를 사용하는 것이 정석이지만 처음 쓰면 매우 다가가기 힘든 녀석입니다. 그래서 여러분은 pygsheets를 사용하시는게 좋습니다. $ pip install https://github.com/nithinmurali/pygsheets/archive/master.zip
  • 38. 라이브러리로 하던 일을 더 빠르게 하기 import pygsheets gc = pygsheets.authorize() sh = gc.open('PyCon 2017') wks = sh.sheet1 wks.update_cell('A1', '안녕하세요. 파이콘 2017에서 만나뵙게 되어 대단히 반갑습니다') wks.cell('A2').value = '오늘은 이 자리에 서게 되어 정말 기뻐요’ sh.share("search5@gmail.com")
  • 39. 라이브러리로 하던 일을 더 빠르게 하기 하지만, pygsheets를 사용하기 위해서는 다음의 일을 먼저 수행해야 합니다. 1. console.cloud.google.com에 접속해서 프로젝트 생성 2. oauth 정보 등록 3. oauth2.0 정보 생성 4. client….json 파일을 client_secret.json으로 변경 5. http://pygsheets.readthedocs.io/en/latest/ 참고하기!! 자동화를 위해서 아주 사소한 일이에요!
  • 40. 라이브러리로 하던 일을 더 빠르게 하기 앞서, 구글 스프레드시트를 다루는 일만 먼저 살펴봤습니다. =>사실, 구글 오피스에서 자바스크립트 대신에 파이썬 스크립트를 대신 사용할 수도 있습니다. 여러분이 가져야 할 건, 영어에 대한 두려움이 아니라, 호기심과 탐구심이란걸 잊지 마세요!
  • 41. 라이브러리로 하던 일을 더 빠르게 하기 요즘 파이썬으로 가장 핫한 이슈 중 하나 ---> 데이터 크롤링 여러분 머릿속에서 뭘, 생각하고 계신가요? 다양한 데이터 소스에서 크롤링 할 수 있지만 여기서는 웹 크롤링을 살짝 들여다보겠습니다.
  • 42. 라이브러리로 하던 일을 더 빠르게 하기 웹 문서 크롤링을 한다면, 이런게 필요합니다. 1) 웹 브라우저 2) 크롤링할 주소 3) 크롤링할 콘텐츠 영역 2, 3번은 이해가 되는데 1번은 좀 갑작스럽습니다.
  • 43. 라이브러리로 하던 일을 더 빠르게 하기 웹 사이트는 접속하는 브라우저(웹 브라우저 포함)를 식별할 수 있습니다. 어떻게? => 브라우저가 웹 사이트에 자신이 누구인지를 밝히기 때문. 그러다보니? => 브라우저가 누구인지에 따라 HTTP 응답 또는 거절 그래서, 이들을 위해 웹 브라우저가 보내는 헤더를 미리 파이썬 사전으로 구성해둘 필요가 있습니다.
  • 44. 라이브러리로 하던 일을 더 빠르게 하기 headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'en-US,en;q=0.8,ko;q=0.6', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'Host': 'opengov.seoul.go.kr', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36'}
  • 45. 라이브러리로 하던 일을 더 빠르게 하기 많은 사람들이 파이썬으로 웹 크롤링을 한다고 하면 구글 문서부터 찾아봅니다. 하지만, 오늘부터 이렇게 하세요. $ pip install requests lxml 그리고 크롬이나 파이어폭스가 필요합니다.(IE는 어디로..)
  • 46. 라이브러리로 하던 일을 더 빠르게 하기 r = requests.get(url, headers =headers) from lxml import html tree = html.fromstring(page_str) title = tree.xpath('//*[@id="comm-view"]//div[@itemprop="about"]') lxml을 사용해 HTML 문서로부터 원하는 데이터를 뽑기 위해서 알아야 하는건, XPATH 문법 뿐입니다!!
  • 47. 라이브러리로 하던 일을 더 빠르게 하기 XPATH는 무엇인가요? XML 관련 기술 중 하나로 문서 내에 있는 의미 구성 요소를 트리 단위로 찾기 위해 고안된 경로 문자열 검색 언어입니다. 이런 책이 있지만, 우리에겐 MDN(Mozilla Developer Network)이 있습니다.. https://developer.mozilla.org/ko/docs/XPath
  • 48. 라이브러리로 하던 일을 더 빠르게 하기 S전자에는 무어의 법칙에 비견가는 황의 법칙(2008년에 깨짐)이란게 있다고 합니다. 메모리가 주기적으로 배수 만큼 커진다는 것인데, 컴퓨터 디스크도 95년도에 400MB만 해도 대단한 크기였습니다. 여전히 디스크 크기는 커지고 있지만 우리는 데이터를 저장하고 공유하기 위해 이제 온라인 저장공간을 사용하고 있습니다.
  • 49. 라이브러리로 하던 일을 더 빠르게 하기 널리 알려진 온라인 저장소로 아마존 S3, 구글 Cloud Bucket이 있지만... 잘 모르시죠? 그래서 준비했습니다. Dropbox! 전세계에서 가장 유명한 온라인 스토리지입니다(귀도 반 로썸 아자씨가 여기에 계시다고)
  • 50. 라이브러리로 하던 일을 더 빠르게 하기 어떤때 사용하면 좋을까요? 웹 브라우저를 사용하기 어렵고, 파일 공유가 필요할때가 있을 것입니다. 아마 서버 컴퓨터가 이런 분류에 속하지 않을까요?
  • 51. 라이브러리로 하던 일을 더 빠르게 하기 드롭박스는 파이썬 SDK를 지원합니다(사실은 다른 언어도 지원해요.. ㅠ.ㅠ) 우린 파일 업로드만 살펴보겠습니다. import dropbox dbx = dropbox.Dropbox('19RV0X3pjA4...') dbx.files_upload(open("samples.jpg","rb").read(), "/samples.jpg")
  • 52. 라이브러리로 하던 일을 더 빠르게 하기 어…어.. 뭔가 빠진 것 같지만 사실은 정말 정상적입니다. 그럼 이렇게 업로드된 파일을 다른 사람에게 링크만 보내거나 공동 작업자를 추가할 수도 있습니다. 그럼 업로드된 파일의 short url을 구해보겠습니다. s = dbx.sharing_create_shared_link("/samples.jpg", True) PathLinkMetadata(url='https://db.tt/WQqBexRWRY', visibility=Visibility('public', None), path='/samples.jpg', expires=None)
  • 53. 라이브러리로 하던 일을 더 빠르게 하기 드롭박스는 sharing_create_shared_link 메서드 => 공유 URL을 구하면 PathLinkMetadata 객체 반환 이제 PathLinkMetadata.url 을 알려주면 됩니다. 이것도 귀찮겠죠? 텔레그램이나 슬랙 봇을 만들어 내부 구성원에게 공유하거나 smtplib 모듈을 사용해 링크를 메일로 전달할 수 있습니다. 리눅스 KDE 데스크탑의 화면 캡쳐 프로그램인 스펙타클(Spectacle)을 사용한다면 캡쳐 이미지를 바로 드롭박스에 업로드 하는 것도 가능할 겁니다.
  • 54. 라이브러리로 하던 일을 더 빠르게 하기 하지만 드롭박스를 사용하기 위해서 다음은 꼭 지켜주세요. https://www.dropbox.com/developers/apps 에 들어가서 API 키를 반드시 발급 받아야 합니다. 그렇지 않으면 드롭박스는 사용할 수 없습니다!! 설치는 언제 그렇듯.. $ pip install dropbox
  • 55. 라이브러리로 하던 일을 더 빠르게 하기 메모 프로그램에도 Dropbox와 비슷한 서비스가 있습니다. 바로 에버노트죠. 에버노트의 카피 문구는 “제 2의 뇌”입니다. 그런데 우리가 에버노트를 제2의 뇌로 잘 사용하고 있나요?
  • 56. 라이브러리로 하던 일을 더 빠르게 하기 전용 클라이언트가 있어야 하거나.. 웹 브라우저로만 써야 한다거나.. 스마트폰이 꼭 필요하다면.. 이걸 꼭 써야 할 이유가… 없을겁니다.
  • 57. 라이브러리로 하던 일을 더 빠르게 하기 그래서 준비했습니다. 에버노트에 이미지 노트를 만드는 방법을. 먼저 에버노트 SDK를 설치합니다. $ pip install https://github.com/evernote/evernote-sdk-python3/archive /master.zip
  • 58. 라이브러리로 하던 일을 더 빠르게 하기 그리고 API 키 정보와 개발 토큰을 다음 사이트에서 등록합니다. http://dev.evernote.com/doc/ https://www.evernote.com/api/DeveloperToken.action
  • 59. 라이브러리로 하던 일을 더 빠르게 하기 노트 생성 시작하기 import hashlib import binascii import evernote.edam.type.ttypes as Types from evernote.api.client import EvernoteClient auth_token = "S=s135:U=dd6e77:E=16521625b0f…"
  • 60. 라이브러리로 하던 일을 더 빠르게 하기 client = EvernoteClient(token=auth_token, sandbox=False, china=False) note_store = client.get_note_store() note = Types.Note() note.title = "PyCon2017" image = open('samples.jpg', 'rb').read() md5 = hashlib.md5() md5.update(image) hash = md5.digest()
  • 61. 라이브러리로 하던 일을 더 빠르게 하기 data = Types.Data() data.size = len(image) data.bodyHash = hash data.body = image resource = Types.Resource() resource.mime = 'image/jpeg' resource.data = data note.resources = [resource]
  • 62. 라이브러리로 하던 일을 더 빠르게 하기 hash_hex = binascii.hexlify(hash) hash_str = hash_hex.decode("UTF-8") note.content = '<?xml version="1.0" encoding="UTF-8"?>' note.content += '<!DOCTYPE en-note SYSTEM ' '"http://xml.evernote.com/pub/enml2.dtd">' note.content += '<en-note>PyCon 2017<br/>' note.content += '<en-media type="image/jpeg" hash="{}"/>'.format(hash_str) note.content += '</en-note>' created_note = note_store.createNote(note)
  • 63. 라이브러리로 하던 일을 더 빠르게 하기 에버노트과 파이썬 연계의 아쉬움… 아직 파이썬 2만 제대로 연동… 내부 특성이지만 ENML이라는 마크업 언어를 배워야 한다. 그리고… 개발에 대한 정보를 찾아보고 이해할 수 있어야 합니다.
  • 64. 라이브러리로 하던 일을 더 빠르게 하기 소스 코드 관리에 필수적인 도구 중 하나인 Git. 좋은 도구도 많고, 쉽게 사용 가능할 정도로 널리 알려져 있습니다. 그런데 하나의 일 처럼 보이는(최근 10개의 커밋 내역에서 변경된 파일만 끄집어 압축한다거나..) 것을 하려면 1. 커밋 내역을 확인한다. 2. 변경 파일 목록을 적는다. 3. 똑같은 폴더 구조 만들고 변경된 파일을 복사하기 시작한다.
  • 65. 라이브러리로 하던 일을 더 빠르게 하기 우리는… 원시 시대에 살고 있지 않습니다…
  • 66. 라이브러리로 하던 일을 더 빠르게 하기 이런 이유로… gitpython이있습니다. 설치는 이렇게 합니다. $ pip install gitpython 설명서는... http://gitpython.readthedocs.io/
  • 67. 라이브러리로 하던 일을 더 빠르게 하기 from git import Repo repo = Repo(".") commit = repo.commit("HEAD~10") change_list = list(commit.stats.files.keys()) ['static/img/glyphicons-halflings-white.png', 'templates/mngt/team.html', 'static/css/bootstrap.css', 'templates/asset/pc_list.html.bak’, …]
  • 68. 라이브러리로 하던 일을 더 빠르게 하기 from git import Repo repo = Repo(".") # archive repo.archive(open(”../repo_latest.zip”, “wb”))
  • 69. 라이브러리로 하던 일을 더 빠르게 하기 gitpython은 아마 여러분이 명령어를 직접 사용해서 단계를 건너뛰게 해주는 효과를 줄여줄 것입니다. 하지만 여기에 필요한건, 여러분의 호기심이죠.
  • 70. 많은 개발자들이, 그리고 저와 여러분도, 디지털이라고 생각하는 아날로그 시대에 살고 있습니다. 앞서 많은 예제를 살펴봤지만 아직 할 수 있는게 더 많습니다. 예를 들면, cups를 사용한 프린팅 서버도 있을 수 있습니다. 여기에서 미처 소개하지 못했지만요.. 마무리