まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2015/05

(注 この記事の内容は古くなっています。新しい情報はこちらを参照してください)


Bluemix を、特に IoT 関連サービスの開発で Bluemix を使っていると、データを Cloudant に格納するのが便利です。Node-RED スターターボイラープレートに照準装備されていることもあるし、データ形式が機器ごとに異なるセンサーのデータをデータベースに格納しようとすると、テーブル定義の不要な NoSQL データベースの方が楽です。

でも NoSQL に格納されたデータは再利用が難しいです。SQL も使えないのでクエリーでデータを選別することも難しく、データを貯めるまではいいのですが、その後の利用時に手間取りがちになってしまいます。。。

そんな問題を解決する目的で IBM dashDB が提供されています。これは DB2 BLU Acceleration 技術を使った統計用 DB2 の DBaaS です。特筆する機能の1つに Claudant からの単方向レプリケーション機能が装備されていて、Claudant の特定のデータベースに格納された内容を dashDB のテーブルにレプリケーションできる、というものです。レプリケーション後は dashDB のデータとして利用できるので、普通に SQL のクエリーを使うこともできますし、カラムナストアを使った高速な統計機能を使うこともできますし、R 言語を使って解析することもできます。

データが dashDB に格納されてしまえば、こっちのもの、という感じ。 なので大量のデータを Cloudant に格納するだけして、解析が必要なデータは dashDB にレプリケーションする、という使い方がビッグデータ時代ではとてもリーズナブルなわけです。


運良く(?)Cloudant も dashDB も IBM Bluemix のサービスとして提供されています。この単方向レプリケーション機能を実際に試してみました。その時の様子を紹介します。

まず Bluemix 上の Node-RED エディタを使って IoT フローアプリケーションを作ります。このあたりの手順はこちらも参照ください。とりあえずシミュレータを使うなどして機器デバイスから発信される大量のセンサーデータを Cloudant に格納します:
2015051601


この Cloudant に格納されたデータを Bluemix 上から確認してみます。NoSQL なので、データベース内のデータ一覧を見ると中身が少しわかりにくいかもしれません。
2015051602


1つのデータを選択して詳細を見ると、より理解しやすい形で確認できます。この例では time や objectTemp, ambientTemp, accelX, ... などのセンサーデータが JSON 形式で格納されていることが確認できます:
2015051603


ではこのサービスにレプリケーション先となる dashDB サービスを追加します。アプリケーションの画面から「サービスまたは API の追加」をクリックします:
2015051604


ビッグデータカテゴリの中にある dashDB を選択してプロジェクトに追加します:
2015051605


念のため。dashDB は無料枠のある有償サービスなので、そのサービス価格を確認しておきます。デフォルトの Entry プランの場合は 1GB データまでは無料。20GB までは月5250円で使うことができます(最初の30日間はデータ量に関わらず無料)。ちなみにこのサービスで使っているソフトは、ライセンス契約で買うとものすごく高いです(苦笑)。ある意味でこれをクラウドから従量課金で使えるのはお得です。特に無料枠で使うつもりの方はデータ量に気をつけてください:
2015051606


プロジェクトに追加後の画面です。dashDB サービスが追加されたことを確認します:
2015051607


ではこの追加した dashDB に対して、Cloudant のデータを単方向でレプリケーションする設定を行います。まず Claudant 側の接続情報が必要なので、Cloudant サービスの「資格情報の表示」部分をクリックします:
2015051608


以下の様な情報が表示されます。host と username, password, そして Cloudant 内で使っていて、dashDB にレプリケーションしたいデータベースの名前をメモしておきます:
{
  "cloudantNoSQLDB": [
    {
      "name": "dotnsf-nodered-cloudantNoSQLDB",
      "label": "cloudantNoSQLDB",
      "plan": "Shared",
      "credentials": {
        "username": "(ユーザー名)",
        "password": "(パスワード)",
        "host": "(ホスト名)",
        "port": 443,
        "url": "...."
      }
    }
  ]
}

これらの情報が確認できたら dashDB への単方向レプリケーションを設定します。ダッシュボードから dashDB アイコンをクリックします:
2015051609


dashDB の説明画面が表示されるので、"LAUNCH" ボタンをクリックします:
2015051610


初期画面が表示されます。レプリケーションは初期データのロードとして設定するので "Load your data" ボタンをクリックします:
2015051611


次の画面で "Cloudant" を選択し、"load" ボタンをクリックして Cloudant からの単方向レプリケーションで初期データをロードすることを指定します:
2015051612


次の画面で Cloudant の情報と、レプリケーション先となる dashDB のデータベース名を指定します。Cloudant の情報として必要なのは以下の3点です:
 データベースURL : https://(接続情報の host の値)/(目的のデータが格納されているデータベース名)
 ユーザー名: (接続情報の username の値)
 パスワード: (接続情報の password の値)

また dashDB のデータベース名として指定するデータベースはこの段階で存在している必要はありません。存在していない場合は新規に作成します。最後に "Start Sync" ボタンをクリックして同期を実行します:
2015051613


同期の設定が正しければ、この同期が "Running" ステータスで有効に設定されたことが表示で確認できます:
2015051614


改めて "Tables" タブを選択し、テーブルにレプリケーション先に指定したテーブルを選択すると、Cloudant のデータが dashDB のテーブルとして自動的にマッピングが定義されていることが確認できます:
2015051615


ここで "Browse Data" をクリックすると、実際のデータレコードが確認できます。元々は Cloudant に含まれていたデータレコードが dashDB に格納されています。また、これはデータのコピーではなく単方向レプリケーションなので、今後 Cloudant にデータが追加されると自動的にこの dashDB のこのテーブルにデータが複製されてくることになります:
2015051616


これで IoT のセンターデータが SQL の使える dashDB に同期で格納できることが確認できました。センサーデータは書き換えることはあまり考えにくく、統計目的で参照することが多いと思われるので、単方向レプリケーションでもあまり問題にならないと思っています。これでセンサーからのビッグデータを統計目的で使う、というためのシステム基盤が簡単に作れることが分かりました。

 

久しぶりのノーツネタです。


ノーツ9のクライアントでカレンダーを開くと、左下にこのようなセレクターが表示されます:
2015051501

ここで選択した形式でカレンダーが表示されます。自分は1週間単位で見ることが多いので、「1週間(勤務日)」で使っていることが多いです。なお「1週間(勤務日)」は月曜から金曜までの5日間を表示(土日は表示しない)、「1週間」だと月曜から日曜までの7日間が表示されます。

最近、自分の勤務が土日も含まれることが多くなってきました。というわけで、勤務用の5日表示では大事な仕事を忘れてしまいかねません。かといって「1週間(勤務日)」を残したまま「1週間」を選ぶのもわかりにくいというか・・・

こんなときこそカスタマイズです!さっそくドミノデザイナーでメールテンプレートを開いて、共有要素 - アウトライン内の NotesCalendarOutline を選択します:
2015051504


その中の「1週間」を書かれたラベルを選択して、ラベルの値を「1週間」から(例えば)「オレの1週間」に変更して保存します:
2015051502


これでノーツカレンダーを開き直すと、「オレの1週間」が選択できるようになり、選択すると7日間分のカレンダーが表示されます。これで安心して週末にも仕事のスケジュール入れられます(涙)。
2015051503




 

5月9日~11日において大阪の朝日放送様主催で行われた ABC ハッカソンに参加してきました:
ABC Hackathon | 朝日放送

このハッカソンは「イベント×IT×モノづくり」をテーマとしたもので、一般的な「プログラミングコンテスト」的な要素は少し薄くなっています。あくまで多くの人が集まるイベントで活用できるハードウェアを作るコンテストであり、そこに IT の要素を組み合わせてイノベーションを起こそう、というものです。なお、この様子は関西地方では朝日放送様のテレビ番組として放送される予定であると聞いています。

私は参加といってもいわゆる「参加者」ではなく、クラウドおよび IoT サービス環境としての IBM Bluemix を利用者に提供したこともあり、その技術サポート要員として参加してきました。

番組の内容に関わることを話すつもりはないのですが、まず参加者の熱意とデバイスのアイデア、そしてそのデバイス(ソフトではなくハード)を3日間で作り上げようとする集中力&チームワークに感動しました。ハッカソンの規模的にも私がこれまでに参加したハッカソンの中でも最も大規模な開催であったと思います。

そして本戦の中で数社のエンジニアの方をサポートさせていただきました。IBM Bluemix は最初は慣れなくてとっつきにくい環境だったと思いますが、作るモノや利用目的がハッキリしていたこともあり、思いのほか環境に慣れていただくまでも早く、後半ではトラブルがあっても話を一緒に聞いているうちに結局自分で問題を見つけて直してしまう、というレベルにまで達していました。サポート要員として非常に楽でした(笑)。何よりも使って頂いているうちに IBM Bluemix の環境に慣れて、活用されて、応用されていく様子がこちらにも伝わってきて、それが一番嬉しかったです。今後も引き続き IBM Bluemix を活用いただきたく思っています。

そして、実は参加者とだけではなく、他のデバイスや API 提供会社のサポートとして参加されていた方々とも貴重な交流ができました。正直、普段はコンペとなるような関係の会社も参加されていましたが、参加チームの中にはその会社の提供する機能と我々の提供する機能を組み合わせたデバイスを作ろうとする所もありました。我々には思いもよらない使い方でした(苦笑)。ハッカソンに参加されていた皆様は知らないと思いますが、実は主催社チーム同士でもかなり密な交流があったのでした。 (^^; 色々な意味で本当に貴重な3日間でした。


このイベントに参加された方、主催された方、サポートで参加された皆様、お疲れ様でした。そして貴重な機会をありがとうございました。本当に楽しいイベントでした。機会があればまたどこかでお会いしたいです。そしてこのような刺激的なイベントへの参加を認めていただいた自社に感謝します。


 

個人的にご縁のある IDCF 様がゴールデンウィークにクラウドを使った面白い企画をやっていました:
抽選でスターバックスギフトカードプレゼント【IDCFからの宿題第2弾】

IDCF 様のクラウド環境を使って、git のサーバーである GitLab 環境を構築してみよう、というものです。GitLab は GitHub のサーバーを自分専用に作るような環境で、特に Community Edition は無料のオープンソースで提供されています。導入も非常に簡単で 22/80 番ポートの開いたサーバーがあれば数分で専用 GitHub が構築できる、というものです。 そして IDCF 様の企画では同環境を IDCF クラウド上に作成して、その活用方法を含めてブログにまとめると抽選でスタバのギフトカードがもらえる、というものです。興味ある方はこの週末にチャレンジしてみましょう!


で、自分はスタバカードにも興味はありますが、ちょっとだけ(?)脱線して、同じ環境を IBM Bluemix 上で作ってみることにしました。 完全な悪ノリです、はい。まあでも仮想マシン起動後の作業は共通ということで・・・ (^^;

なお、GitLab CE(Community Edition) 環境の具体的な構築方法はこちらを参照ください。以下は基本的にこの手順をそのまま実行しています:
Download GitLab Community Edition(CE)


まず GitLab を導入するには SSH でログインできるサーバーが必要です。というわけで Bluemix の OpenStack VM 機能を使って CentOS の仮想マシンを1つ作成します。バージョンは個人的に慣れている 6.5 で。この辺りの手順はこちらを参照ください:
Bluemix 上で OpenStack VM インスタンスを作成する


ちなみに GitLab の推奨環境としては 2CPU + 2GB メモリですが、100 ユーザー程度であれば 1CPU + 1GB メモリ + 1GB スワップメモリでも OK とのこと。Bluemix の仮想マシンは現時点で最小スペックの m1.small でも 1CPU + 2GB メモリ + 2GB スワップメモリなので、前提条件としては充分だと思います:
2015050801


仮想マシンが立ち上がったら Bluemix かどうかを意識する必要はありません。まず SSH でログインし、とりあえず root で yum update しておきます:
# yum update

最初に必要な依存ライブラリをまとめて導入&起動しておきます:
# yum install openssh-server postfix cronie git
# /etc/init.d/postfix start
# chkconfig postfix on
# lokkit -s http -s ssh

次に GitLab 本体をダウンロードしてインストールし、起動します:
# curl -O https://downloads-packages.s3.amazonaws.com/centos-6.6/gitlab-ce-7.10.1~omnibus.2-1.x86_64.rpm
# rpm -ivh gitlab-ce-7.10.1~omnibus.2-1.x86_64.rpm
# vi /etc/gitlab/gitlab.rg (external_url の値を自分自身のIPアドレスに変更)
# gitlab-ctl reconfigure
2015050802


最後にこのサーバーにブラウザでアクセスして、ユーザーID(root) と初期パスワード(5iveL!fe)を指定してログインします:
2015050803


初回ログイン時には初期パスワードを変更するよう指示されます。自分専用のパスワードに変更します:
2015050804


一度、強制ログアウトされるので再度 root ユーザーと新しいパスワードでログインするとウェルカム画面が表示されます。これで GitLab が使える環境が整ったことになります!
2015050805


あとはリポジトリの管理単位となるプロジェクトを作り(10,000個まで作れるらしい)、ユーザーのグループを作って、プロジェクト毎のアクセス権を柔軟に制御することもできます。

新規にユーザーを登録すると、メール認証が必要になります。となるとメールサーバーを用意/設定する必要があります。それが面倒な場合は以下の設定を加えて、ユーザー登録と同時にメール認証が済んだことにすることもできます:
# vi /opt/gitlab/embedded/service/gitlab-rails/app/modules/user.rb

(以下の行を追加)
  default_value_for :confirmed_at, Time.now


この設定後にユーザーを登録すると、同時にメール認証までは終わったことになります。ただその時点ではまだパスワードが設定されていないのでログインできません。管理者がユーザーを登録後に初期パスワードを設定してあげる必要があることに注意してください。

(参考)
ユーザを登録する


また、環境によっては GitLab が使う git ユーザーの ssh アクセスを許可していない可能性もあります。その場合は以下の2つの設定をしておくとアクセス制限を解除できます:
# vi /etc/shadow

git:!!:16569::::::
  ↓
git:*:16569:::::: (パスワードを設定していないユーザーの SSH ログインを許可する)
# vi /etc/ssh/sshd_config

AllowUsers xxxx yyyy git (AllowUsers に半角スペース区切りで git を追加)

# service sshd reload

もちろん github を使っている状況で無理に GitLab 環境に移行する必要はありませんが、ソースコードを自前環境で管理したい場合や、必ずしも公開したくないソースコードを管理したい場合などに GitLab は非常に簡単で便利だと思いました。


来たる5月19日&20日に IBM テクノロジーの祭典「IBM XCITE SPRING 2015」がグランドプリンスホテル新高輪で開催されます:
https://ibmxcite.jp/

この初日、5月19日にエンジニア向けのサブイベント dev@XCITE が併催されます。
http://ibmxcite.jp/dev/
2015050701


特にアプリケーション開発者を対象とした同イベントではアプリケーション開発基盤やホットワードになりつつある IoT(Internet of Things) をテーマとしたセッション等が予定されています。

実はその中のお昼のセッションの中で私が担当する時間が用意されています:
ライブコーディングで見せます!Bluemix アプリの作り方(11:50-12:35)

予定している内容としては IBM Bluemix を使って WordPress 環境を構築し、更にその WordPress 環境を IBM の人工知能エンジンの1つである AlchemyAPI の顔認識 API を使ってカスタマイズします。そして WordPress 内に添付された写真に人が映っているか?写っていた場合、その性別と年齢層はどのくらいか? を識別するようなカスタマイズを加えて公開する、というところまでをライブコーディングでお届けする予定です。

(完成イメージ WordPress コンテンツ内の画像内の顔を検出して性別、年齢、有名人の場合は誰かを認識させる機能をカスタマイズで追加します)
2015050700


ライブコーディング、つまりこの与えられた 45 分の中で実際にこのカスタマイズのコーディングをする、ということです。WordPress のカスタマイズなので言語としては PHP になりますが、Alchemy API は REST なので、普段は他の言語をお使いの方でもさほど混乱なく理解できる内容であると思っています。 

しかし 45 分って大丈夫か、俺!? まあヤバそうだったら最後はコピペするけど・・・

IBM Bluemix に興味ある方、AlchemyAPI の人工知能 API に興味ある方、自分でも顔認識 API を使ってみたいと思っているエンジニアの方、最近人工知能の話題をよく聞くけどどんなもんだろうと思っている方、僕のリアルなソースコードを見てみたい方、お昼の時間がヒマだなあという方、などなど、ちょっとでもこんな内容のセッションに興味があれば是非ご参加ください。




 

このページのトップヘ