Google Analytics에 이상한 놈이 잡힌다

새해 목표중 하나가 블로그 활성화하기 였다.

그래서 디자인도 조금 바꾸고 구조도 약간 바꾸면서 작업하고 있었다.

그러던 중에 Google Analytics에 들어가봤는데 이상한 놈(?)이 잡혀있었다.

딱봐도 수상해 보이는 놈들이 있다.

  • Vitaly rules google ☆*:。゜゚・*ヽ(^ᴗ^)ノ*・゜゚。:*☆ ¯\_(ツ)_/¯(ಠ益ಠ)(ಥ‿ಥ)(ʘ‿ʘ)ლ(ಠ_ಠლ)( ͡° ͜ʖ ͡°)ヽ(゚Д゚)ノʕ•̫͡•ʔᶘ ᵒᴥᵒᶅ(=^ ^=)oO
  • Congratulations to Trump and all americans

Vitaly rules google…

첫번째 놈을 구글링을 했더니 포럼 페이지가 나왔다.

알아보니 러시아산 스팸일거라는 말들이 있었다.

이 스팸이 사이트에 직접적으로 영향을 주지는 않지만 GA에서 웹 로그 분석 결과를 오염 시킬 수 있기 때문에 제거하는 것이 좋다.

GA에서 조회수가 올랐다고 나오는데 다 이놈들이었다고 상상하면…

Congratulations to Trump…

두번째 놈은 Refer가 washingtonpost.com로 찍혔었는데 Refer 전체를 보면 워싱턴 포스트의 트럼프 대선 승리 기사로 이어졌다.
트럼프 기사를 보게하려는 스패머의 의도같다. 그러므로 기사 링크는 클릭하지 않는게 좋을 것 같다.

스패머는 트럼프 지지자임에 틀림없다.

해결방법

해결방법은 Google Analytics에서 제공하는 필터기능을 사용하면 된다고 한다.

관리 > 필터 > 필터 추가

같은 방법으로 아래 도메인들을 추가하자(포럼 페이지에서 언급되었던 도메인인데 아마도 과거에 스팸을 보냈던 도메인일듯)

1
2
3
4
5
6
7
8
9
10
11
12
13
darodar.com
pornhub-forum.ga
pornhub-forum.uni.me
hulfingtonpost.com
Get-Free-Traffic-Now.com
youpron-forum.ga
buy-cheap-online.info
googlsucks.com
rapidgator-pron.ga
10.205.10.237
generalgorn.org
pronhubforum.tk
theguardlan.com

그래서 이렇게 필터를 구성하면 된다.

Refer

2016년 연말정산

2016년이 끝났다.
나름 열심히 달렸던 한 해라고 생각하는데 정작 남는건 별로 안 되어 보이는(?) 한 해였다.

하려고 했던 것들

하려고 했던 것들을 미리 정리해 두지 않아서 내 의식속에 남아있는 것들을 꺼냈다.

  • 졸업
  • 개발 블로그
  • 맥북 구하기!
  • 책 많이 읽고 리뷰까지
  • 커뮤니티 참가하기

졸업

하긴했다.
아니 사실 할 예정이다.
2월에 졸업을 하면 이제 공식적으로 백수가 된다.

개발 블로그

이건 했다고 하기가 애매하지만 하긴했다.
원래 네이버 블로그에서 만들어서 해보려했으나 코드가 예쁘게 나오지 않아 워드프레스를 거쳐 요즘 대세(?)인 Github에 블로그를 만들기로 결정했다.

이 블로그도 언제까지 이어질지 모르는 운명이지만…

이제 백수니까 블로그도 예쁘게 디자인하고 글도 많이 쓰다보면 정이 들어서 새해에도 열심히 하지 않을까?

blog
내년엔 제발 디자인이 바껴있길…

맥북 구하기!

맥북이 생겼다.(헤헤)
나의 첫 맥북은 전에 일하던 회사에서 일 열심히 하라고 사준 맥북 프로 레티나 2014 15인치 모델이었다.
그 맥북을 열심히 가지고 놀다보니 회사를 관두게 되었다(?)

책 많이 읽고 리뷰까지

사실 이건 하나도 못했다.
책을 여러권 읽기는 했지만 리뷰까지는 생각을 못했다.
그 대신 이 글에 간단히 남기자면,
너는 나에게 상처를 줄 수 없다 - 배르벨 바르데츠키

이 책을 남겨보고 싶다.

누군가에게 상처를 받았거나 자존감이 낮은 사람이라면 이 책을 읽어보길 바란다.

그 외에도 개발 관련 서적들을 몇개 읽었는데 그건 앞으로 차차 리뷰를 해야겠다.

커뮤니티 참가하기

파이콘!

PYCON APAC 2016

데이터야놀자!

데이터야놀자

장고걸스대전!

장고걸스대전

이 외에 여러가지 컨퍼런스에도 참가했었는데 진짜 커뮤니티 활동은 좋은 것 같다.
쫄보라서 저런데 가도 막 사람들이랑 친해지지는 못했지만 ㅠㅠ

내년에는…

하고싶은 것들을 무작정 뱉어봤다.

  • 취업(좋은 회사로)
  • 이사하기(좋은 집으로)
  • 책 많이 읽기
  • 취미 만들기(컴퓨터 말고)
  • 건강 관리하기
  • 블로그 활성화하기

라즈베리파이로 슬랙 봇 개발(a.k.a JARVIS)

마지막 학기에 임베디드 시스템 설계라는 과목을 들었다.

그동안 관심있던 라즈베리파이를 사용한다는 강의계획서를 보고 바로 신청하게 되었는데 과목 이름만 보면 하드웨어도 엄청 다뤄야할 것 같은 과목이지만 특이하게 라즈베리파이르 사용해서 챗봇을 만들게 되었다.

사실 페이스북 메세지와 라즈베리파이를 사용해 챗봇을 개발해본 경험이 있어 손쉽게날로먹으려고 개발할 수 있겠다 싶었다.

개발 과정

Slack Bot User

슬랙 봇을 사용하는 방법은 아주 간단하다.
링크에 들어가면 봇 이름을 적으면 끝!
jarvis

그러면 다음과 같이 토큰을 발급해 주는데 이 토큰으로 API를 사용할 수 있다.

jarvis

python-rtmbot

Real Time Messaging API 를 사용하기 위해 python-rtmbot라이브러리를 사용했다.
사용방법은 Github페이지에 매우 자세하고도 간단하게 나와있다.
아래 그림처럼 플러그인을 추가하면 봇을 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
class Jarvis(plugin):
def process_message(self, data):
try:
self.send_message(data)
except Exception as e:
text = ":shit: Error : " + str(e)
slack.slack_client.api_call(
"chat.postMessage",
channel=data.get("channel"), text=text, as_user=True
)

개발 중 에러가 발생하면 로그에 에러메세지가 뜨지만 슬랙에서는 아무런 반응이 없어서 이것이 오래 걸리는 작업이라 그런건지 에러가 난건지 알 수 없었다. 그래서 에러가 발생하면 에러 메세지를 슬랙으로 전송해 개발 효율을 높일수 있었다.

jarvis

Django

봇 기능중에 온습도를 측정하는 기능이 있었는데 센서에서 값을 실시간으로 불러오면 시간이 조금 걸렸다.
그래서 어딘가에 주기적으로 기록하고 그 값을 가져오야 겠다 싶기도 했고, 옵습도 값 변화를 한눈에 보면 좋겠다싶어 웹 서버 하나를 만들어 그래프를 만들었다.
그래서 웹서버로 Django를 사용했다.

Django-crontab

온습도 값을 센서에서 읽어와 데이터베이스에 저장하는 스크립트를 crontab으로 하려했는데 찾아보니 Django-crontab이란것을 발견했다.
이것의 장점은 Django의 ORM기능을 그대로 사용할 수 있다는 것이다.
덕분에 아래와 같이 코드량이 매우 감소해 개발시간을 줄일 수 있었다.
Django-crontab 역시 Github에 문서화가 잘 되어있어 사용법을 참고하면 된다.

1
2
3
4
5
6
7
8
9
10
import Adafruit_DHT
from common import models
from datetime import datetime

def add_dht():
sensor = Adafruit_DHT.DHT11
pin = 4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
dht = models.DHT(humidity=humidity, temperature=temperature, created_at=datetime.now())
dht.save()

기능

온습도 조회

jarvis

날씨 검색

jarvis

사실 기능이 더 있지만 궁금하신 분은 슬라이드를…(거의 없겠지만)

그리고

이 프로젝트를 진행하고 있던 학기 중에는 몰랐지만 이 글을 쓰고 있는 시점에 갑자기 저커버그가 실제로 자비스를 개발했다고 기사가 나왔다.

그 기사를 보는 순간 내가 한 프로젝트가 초라해지기 시작해서 이 글도 올리지 말아야겠다 하고 있었는데, 뭐 어짜피 보는 사람도 별로 없는 블로그이므로 그냥 올려보기로 했다. ㅠ.ㅠ

Virtualenv로 Python2, Python3 환경 만들기

Python을 쓸 때 virtualenv는 필수였다. 거기에 덤으로 virtualenvwrapper도 같이 쓰곤 했다.

그러던 중 누군가 나에게 말했다.

아직도 Python2를 쓴다고? 이제 대세는 Python3이야!

팔랑귀였던 나는 당장 Python3을 설치했다.

하지만 뭔가 문제가 생겼다.
터미널에서 virtualenv + virtualenvwrapper의 조합으로 가상환경을 구성해 쓰던 나였는데 virtualenv 이 놈은 Python2만 바라보고 있으니 Python3는 가상환경을 구성하지 못하는 불편함이 있었다.

혹시 방법이 있을까해서 help를 쳐봤다.

1
2
3
4
5
6
7
8
9
10
11
$ mkvirtualenv --help
...

-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python2.5 will use the python2.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with
(/usr/local/opt/python/bin/python2.7)

...

나같은 사람이 나뿐만이 아니었나보다.

방법

1
2
3
4
5
6
$ mkvirtualenv -p /usr/local/bin/python3 python3

...

(python3) $ python --version
Python 3.5.2

mkvirtualenv -p <PYTHON_PATH> <VIRTUALENV_NAME>

이 명령어를 기억하자.

그리고

conda라는 것도 있던데 나중에 한번 써봐야겠다.

데이터야놀자 스텝 후기

어쩌다보니 데이터야놀자 스텝으로 참가하게 되었다.
사실 어쩌다보니는 아니고 몇가지 동기가 있었다.

동기

제일 큰 동기는 저번에 파이콘에 참가하면서 컨덕(컨퍼런스 덕후)이 되었기 때문이다.

하지만 파이콘에는 슬픈 추억이 있다.

파이콘에 같이 갈 사람이 없어 “혼자가도 사람들이랑 친해지면 재밌겠다!”라는 생각에 혼자 갔는데 그렇게 내내 혼자였다고 한다…

쫄보였던 나는 또 혼자 가봤자 뻘쭘하고 혼자 쭈뼜대다가 올거같다는 생각에 아는 지인을 꼬셔서 같이 자원봉사에 지원하게 되었다.(준태형 고마워요!)

또 이번 행사에는 평소에 관심이 많았던 주제(Spark! Zeppelin!)를 다룬 세션들이 많아서 넘나 좋았다.

그렇게 자원봉사단에 합류하게 된 쫄보컨덕은 매우 들떠있었다.

행사 준비

사실 행사 준비는 진짜 이래도 되나 싶을 정도로 한게 없다.(나는)

페이스북으로 사전에 연락하고 행사 일주일 전에 만나서 회의 한 게 전부였던 것 같다(물론 나는…)

물론 그 이면에는 행사를 주최하신 경국님의 어마어마한 노력이 있었다. 또한 이런 행사를 많이 해보신 현주님의 전두지휘도 한몫 한 것 같다

하지만 한 일이 없기때문에 한편으로는 조금 많이 불안했다. 그래도 명색이 자원봉사자인데 행사날 뭘 해야할지 행사 전날 까지 몰랐기 때문이다.

나는 많은 역할 중에 행사 당일 현장 잡부 - 모든지 알아서 척척척 ( 주의 어떤걸 해야 하는지 찾아서 해야함 ) 이 역할을 맡았는데, 그 때문에 그전에 한 게 없었는지는 잘 모르겠다.

데이터야놀자

어느 스텝의 의식 흐름

행사 당일 7시 반쯤에 마루 180에 도착해서 행사장 셋팅부터 시작되었다.

평소보다 훠어어얼씬 일찍 일어난 탓에 약간 피곤했지만 행사에 대한 기대감에 엄청 들떠있었다.

짐을 옮기고 참가자들을 위해 준비한 기념품들을 정리하고 나니 9시가 되어 참가자 등록 할 준비를 했다. 참가자 등록은 민구님과 내가 맡았다.

등록
사진에서는 안그래 보이지만 사람들이 계속 몰려와서 완전 정신이 없었다.

한참 등록을 받다가 정신을 차리니 어느새 시간은 11시가 다 되있었다.

이제 조금 쉬어도 되겠지… 라고 생각한 순간 점심 도시락 배달이 왔다. 껄껄껄

현주님의 전두지휘로 1층과 지하 1층의 점심 담당이 정해졌다. 난 1층 살롱을 맡게 되었다.

그렇게 점심식사가 끝나고 듣고 싶었던 김태준님의 Spark & Zeppelin을 활용한 머신러닝 실전 적용기 세션을 들었다. 깃헙에 발표자료를 공유해두셨다 했는데 북마크 해뒀다.(나중에 꼭 해봐야지)

그리고 다른 스텝분들이 세션에 들어가서 데스크를 지키다가 권혁진님의 Spark SQL 실시간스트리밍 세션을 들었는데 스파크 오픈소스 생태계의 밑바닥을 본 것 같은 느낌이었다.(농담입니다.)

정신없이 시간이 흘러서 시계를 확인하니 아직 4시였다. 행사는 10시까지… 그때부터 약간 걱정되기 시작했다.

10시까지 버틸 수 있을까…

저녁식사로 피자를 주문했는데 근처 피자집에서 가져와야했다. 피자를 가져오느라 3~4번 왔다갔다 했더니 급 피곤이 몰려오기 시작했다.

그리고 대망의 피자 & 맥주 파티!

피자!
지쳐가던 나에게 단비같은 피자였다. 거기에 맥주라니!! 🍺❤️

그러고는 싱어송라이터 도마님의 공연도 더해지니 정말 좋았다.

식사를 마무리하고 패널토의가 시작되었는데 실무에서 데이터를 다루는 분들이 얘기를 하는데 정말 재밌고 유익했던 시간이었다.

데이터 사이언티스트란 첫째, 맥북을 사용하고… -데이터야놀자 패널토의 중-

패널토의가 끝나니 이제 점점 끝나간다는 느낌이 들어서 아쉬웠다.

그 후에 라이트닝토크가 진행되었는데 같이 라이트닝토크를 듣고 있던 태준님에게 엄청 소심하게 말을 걸어봤다.(쫄보인생 ㅠㅠ)

아까 세션 정말 잘 들었다고, 나도 제플린 사용하는 데 정말 도움 많이 될 것 같다고 하니 되게 친절하게 내가 물어본 거 답변도 해주시고 나중엔 번호도 주셨다.(역시 스텝 하길 잘했어!)

그리고 이제 라이트닝토크도 다 끝나고 정리만 남았는데… 사실 이 정리를 언제 다하나 싶었지만 생각보다 되게 빨리 끝났다. 마무리하고 마루180에서 나오는데 뭔가 느낌이 짠했다. 이대로 끝내기는 아쉬웠지만 다음 뒷풀이를 기대하며 헤어졌다.

결론

이렇게 행사에 스텝으로 참여한 것이 처음이라 되게 어설프고 모자랐던 부분이 많았던 것 같다. 하지만 다들 재밌게 해주시고 즐길 수 있게 해주셔서 너무 고마웠다.

어쩌다가 지방의 쫄보컨덕이 이런 큰 규모의 행사 스텝에 참여하게 돼돼서 얻어가는 것이 정말 많았다.
사실 나는 컵 덕후이기도 한데 이번 기념품으로 제공한 컵이 너무 예뻐서 정말 좋았다.
또한 요즘 장고걸스 대전을 기획하는 중인데 장고걸스 서울 운영진이신 현주님이 행사 중간중간에 “장고걸스에서는 이렇게 해야 해요!”라고 많은 가르침을 하사하셨다.
그리고 제일 좋은 것은 좋은 사람들을 만났다는 것이다.

아아무튼 스텝으로 참여한 것은 되게 잘한 일인 것 같다.

그러니 여러분 데이터야놀자 준비위원회 같이 해요

데이터야놀자 2017 준비위원회 지원 신청

끝이 아니라 이제 시작이라고 생각하고 내년에도 꼭 참여하고 싶다. 정말정말 재밌었고 잊지 못할 것 같다.

데이터야놀자
다들 수고하셨습니다!

Jupyter에 virtualenv 커널 추가하기

보통 Python 을 쓸 때 virtualenv 를 사용해 독립적인 환경을 구성해놓고 썻다.

virtualenv 를 사용하면 각 환경 별로 패키지를 달리 설치하여 충돌도 막아주고 깔끔한 개발 환경은 지원해주기 때문이다.

하지만 Jupyter 는 개발 환경에 독립적일 필요가 없으니 virtualenv 에 가두지 않고 글로벌하게 설치했다.

그리고 당연하게도 Jupyter 에서 virtualenv 에 설치된 패키지들에 접근하지 못했다.

순간 “그럼 virtualenv 안에 Jupyter 를 설치해야 되는구나!” 라는 생각을 했지만 이건 아닌것 같아서 구글링을 시작했다.

그리고 역시 은 있었다!

설정

일단 적당한 virtualenv를 만들어 놓자.

Jupyter 의 설정들을 보기 위해 터미널에서 jupyter --paths 를 입력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ jupyter --paths
config:
/Users/mac/.jupyter
/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/etc/jupyter
/usr/local/etc/jupyter
/etc/jupyter
data:
/Users/mac/Library/Jupyter
/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/share/jupyter
/usr/local/share/jupyter
/usr/share/jupyter
runtime:
/Users/mac/Library/Jupyter/runtime

그리고 아까 생성한 virtualenv 를 활성화하고, which python 명령어로 가상환경의 위치를 파악한다.

1
2
(tensorflow) $ which python
/Users/mac/.envs/tensorflow/bin/python

그리고 ipykernel 모듈을 설치한다.

1
(tensorflow) $ pip install ipykernel

이제 Jupyter 에 kernel을 추가만 하면 된다.(까먹지말자)

1
$ mkdir /Users/mac/Library/Jupyter/kernels/tensorflow

마지막으로 kernel.json file을 하나 생성해주자.

1
2
3
4
5
6
{
"argv": [ "/Users/mac/.envs/tensorflow/bin/python", "-m", "ipykernel",
"-f", "{connection_file}"],
"display_name": "tensorflow",
"language": "python"
}

그리고 Jupyter를 실행하고 확인하면!

jupyter_1

tensorflow 라는 커널이 추가된 것을 확인할 수 있다!

Refer

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×