2016年1月30日土曜日

ヤフーデータサイエンスワークショップに行ったメモ



角田直行さん
Data infrastructure at scale

Yahoo のインフラの話
規模の紹介
100以上のサービス 日本の7割の人が使ってる
Dub ブラウザごとにカウントしたアクセス数5億

支えるデータインフラ
データパイプラインにおいて
使用しているツール
テラデータ Storm Hadoop 
Oracle MySQL Cassandra 
ロギング対象 15000 nodes
Hadoop 7000nodes

スマスマ会見時トラフィック 200億リクエスト
去年の同じ日で60億弱だから3倍以上。


これからの挑戦
指数関数的な扱うデータの増加
Hortonworks と協業してHadoop の改善
オープンソースへの貢献
オープンハードウェアへの貢献
Open compute project
海外データセンター
電力的なコスト



爆速機械学習サービス応用編
Arxive.org(間違っとるかも)
ベイジアンフィルタ的な話。


Kibana + elastic search 

なぜビッグデータが選挙の予測を可能にするのか
ヤフービッグデータレポート
検索クエリは人の興味関心の分析に向いている
感情分析はtwitter の方が向いている
必要な目的に応じて様々な目的に対応したデータを活用する

Python で Slack bot の実装をしてみた

Slack の bot ツールでは以下の curl コマンドでメッセージ送信ができる。

Example

$> curl --data "Hello from Slackbot" $'https://<hoge>.slack.com/services/hooks/slackbot?token=<token>&channel=<channel>'
ok
token をパラメータ設定して、データをおみやげにして POST すればメッセージが送られるとのこと。
かなり簡素(Authとか不要)なので勉強のため、Python スクリプトでメッセージ送るスクリプトを書いてみた。
使い勝手とかマジで糞だけど python に慣れるためということで。。

https://github.com/ks6088ts/SlackTool


だいぶ脱線して、以下のこともついでに勉強してた

json ファイルの読み書き
tokenとか見ちゃダメなパラメータ群はまとめて json ファイルに。
Pythonの基礎 ファイル(JSON)の読み込み編
これ参考にしてしまったけど、本来は with 使ってスコープ外れたらリソース開放みたいにナウい感じに書きたい。

Optionparser 機能
help とかあったほうがいいよねと思いたち、追加で実装。
使い勝手がまだ糞だけど使えることは確認した。
必須オプションが抜けてたら死ぬ機能は無いんかな。。。?
https://github.com/ks6088ts/SlackTool/commit/ef2272ca434f2548e1c7195785615558991c0747

パッケージ生成
slack の仕様に依存する処理はまとめてパッケージにしてみた。
ユーザーコード側には抽象化したインタフェースを提供する意図で。
__init__.py をおいて、from package import file_name って感じにロードすればOK
https://github.com/ks6088ts/SlackTool/commit/1bf346bb3d23d0b4601a5df01d6f966d028c156d


とりあえずスクリプトは動いた。
あとやりたいことはこんな感じかな。

- unittest を travis ci で回す
- cron で定期的につぶやく
- 機械学習的なバックエンドを実装していい感じの文章を生成する
- webhook 周りの機能追加

2016年1月26日火曜日

cURL で web 上のコンテンツを自動ダウンロードする

$ curl http://example.com/index.html -O すればダウンロードできるとかいうけど、
実際はそんなうまくいかない場合もある。
某動画サイトで cURL つかって動画のダウンロードを上記要領でやったらうまくいかなかった。


Chrome の developer tool 使って、Network タブからどんな HTTP リクエストがやり取りされているか見てみた。
やたらリダイレクトされてた。


-L つければ余裕かとおもいきやそうでもなかった。
Header を偽装すれば行ける?いやいけない。


こまったのでいろいろ調べてたら、
Chrome にはユーザー操作で発生したリクエストを cURL コマンドで教えてくれる便利機能があった。

Chrome Feature: Copy as cURL


(LORNAJANE Blog より引用)


右クリックでコピーして terminal にペーストして Enter。
万事解決した。
とりあえず複雑な処理してたら -L つけて、
データ取得のために -O つければ幸せになれます。

HTML ソースから、ファイル名の規則とかディレクトリの構成を推測すれば、
欲しいものだけ連番ダウンロードできて幸せになれたりします。
ということで

curlコマンドで連番サイトの全データを取得する

もリンクしておきます。


めでたしめでたし。

Django 高速学習


参考になったページ:

Python Django チュートリアル
 読みやすい。
 このチュートリアルを追ったリポジトリがこれ。自分の復習用。
 https://github.com/ks6088ts/DjangoTutorial

ファイルの文字コードをUTF-8に変換
 "UnicodeDecodeError: 'utf-8' codec can't decode byte" 的なエラーが出た。
 template として使っていた html ファイルのエンコーディングが違ってたというオチ。
 utf-8 に変換ってどうやるんだと困ったときに参照。

Test-Driven Development with Python
 テスト駆動開発と Django が同時に学べるすぐれもの。
 地味にテスト実装とか参考になるのでおすすめ。
 私はいきなりこれを読んだけど、日本語文献ということで Python Django チュートリアルの記事をはじめに読むのをおすすめします。


2016年1月23日土曜日

EC2 上で Django on python3 の開発環境作る話。

GitHubにSSH接続できるようにする方法

    1  sudo yum update -y
    2  cd ~/.ssh/
    3  ssh-keygen -t rsa -C test@gmail.com
    4  sudo yum install -y emacs git
    5  emacs ~/.ssh/config
    6  chmod 600 id_rsa config
    7  cat id_rsa.pub # 公開鍵を github 側に登録
    8  ssh -T git@github.com

===============================================

Python3.4 のインストール
$ sudo yum install python34-virtualenv -y

Python2->Python3 への変更処理

$ python --version
Python 2.7.10
$ sudo alternatives --set python /usr/bin/python3.4

$ python --version
Python 3.4.3
$ pip --version
pip 6.1.1 from /usr/lib/python3.4/dist-packages (python 3.4)

===============================================

dotfiles の設定


   36  git clone git@github.com:username/dotfiles.git
   37  ln -s /path/to/dotfiles/.emacs.d ~/
===============================================

番外編


Selenium 上でのテストコード実行のため

===============================================

2016年1月21日木曜日

TravisCI で Github のリポジトリを自動テストに通す

簡単な yaml ファイル書くだけで自動で CI が回る、そんな時代。
https://docs.travis-ci.com/user/languages/python

TravisCI とのインタフェース

.travis.yml をリポジトリルートに置く。
python のコードをテストしたかったけど、いろいろテスト環境作るために依存モジュールのインストールスクリプトを書く必要がある。

依存モジュールの吐き出し
Python テスト環境の切り出しのために依存しているモジュールのピックアップが必要だったので以下のコードで環境を吐き出す。
$ pip freeze -l > requirements.txt

吐き出したモジュール群は
$ pip install -r requirements.txt
でインストールできる。これを .travis.yml の install: に書けば OK

Github のリポジトリにバッジつける
TravisCI のページに行って、バッジクリックすると Markdown のコードが取得できる。
これをREADME.md に追記すればOK.

2016年1月17日日曜日

wget でルーターに Basic 認証してみる



Basic認証

wget で Basic 認証を試してみる。
# Buffalo のルーターで Basic 認証して再帰的にページをダウンロード
$ wget --http-user="root" --http-passwd="" http://192.168.11.1/ -r


Django で静的ファイルを参照できるようにする

Django で生成される動的なコンテンツと、静的ファイルベースで作成されたページ群を分離してリポジトリ管理するための更新作業メモ。

方針
- 静的ファイルのページ群をDjangoプロジェクトから切り出す
- Django のリポジトリに外部リポジトリとして追加する

Django 側の設定
project/settings.py に以下のコードを追加
# Static files directory
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static/static_repo"),
]

外部リポジトリの追加
$ git submodule add <リポジトリのURL> <生成先>
生成先を project/static/static_repo とする。

リポジトリのクローン
外部リポジトリは --recursive つけると自動的に clone してくれる
$ git clone git@github.com:username/repo.git --recursive

2016年1月6日水曜日

emacs の dotfiles を github で運用してみる


* Github に .emacs.d 以下のコードを置く

上のリポジトリを適当なディレクトリに clone (ここでは ~/repo/dotfiles)

* シンボリックリンクを貼る
$ ln -s ~/repo/dotfiles/.emacs.d ~/