2017/04 14

비동기 처리 관련.(python 3)

사실 비동기에 대해서는 자바스크립트의 promise()만 알고 있었고, 어느정도 흐름을 파악해서 다른걸 봐도 비슷할거라 생각했다. 파이썬 3.5부터 비동기 관련 문법이 새로 나왔는데(원래 모듈에 있었는데 기본 문법으로 들어갔다), 공부하려고 docs를 보고 예제를 봐도 잘 이해가 안되서 몇일동안 삽질했었다. 사실 아직도 완전히 이해가 된 건 아니지만, 일단 지금까지 이해한 내용을 기반으로 정리.(새로운 것을 깨닫거나 틀린 지식이 있을 경우 계속 바꿔나갈 예정)사실 글을 쓰다가 발견한건데 쓸게 너무 많다. 아래의 모든 코드는 전부 아래의 참조 링크에서 가져왔습니다.(문제될시 글 삭제하겠습니다.) 3.5이하버전에서는 코루틴 문법이 아래와 같았지만 # Python 3.4 import asyncio @async..

2017-04-27 목요일

몇일전에 오랜만에 팀 회식을 했었다. 몰랐는데 안먹은지 꽤 돼서 회식비 두달치가 쌓였다고 한다. 돈을 얼마 안 남은 기간동안 다 써야 되서 예약하고 고깃집에 갔었다. 그런데 사람들이 휴가니, 재택근무니 해서 예상했던 인원보다 많이 빠져버렸다. 돈은 많고 써야할 기간은 얼마 안남아서 그냥 그날 다 쓰기로 결심했는데... 다 못썼다. 1차에서 고기먹고 돈이 남을것같아서 한우까지 시켜먹었는데 반 정도밖에 못썼다. 2차를 일본식 선술집을 갔는데 거기서 9만원짜리 사케를 먹고, 비싼 연어 등을 시켜먹으니 돈을 거의 다 쓰기는 했다. 사케는 그때 처음 먹어봤는데 비싸서 그런지(계산해보니 소주잔 한잔에 5000원짜리였다) 진짜 엄청 깔끔했다. 깔끔했고 일반 소주처럼 쓰지 않아서 너무너무너무 맛있었다. 뭔가 준비가 덜..

yield from, generator(yield) vs coroutine (python 3)

1. 파이썬에서 제너레이터로 yield를 쓸수 있다. 하지만 3.3부터 yield from 이라는 구문도 생겼다. 간단하게 아래 예제처럼 여러개의 제너레이터를 리팩토링해줄수 있다고 한다.출처 : http://simeonvisser.com/posts/python-3-using-yield-from-in-generators-part-1.html # -*- coding: utf-8 -*- def generator2(): for i in range(10): yield i def generator3(): for j in range(10, 20): yield j def generator(): for i in generator2(): yield i for j in generator3(): yield j for n in..

확률적 자료구조를 이용한 추측 - hyperloglog

자세한 내용은 네이버 개발자 센터에 있다. : http://d2.naver.com/helloworld/711301 요약.유니크한 값이 어떤 자료구조 안에 있는지 정확하게 판단하려면 해쉬 셋 등을 만들어 모든 값을 넣어두고, 값을 가져와서 비교한 후 판단할수 있다. 하지만 이러한 방법은 메모리가 엄청 많이 먹게 된다.(모든 자료를 저장해야하므로) 정확한 값을 얻는데 드는 비용이 너무 크다면 비용을 월등하게 줄이는 대신 오차가 조금 있는 방법이 더 유용할 수도 있다. 이게 hyperloglog이다. 위 네이버 링크에 셰익스피어 작품에 나오는 유니크한 단어 수를 셀때, 자바의 hash set과 hyperloglog를 사용할때의 비교이다. (출처 위의 네이버 개발자 도구. 문제있을시 삭제하겠습니다.)hyperl..

algorithm/theory 2017.04.26

docker 삽질.

앞에 getting started를 해봤지만 그것만 가지고서 뭔가를 만들어보려면 본인이 이해하기 전까지 삽질을 해야 한다. 삽질한 내용을 정리했다. 난 파이썬의 웹 프레임워크 sanic(flask같은거라고 생각하면 된다.)을 도커로 설치해보려고 했다. sanic은 3.5버전 이상에서 돌아간다. 그런데 현재 맥북에 파이썬 2버전대가 깔려있다. 3버전도 설치하려다가 환경변수가 매우매우 꼬일것같은 느낌을 받아서... 도커도 정리할겸 도커로 설치해보기로 결심했다. 도커로 삽질한점도 적고, sanic getting started를 도커에서 돌리는게 목표다. 도커로 삽질하면서 깨달은점.1. 도커로 docker-compose up으로 실행하면 도커가 c에서 코드를 컴파일하듯이 빌드된다. 그 이후로는 빌드한게 실행되므..

data engineering 2017.04.25

redis 기초.

https://www.joinc.co.kr/w/man/12/REDIS/IntroDataType 진짜 이거보다 잘되있을수는 없다고 생각할정도로 정리 잘해놓으심. redis의 리스트 자료구조를 사용하고 있는데, 이름은 리스트지만 자료구조의 덱(dequeue)과 똑같다. 양쪽 끝에서 삽입과 제거가 동시에 발생할수 있는데 유용하게 이용할수 있다. 예를들어 어떤 자료를 처리하기 위에 덱의 맨앞에 삽입한다고 가정하자. 자료를 처리하기 위해서 덱의 맨 끝에서 쓰레드나 프로세스가 대기하면서 자료를 하나씩 꺼내가서 처리한다고 하자. 만약 프로세스나 쓰레드의 결과값이 이상하다고 하면 값을 넣어서 테스트해볼수 있다. 예시 값을 넣어서 테스트해보고 싶은데 덱이 아니라 일반 큐라면 맨앞에 삽입한후 앞의 데이터들이 처리될때까지 ..

data engineering 2017.04.20

index (mongodb)

db에서 인덱스는 쿼리 요청 속도에 중요하다. http://stackoverflow.com/questions/2955459/what-is-an-index-in-sql 답변을 보면 알수있듯이 인덱스는 db에서 쿼리 검색 시 속도를 향상시키기 위해 사용된다고 한다. 이러한 인덱스가 없으면 쿼리 검색시 db가 모든 테이블을 뒤져본다고 한다 인덱스는 UNIQUE나 KEY값을 이용해서 만들수 있다고 한다. 현재 몽고디비에서 사용하는 인덱스는{ "id" : 1.0, "optional_id" : 1.0, "unique_value" : 1.0} 같은 포멧으로 걸려있는데, 감으로 id, optional_id, unique_value에 인덱스가 걸려있음을 알수 있는데, 뒤의 1.0은 내림차순이냐, 오름차순이냐를 뜻한다. ..

data engineering 2017.04.20

mongo db

mongo db는 데이터를 json형태의 키:값으로 저장한다. 이러한 값의 집합을 콜렉션이라고 한다. 일반적인 db의 테이블이라고 보면 된다. python에서 pymongo를 이용해 데이터를 넣거나 빼고 조회 등을 할 수 있다. 공식 문서 : http://api.mongodb.com/python/current/tutorial.html 예시들. 1. db연결, db설정self.client = MongoClient(self.host, 27017)self.db = self.client['디비이름'] 2. db조회self.db['디비이름'].find_one({'조회할 키값?': '조회할 키값'})이처럼 json형태, 파이썬의 딕셔너리 형태로 전송해서 조회함. 3. insert, updatedoc = {'키1':..

docker getting started

도커란 vmware나 virtual box처럼 가상에서 어떤 프로그램을 실행시키도록 해준다. 하지만 vmware나 virtual box와 다른 점은 vmware등은 os전체를 구현한다는 점이고 도커는 현재 시스템에 있는 자원에서 가상화 부분만 구현한다는 점이다. 그래서 vmware등보다 자원 효율이 좋다. https://docs.docker.com/compose/gettingstarted/ 간단하게 도커를 사용하기 위해 위의 getting started 번역해서 필요한것들만 적어놓음. 1. https://docs.docker.com/compose/install/ 에서 도커 설치 2. 도커용으로 폴더를 만들어서 해당 폴더로 들어간다. (공식 문서에 나온 것처럼 composetest라고 만들자) 3. com..

data engineering 2017.04.17

2017-04-11 화요일

회사가 이사갔는데 위치가 참 좋은것같다. 우연히 시기가 맞아떨어져서 점심시간에 걸어서 5분거리인 석촌호수의 벚꽃축제를 팀원이랑 갔다왔다.(알고보니 삼성sds가 바로 옆이다.) 너무 좋았고 서울살면 뭔가 하고싶을때 근처에 있다는 사실이 좋은것같다. 신사옥도 되게 좋다. 다만 스마트 엘리베이터가 12대 있다는건 그렇게 큰 이득은 아닌것같다. 말이 스마트지 인원 파악을 못하니 문제가 많다. 15층을 가고싶어서 눌렀는데 3번 엘리베이터를 타라고 해서 3번으로 가면 인원이 이미 다 차버려 엘리베이터는 그냥 올라간다. 근데 또 3번 엘리베이터는 내가 15층을 가겠다고 눌러놨을테니 15층에서 설건데 만약 15층에서 내릴 사람이 없으면 그냥 아무이유없이 서는 층이 된다. 이런 이유 등등으로 그닥 효유적이지가 않다.밥도..

2017-04-02 일요일.

고가의 이어폰을 처음으로 질렀다. 사실 이어폰을 잘 몰라서 관심은 없었다. 그리고 비싼것 사봤자 돈값을 할까? 하는 마음이 컸다. 막귀여서 비싼거 들으나 음질은 비슷한거같고... 그런데 선배개발자분이 보스 헤드폰을 쓰는데 노이즈캔슬링이라는 기술이 적용되어 소리가 안들린다고 하셨다. 사실 헤드폰을 쓰고 어떤 기술이 적용됐건 안들린다고 하면 과장이 많다. 매우 조그맣게 들리는데 과장해서 이정도면 안들리는거지! 하는 식이었는데... 선배개발자분의 보스 헤드폰을 쓰니 진짜로... 하나도 안들렸다. (선배개발자분 헤드폰은 qc35) 헐 뭐야이거! 바로사야겠다하고 가격을 보니 55만원이다.다시 진정이 되는데 그래도 노이즈캔슬링되었을때의 조용한 느낌은 몇일동안 잊을수 없었다. 그래서 가격대를 내리고 생각해본 두번째가..