シリコンバレーのマーケター日記

東京、シンガポールを経てシリコンバレーで働く、マーケター。英語、プログラミング、データ分析は次世代マーケターの必須スキルだと信じて進む。

Linux バージョン管理システム

今日は、バージョン管理システムを学びました。

分散型で開発を進めていくときにメリットを発揮するようです。

分散型バージョン管理

各開発者はレポジトリのコピーを “クローン” し、自身のハード ドライブ上にそのプロジェクトの 完全な 履歴を持ちます。このコピー (または “クローン”) には、オリジナルのすべてのメタデータが含まれています。

メリット

  • チェンジセットのプッシュやプル以外の操作の実行は非常に高速です。理由は、ツールがアクセスする必要があるのはリモート サーバーではなくハード ドライブだからです。
  • 誰の目にもさらされることなく、新しいチェンジセットのコミットをローカルで行えます。チェンジセットのグループの準備が完了したら、それらをすべて一度にプッシュできます。
  • プッシュとプル以外のすべての操作はインターネット接続なしに行えます。したがって、飛行機の中でも作業できます。また、複数のバグ修正を 1 つの巨大なチェンジセットとしてコミットする必要はありません。
  • プログラマーはプロジェクト レポジトリの完全なコピーをそれぞれ持っているため、変更を同時に 1 人か 2 人のプログラマーと共有してフィードバックを得てから、その変更を全員に公開できます。

コマンドラインインターフェース

  • Git
  • Marcurial 

Marcurialの使い方

$ hg feature ブックマーク名 : ブックマーク作成

$ hg bookmarks :どのブックマークにいるか表示

hg update ブックマーク : ブックマーク切り替え

 参考:

バージョン管理とは : 集中型 vs. DVCS - Atlassian Japan

Mercurial 対 Git:なぜ Mercurial を選ぶのか? - Atlassian Japan

 

おまけ

-ls -la : 隠しフォルダ・ファイル(.から始まるやつ)も全て表示される 

 

Amazon ec2でサイトを公開する

Amazon ec2でサイトを公開してみます。

1) apatchが入っていることを確認する

$ httpd -v

Server version: Apache/2.4.23 (Amazon)

Server built:   Jul 29 2016 21:42:17

2) /var/www/html/ ディレクトリーにファイルを入れる

ローカルからAWSにアップロードするとき

2段階を取るのは、/bar以下は、sudo権限なので、一度にアップできなかったためです。

2-1) ホーム以下にアップロード

scp -i ~/.ssh/秘密鍵 アップしたいファイルの場所 ホスト名@IPアドレス:送りたい場所

2-2) AWS内で/var/www/htmlにアップロード

mv: ファイルを移動、ファイル名前を変更

 

ということで、無事にできました。

さて、LinuxってOSなのかと思ってたのですが、Linuxパッケージの総称だそうで、以下のような種類があるみたいです。

  • CentOS
  • Fedora
  • Debian
  • Ubuntu

AWSでサーバーの種類を選ぶ画面で確かに出ていたような。。また一歩deepになってきた。

Amazon ec2とRDSをつなぐ

ec2にMySQLを入れたのですが、開発の過程で外部にデータベースだけ解放したいと思っていたので、RDSを使ってみることにしました。

pythonファイルと、MySQLをつなぐために、mysql-connector-pythonを使いました。

1) mysql-connector-pythonを入れる

$ mkdir lib

$ cd lib

$ git clone https://github.com/mysql/mysql-connector-python.git

 $ python setup.py build

$ python setup.py install

2) ちゃんと動くか確認する

$ python -c "import mysql.connector" //一行だけでそのまま実行できる

 

3) pythonファイル

import mysql.connector

if __name__ == '__main__':

connect = mysql.connector.connect(user='ユーザー名', password='パスワード',host='ホスト名', database='DB名', charset='utf8')
cursor = connect.cursor()

d = ''

e = ''

f = ''

statment = 'insert into results (a,b,c) values(%s,%s,%s)'

# insert
cursor.execute(statment, (d,e,f))
connect.commit()

 

ちなみに、RDSのアクセス権限がわからなかったので、ひとまずダウンロードして共有しましたw

1) アマゾンRDSのデータベースをダウンロード

$ mysqldump -u ユーザー名 -h エンドポイント -p DB名 テーブル名 > results.sql

2) EC2サーバーからローカルにファイルをダウンロードする

~/Desktop/aws-comment $ scp -i ~/.ssh/秘密鍵.pem ユーザー名@IPアドレス:ファイルの場所 保存したいディレクトリ

 

Linuxサーバーを構築する

 AWSサーバー環境を作成しています。Linuxをちゃんと理解しないとダメだなと思いつつ、さくらレンタルサーバーに逃げてました。やはり自由度がないので、AWSに再度挑戦。

1) AWSでアカウント作ってEC2(仮想サーバー)でインスタントを作る

2) 秘密鍵(拡張子.pemのファイル)をゲットする

3) sshで接続

ssh -i ~/.ssh/秘密鍵.pem ec2-user@IPアドレス

// 秘密鍵は$homeの.sshフォルダーに移す

4) 必要なパッケージを入れまくる

  • MySQL: 

 sudo yum install mysql-server mysql

  • Apatch:

sudo yum install -y httpd

  • PHP:

sudo yum install -y php

  • MyphpAdmin:

sudo yum --enablerepo=epel install -y phpMyAdmin

  • PHP:

sudo yum install -y php

  • Git (gitを使ってインストールするために)

sudo yum -y install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel

  • ANACONDA2とpyenv (python用パッケージ)

cd $HOME git clone https://github.com/yyuu/pyenv.git ~/.pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

source ~/.bash_profile

pyenv install anaconda2-4.1.0

pyenv global anaconda2-4.1.0

pyenv rehash

  • Google Could SDK:こちら
  • Google APIs Client Library for Python:こちら
  • Mysql-connect-python (pythonからmysqlにやり取りするためのライブラリ):こちら

学び

  • Apatchをアクティベイトしても、ポートを解放しないとブラウザから見れない。AWSでのポートの解放の仕方はこちら
  • MyphpAdminにブラウザアクセスするときは、IP adress/ myphpadmin
  • 基本的にローカルでbashをいじる時は、$HOMEディレクトリー下にある.bash_profileというファイル(ユーザー個別の設定ファイル)
  • .bash_profileは、lsコマンドでは出てこない
  • ホームディレクトリーに行って、エディタで開く

$ vim ~/.bash_profile

  • 書き換えた後は、sourceコマンドの実行 

# source ~/.bash_profile

  • 通っているパスの確認

echo $path 

  • pip(pythonパッケージ管理ツール)でインストール可能なパッケージを確認 

$ pip freeze : インストールされているパッケージの一覧表示

$ pip search mysql:インストール可能なパッケージの検索

 

例:bashをいじってみる:

やりたいこと:プロンプトに、ディレクトリーを入れる

~/.bash_profileを開いて、

PS1='[\u@\h] \w \$ '

と入れてsorceコマンドを実行すると

[username@hostname] ~/Desktop $

となりました!

 

参考:

AWSのEC2に基本的なLAMP環境を作ってみる(2) - Qiita

ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて 

 

テキストエディタ Atom を使う

天才エンジニアに、Atomが良いですよとオススメされたので、以前から使っていたBracketから、Atomに切り替えました。プラグインが充実しているようです。

remote-sync

FTP機能を使って、Atomから直接サーバー上のファイルの書き換えができるプラグイン。

1) Atomのsettingから検索してEnable

f:id:yuyutata:20160804224003p:plain

2) プロジェクトフォルダーから、右クリックでRemote Sync -> Configure

f:id:yuyutata:20160804224111p:plain

 

3) サーバー情報を入れて完了!

f:id:yuyutata:20160804224423p:plain

 

おまけ:ターミナルから直接Atomを開く方法

atom .    //今いるディレクトリーでatomが立ち上がる 

 

Google クラウド自然言語APIを実装する① Pythonを使う

 

前回は、クラウド自然言語APIをcURLで活用してみましたが、実際のサービスに実装するにはどうしたらいいのかなと、困っていました。

弊社の天才エンジニア救世主に教えを被り、順調に進めることができました。横でコーディングを見ているとマジで惚れます。萌えます。あーー。

Google先生が、GitHubにPythonを使ったクラウド自然言語APIの実装例が載せていたので、これを参考にしながら、進めていきます。

python-docs-samples/language/api at master · GoogleCloudPlatform/python-docs-samples · GitHub

 

まずは、Python環境を作る

1) pyenvをインストール

pyenvとは、Pythonの様々なversionの環境を作ることができるもの。githubからインストールすると、home下に環境が作られます。

pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well. 

 というわけで、terminalを立ち上げてコマンド入力。

f:id:yuyutata:20160802224219p:plain

cd $HOME
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
exec $SHELL
pyenv install 2.7.12
pyenv global 2.7.12
pyenv rehash 

 これで、home下にpython環境ができました。

2) pythonの基本文法

f:id:yuyutata:20160802225648p:plain

.py : Python fileの拡張子 

import : ライブラリー呼び出し

def xxxx(): :関数定義

if __name__ == '__main__': :起動プログラム。これがないと何も動かない

3) terminalで動かす

Python fileのあるディレクトリーまで移動し、そこで、以下を叩くことでファイルが起動されます。print()で出力することができます。

python test.py

 

こんな感じでござる。

Google Cloud Natural Language API(クラウド自然言語API)に触れる

さて、今週末はGoogle自然言語APIを触ってみました。すでに公開していたPrediction APIについては以下より。

 

Googleのホームページに載っていたquick startに従ってすすめていきます。curlを使っての手順になっています。要はterminal/ linuxコマンドを使った手順です。

1) Google Could SDKをインストールする。

以下のページが解りやすかったです。googleのサイトにzipも上がっていますが、ターミナルからの方が楽です。

Google Cloud SDKのインストールと認証の設定について - TASK NOTES

2) サービスアカウントを作成する

API Managerから、サービスアカウントを作成します。Google Could APIを使うときは必要になるようです。作成すると、json形式のaccount keyが生成されるので、大事に保管。

f:id:yuyutata:20160731235738p:plain

3) json形式で分析したい文章のfileをつくる

先日決算のあったFacebook COOのシェリルサンドバーグの決算に対する投稿を使ってみます。

{
"document":{
"type":"PLAIN_TEXT",
"content":"Today we shared our quarterly results and announced that there are now 60 million businesses using Facebook Pages each month. Facebook and Instagram have become the mobile presence for businesses around the world — and we are grateful that businesses large and small are using our products to connect to their customers."
},

4) 分析したいjsonファイルのあるディレクトリーまで移動する

コマンドは、”cd”で移動です。

5) アクセストークンの入手

$ gcloud auth activate-service-account --key-file=service-account-key-file //アカウントキーの場所をいれる

$ gcloud auth print-access-token
access_token //アクセストークンをget入手する。

6) 分析!

$ curl -s -k -H "Content-Type: application/json" \
    -H "Authorization: Bearer access_token" \
    https://language.googleapis.com/v1beta1/documents:analyzeEntities \
    -d @entity-request.json //分析したいjsonファイル名

7) 結果

{

  "documentSentiment": {

    "polarity": 0.3,

    "magnitude": 1.2

  },

  "language": "en"

}

  • Polarityとmagnitudeの2軸での評価のようです。
  • Polarity:方向性、極性という意味。+1 から -1の範囲をとる

Magnitude:強さで、0 から +無限大 をとる。文章が長いとMagnitudeが上がる傾向がある

ということらしい。

ということは、Sheryleの投稿は、positiveっちゃpositiveだけどけっこう冷静な感じ といったところでしょうか。まーそんなもんですね。

 

所感:

これをサービスに実装するとなると、json形式のファイルを一度生成した上でぶっ込んでいく感じでしょうか。

Facebookのページコメントを自動で分析する場合は、

  1. Facebookページコメントを引っ張る
  2. json形式ファイルを一個ずつ作成
  3. 一個ずつAPIにアクセス

という感じ?

あと現在はsentiment analysisは、英語サポートのみです。

 

以下、googleのページから引用

Interpreting Sentiment Analysis Values

A document with low magnitude generally indicates a low-emotion (neutral) document. A document with low polaritymay also indicate a neutral document, but can indicate a document of mixed emotions, with both high positive and negative values which cancel each out. Generally, the combination of polarity and magnitude provides you with the best evaluation of a document's overall sentiment.

The chart below shows some sample values and how to interpret them:

SentimentSample Values
Positive "polarity": 0.8, "magnitude": 3.0
Negative "polarity": -0.3, "magnitude": 4.0
Neutral "polarity": 1.0, "magnitude": 0.0
Mixed "polarity": 0.0, "magnitude": 4.0

When comparing documents, multiplying polarity and magnitude can provide a rough comparison of the sentiment, provided that you are analyzing documents of similar length.