Chainer導入
前提
Python
- Python 2.7.6+, 3.4.3+, 3.5.1+, 3.6.0+が入っている
- NumPy 1.9, 1.10, 1.11, 1.12が使える
- six 1.9が使える
- cythonが入っている
- virtualenvが使える
CUDA
- CUDA 8.0のインストールが済んでいる
- g++ 4.8.4+が入っている
Install
- 基本はここ
手順
- 適当な場所で
git clone git@github.com:pfnet/chainer.git
- virtualenvの環境作成
~/dev/chainer$ virtualenv venv --python=/usr/bin/python3.4 ~/dev/chainer$ source activate venv/bin/activate
- cuDNN用の環境マネージメントツールcudnnenvでcuDNNを入れる
$ pip install cudnnenv $ cudnnenv install v5-cuda8 $ cudnnenv activate v5-cuda8 $ cudnnenv version v5-cuda8
- 必要な環境変数を設定する
$ tail -n 11 ~/.bashrc #path for cuDNN export LD_LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LD_LIBRARY_PATH export CPATH=~/.cudnn/active/cuda/include:$CPATH export LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LIBRARY_PATH # path for chainer export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH export CFLAGS=-I~/.cudnn/active/cuda/include export LDFLAGS=-L~/.cudnn/active/cuda/lib64 export LD_LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LD_LIBRARY_PATH
- 開発者ようにchainerをビルドする
~/dev/chainer$ python setup.py develop ... ... Finished processing dependencies for chainer==1.21.0
これからのパーソナルデータの話(1) ~はじめに~
はじめに
個人の情報の活用が進む現在
日々、SNSやWebサービスを利用する中で、私たち自身の個人の情報がサービス提供者に収集され、私たちユーザーの利便性向上のために活用されていることを感じます。例えば、Twitter広告[1]では、広告主がユーザーの性別、行動履歴、興味などで広告を出したいユーザー層を指定することができます。これは、Twitterがユーザーの情報を収集することで実現ができています。同様のサービスは、Google、Facebook、国内ではヤフーなども提供しています。
個人の情報を利用してユーザーの利便性を向上を目指す動きは、広告分野だけではなく他の分野でも行われています。amazonなどのeコマース分野、Apple・Youtubeなどの音楽・動画配信分野、Facebook・LINEなどのSNS分野も挙がるでしょう。
個人の情報の活用の背景
上記を見るとわかるように、Webサービスを提供する大企業のほとんど全てが、個人の情報を用いてユーザーの利便性の向上を目指しています。この理由として、様々な要因が挙げられますが主に以下の3つが要因だと考えられます。
今回は項目として上げるだけで詳しくは話しませんが、簡単に説明します。上記3つの要因により個人のデータに対して以下のような変化が生まれました。
- 「スマートデバイスの普及」により大量のデータが生成されるようになった
- 「深層学習に代表される機械学習、AI技術の進化ハードウェア・ソフトウェア技術の進化」により対象のデータを分析できるようになった
- 「ハードウェア・ソフトウェア技術の進化」により大規模なデータを高速に利用できるようになった
このように、大規模なデータを生成・分析・利用できるようになったことが背景にあると考えられます。
この文章を書く理由
まだ、しっかりと書きたいことの方向性が決まっていませんが、以下のような疑問を持つようになり、それについて調べたいと思っています。
- パーソナルデータって何なの?
- 個人情報とパーソナルデータの法律的解釈
- 企業のプライバシポリシーの変遷
- これからのパーソナルデータの定義
- パーソナルデータはどのように活用されるの?
- パーソナルデータは大企業に専有されていいの?
- 大量のデータを持つ企業が勝ち残るのか
- 他の企業は生き残れないのか
- 個人としてパーソナルデータを活用するには?
- パーソナルデータの持ち主はだれか
- パーソナルデータをユーザー自ら活用できないのか
参考文献
JavaによるRESTfulシステム構築(2) ~RESTfulサービスの設計~
目的
- RESTfulな分散システム構築の勉強がしたい
- Restの実現方法の1例を学習したい
- Javaに触れてみる
概要
- 架空のEコマースWebストアを設定し、簡単なオーダーエントリーシステムに対応するRESTfulインタフェースを定義してみる
- オブジェクトモデルをチェック
- 分散IFを追加
- URI定義
- データフォーマットの定義
- HTTPメソッドの設計
オブジェクトモデル
- ユーザー機能駆動等でオブジェクトを列挙したい
- Order
- Customer
- LineItem
- Product
URIのモデル化
- 分散IFを作成するためには、システム内に分散する各エンドポイントを定義することが必要。
- RESTfulでは通常エンドポイントをリソースと呼び、URIを使って表現する。
- 例
- /orders
- /orders/{id}
- /products
- /products/{id}
- /customers
- /customers/{id}
- URI設計について
- URIはミニRPCメカニズムとして使用されるべきではなく、各操作(関数)を示すべきではない
- HTTPメソッドとデータ構造を組み合わせて、分散RESTfulシステムの操作が一意に鳴るように設計すべき
データフォーマットの定義
- ネットワーク経由でクライアントに送るリソースを決める必要がある。
- 通常はschemaでデータ構造を定義し、そのデータ構造にあったデータをやり取りする。
選択肢
HTTPメソッドの割当
- 個々のリソースに公開するHTTPメソッドと、その役割を定義する。
- 必要十分な機能を各リソースに割り当てるために必要である
全オーダー、全顧客、全製品の参照
- リソース
- /orders
- /products
- /customers
- GET
GET /products HTTP/1.1
GET /products?startIndex=o&size=5 HTTP/1.1
各オーダー別、各顧客別、各製品別のデータ取得
- リソース
- /orders/{id}
- /products/{id}
- /customers/{id}
- GET
GET /orders/232 HTTP/1.1
オーダー、顧客、製品の作成
PUT
- リソース
- /orders/{id}
- /products/{id}
- /customers/{id}
- PUT
PUT /orders/233 HTTP/1.1
POST
- リソース
- /orders
- /products
- /customers
- POST
POST /orders HTTP/1.1 Content-Type: application/xml <order> <total>199.02</total> ... </order>
オーダー、顧客、製品の削除
- DELETEを使う
オーダーのキャンセル
DELETEの意味のオーバーロード(あんまりよくない)
- リソース
- /orders
- DELETE
DELETE /orders/233?cancel=true
状態と操作
- ある操作がリソースの状態である場合、その状態をデータフォーマット内に定義するべき
PUT /orders/233 HTTP/1.1 Content-Type: application/xml <order> <total>199.02</total> <cancelled>true</cancelled> ... </order>
- cancelledのデータを一掃する
POST /orders/purge HTTP/1.1
keyword
- エントリーポイント
エントリーポイントとは、プログラムを実行するうえで、プログラムやサブルーチンの実行を開始する場所のこと。プログラム全体のエントリーポイントとなる場所を含むルーチンがメインルーチンである。C言語の標準では、mainという名前の関数(の先頭)がエントリーポイントであり、各関数のエントリーポイントは、それぞれの関数の先頭である。
- エンドポイント
- エンドポイント、というのは「きわ」という意味。クライアント側とサーバ側の境界線のところがエンドポイント。
JavaによるRESTfulシステム構築(1)
目的
- RESTfulな分散システム構築の勉強がしたい
- Restの実現方法の1例を学習したい
- Javaに触れてみる
まえがき
RESTの恩恵
JAX-RS(Java API for RESTful Web Service)
- JavaによるRESTful Webサービスの開発を簡単かつ直感的に行うための新しいAPI
- JAX-RS - Wikipedia
1章 RESTについて
アドレス可能性
制約された統一IF
統一IFがなぜ重要なのか
- 親密性
- あるリソースに対してどのメソッドが利用できるか正確にわかる
- 相互接続性
- ほとんどプログラミング言語にHTTPクライアントが用意されている
- 拡張性
- GETはべき等かつ安全な読み取りメソッドであるため、キャッシュを使える
表現指向
- 適切な表現を選択できる
ステートレスな通信
HATEOAS
- アプリケーション状態エンジンとしてハイパーメディアを使用するとうい考え
- ハイパーメディア
- ドキュメントフォーマット内に外のサービスへのリンクと情報を埋め込むため追加サポートを持つドキュメント指向のアプローチ
AWSでWebサーバーを立ててみた(2)
CGIを動かす
CGIとは[1]
ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。
チュートリアル[2]
sudo vi /etc/httpd/conf/httpd.conf
- 下記が書いて有ることを確認
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
- 上記フォルダにperlのコードを置く
$ cat /var/www/cgi-bin/test #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World.";
- 全ユーザに実行権限を渡す
リンク
[1] Common Gateway Interface - Wikipedia
[2]Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ バージョン 2.2
AWS上でTensor FlowのUdacityのチュートリアルを動かす
背景
- 自宅にメモリ8G以上あるLinuxマシンがないのでマシン買わないといけにかなと考えていた。
- よくよく考えると、AWSとかで使用するときだけインスタンス作ればいいな!ということで、やってみることにした。
目的
- AWS上でTensor FlowのUdacityのチュートリアルを動かす https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/udacity
手順
インスタンス作成
- awsで8G以上のインスタンスを作る(無料プランじゃないのでどれくらいかかるのか計算した所、1時間1ドルもかからないよう。)
- Led Hatでつくった。
- sshでログインできることを確認。
- 任意の8888番ポートに対するTCPアクセスを許可
Dockerのインストール
Tensor Flowのコンテナの展開
sudo docker run -p 8888:8888 --name tensorflow-udacity -it gcr.io/tensorflow/udacity-assignments:0.6.0
- http://{hostname}:8888 でアクセス
リンク
AWSでwebサーバーを立ててみた
目的
- webサーバーを立てたことがないので立ててみる
- ついでに色々動かして遊んで見る
手順
- リンクの1に従って作業する。
ネットワーク設定
VPC作成
- [VPCの作成]で作成
サブネット作成
- [サブネット]->[サブネットの作成]でサブネットを作成
- この時、10.0.1.0/24をwebサーバーを置く、publicなサブネットワークとして作成
インターネット接続
- 上記vpcにインターネットを接続する
ルーティング情報を設定
サーバ設定
インスタンス作成
ssh接続
- chomod 400 xxx.pem でパーミッション変更
ファイアウォール設定
- インバウンドルールでHTTPによるポート80のアクセスを許可
調べたこと
VPCとは
- Amazon Virtual Private Cloud のこと
独自の IP アドレス範囲の選択、サブネットの作成、ルーティングテーブルとネットワークゲートウェイの設定など、仮想ネットワーク環境を完全にコントロール