m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

AWS CLIインストールと初期設定

AWS

アマゾンウェブサービスクラウドのシステムでお金がかかります(´・ω・`)

Webコンソール以外で使いたい

全ての作業をWeb上でやらないといけない場合もありますがCLIできた方がいろいろ便利な場合もあるので調べてみる

登録後にやるべきこと

AWSアカウント作ったらこれだけはやっとけ!IAMユーザーとAuthyを使ったMFAで2段階認証 - Qiita
でセキュリティをある程度確保しておく

実験

失敗
$ sudo pip install awscli --upgrade
Collecting awscli
  Downloading awscli-1.11.10-py2.py3-none-any.whl (1.0MB)
    100% |████████████████████████████████| 1.0MB 753kB/s
Collecting s3transfer<0.2.0,>=0.1.9 (from awscli)
  Downloading s3transfer-0.1.9-py2.py3-none-any.whl (53kB)
    100% |████████████████████████████████| 61kB 1.8MB/s
Collecting docutils>=0.10 (from awscli)
  Downloading docutils-0.12.tar.gz (1.6MB)
    100% |████████████████████████████████| 1.6MB 484kB/s
Collecting rsa<=3.5.0,>=3.1.2 (from awscli)
  Downloading rsa-3.4.2-py2.py3-none-any.whl (46kB)
    100% |████████████████████████████████| 51kB 821kB/s
Collecting botocore==1.4.67 (from awscli)
  Downloading botocore-1.4.67-py2.py3-none-any.whl (2.8MB)
    100% |████████████████████████████████| 2.8MB 373kB/s
Collecting colorama<=0.3.7,>=0.2.5 (from awscli)
  Downloading colorama-0.3.7-py2.py3-none-any.whl
Requirement already up-to-date: futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" in /Library/Python/2.7/site-packages (from s3transfer<0.2.0,>=0.1.9->awscli)
Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli)
  Downloading pyasn1-0.1.9-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.4.67->awscli)
  Downloading python_dateutil-2.5.3-py2.py3-none-any.whl (201kB)
    100% |████████████████████████████████| 204kB 1.5MB/s
Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.4.67->awscli)
  Downloading jmespath-0.9.0-py2.py3-none-any.whl
Requirement already up-to-date: six>=1.5 in /Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg (from python-dateutil<3.0.0,>=2.1->botocore==1.4.67->awscli)
Installing collected packages: python-dateutil, docutils, jmespath, botocore, s3transfer, pyasn1, rsa, colorama, awscli
  Found existing installation: python-dateutil 1.5
    Uninstalling python-dateutil-1.5:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/commands/install.py", line 317, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_set.py", line 736, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_install.py", line 742, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
    copytree(src, real_dst, symlinks=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
    raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/__init__.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/__init__.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/easter.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/easter.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/easter.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/easter.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/easter.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/easter.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/relativedelta.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/relativedelta.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/relativedelta.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/relativedelta.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/relativedelta.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/relativedelta.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/rrule.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/rrule.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/rrule.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/rrule.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/rrule.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/rrule.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tz.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tz.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tz.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tz.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tz.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tz.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tzwin.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tzwin.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tzwin.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tzwin.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tzwin.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/tzwin.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/__init__.py', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/__init__.pyc', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/zoneinfo-2010g.tar.gz', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/zoneinfo-2010g.tar.gz', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo/zoneinfo-2010g.tar.gz'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/zoneinfo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil', '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil', "[Errno 1] Operation not permitted: '/tmp/pip-BHksak-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil'")]
$

エラー?

実験2

成功
$ sudo -H pip install awscli --upgrade --ignore-installed six
Collecting awscli
  Downloading awscli-1.11.10-py2.py3-none-any.whl (1.0MB)
    100% |████████████████████████████████| 1.0MB 800kB/s
Collecting six
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting s3transfer<0.2.0,>=0.1.9 (from awscli)
  Downloading s3transfer-0.1.9-py2.py3-none-any.whl (53kB)
    100% |████████████████████████████████| 61kB 2.3MB/s
Collecting docutils>=0.10 (from awscli)
  Downloading docutils-0.12.tar.gz (1.6MB)
    100% |████████████████████████████████| 1.6MB 568kB/s
Collecting rsa<=3.5.0,>=3.1.2 (from awscli)
  Downloading rsa-3.4.2-py2.py3-none-any.whl (46kB)
    100% |████████████████████████████████| 51kB 2.0MB/s
Collecting botocore==1.4.67 (from awscli)
  Downloading botocore-1.4.67-py2.py3-none-any.whl (2.8MB)
    100% |████████████████████████████████| 2.8MB 334kB/s
Collecting colorama<=0.3.7,>=0.2.5 (from awscli)
  Downloading colorama-0.3.7-py2.py3-none-any.whl
Collecting futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" (from s3transfer<0.2.0,>=0.1.9->awscli)
  Downloading futures-3.0.5-py2-none-any.whl
Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli)
  Downloading pyasn1-0.1.9-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.4.67->awscli)
  Downloading python_dateutil-2.5.3-py2.py3-none-any.whl (201kB)
    100% |████████████████████████████████| 204kB 1.9MB/s
Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.4.67->awscli)
  Downloading jmespath-0.9.0-py2.py3-none-any.whl
Installing collected packages: futures, six, python-dateutil, docutils, jmespath, botocore, s3transfer, pyasn1, rsa, colorama, awscli
  Running setup.py install for docutils ... done
Successfully installed awscli-1.11.10 botocore-1.4.67 colorama-0.3.7 docutils-0.12 futures-3.0.5 jmespath-0.9.0 pyasn1-0.1.9 python-dateutil-1.5 rsa-3.4.2 s3transfer-0.1.9 six-1.10.0
$

できました(^^)

なんか入れてみる

$ aws hoge
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument command: Invalid choice, valid choices are:

acm                                      | apigateway
application-autoscaling                  | autoscaling
budgets                                  | cloudformation
cloudfront                               | cloudhsm
cloudsearch                              | cloudsearchdomain
cloudtrail                               | cloudwatch
codecommit                               | codepipeline
cognito-identity                         | cognito-idp
cognito-sync                             | datapipeline
devicefarm                               | directconnect
discovery                                | dms
ds                                       | dynamodb
dynamodbstreams                          | ec2
ecr                                      | ecs
efs                                      | elasticache
elasticbeanstalk                         | elastictranscoder
elb                                      | elbv2
emr                                      | es
events                                   | firehose
gamelift                                 | glacier
iam                                      | importexport
inspector                                | iot
iot-data                                 | kinesis
kinesisanalytics                         | kms
lambda                                   | logs
machinelearning                          | marketplacecommerceanalytics
meteringmarketplace                      | opsworks
rds                                      | redshift
route53                                  | route53domains
sdb                                      | servicecatalog
ses                                      | sms
snowball                                 | sns
sqs                                      | ssm
storagegateway                           | sts
support                                  | swf
waf                                      | workspaces
s3api                                    | s3
configure                                | deploy
configservice                            | help
$

初期設定

$ aws configure
AWS Access Key ID [None]: ユーザーのアクセスキー
AWS Secret Access Key [None]: ユーザーのシークレットアクセスキー
Default region name [None]: ap-northeast-1
Default output format [None]: json
$

おわり

所感

最初のエラーには戸惑ったが検索してきちんと解決案があったので助かったm(_ _)m
お金がかかるので連発はできないけど少しずつ扱ってみよう

bluemixのRetrieve and Rankを試す(curlでチュートリアル)

質問入力に対して回答候補とランク付けした回答候補を返す

らしい
簡単に考えてみて質問に対していくつかの回答候補を出すやつと思っていく

環境

ホスト

Mac

ツール

cURL
Python2.7.10

関連ツール

Bluemixのcfツール
※予めインストールしておく

デザインがちょっと変わったので全部コマンドラインでやる

なんかバグっぽい挙動していてうまく動かないんだもん(´・ω・`)
最後に全部削除しています。

サービス作成

ログイン
cf login -a https://api.au-syd.bluemix.net/

※国によってエンドポイントを変える必要があります。(今回はシドニー

サービス一覧を確認
cf marketplace
cf marketplace -s retrieve_and_rank
サービスを作成
cf create-service retrieve_and_rank standard rr_tutorial_01
資格情報を作成
cf create-service-key rr_tutorial_01 rr_tutorial_01-credentials
資格情報を確認
cf service-key rr_tutorial_01 rr_tutorial_01-credentials

{
 "password": "7kpbrZJ4n1Cq",
 "url": "https://gateway.watsonplatform.net/retrieve-and-rank/api",
 "username": "d2affa4a-a293-4bba-98c4-b03501299e66"
}

ディレクトリ準備

ディレクトリを作成して移動
mkdir r_r1
cd r_r1

クラスター作成

クラスター作成
curl -X POST -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
    "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters" -d ""

{
  "solr_cluster_id":"sc8ac937f6_4cc5_44a2_98b3_d249c853391f",
  "cluster_name":"",
  "cluster_size":"",
  "solr_cluster_status":"NOT_AVAILABLE"
}
クラスター作成を確認
curl -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f"

{
  "solr_cluster_id":"sc8ac937f6_4cc5_44a2_98b3_d249c853391f",
  "cluster_name":"",
  "cluster_size":"",
  "solr_cluster_status":"READY"
}

※READYがあること

コンフィグファイルのサンプルをダウンロード
wget https://github.com/watson-developer-cloud/doc-tutorial-downloads/raw/master/retrieve-and-rank/cranfield-solr-config.zip

※今回はサンプル

コンフィグファイルをアップロード
curl -X POST -H "Content-Type: application/zip" \
  -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f/config/example_config" \
  --data-binary @cranfield-solr-config.zip

{
  "message":"WRRCSR026: Successfully uploaded named config [example_config] for Solr cluster [sc8ac937f6_4cc5_44a2_98b3_d249c853391f].",
  "statusCode":200
}
コンフィグファイルを関連付け
curl -X POST \
  -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f/solr/admin/collections" \
  -d "action=CREATE&name=example_collection&collection.configName=example_config"

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">12332</int>
  </lst>
  <lst name="success">
    <lst name="10.176.142.253:6173_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">2541</int>
      </lst>
      <str name="core">example_collection_shard1_replica2</str>
    </lst>
    <lst name="10.176.39.48:5590_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">3026</int>
      </lst>
      <str name="core">example_collection_shard1_replica1</str>
    </lst>
  </lst>
</response>
ドキュメントファイル用のサンプルをダウンロード
wget https://github.com/watson-developer-cloud/doc-tutorial-downloads/raw/master/retrieve-and-rank/cranfield-data.json
ドキュメントファイルのアップロード
curl -X POST -H "Content-Type: application/json" \
  -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f/solr/example_collection/update" \
  --data-binary @cranfield-data.json

{
  "responseHeader":{
    "status":0,
    "QTime":1673
  }
}

ランカー用設定

グランドトゥルースファイルのサンプルをダウンロード
wget https://github.com/watson-developer-cloud/doc-tutorial-downloads/raw/master/retrieve-and-rank/cranfield-gt.csv
トレーニング用pythonスクリプトをダウンロード
wget https://github.com/watson-developer-cloud/doc-tutorial-downloads/raw/master/retrieve-and-rank/train.py
トレーニングスクリプト実施
python ./train.py -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  -i cranfield-gt.csv \
  -c sc8ac937f6_4cc5_44a2_98b3_d249c853391f \
  -x example_collection \
  -n "example_ranker"

Input file is cranfield-gt.csv
Solr cluster is sc8ac937f6_4cc5_44a2_98b3_d249c853391f
Solr collection is example_collection
Ranker name is example_ranker
Rows per query 10
Generating training data...
Generating training data complete.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  304k    0   319  100  304k     24  23456  0:00:13  0:00:13 --:--:-- 17948
{
  "ranker_id":"c852bax18-rank-2794",
  "name":"example_ranker",
  "created":"2016-10-24T13:47:07.199Z",
  "url":"https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/rankers/c852bax18-rank-2794",
  "status":"Training",
  "status_description":"The ranker instance is in its training phase, not yet ready to accept rank requests"
}
Solrの検索クエリをブラウザで確認
https://d2affa4a-a293-4bba-98c4-b03501299e66:7kpbrZJ4n1Cq@gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f/solr/example_collection/select?q=what is the basic mechanism of the transonic aileron buzz&wt=json&fl=id,title

  "responseHeader":{
    "status":0,
    "QTime":16,
    "params":{
      "q":"what is the basic mechanism of the transonic aileron buzz",
      "fl":"id,title",
      "wt":"json"
    }
  },
  "response":{
    "numFound":164,
    "start":0,
    "docs":[
      {
        "id":"496",
        "title":[
          "a theory of transonic aileron buzz, neglecting viscous effects ."
        ]
      },
      {
        "id":"1268",
        "title":[
          "stable combustion of a high-velocity gas in a heated boundary layer ."
        ]
      },{
        "id":"903",
        "title":[
          "two dimensional transonic unsteady flow with shock waves ."
        ]
      },{
        "id":"520",
        "title":[
          "wing-tail interference as a cause of 'magnus' effects on a finned missile ."
        ]
      },{
        "id":"199",
        "title":[
          "measurement of two dimensional derivatives on a wing-aileron-tab system ."
        ]
      },{
        "id":"643",
        "title":[
          "an investigation of wing-aileron flutter using ground launched rocket models ."
        ]
      },{
        "id":"1072",
        "title":[
          "ignition and combustion in a laminar mixing zone ."
        ]
      },{
        "id":"262",
        "title":[
          "the formation of a blast wave by a very intense explosion ."
        ]
      },{
        "id":"1248",
        "title":[
          "an analytic extension of the shock-expansion method ."
        ]
      },{
        "id":"660",
        "title":[
          "the fundamental solution for small steady three dimensional disturbances to a two dimensional parallel shear flow ."
        ]
      }
    ]
  }
}
ランカーの作成を確認
curl -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/rankers/c852bax18-rank-2794"

{
  "ranker_id":"c852bax18-rank-2794",
  "name":"example_ranker",
  "created":"2016-10-24T13:47:07.199Z",
  "url":"https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/rankers/c852bax18-rank-2794",
  "status":"Available",
  "status_description":"The ranker instance is now available and is ready to take ranker requests."
}
ランク結果をブラウザで確認
https://d2affa4a-a293-4bba-98c4-b03501299e66:7kpbrZJ4n1Cq@gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f/solr/example_collection/fcselect?ranker_id=c852bax18-rank-2794&q=what is the basic mechanism of the transonic aileron buzz&wt=json&fl=id,title

{
  "responseHeader":{
    "status":0,
    "QTime":679
  },
  "response":{
    "numFound":164,
    "start":0,
    "maxScore":10.0,
    "docs":[
      {
        "id":"313",
        "title":[
          "on alternative forms for the basic equations of transonic flow theory ."
        ]
      },{
        "id":"496",
        "title":[
          "a theory of transonic aileron buzz, neglecting viscous effects ."
        ]
      },{
        "id":"520",
        "title":[
          "wing-tail interference as a cause of 'magnus' effects on a finned missile ."
        ]
      },{
        "id":"903",
        "title":[
          "two dimensional transonic unsteady flow with shock waves ."
        ]
      },{
        "id":"1268",
        "title":[
          "stable combustion of a high-velocity gas in a heated boundary layer ."
        ]
      },{
        "id":"1072",
        "title":[
          "ignition and combustion in a laminar mixing zone ."
        ]
      },{
        "id":"262",
        "title":[
          "the formation of a blast wave by a very intense explosion ."
        ]
      },{
        "id":"643",
        "title":[
          "an investigation of wing-aileron flutter using ground launched rocket models ."
        ]
      },{
        "id":"199",
        "title":[
          "measurement of two dimensional derivatives on a wing-aileron-tab system ."
        ]
      },{
        "id":"1242",
        "title":[
          "some considerations on the laminar stability of time-dependent basic flows ."
        ]
      }
    ]
  }
}

削除

クラスター削除
curl -i -X DELETE \
   -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
   "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/sc8ac937f6_4cc5_44a2_98b3_d249c853391f"

HTTP/1.1 200 OK
X-Backside-Transport: OK OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Date: Mon, 24 Oct 2016 14:43:16 GMT
Content-Type: application/json
Server: -
Set-Cookie: Watson-DPAT=OQsYXi8uoqg6kh5E4EU2qrm9VwsHdb%2BiXd%2Fw4%2FddxcYCDDr54ieiie7IqLO4VCOpn%2BjFquCI6Qx%2BNnPQirRQjwUjQ76mGx1bNC%2F30R75gMzM7DH%2BVtn0C8awkB3Q%2FmbrpAtq78TdEXuq9PYewL11w1q1H5Pun8HIVnDZRUGIvTtAyLMYKtLU78puiczdvcAd2os68%2FuWnBUPsnXbAHe03VEvLK6TzadSseoyjzjmcVdgutrRpt1HcR983aY%2FYnpr8I7WkrTNNpHOVX%2FriCxD8bjorCwTuuEZR87DWYK7UEneB%2Bpe6jKXhnftRZcoezBv66xtpJq07%2FdCswBxKLgeH9PKtAUggYCqMOyn3vfEUdTyo0iD66P901Qg5gI9mWtE8MQfTbhWcsStpcWpN6R%2FnCrd5cKcvCxfT3qK4BzYi8ZbEsKAr3TLud504FM%2FZxfKIT8PY%2B%2BzWE%2B1HmvHFGozUQucznWgn0ZDEBcx%2BWwezYlcQrlfNtJfz6V7D%2BC%2BmUnP97BTfItDwYbJ0IQtDRaNj0or1jW%2FpxRfve7ZrmokSjzm%2F9PEXyHEELxHu5rW3hL%2Bpr8zF2i9vkusu8q40Jg%2BSwlny1tZpfpoiGtZjm8mMjkOW2Rx6iVd7v4KhEpgXaOqBBBqXI1Vnpq8b8yM1daJbpprza9ufrHvJFbBWsvqJs1x1pqoRlmPHGUvraRNCzw5v3Y44UZez8dMRrS18qWNTLuTtnk1dQIQBEpttRj%2FvmG1cQnbP8F5FRLIgs%2B4PoLFmvM21Jik7Gq9O2Kyfq5tbSIBUiV6%2BiLheafrHt%2Fhx9Ql5dMuXSgU5E0beWfh%2FLs3bKI9W8QFklA5gC03UJ7DtYljp4HS%2FTqbzSDF2OJV00Xs4Q1E%2F9RTd62b9HfPTMUSq2eHZBzoaivr41Ls8%2FjgebwILaO3Dvn5cFqKZqtxDbN3HwJsHiMmPWtyHE%2FLDbznhMorRaXMoR8vi0tKV9AdELroSVUwJe5b3DmlZughvrJy07WflTLtug%3D%3D; path=/retrieve-and-rank/api; secure; HttpOnly
X-Client-IP: 119.104.7.50
X-Global-Transaction-ID: 51546924
X-DP-Watson-Tran-ID: gateway-dp01-51546924

{
  "message":"WRRCSR023: Successfully deleted Solr cluster [sc8ac937f6_4cc5_44a2_98b3_d249c853391f].",
  "statusCode":200
}
ランカー削除
curl -X DELETE \
  -u "d2affa4a-a293-4bba-98c4-b03501299e66":"7kpbrZJ4n1Cq" \
  "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/rankers/c852bax18-rank-2794"

{}
サービス削除
cf delete-service-key rr_tutorial_01 rr_tutorial_01-credentials -f
cf delete-service rr_tutorial_01 -f

所感

今回はどのようなデータを用意すればよいのか不明だったのでチュートリアルをそのままやってみた。
質問に対して回答リストを取得している感じ、まだ、ランカーの順位付けや日本語対応などはわかっていないので
少しずつ調べていく。

IBM BluemixでCloud Foundry アプリケーションのアプリを作成する

イメージはHeroku

と同じである程度の環境を持っているものと考えています。

手順

ダッシュボードを開く

f:id:m_shige1979:20161016044946p:plain

計算よりアプリを作成して、「php」ものを指定する

f:id:m_shige1979:20161016044955p:plain

アプリ名を指定してアプリを作成する

f:id:m_shige1979:20161016045007p:plain

開始タブでデプロイ情報や初期状態のファイルをダウンロード

f:id:m_shige1979:20161016045018p:plain

URLを確認

f:id:m_shige1979:20161016045030p:plain

デプロイ

CFツールによるデプロイこれとは別にもう一つデプロイする方法がある

ログイン
$ cf login
API エンドポイント: https://api.au-syd.bluemix.net

Email> hogehoge

Password>
認証中です...
OK

組織 hogehogeをターゲットにしました

スペース dev をターゲットにしました



API エンドポイント:   https://api.au-syd.bluemix.net (API バージョン: 2.54.0)
ユーザー:             hogehoge
組織:                 hogehoge
スペース:             dev
$
プッシュ
$ cf push sample-php01
$ 

所感

アプリサーバになんか特殊なことが必要でないのであれば手堅く終わらせる必要がある。
この方法で有償になる感じですけど短期間なら問題なさそうに見える。
SSLの制限があるか確認する必要がる。

LINEのMessageAPIを使ってみる

LINE

まあ、あれです。(^^)
実際、あまり友達いないので使うかどうかはわからないけど企業でもLINEのアカウントを使ってなんかしかやっているので使う機会があるかもしれないので勉強して見る。

開発用アカウント

Developer Trialを使用します。
LINE@とかでなんかしたほうがいいかもしれないけど今回はAPIだけなのでちょっとだけ

登録

この画面

f:id:m_shige1979:20161013234340p:plain
から
f:id:m_shige1979:20161013234615p:plain
となる

WebHookを設定

LINE Developersのサイトにて設定

f:id:m_shige1979:20161013235048p:plain
※英語にて表示されているので混乱しないようにする
SSLでアクセスできるAPIを準備すること

API

api.php
<?php
// リクエスト取得
$receive = json_decode(file_get_contents("php://input"));

// type
$type = $receive->{"events"}[0]->{"message"}->{"type"};
// ReplyToken取得
$replyToken = $receive->{"events"}[0]->{"replyToken"};

# dump log
ob_start();
var_dump($receive);
var_dump($type);
var_dump($replyToken);
$data = ob_get_contents();
ob_end_clean();
file_put_contents("/tmp/aaa.txt", $data);

# token
$accessToken = 'アクセストークンを取得して設定する';

//返信データ作成
$response_format_text = array(
	"type" => "text",
	"text" => $type
);
$post_data = array(
	"replyToken" => $replyToken,
	"messages" => [$response_format_text]
);

$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json; charser=UTF-8',
    'Authorization: Bearer ' . $accessToken
    ));
$result = curl_exec($ch);
curl_close($ch);

※手抜き
※本来は署名処理が必要なんですけど設定していません。

結果

f:id:m_shige1979:20161013235519p:plain

所感

触ったのは最近なのでまだ、なんとも言えない…
LINEのAPIでテキスト以外のものを処理することも可能のようなので
いろいろやってみたい。
手軽にやるならphp、ちょっと冒険するならJava
さて、どうしたものか…

watsonのNatural Language Classifierを試した

環境

ホスト

mac

開発環境

eclipse

準備

mavenを使えるようにしておく
ibm bluemixを登録しておく

分類器作成

Java
package com.nlc.sample1;

import java.io.File;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifier;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier createClassifier start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類キー作成
        Classifier classifier = service.createClassifier("My Classifier", "ja", 
        		new File("./nlc/training02.csv")).execute();
        
        // 結果表示
        System.out.println(classifier);
        
        System.out.println( "Natural Language Classifier createClassifier end" );
    }
}

Natural Language Classifier createClassifier start
{
  "classifier_id": "分類器のID",
  "language": "ja",
  "name": "My Classifier",
  "status": "Training",
  "created": "2016-10-10T10:49:02.767",
  "status_description": "The classifier instance is in its training phase, not yet ready to accept classify requests",
  "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
}
Natural Language Classifier createClassifier end

分類器作成確認

Java
package com.nlc.sample2;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifier;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier getClassifier start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類キーより取得
        Classifier classifier = service.getClassifier("分類器のID").execute();
        
        // 結果表示
        System.out.println(classifier);
        
        System.out.println( "Natural Language Classifier getClassifier end" );
    }
}

Natural Language Classifier getClassifier start
{
  "classifier_id": "分類器のID",
  "language": "ja",
  "name": "My Classifier",
  "status": "Available",
  "created": "2016-10-10T10:49:02.767",
  "status_description": "The classifier instance is now available and is ready to take classifier requests.",
  "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
}
Natural Language Classifier getClassifier end

分類処理

Java
package com.nlc.sample3;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classification;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier classify start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類処理
        Classification classification = service.classify("分類器のID",
        		  "レトリバー").execute();
        
        // 結果表示
        System.out.println(classification);
        
        System.out.println( "Natural Language Classifier classify end" );
    }
}

Natural Language Classifier classify start
{
  "classes": [
    {
      "confidence": 0.9134736500854426,
      "class_name": "dog9"
    },
    {
      "confidence": 0.02781542678029993,
      "class_name": "dog2"
    },
    {
      "confidence": 0.016548178008526607,
      "class_name": "dog1"
    },
    {
      "confidence": 0.012186275707481627,
      "class_name": "dog3"
    },
    {
      "confidence": 0.006295053604774933,
      "class_name": "dog6"
    },
    {
      "confidence": 0.006138443595939543,
      "class_name": "dog5"
    },
    {
      "confidence": 0.005814188944908609,
      "class_name": "dog8"
    },
    {
      "confidence": 0.004186655385592137,
      "class_name": "dog7"
    },
    {
      "confidence": 0.004046516438248506,
      "class_name": "dog4"
    },
    {
      "confidence": 0.00349561144878548,
      "class_name": "dog10"
    }
  ],
  "classifier_id": "分類器のID",
  "text": "レトリバー",
  "top_class": "dog9",
  "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
}
Natural Language Classifier classify end

分類一覧取得

Java
package com.nlc.sample4;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifiers;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier getClassifiers start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 一覧を取得
        Classifiers classifiers = service.getClassifiers().execute();
        
        // 結果表示
        System.out.println(classifiers);
        
        System.out.println( "Natural Language Classifier getClassifiers end" );
    }
}

Natural Language Classifier getClassifiers start
{
  "classifiers": [
    {
      "classifier_id": "分類器のID",
      "language": "ja",
      "name": "My Classifier",
      "created": "2016-10-10T10:49:02.767",
      "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/分類器のID"
    }
  ]
}
Natural Language Classifier getClassifiers end

分類器削除

Java
package com.nlc.sample5;

import com.ibm.watson.developer_cloud.natural_language_classifier.v1.NaturalLanguageClassifier;
import com.ibm.watson.developer_cloud.natural_language_classifier.v1.model.Classifiers;

/**
 * Hello world!
 *
 */
public class App 
{
	
	final private static String UserName = "資格情報のユーザー名";
	final private static String Password = "資格情報のパスワード";
	
    public static void main( String[] args )
    {
        System.out.println( "Natural Language Classifier deleteClassifier start" );
        
        // インスタンス生成
        NaturalLanguageClassifier service = new NaturalLanguageClassifier();
        service.setUsernameAndPassword(UserName, Password);
        
        // 分類器を削除
        service.deleteClassifier("分類器のID").execute();
        
        System.out.println( "Natural Language Classifier deleteClassifier end" );
    }
}

とりあえずこんな感じ
watsonで使えるかわからないけどちょっとずつ調べていく

ibm bluemixでVisualRecognitionを試す

使うのは無料枠のみ

お金かかってもいいけど役に立つかを検証したい

環境

ホスト

mac

開発環境

eclipse
※bluemixの設定などは事前に済ませておく

VisualRecognitionってなに?

画像認識を行うみたい。とりあえず画像を読み込ませて設定したらできるらしい
今回は画像を読み込ませてjavaで実行するみたいなやつ

事前準備

eclipsemavenでプロジェクトを作成してpom.xmlに以下を追加

pom.xml
    <dependency>
      <groupId>com.ibm.watson.developer_cloud</groupId>
      <artifactId>java-sdk</artifactId>
      <version>3.4.0</version>
    </dependency>

※dependenciesの中に追加する

分類キー登録

Java
package com.sample2;

import java.io.File;

import com.ibm.watson.developer_cloud.visual_recognition.v3.*;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.ClassifierOptions;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassifier;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";

    public static void main( String[] args )
    {
    	System.out.println( "VisualRecognition createClassifier start" );
        
        // インスタンス生成
        VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
        service.setApiKey(API_KEY);
        
        // 分類キーを作成
        ClassifierOptions options = new ClassifierOptions.Builder()
        		.classifierName("sample1")
        		.addClass("type1", new File("./VR/images/type1.zip"))
        		.addClass("type2", new File("./VR/images/type2.zip"))
        		.addClass("type3", new File("./VR/images/type3.zip"))
        		.addClass("type4", new File("./VR/images/type4.zip"))
        		.addClass("type5", new File("./VR/images/type5.zip"))
        		.build();
        VisualClassifier result = service.createClassifier(options).execute();
        
        // 結果を表示
        System.out.println(result);
        
        System.out.println( "VisualRecognition createClassifier end" );
    }
}

VisualRecognition createClassifier start
{
  "classifier_id": "ClassifierのID",
  "name": "sample1",
  "classes": [
    {
      "class": "type4"
    },
    {
      "class": "type3"
    },
    {
      "class": "type2"
    },
    {
      "class": "type1"
    },
    {
      "class": "type5"
    }
  ],
  "owner": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created": "2016-10-10T05:44:22.400",
  "status": "training"
}
VisualRecognition createClassifier end

Classifierのデータを取得

Java
package com.sample3;

import java.util.concurrent.ExecutionException;
import com.ibm.watson.developer_cloud.http.ServiceCall;
import com.ibm.watson.developer_cloud.visual_recognition.v3.VisualRecognition;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassifier;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
		final private static String API_KEY = "取得するキーを設定する";

	    public static void main( String[] args ) throws InterruptedException, ExecutionException
	    {
	    	System.out.println( "VisualRecognition getClassifier start" );
	        
	        // インスタンス生成
	        VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
	        service.setApiKey(API_KEY);
	        
	        // 詳細情報
	        ServiceCall<VisualClassifier> result = service.getClassifier("ClassifierのID");
	        
	        // 結果を表示
	        System.out.println(result.rx().get().toString());
	        
	        System.out.println( "VisualRecognition getClassifier end" );
	    }
}

VisualRecognition getClassifier start
{
  "classifier_id": "ClassifierのID",
  "name": "sample1",
  "classes": [
    {
      "class": "type4"
    },
    {
      "class": "type3"
    },
    {
      "class": "type2"
    },
    {
      "class": "type1"
    },
    {
      "class": "type5"
    }
  ],
  "owner": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created": "2016-10-10T05:44:22.400",
  "status": "ready"
}
VisualRecognition getClassifier end

画像を与えて分類のスコアを算出

Java
package com.sample;

import java.io.File;
import java.util.Arrays;
import java.util.List;

import com.ibm.watson.developer_cloud.visual_recognition.v3.*;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.ClassifyImagesOptions;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassification;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";
	
    public static void main( String[] args )
    {
        System.out.println( "VisualRecognition classify start" );
        
        // インスタンス生成
        VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
        service.setApiKey(API_KEY);
        
        // classifierIds用
        List<String> list = Arrays.asList("ClassifierのID");
        
        // スコアを取得
        ClassifyImagesOptions options = new ClassifyImagesOptions.Builder()
        		.classifierIds(list)
        		.threshold(0.0)
        		.images(new File("./VR/images/type1/0100.jpeg"))
        	    .build();
        VisualClassification result = service.classify(options).execute();
        
        // 結果を表示
        System.out.println(result);
        
        System.out.println( "VisualRecognition classify end" );
    }
}

VisualRecognition classify start
{
  "images_processed": 1,
  "images": [
    {
      "classifiers": [
        {
          "classifier_id": "ClassifierのID",
          "name": "sample1",
          "classes": [
            {
              "class": "type1",
              "score": 0.986812
            },
            {
              "class": "type2",
              "score": 0.0412107
            },
            {
              "class": "type3",
              "score": 0.103716
            },
            {
              "class": "type4",
              "score": 0.0636262
            },
            {
              "class": "type5",
              "score": 0.111918
            }
          ]
        }
      ],
      "image": "0100.jpeg"
    }
  ]
}
VisualRecognition classify end

現在登録している分類キーの情報

Java
package com.sample4;

import java.util.List;
import java.util.concurrent.ExecutionException;
import com.ibm.watson.developer_cloud.http.ServiceCall;
import com.ibm.watson.developer_cloud.visual_recognition.v3.VisualRecognition;
import com.ibm.watson.developer_cloud.visual_recognition.v3.model.VisualClassifier;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";

	public static void main( String[] args ) throws InterruptedException, ExecutionException
	{
		System.out.println( "VisualRecognition getClassifiers start" );
		        
		// インスタンス生成
		VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
		service.setApiKey(API_KEY);
		        
		// 詳細情報
		ServiceCall<List<VisualClassifier>> result = service.getClassifiers();
		
		// 結果を表示
		System.out.println(result.rx().get().toString());
		        
		System.out.println( "VisualRecognition getClassifiers end" );
	}
}

VisualRecognition getClassifiers start
[{
  "classifier_id": "ClassifierのID",
  "name": "sample1",
  "classes": [
    {
      "class": "type4"
    },
    {
      "class": "type3"
    },
    {
      "class": "type2"
    },
    {
      "class": "type1"
    },
    {
      "class": "type5"
    }
  ],
  "owner": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "created": "2016-10-10T05:44:22.400",
  "status": "ready"
}]
VisualRecognition getClassifiers end

削除

Java
package com.sample5;

import java.util.concurrent.ExecutionException;
import com.ibm.watson.developer_cloud.http.ServiceCall;
import com.ibm.watson.developer_cloud.visual_recognition.v3.VisualRecognition;

/**
 * Hello world!
 *
 */
public class App 
{
	// API_KEY
	final private static String API_KEY = "取得するキーを設定する";

	public static void main( String[] args ) throws InterruptedException, ExecutionException
	{
		System.out.println( "VisualRecognition deleteClassifier start" );
		        
		// インスタンス生成
		VisualRecognition service = new VisualRecognition(VisualRecognition.VERSION_DATE_2016_05_20);
		service.setApiKey(API_KEY);
		        
		// 詳細情報
		service.deleteClassifier("ClassifierのID");
		        
		System.out.println( "VisualRecognition deleteClassifier end" );
	}
}

所感

基本的なものだけ触ってみた、リファレンスと同期がどれていない感じなので必要なパラメータがよくわからないので手探りになりそう。
Javaはまだ基本的なことしかわからないので触っていきながら理解していくことになる

java8のLocalDateとLocalTimeを触ってみた

Java8から導入された機能

日付制御ではDateやCalendarなどを使用していたがSE8より導入された

サンプルコード

Main.java
import java.time.*;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");

        // 現在日付
        LocalDate ld = LocalDate.now();
        System.out.println(ld);

        // 日付を指定
        LocalDate ld2 = LocalDate.of(2011, 04, 28);
        System.out.println(ld2);

        // 文字列をパースして日付を設定
        LocalDate ld3 = LocalDate.parse("2014-06-23");
        System.out.println(ld3);

        // 現在年の1月1日
        LocalDate ld4 = LocalDate.now()
                .withMonth(1)
                .withDayOfMonth(1);
        System.out.println(ld4);

        // 前月の末日
        LocalDate ld5 = LocalDate.now()
                .withDayOfMonth(1)
                .minusDays(1);
        System.out.println(ld5);

        // 翌日の月初
        LocalDate ld6 = LocalDate.now()
                .plusMonths(1)
                .withDayOfMonth(1);
        System.out.println(ld6);

        // 現在日時
        LocalTime lt = LocalTime.now();
        System.out.println(lt);

        // 時刻を指定
        LocalTime lt2 = LocalTime.of(10, 34, 45);
        System.out.println(lt2);

        // 文字列をパースして時刻を設定
        LocalTime lt3 = LocalTime.parse("23:44:12");
        System.out.println(lt3);

        // 現在日時の0分0秒
        LocalTime lt4  = LocalTime.now()
                .withMinute(0)
                .withSecond(0)
                .withNano(0);
        System.out.println(lt4);

        // 現在時刻の10時間語
        LocalTime lt5 = LocalTime.now()
                .plusHours(10);
        System.out.println(lt5);

        // 現在時刻の7200秒前
        LocalTime lt6 = LocalTime.now()
                .minusSeconds(7200);
        System.out.println(lt6);

        // 現在日時
        LocalDateTime ldt1 = LocalDateTime.now();
        System.out.println(ldt1);

        // 日時を指定
        LocalDateTime ldt2 = LocalDateTime.of(2012, 10, 30, 03, 50, 12);
        System.out.println(ldt2);

        // 文字列で日時を設定
        LocalDateTime ldt3 = LocalDateTime.parse("2013-10-12T16:04:23");
        System.out.println(ldt3);

        // 現在年の1月1日0時0分
        LocalDateTime ldt4 = LocalDateTime.now()
                .withMonth(1)
                .withDayOfMonth(1)
                .withHour(0)
                .withMinute(0)
                .withSecond(0)
                .withNano(0);
        System.out.println(ldt4);

        // 前年
        LocalDateTime ldt5 = LocalDateTime.now()
                .withMonth(1)
                .withDayOfMonth(1)
                .withHour(0)
                .withMinute(0)
                .withSecond(0)
                .withNano(0)
                .minusNanos(1);
        System.out.println(ldt5);


    }
}

Hello World!
2016-09-24
2011-04-28
2014-06-23
2016-01-01
2016-08-31
2016-10-01
15:22:37.758
10:34:45
23:44:12
15:00
01:22:37.758
13:22:37.758
2016-09-24T15:22:37.758
2012-10-30T03:50:12
2013-10-12T16:04:23
2016-01-01T00:00
2015-12-31T23:59:59.999999999

所感

イミュータブルにしたのでメソッドチェインできるのでちょっとどの変数にどの結果が入っているかが
わかりやすくなった。
単純な日時の制御なら楽にできると思われる
時差などを制御するものもあるのでそれも近いうちちょっと触ってみる