Posts filed under ‘Microsoft Azure’
WebSocket ハンズオンと Java on Microsoft Azure について
この記事は Java EE Advent Calendar 2015 の12/22分の記事です。
昨日は、emag@github さんのWildFly Swarm 周遊でした。
明日は、@HirofumiIwasakiさんです。
マイクロソフトに転職してはやいもので5ヶ月が過ぎ、やっと会社にも同僚にも慣れてまいりました。Java EE の Advent Calendar ということで Java EE に関連した内容をお届けします。
内容は、Azure 上で WebSocket のアプリケーション開発のハンズオン・ラボの資料です。当初、ブログにまとめようと思いましたが、ページ数がかさむのでラボの資料は、下記の PDF にまとめました。また、このハンズオンは、学生(専門学校の皆様や大学生)も理解していただけるよう記載した内容ですので、社会人の皆様でも、はじめて WebSocket を学ぶ方には有効ではないかと思います。ぜひ下記のハンズオンをお試しいただき、Java EE 7 の WebSocket を Azure 上でお楽しみください。
SlideShare : SlideShare からも直接ご覧いただけます。(PDF のダウンロードも可能)
Docs.com : Docs.com からもご覧いただけます。(PDFのダウンロードも可能)
最後に
今年は、Java 業界を驚かせてしまったり、お騒がせしましたが、みなさま本当にありがとうございました。Java の 20 周年を皆様と一緒に過ごすことができたのは心より幸せでした。そして、マイクロソフトに転職しても Java のエバンジェリストができて、今なによりも幸せです。マイクロソフトに入社して、今年は少し様子見をしていた所もあります。しかし来年は、もっと積極的にやっていく予定ですので、会社が変わってもどうぞ皆様、これからもよろしくお願いします。
皆様、良いお年を!!
Have a good Merry Christmas and a happy New Year !!
Microsoft Azure IoT Hub with Java
Microsoft Azure の IoT Hub が Java でも利用できるということで試しました。Microsoft Azure の IoT Hub に関する詳細な説明はこちらをご参照ください。
Azure IoT Hub とは
IoT Hub と Event Hubs の比較
私がはまったのは1点で、「Device ID」をどうやって作るかという点でしたが、そこも下記にくわしく手順を記載します。
1. 最初に、Microsoft Azure の管理ポータルにアクセスし、新規から IoT Hub を作成します。
Microsoft Azure の管理ポータルへアクセス
「参照 >」から「IoT Hub プレビュー」を選択します。
「新規」ボタンを押下すると、下記の画面が表示されますので「Name」に名前を入力し、利用する規模に応じて価格やプランを選択してください。
次に、リソース・グループ名を新規に作成し、ロケーションとして「東アジア」を選択し最後に「作成」ボタンを押下してください。
2. Windows 環境で DeviceExplorer をインストール
Azure IoT SDKsのサイトにアクセスし、DeviceExplorer のインストーラを入手してください。Windows 環境用に用意されている「SetupDeviceExplorer.msi」をダウンロードします (このリンクから入手できる版は 2015-11-30 版です、最新版はAzure IoT SDKsから入手してください)。
ファイルを入手後、入手したファイル(インストーラ)をクリックしてインストーラを起動してください。
次に、インストール場所や利用者を指定し「Next >」ボタンを押下します。
確認画面が表示されますので、「Next>」ボタンを押下します。
ユーザアカウント制御の確認画面が表示されますので、「はい(Y)」を押下してインストールをはじめてください。
インストールが完了すると下記の画面が表示されますので「Close」ボタンを押下してください。
インストールが完了すると Windows 10 の場合、メニューから「最新追加されたもの」の欄から実行できることを確認できます。
3. Device Explorer から Device ID と接続用文字列を作成
メニューから DeviceExplorer を起動してください。起動すると下記の画面が表示されます。
ここで、DeviceExplorer から Microsoft Azure の IoT Hub に接続し操作できるように、Azure 上で接続用の情報を確認し取得します。Microsoft Azure の管理ポータルに接続し、作成した IoT Hub のサービスを参照してください。
IoT Hub サービスを参照すると「Settings」というボタンがあるので押下します。
「Settings」ボタンを押下すると「Shared access policies」のリンクがあるので選択してください。
「Shared access policies」の POLICY から「iothubowner」を選択してください。
選択すると「Connection string—primary key」の欄があります。記載内容をクリップ・ボードへコピーできるようにコピー・ボタンが右端に用意されていますので、これをクリックしてコピーしてください。
クリップ・ボードへ文字列がコピーされると「コピー済み」と表示されます。
文字列をコピーしたのち、Device Explorer に戻り、文字列を貼り付けてください。
文字列をコピーしたのち、「Update」ボタンを押下してください。正しく設定が更新されると「Settings updated successfully」という画面が表示されます。
続いて、Device Explorer のタブから「Management」を選択し「Create」ボタンを押下してください。
ボタンを押すと、下記の画面が表示されますので、「Device ID」欄にデバイス固有の名前を入力し「Create」ボタンを押下してください。(Primary Key,Secondary Keyは自動的にキーの文字列が入力されています。)
ボタンを押下すると下記の画面が表示されますので「Done」ボタンを押下してください。
デバイス ID を作成すると一覧に1行が追加されます。ここで、追加された行をマウスで右クリックしてください。すると、選択メニューが表示されますので、「Copy connection string for selected device」を選択して接続用の文字列をコピーしてください。
コピーして作成された、接続用の文字列の例は下記のような文字列です。この文字列は後からのプログラム内で記述する必要があります。そこで、この文字列を一時的にテキストファイルなどに保管しておいてください。
HostName=HOSTNAME.azure-devices.net;DeviceId=DEVICE-ID;SharedAccessKey=Wf0o****************************************
※ 補足:Device Explorer の詳しい使い方は下記に記載されていますので、こちらもご確認ください。
How to use Device Explorer for IoT Hub devices
4. Microsoft Azure IoT Hub サンプルコードの作成
それでは、プログラムを組むための環境設定や準備が整いましたので、実際にプログラムを書いてみましょう。本サンプル・アプリケーションは、基本的にこちらに記載されている内容を実際に動作させた物です。
※ 本記事の目的は、IoT Hub の設定方法を説明するのがメインのため、コードの詳細にまでは触れず、MS 社員のどなたかが作成したコードをそのまま記載しています。しかし、この一連の設定ができると色々と面白いことができるので、まずは基本的な手順を理解してください。
Maven の pom ファイルは下記のようになります。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yoshio3</groupId> <artifactId>Azure-IoT-Hub</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version> </properties> <dependencies> <dependency> <groupId>com.microsoft.azure.iothub-java-client</groupId> <artifactId>iothub-java-client</artifactId> <version>1.0.0-preview.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> <configuration> <finalName>${project.artifactId}-${project.version}</finalName> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.yoshio3.Main</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
Java のサンプル・ソースコードはこちらになります。
package com.yoshio3; import com.microsoft.azure.iothub.DeviceClient; import com.microsoft.azure.iothub.IotHubClientProtocol; import com.microsoft.azure.iothub.Message; import com.microsoft.azure.iothub.IotHubStatusCode; import com.microsoft.azure.iothub.IotHubEventCallback; import com.microsoft.azure.iothub.IotHubMessageResult; import java.io.IOException; import java.net.URISyntaxException; import java.util.Scanner; public class Main { protected static class EventCallback implements IotHubEventCallback { @Override public void execute(IotHubStatusCode status, Object context) { Integer i = (Integer) context; System.out.println("IoT Hub responded to message " + i.toString() + " with status " + status.name()); } } protected static class MessageCallback implements com.microsoft.azure.iothub.MessageCallback { @Override public IotHubMessageResult execute(Message msg, Object context) { System.out.println( "Received message with content: " + new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET)); return IotHubMessageResult.COMPLETE; } } public static void main(String... args) throws IOException, URISyntaxException { //Device Explorer で作成してコピーした接続用の文字列をここに記載 String connString = "HostName=HOSTNAME.azure-devices.net;DeviceId=DEVICE-ID;SharedAccessKey=Wf0o****************************************"; IotHubClientProtocol protocol = IotHubClientProtocol.AMQPS; DeviceClient client = new DeviceClient(connString, protocol); MessageCallback messageCallback = new MessageCallback(); client.setMessageCallback(messageCallback, null); client.open(); for (int i = 0; i < 10; ++i) { String msgStr = "Event Message " + Integer.toString(i); try { Message msg = new Message(msgStr); msg.setProperty("messageCount", Integer.toString(i)); System.out.println(msgStr); EventCallback eventCallback = new EventCallback(); client.sendEventAsync(msg, eventCallback, i); } catch (Exception e) { e.printStackTrace(); } } System.out.println("Press any key to exit..."); Scanner scanner = new Scanner(System.in); scanner.nextLine(); client.close(); } }
念のため、Maven プロジェクトは Git Hub にもあげておきます。上記をベースに、Microsoft Azure IoT Hub Java Client 1.0.0-preview.7 API を参照しながらプログラムを作ってみてください。
5. デバイスでプログラム実行
プログラムをビルド後、下記のコマンドを IoT デバイス上で実行してください。
# java -jar Azure-IoT-Hub-1.0-SNAPSHOT.jar
実行すると、下記のようなメッセージが表示されます。
$ java -jar Azure-IoT-Hub-1.0-SNAPSHOT.jar Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 12 15, 2015 5:27:38 午後 org.apache.qpid.proton.engine.impl.ssl.SslEngineFacadeFactory getClass 警告: unable to load org.bouncycastle.openssl.PEMReader 12 15, 2015 5:27:38 午後 org.apache.qpid.proton.engine.impl.ssl.SslEngineFacadeFactory getClass 警告: unable to load org.bouncycastle.openssl.PasswordFinder 12 15, 2015 5:27:38 午後 org.apache.qpid.proton.engine.impl.ssl.SslEngineFacadeFactory 警告: unable to load bouncycastle provider Event Message 0 Event Message 1 Event Message 2 Event Message 3 Event Message 4 Event Message 5 Event Message 6 Event Message 7 Event Message 8 Event Message 9 Press any key to exit… IoT Hub responded to message 5 with status OK_EMPTY IoT Hub responded to message 4 with status OK_EMPTY IoT Hub responded to message 7 with status OK_EMPTY IoT Hub responded to message 2 with status OK_EMPTY IoT Hub responded to message 3 with status OK_EMPTY IoT Hub responded to message 6 with status OK_EMPTY IoT Hub responded to message 1 with status OK_EMPTY IoT Hub responded to message 9 with status OK_EMPTY IoT Hub responded to message 0 with status OK_EMPTY IoT Hub responded to message 8 with status OK_EMPTY |
参考:
Microsoft Azure IoT device SDK for Java
IoT Kit ハンズオン トレーニング 初めの一歩モノの接続からデータ分析まで by @embedded_george
最後に、今回は実戦的なアプリまでは作成しませんでしたが、上記をベースに Raspberry Pi や LEGO Mindstorms 上にプログラムを配置し、Azure 上にデータを配信したり、Azure から各種デバイスを操作したりできるようになりますね。
Let’s enjoy IoT with Java on Azure !!
Microsoft Java DevOps ハッカソン@JJUG CCC 2015
JJUG CCC 2015 Fall が2015年 11月 28日 (土) にベルサール新宿グランド(東京都新宿区西新宿8-17-3 住友不動産新宿グランドタワー) で開催されます。
今回、日本マイクロソフト株式会社は JJUG CCC にプラチナ・スポンサーとして参加し、Java の開発者と運用者による DevOps ハッカソンを2日間で実施します。このハッカソンは過去2度程実施していますが、いずれの参加者も参加してよかった他の方にもぜひお勧めしたいといわれている、とても有意義なハッカソンです(下記の参加レポートをご参照)。
みなさま、Microsoft Azure のプラットフォーム上で、 Jenkins や今はやりの Docker などを利用して 継続的インテグレーションやデリバリ(CI や CD)を体感してみませんか?今回は、JJUG との共催という事で、開発者は Java デベロッパーのみなさまが対象となります。
参加のご登録はコチラから
■ 開発者の方はコチラ
■ インフラ技術者の方はコチラ
( ※ 参加可能な人数に限りがあるため、JJUG CCC の参加登録とは別途、登録サイトをご用意しています。JJUG CCC の参加登録はコチラから行ってください。)
ご案内文
DevOps はソフトウエアデリバリのライフサイクルを早める考え方で、短期間で開発、 運用を繰り返し、一日に5 回以上新しいサービスをリリースする企業も出てくるなど、DevOps のビジネス価値、効果は昨今たいへん注目されています。
しかし DevOps が何を指すのかは人やベンダーによって言うことがまちまちで、その多くはツールのみの話に終始していますが、ツールは DevOps の要素のひとつであり、実際は人、プロセス、さまざまな要素が関係します。
アプリケーション開発者、そしてインフラ技術者でチームを構成し、DevOps のプラクティスを適用して、Infrastructure as Code の自動化技術を使いながら本物のDevOps が体験できるイベントを企画しました。
ぜひ奮ってご参加ください。
過去に開催した DevOps ハッカソンの参加レポートは下記にリンクしています。
● メディアの記事
http://codezine.jp/article/detail/8944
http://www.atmarkit.co.jp/ait/articles/1509/10/news168.html
● 参加者のブログ
http://heartbeats.jp/hbblog/2015/09/microsoft-devops-hackathon.html
http://couger.hatenablog.com/entry/2015/09/06/213104
http://blog.modd.com/entry/2015/09/07/151421
http://changesworlds.com/2015/09/devops-hackathon-day-2-done/
http://newscentral.exsees.com/item/2e7e6c6899c626e2baddb7cdeaaed62d-d28352a527a1d995287ddd23891859aa
参加のご登録はコチラから
■ 開発者の方はコチラ
■ インフラ技術者の方はコチラ
Microsoft のエバンジェリストの SNS 関連リンク一覧
日本マイクロソフトには非常にたくさんのエバンジェリストがいらっしゃいます。その皆様の SNS へのリンクがまとまってあるといいなぁと個人的に思っていましたが、無かったので作りました (順次追記予定)。
私のブログを閲覧されている Java 愛好者の皆様は、ご存知ない MS のエバンジェリストもいらっしゃるのではないかと思います。
下記は、個人的なお立場で情報発信をなさっている方もいらっしゃいますが、ぜひ、MS のエバンジェリストの皆様をチェックしていただければ幸いです。
(※ あいうえお順)
Mac 版 Minecraft を Java SE 8 で起動させる方法のご紹介
Mac 版 の Minecraft は https://minecraft.net/store/minecraft から Minecraft.dmg として入手できます。入手したファイルをダブルクリックしてください、すると下記の画面が表示されます。
次に、「Minecraft」のアイコンをドラッグ&ドロップで「/Applications」にコピーしてください。コピーした後、アイコンをダブルクリックして起動すると、下記のメッセージが表示されて起動できません。
“Minecraft” を開くには、以前の Java SE 6 ランタイムをインストールする必要があります。以前の Java SE 6 のダウンロード Web サイトにアクセスするには、”詳しい情報…”をクリックしてください。
もちろん、Java SE 6 のような、とても古い Java SE はインストールしたくありません。
そこで、Java SE 8 で Minecraft を起動させる方法を下記にご紹介します。
※ 私の説明内容は、基本的にはコチラの記載内容に従い日本語化したものです(直訳ではありません)。オリジナルでは Java SE 7 用に記載されていますが、Java SE 8(JDK 8u60)で動作確認しています。また、オリジナルの動作確認は Mac OS X 10.7.3 で確認してますが、私は Mac OS X 10.10.5(Yosemite) で動作を確認しています。
まず、最新の JDK 8 を Oracle サイトのコチラから入手し、別途インストールをしてください。
次に、「/Applications」にコピーした「Minecraft」をマウスの右クリック(2本指をパッドにおいてシングルクリック)してください。右クリックするとメニューが表示されますので、そこで「パッケージの内容を表示」を選択してください。
選択すると「Contents」ディレクトリが表示されるので、ディレクトリを展開してください。
すると「Info.plist」というファイルが存在しています。
このファイルの内容はテキストファイル( XML ファイル)ですが、これをテキスト・エディタで開いて、内容を下記に書きかえてください。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleName</key> <string>MinecraftLauncher</string> <key>CFBundleVersion</key> <string>1.0.1</string> <key>CFBundleShortVersionString</key> <string>MinecraftLauncher 1.0.1</string> <key>CFBundleExecutable</key> <string>LaunchGame</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleGetInfoString</key> <string>MinecraftLauncher 1.0.1 © Mojang Specifications, Inc, 2013</string> <key>CFBundleIconFile</key> <string>favicon.icns</string> <key>CFBundleAllowMixedLocalizations</key> <true/> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleIdentifier</key> <string>com.Mojang Specifications.Minecraft.Minecraft</string> <key>LSHasLocalizedDisplayName</key> <true/> <key>CFBundleDisplayName</key> <string>Minecraft</string> <key>NSHighResolutionCapable</key> <true/> </dict> </plist>
次に、「/Applications/Minecraft.app/Contents/MacOS/」 のディレクトリに移動してください。そこで「LaunchGame」 というファイルを新たに作成し、下記の内容を記載してください。ファイルの作成はターミナルからviコマンドなどで作成して頂いてもいいですし、標準のテキストエディタをご利用頂いてもいずれの方法でも結構です。
#!/bin/bash SCRIPTPATH=$(cd $(dirname $0);pwd -P) /usr/bin/java -Xdock:icon="$SCRIPTPATH/../Resources/favicon.icns" -Xmx512m -jar "$SCRIPTPATH/../Resources/Java/Bootstrap.jar"
次に、この「 LaunchGame」に実行権限を与えてください。ターミナルを開き該当のディレクトリに移動した後、下記のコマンドを実行してください。
# chmod 755 LaunchGame
以上で設定は完了です。
最後に、Minecraft を起動しますが、そのまま「Minecraft」のアイコンをクリックして起動すると下記のメッセージが表示されます。
そこで、Minecraft.app を右クリック(2本指をパッドにおいてシングルクリック)して、「開く」を選択してください。
すると、下記の画面が表示されますので、「開く」ボタンを押下し Minecraft を起動します。
※ 一旦、起動して終了した後は Minecraft のアイコンをクリックするだけで起動するようになります。
Linux 版 Minecraft を利用する方法
最後に、上記のやり方と違う方法もご紹介しておきます。
毎回コマンドから実行するのが苦痛でない方は、Linux 版の Minecraft.jar ファイルを入手してください。下記のコマンドでも起動できます。
# java -Xms1G -Xmx1G -jar Minecraft.jar
設定ファイルを編集したりファイルを作成する事なく、実行できますので、コマンドが好きな方はコチラをオススメします。
Let’s enjoy Minecraft on Mac OS/X !!