ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

Ubuntuのgolang環境を1.9へアップグレードする。

現在のgolangバージョンを確認

Ubuntu 16.04 にはv1.6がインストールされているみたい

$ go version
go version go1.6.2 linux/amd64

とりあえず、golang1.9をインストールする。

$ sudo apt install golang-1.9

インストールは成功するものの、golangのバージョンは変わらない

調べて見ると同じ現象で悩んでいた人を発見 http://blog.panicblanket.com/archives/4278

$ ls /usr/lib | grep go
go
go-1.6
go-1.9
gold-ld

確かに1.9はインストールされていた。

早速シンボリックリンクを再設定

cd /usr/bin
sudo mv go go_16
sudo mv gofmt gofmt_16
sudo ln -s /usr/lib/go-1.9/bin/go /usr/bin/go
sudo ln -s /usr/lib/go-1.9/bin/gofmt /usr/bin/gofmt

無事golang 1.9になった

$ go version
go version go1.9.2 linux/amd64

mLabのDBを作って接続してみる

mLabにMongoDbを作成して、ローカルから接続してみる。

mLabはMongoDB用クラウドサービスで、SANDBOXの場合は5Gまでの無料プランで作成出来るため、テスト用DBにはちょうどいい感じ MongoDB Hosting: Database-as-a-Service by mLab 新規DBを作成します。プロバイダとプランを選択します。 f:id:haronoid:20180112171948p:plain f:id:haronoid:20180112172023p:plain

作成されたDBをクリック刷ると情報として接続文字列などが表示されます。

To connect using the mongo shell:
mongo ds249727.mlab.com:49727/mydb -u <dbuser> -p <dbpassword>
To connect using a driver via the standard MongoDB URI (what's this?):
mongodb://<dbuser>:<dbpassword>@ds249727.mlab.com:49727/mydb

f:id:haronoid:20180112173125p:plain Add Database Userボタンからログイン用のユーザを追加します。

Ubuntu 16.04から接続してみる

  • やってみた
$ sudo apt-get install mongodb-clients
$ mongo --version
MongoDB shell version: 2.6.10
$ mongo ds249727.mlab.com:49727/mydb -u admin -p password
MongoDB shell version: 2.6.10
connecting to: ds249727.mlab.com:49727/mydb
2018-01-12T16:14:29.494+0900 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18, codeName: "AuthenticationFailed" } at src/mongo/shell/db.js:1287
exception: login failed
$ 

デフォルトのmongodb-clientsから入るMongoDB shellはversionが2.6.10でmLabとバージョンが違う場合は権限エラーになるみたい

最新バージョンのMongoDB shellを入れる。

このサイトを参考にした Install MongoDB Community Edition on Ubuntu — MongoDB Manual 3.6

$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
$ sudo apt-get update
$ sudo apt-get install mongodb-org

$ mongo --version
MongoDB shell version v3.6.2
git version: 489d177dbd0f0420a8ca04d39fd78d0a2c539420
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1604
    distarch: x86_64
    target_arch: x86_64
parallels@parallels-vm:~$ 

最新のMongoDB shellより接続する。

$ mongo ds249727.mlab.com:49727/mydb -u admin -p password
MongoDB shell version v3.6.2
connecting to: mongodb://ds249727.mlab.com:49727/mydb
MongoDB server version: 3.4.10
WARNING: shell and server versions do not match
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
2018-01-12T16:52:38.782+0900 E -        [main] Error loading history file: FileOpenFailed: Unable to fopen() file /home/parallels/.dbshell: No such file or directory
rs-ds235807:PRIMARY> 

JAVA9をUbuntuにインストールする。

JAVA9をUbuntuに入れてみたので、備忘録です。

使用したUbuntuのバージョンは 16.04でした。

変更点概要

  • 既存非推奨関数が多数削除されている。
  • モジュール化に対応。
  • ログ出力処理について大きく変わったため、既存の やり方ではできなくなった。
  • REPLツール(JShell)導入
  • CMS GCの非推奨

Ubuntuのターミナルで以下のコマンドを実行する。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java9-installer

JAVA9 Default設定

もう、他のJavaバージョンは使用しない場合、デフォルト設定をJAVA9に設定刷ることが出来ます。

sudo apt-get install oracle-java9-set-default

jshellを使ってみる。

JAVA9から導入されたコマンドラインJAVAを実行するツール

$ jshell
Jan 11, 2018 5:20:47 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 9.0.1
|  For an introduction type: /help intro

jshell> System.out.println("Hello World");
Hello World

jshell> 

Azure Bot Service でChat BotをFacebook Messengerに連携してみる。

Azure Web App Bot

AzureでBotサービスを作成します。
Azure Portalから新規追加で「Web App Bot」を検索し、作成を開始します。 f:id:haronoid:20180102195901p:plain

・ボット名:ボットの名前
・サブスクリプション:所持しているサブスクリプション
・リソースグループ:新規作成します
・場所:Japan West or Japan Eastなどを選べます
・価格レベル:F0(Free) or S1(有料)
・アプリ名:Urlになるアプリ名
・ボットテンプレート:C#とNode.jsのどっちかを選び、テンプレートをしていします。
  (初期状態としてコードが提供されています)
・App Service プラン/場所
・Azure Storage:データ登録用のストレージです
・Application Insights:日本では分析を支援していないため、オフにします。

しばらくすると、Azure上に必要なサービスが初期化されます。 f:id:haronoid:20180102201305p:plain

・ビルド
オンラインでコードを修正したり、ダウンロードすることが出来ます。 f:id:haronoid:20180102201709p:plain

・Test in Web Chat
作成されたBotのテスト用の簡易フラットフォームです。 f:id:haronoid:20180102202359p:plain

・チャンネル 外のサービスと連携するためのチャンネルです。後でFacebook Messangerとの連携で使用します。 f:id:haronoid:20180102202513p:plain

Facebook Page

アプリ連携用にPageを作成します。 とりあえず、必要なのはPage IDなので、サイドバーのページ情報から取得します。 f:id:haronoid:20180102205918p:plain

Facebook for Developer

https://developers.facebook.com/ Facebookの開発用プラットフォームです。 ログインすると、右上のマイアプリから「新しいアプリを追加」が出来るようになるので、新しいアプリを作成します。 f:id:haronoid:20180102203001p:plain ダッシュボードから、アプリIDとApp Secretが確認出来ます。後で必要になるので記憶しておきましょう。 サイドバーから「製品を追加」を選択肢、「Messenger」を設定します。 f:id:haronoid:20180102210443p:plain トークン生成から、上記で作成したページを設定するとトークンキーが生成されます。

Azure to Facebook Setting

チャンネルから「Facebook Messenger」を選択します。 f:id:haronoid:20180102210150p:plain

Facebook ページ ID:上記のPageID
Facebook アプリ ID:Facebook アプリ ID
Facebook アプリのシークレット:Facebook アプリのシークレット
ページ アクセス トークン:上記で生成したトークンキー

FacebookアプリのWebhook用のコールバックが下に表示されます。 f:id:haronoid:20180102210801p:plain

設定が完了すれば、WebHooksにPageイベントについて紐付けが出来るので、選択しフォローします。 f:id:haronoid:20180102211653p:plain

Facebook アプリのWebHook設定

「Webhooksの設定」ボタンをクリック f:id:haronoid:20180102210858p:plain 以下の画面が表示されるので、上記のコールバックURLと認証トークンを設定します。 f:id:haronoid:20180102210934p:plain

Facebook Pageからのチャット

パージのチャットは「https://m.me/ページID」もしくは「https://m.me/ページユーザ名」で表示されます。 うまく設定できていれば、Test in Web Chatと同じ用に表示されるはずです。

Go Test

Goで作成したパッケージのテスト

Goは標準のテストパッケージが存在し、以下の様なファイルはテストコードとして認識する。

ファイル名が「_test.go」で終わるもの
関数名が「Test」で始まるもの

テストソースには標準テストパッケージをimports

packagename_test.go

package pacakgename

import (
    "testing"
)

func TestMethodName(t *testing.T) {
     expect := "result"
    actual := MethodName()

    if expect != actual {
        t.Errorf("%s != %s", expect, actual)
    }
}

テストの実行

$ go test ./packagename
$ go test -v ./packagename

「-v」で個別のテスト結果を表示する。

mainパッケージのテスト

パッケージテスト同様に_test.goを作成する

app_test.go

package main

import (
    "testing"
)

func TestAppName(t *testing.T) {
     expect := "result"
    actual := AppName()

    if expect != actual {
        t.Errorf("%s != %s", expect, actual)
    }
}

mainパッケージのテスト実行

$ go test -v

.Net プロジェクトでOracle接続エラー

.Net プロジェクトでOracle接続エラー

Oracleクライアントまではインストルしたが、何故かエラーになる。

要求された .Net Framework データ プロバイダーが見つかりません。これは、インストールされていない可能性があります。

原因はmachine.config?

ネットで調べた結果、machine.configの修正が必要と出た。

現在のmachine.config

<DbProviderFactories>
    <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>

有るのはSQLServerの分だけ、おそらくローカルにSQL Serverをインストールしたため設定済み状態

Oracle Providerを追加

<add name="ODP.NET, Unmanaged Driver" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET, Unmanaged Driver" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess"/>

以下のオプションはバージョンとアセンブリを特定値に工程するため、削除しておいたほうが無難

Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342

Docker にテスト用にOracle DBを構築する。

やりたいこと

Oracleが構築されているDocker Imageを入手し、Oracleインスタンスを起動させる。

参考にしたサイト

おそらく正攻法 https://qiita.com/lethe2211/items/0bb493fa93a0088cfac9 https://github.com/oracle/docker-images/tree/master/OracleDatabase 正攻法がだめだったので、誰かさんが作って下さったものを利用 https://hub.docker.com/r/sath89/oracle-12c/

イメージのダウンロードと実行

$ docker pull sath89/oracle-12c

$ docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c

実行結果、Oracle用のコンテナが起動する。

ログイン情報

User Id : sys, system
Password : oracle
Tnsname : XE

DumpからDBを復元

インスタンスの中のDPDUMPフォルダーにDumpファイルをコピー

$ docker cp  /Downloads/MYDB.DMP container_name:/u01/app/oracle/admin/xe/dpdump

コンテナに接続し、impを実行する。

$ docker exec -it 0999d96f24dd bash
# impdp system/oracle directory=DATA_PUMP_DIR dumpfile=MYDB.DMP log=expdp_MYDB.log

クライアントから接続する

$ sqlplus system/oracle@xe

管理者権限でログイン

$ sqlplus sys as SYSDBA