あさのひとりごと

3日坊主にならないように、全力を尽くします。 記事は個人のひとりごとです。所属する組織の意見を代表するほど、仕事熱心じゃないです。

技術書を書くのは大変なわけです、しかし音楽があればなんとか。

今、また本を書かせてもらっています。

がしかし、まったく筆が進まなくて困っています。


私は本を書くとき、自分の伝えたいことを自分の言葉で、、、、、
というエバンジェリストなレベルに全く達していないので

企画に応じて、想定読者を決めその読者をキャラクター化し、
キャラに細かい属性を設定して、ストーリを決めて、淡々と書きます。

膨大な情報の中から、クライアントに必要な情報をだけを集めて
論理的に整理して、分かりやすく表現するという、コンサル資料とまったく同じノリです。


で、書籍が刊行したときのタイミングで
(1)そのキャラクターに似た人がたくさん実在し
かつ
(2)その人が違和感なく読んでくれたとき
たくさん売れるわけです。


しかしながら、まったく筆が進まないとき、脳内で何が起こるかというと
(3)想定読者キャラは実在しないんじゃないか、タイミングが違うんじゃないか
または
(4)想定読者キャラの属性設定が間違っていて、書いている内容では伝わらないんじゃないか
というマインドが支配的になってしまいます。

こうなったら、もうどうしようもないので、
気分転換するしかないのですが、、、、

だいたい、スポンジボブを見るか、音楽を聴くかのどちらかで。。。。


私は3歳ぐらいから、ピアノを習っていて
中高では吹奏楽部で、ずっとクラッシックをやっていました。
音楽理論も習っていたので、ガチガチの感じで。
才能は無かったのですが、ずっと辞めなかったので、きっと嫌いではなかったんだと思います。


お酒が飲めるようになって、はじめてクラッシック以外の音楽を聴き始めたのがR&Bとラテンでした。

なぜ聴きはじめたかというと
いつもお酒を飲みに行っていたBarでたくさん流れていたからです。

今までのショパンチャイコフスキーとは全く違って、とにかく自由、自由、自由
それでいて
非常に正確なリズムとブルース!

超、かっこいい!!!


クラッシックをやっていたときの反動だとおもうけど、、、
ものすごくハマって、たくさん聴きました。
Drake/Beyoncé/Rihanna/2Pac/J.Code/Wale/Miguel/DJ khaled/Jey.Z/Ciara/LeToya/Kelly Rowland/Lil Wayne/Amerie/Brandy/Rick Ross/Bobby V/Lloyd/Craig David/Chris Brown/Omarion/Jeremih/Tory Lanez/Russ・・・etc

熱狂的に好きなのは、The-Dream


で、何の話だっけ。
そうそう、
今まで書いた書籍と、それを書いていたときにたくさん聴いた曲を思い出そうかなと。


Windows8 開発ポケットリファレンス(技術評論社)

https://www.amazon.co.jp/dp/4774162965/


初めての書籍だったのですが、Windowsストアアプリの本です。
共著なのですが、2章を担当しています。

大好きなマイクロソフトのテクノロジーだし
リファレンス本なので、特にスランプもなく
粛々と、、みたいな感じでしたが

天才プロデューサThe-Dreamのアルバムをずっと聞いてました。
特に、この曲!

The Dream - Luv Songs
youtu.be

英語分かる&音楽をやっている人は
めっちゃカッコいい理由がすぐわかると思います。


プログラマのためのDocker教科書(翔泳社)

https://www.amazon.co.jp/dp/479814102X/
Dockerの入門書です。ものすごく苦戦した本で
実は、出版直前まで全く別の切り口な本になるはずでした。

で、、、
第11回 クラウドごった煮(コンテナ勉強会)
に参加したのですが、そこである登壇者が
「開発者は毎朝、docker pullすればいいんです!(キリ」
みたいなことを言っていて、、、はっ💡


大好きなThe-Dreamの、王道なThe-Dreamらしい曲です。

The-Dream - Kill The Lights
youtu.be

彼の声も、顔も、常に自信満々な性格も
なにより、類を見ない天才っぷりなところ、すべてが大好きなので
この本を書きながら、アルバム「Love/Hate」と「Love King」はめちゃくちゃたくさん聴いたと思います。



Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門 (翔泳社)

https://www.amazon.co.jp/dp/479814469X/

こちらは、AWSの入門ガイドみたいな本です。
先のDockerの本の検証は主に、AWSとAzureを使っていて
ついでに詳しくなったので、まずはAWSを、、、ということで書きました。

Frank Ocean-Thinking About You
youtu.be

この本は、、、、切り口をすごく悩んで、、、、、
いろんなことを考えた結果、「Lift & Shift」はエンタープライズの界隈に間違いなく到来するだろう。
と見込んで書いたものなので、、、
その葛藤みたいなのが、聴いていた曲にも表れてます。

この曲はとても難しい曲で、Frank Ocean自身もいろんな複雑な心情なのが
まぁ歌詞を見ても分かるかなと。



プログラマのためのGoogle Cloud Platform入門(翔泳社)

https://www.amazon.co.jp/dp/4798137146/

GCPの入門書です。
いろんな意味でチャレンジングな本だったのですが
なんとか本屋さんに並ぶことが出来ました。ほんとうに感謝。

Bryson Tiller - Set You Free
youtu.be

今とてもハマっているBryson Tillerの曲です。

たぶん彼も天才かなと。ものすごいイケメン髭だし。



今書いてる本!

Bryson TillerやKhalidやRoy WoodsやPARTYNEXTDOORあたりがお気に入りでよく聞いてますが、、、、


Roy Woods - Drama
youtu.be

この本のイメージにとてもあってる感じです。


まぁ酔っぱらっているのであれなんだけども。
何が言いたいかというと、、、、

重厚なクラッシック至上主義からR&Bやラテンなどに180度ガラッと変わったのは
私自身の音楽そのものの嗜好や、音楽に関するスキルセットが変わったというわけでなく
単にBarにお酒を飲みに行くという、環境がちょっと変わっただけなんだよなぁと。


で、、、、
昔勤めていた会社のある大手町を散歩して、オフィスビルをぼんやり眺めながら、、、、

いろいろ思うこともあったわけですよ。
行きつけだった大手町ビルの紀伊国屋書店で。



クラッシックの音楽史において、印象派とされるDebussy
以降の現代音楽に大きな影響を与えたのだけども、、、

音楽は人を楽しませるよう謙虚に努力を積むべきである。
こうした制約の中に偉大な美が見出されるはずである。
極端な複雑化は芸術とは相容れないものである。

美は感覚に訴え、人に直接の楽しみを与えるべきであるし、
また人に努力をさせずに感動を与え、その心に入り込むものでなければならない。

いやー、Debussyはいろいろdisられてたんだろうなー。わかりみ。

youtu.be


本を書けば、私の知らないたくさんのひとが読んでくれる。


まぁ音楽と同じですね。


というわけで
明日からまじめに。

「Google Cloudではじめるデザイナ/プログラマのためのDocker実践入門」 ハンズオン資料

このドキュメントは、「Google Cloudではじめるデザイナ/プログラマのためのDocker実践入門 」勉強会のハンズオン用資料です。

ハンズオンのスライドはこちらです。 詳細については、こちらを参照してください。 Docs.com: docs.com/asashiho

このハンズオンでは、次の流れでDockerの実行環境を構築していきます。


構築する環境の構成は次の通りです。

1. Dockerイメージ作成

サンプルのダウンロード(2)

$ git clone https://github.com/asashiho/docker-handson.git

サンプルの構成(1)

$ ls docker-handson/

Dockerfile

$ vi docker-handson/v1.0/Dockerfile

Dockerイメージの作成

$ cd docker-handson/v1.0
$ docker build -t docker-sample:v1.0 .

Dockerイメージの確認

$ docker images

やってみよう

$ cd ~/docker-handson/v1.1
$ docker build -t docker-sample:v1.1 .

2.Dockerイメージ公開

プロジェクトIDの設定

$ GCP_PROJECT_ID=$(gcloud config list project --format "value(core.project)")
 
$ echo $GCP_PROJECT_ID

Dockerイメージにtag設定

$ docker tag docker-sample:v1.0 gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ docker tag docker-sample:v1.1 gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

Dockerイメージの公開

$ gcloud docker -- push gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ gcloud docker -- push gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

Dockerイメージ公開の確認

$ gcloud docker -- search gcr.io/$GCP_PROJECT_ID

3. Docker実行環境の構築~仮想マシン1台構成の場合~

Docker実行環境構築

$ docker-machine create --driver google \
  --google-project $GCP_PROJECT_ID \
  --google-zone asia-northeast1-a \
  --google-machine-type n1-standard-1 \
  --google-machine-image https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20161109 \
  webserver

仮想マシンへのログイン

$ cat /etc/redhat-release

Google Cloud利用のための設定

$ export GCP_PROJECT_ID=<ご自身のプロジェクトID>
$ sudo gcloud components update
$ sudo gcloud config set project $GCP_PROJECT_ID

Dockerイメージのダウンロード

$ sudo gcloud docker -- pull gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ sudo gcloud docker -- pull gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

Dockerイメージの確認

$ sudo docker images

4. コンテナの起動~仮想マシン1台構成の場合~

Dockerコンテナの起動

$ sudo docker run -it -p 80:80 --rm --name webserver gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0

Dockerコンテナの動作確認

$ sudo docker run -it -p 80:80 --rm --name webserver gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1

仮想マシンの削除

$ docker-machine stop webserver
$ docker-machine rm webserver

5. Docker実行環境の構築~クラスタ構成の場合~

クラスタ操作のための環境設定

$ cd ~/docker-handson/
$ gcloud container clusters get-credentials web-cluster --zone=asia-northeast1-a
$ kubectl get nodes

コンテナの起動

$ kubectl create -f deployment.yaml 
$ kubectl get pods

サービス設定ファイルの作成

$ cat service.yaml

サービスの起動

$ kubectl create -f service.yaml 
$ kubectl get services

6. コンテナのアップデート~クラスタ構成の場合~

デプロイ設定ファイルの修正

$ kubectl edit deployment/web-container

アップデートの確認

$ kubectl describe deployment/web-container

クラスタの削除

$ kubectl delete service web-service 
$ kubectl delete deployment web-container

おつかれさまでした

Docker on AzureでJavaEE実行環境を構築する手順

はじめに

Microsoftが提供しているクラウドサービスであるAzureを使って、Ubuntuで動くJavaEEによるWebアプリケーションの実行環境をDockerを使って作ってみたいとおもいます。

前提知識

Microsoft Azureは、マイクロソフトクラウドプラットフォーム(PaaS/IaaS)です。WindowsServerだけでなくUbuntuなどのLinuxサーバも動作するオープンなクラウドサービスです。

  • Dockerとは?

Docker(ドッカー)は、仮想化環境でアプリケーションを管理/実行するためのオープンソースのミドルウエアです。Linuxカーネル上で動作するのが特徴です。アプリケーションと実行環境をすべて含めて「Dockerイメージ」にパッケージングして、管理できます。

JavaEEとは、Javaによる大規模Webアプリケーション構築のためのエンタープライズなプラットフォームです。JSF/EJB/JDBC/JNDI/Servlet/JSP/JTA/JAX-RS/CDI/ELなどの技術仕様を総称したもので、、、(続きを読む)

1. JavaEEアプリのwar作成

適当なWebAPSampleという名前のサンプルアプリを作ります。 今回は、動かすだけなのでJSFのひな形そのままな感じのもので。 作成したWebAPSample.warファイルを使ってDockerイメージを作っていきます。

2. Dockerイメージ作成

作成したwarファイルをGlassFishで動かすためのDockerfileを作成します。

なお、Dockerをクライアントにインストールしていないときは、DockerToolboxをダウンロードしてインストールします。

Dockerイメージは、GlassFish公式イメージをベースに作ります。

GlassFishは、オープンソースのWebアプリケーションサーバで、JavaEEの参照実装です。

GlassFishのWeb管理コンソールを使うため、パスワードの設定やセキュリティの設定をして、サービス用の8080番ポートと管理コンソール用の4848番ポートを開放します。

Dockerfileはこんな感じで。

# GlassFishでWebアプリケーションをデプロイする
# 
# ベースイメージの取得
FROM glassfish:4.1-jdk8

# 作成者情報
MAINTAINER 0.1 asashiho@mail.asa.yokohama

# 環境変数の設定
ENV GLASSFISH_HOME /usr/local/glassfish4
ENV PASSWORD glasspass
ENV TMPFILE /tmp/passfile

# 管理者パスワードとセキュリティの設定
RUN echo "AS_ADMIN_PASSWORD=" > $TMPFILE && \
    echo "AS_ADMIN_NEWPASSWORD=${PASSWORD}" >> $TMPFILE  && \
    asadmin --user=admin --passwordfile=$TMPFILE change-admin-password --domain_name domain1 && \
    asadmin start-domain && \
    echo "AS_ADMIN_PASSWORD=${PASSWORD}" > $TMPFILE && \
    asadmin --user=admin --passwordfile=$TMPFILE enable-secure-admin && \
    asadmin --user=admin stop-domain && \
    rm $TMPFILE

# warコンテンツの配置
ADD WebAPSample.war $GLASSFISH_HOME/glassfish/domains/domain1/autodeploy

# ポートの解放
EXPOSE 4848 8080

# glassfishの実行
CMD ["asadmin", "start-domain", "-v"]

このDockerfileと作成したWebAPSample.warを同じディレクトリに置きます。 そして、docker buildコマンドでイメージを作成します。

$ ls
Dockerfile  WebAPSample.war

$ docker build -t asashiho/glassfish .

作成したイメージをDockerHubにアップロードします。

$ docker login
$ docker push asashiho/glassfish

作成が面倒な方は、こちらのDockerイメージを使ってください。 docker-glassfish

3. AzureでのDocker実行環境作成

Azure上でGlassFishコンテナを動かすために、Dockerの実行環境を作ります。 Docker Machineは、Dockerの実行環境を自動生成するためのコマンドです。各種クラウドVMなどに環境を作ってくれます。

Azureだけじゃなくて、AWS/SoftLayer/Rackspace/VirtualBoxなどさまざまな環境にDocker実行環境を自動生成できます。

今回は、docker-machneコマンドで、Azure上にDocker実行環境を構築します。

まず事前準備として、Azureにアクセスするため、証明書を作成します。 こんな感じで。

$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
$ openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "My Certificate"
$ openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer

生成した証明書(mycert.cer)を[Azure クラシック ポータル]-[設定]-[管理証明書]-[アップロード]からアップロードします。

これで、準備完了です。

準備が完了したので、いよいよAzure仮想マシン上にDocker実行環境を構築します。 仮想マシン名(docker-asaasa)は任意の名前に変更してください。

$ docker-machine create -d azure \
 --azure-subscription-id="サブスクリプションID" \
 --azure-subscription-cert="mycert.pem" \
 --azure-location "Japan Wast" \
 --azure-username "ユーザ名" \
 --azure-password "パスワード" \
 docker-asaasa

これでAzureの仮想マシン生成&Dockerの環境構築が完了です。 ちゃんと動いているのが分かります。

$ docker-machine ls
NAME             ACTIVE   DRIVER       STATE     URL                                      SWARM
default          -        virtualbox   Running   tcp://192.168.99.100:2376      
docker-asaasa   *        azure        Running   tcp://docker-asaasa.cloudapp.net:2376

4. GlassFishコンテナを動かす

作成したAzure仮想マシンに以下のコマンドでアクセスします。

$ docker-machine env docker-asaasa
$ export DOCKER_TLS_VERIFY="1"
$ export DOCKER_HOST="****"
$ export DOCKER_CERT_PATH="****"
$ export DOCKER_MACHINE_NAME="docker-asaasa"


$ docker-machine ssh docker-asaasa
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

 System information disabled due to load higher than 1.0

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

次のコマンドで、先ほど作成したGlassFishのDockerイメージをダウンロードします。

$ sudo docker pull asashiho/glassfish

Dockerイメージからコンテナを起動します。 ここで、あらかじめAzure仮想マシンのエンドポイントに8080ポートと4848ポートを設定しておいてください。

# コンテナの起動
$ sudo docker run -d -p 8080:8080 -p 4848:4848 asashiho/glassfish

# コンテナの確認
$ sudo docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                        NAMES
6ea4bd4c5368        asashiho/glassfish   "asadmin start-domain"   30 minutes ago      Up 29 minutes       4848/tcp, 8181/tcp, 0.0.0.0:8080->8080/tcp   thirsty_poincare

5. 動作確認

GlassFishでサンプルアプリが動作していることを確認するために、ブラウザから以下のURLにアクセスします。

http://(Azure仮想マシンDNS名):8080/WebAPSample/ docker1.png

6. Azure上のDocker実行環境削除

削除もばさっと。

$ docker-machine stop docker-asaasa
$ docker-machine rm docker-asaasa

今回はAzureで動作させましたが、DockerMachineを使うと、どのクラウドサービスで動かしてもdocker-machineコマンドで一括操作できます。 クラウドごとのCLIは不要です。

まとめ

AzureといえばMicrosoftMicrosoftといえばWindowsMicrosoftといえば.NETなイメージなのですが、Dockerも動くし、UbuntuJavaも動きました。

「ITエンジニアのための機械学習理論入門」のセットアップ手順(Windows10編)

機械学習の基本的な考え方が丁寧に解説されている、ITエンジニアのための機械学習理論入門の実行環境を、Windows10でセットアップする手順をまとめました。

なお、詳細な説明については書籍を参照してください! f:id:dr_asa:20170511090826p:plain

Amazon CAPTCHA

前提環境

項目 説明
ハードウエア Microsoft Surface Pro4
OS Windows10 pro 64bit

セットアップ手順

1.ダウンロード

Enthought Canopyのサイトからダウンロードします。緑の[GetCanopy]ボタンをクリックします。

f:id:dr_asa:20170511090930p:plain

ここで、[Get Sterted with Canopy Express-Free]の[Download]ボタンをクリックします。

f:id:dr_asa:20170511090941p:plain

OSのアーキテクチャに合わせてインストールモジュールを選択します。私の環境では「Windwos」で「64bit」なので次のように選択し、[DOWNLOAD Canopy]ボタンをクリックします。 f:id:dr_asa:20170511090950p:plain

2.インストー

ダウンロードしたcanopy-1.7.4-win-64.msiをダブルクリックしてインストールを開始します。

f:id:dr_asa:20170511091022p:plain

[I accept the terms in the License Agreement]をチェックして[Next]をクリックします。

f:id:dr_asa:20170511091032p:plain

[Next]をクリックします。 f:id:dr_asa:20170511091041p:plain

[Install]をクリックします。

f:id:dr_asa:20170511091107p:plain

インストールが完了したら、[Launch Canopy when setup exits]をチェックして[Finish]ボタンをクリックします。

f:id:dr_asa:20170511091117p:plain

[Continue]をクリックします。

f:id:dr_asa:20170511091128p:plain

[Start using Canopy]をクリックします。

f:id:dr_asa:20170511091137p:plain

インストールが完了しました。

3.環境設定

書籍を参考にして、Githubからサンプルコードを取得します。 取得したzipファイルを作業用フォルダである[ドキュメント]フォルダで展開します。 次のセットアップ用のバッチファイルを実行します。(ファイルのダブルクリックで可)

$ config_win.bat

デスクトップに生成された「PyLab (64-bit)」アイコンを右クリックして、書籍の内容に従って次のように設定します。

f:id:dr_asa:20170511091150p:plain

サンプルの動作確認

デスクトップの「PyLab (64-bit)」をダブルクリックします。

In [1]: ls
 ドライブ C のボリューム ラベルは TIH0111000A です
 ボリューム シリアル番号は 041E-C592 です

 C:\Users\<YourName>\Documents\ml4se のディレクトリ

2016/12/23  12:27    <DIR>          .
2016/12/23  12:27    <DIR>          ..
2015/06/16  13:13               293 config_centos.sh
2015/06/16  17:45               293 config_mac.sh
2015/08/11  20:21               383 config_win.bat
2015/05/21  06:23            18,047 LICENSE
2015/05/21  06:23                68 README.md
2016/12/23  12:27    <DIR>          scripts

サンプルのフォルダに移動します。

In [2]: cd scripts/
C:\Users\<YourName>\Documents\ml4se\scripts

次のコマンドを実行し、最尤推定法による正規分布の推定結果のサンプルを実行します。

In [3]: run 03-ml_gauss.py

別ウインドウでグラフが表示されます。 f:id:dr_asa:20170511091206p:plain

Nの値が増えるにしたがって、推定結果が正解に近づいているのが分かります。

以上

Raspberry Pi3 でOpenvSwitch+Tremaを動かした~OpenFlow入門~

由緒正しき物理ネットワークの世界では、スイッチやルータなどの通信機器が独立したOSや制御ソフト、ルーティング機能やデータ転送機能もっていて、設定や構成などの作業も手作業で行っていました。ネットワークの構成は物理に依存し、人間によってケーブルを抜き差しするという温かみのある運用を行っていました。私の青春時代は、まさにこれにすべてを費やしていたといっても過言はありません。

SDN(Software-Defined Networking)は、物理的な変更を行わず、ソフトウエアの設定変更のみでネットワーク構成を変更できる、素晴らしいものです。

SDNは通信機器の制御機能データ転送機能を分離し、制御機能をソフトウェアで一元管理することで、どの通信機器にどのような動作をさせるかをソフトウエアで設定できるようになります。

私は、SDNの超初心者ですが、とても楽しそうな世界が果てしなく広がっている気がしてならないので、RaspberryPi3を使ってOpenvSwitchを動かして、Hello Tremaをやってみました。

対象読者

  • OpenFlow超初心者
  • Linuxの基本コマンドが分かる
  • RaspberryPi3がセットアップできる
  • Rubyの文法が分かる

RaspberryPi3のセットアップ

Raspberry Piラズベリーパイ)は、教育用に開発されたシングルボードコンピュータです。ARMプロセッサを搭載し、microUSBで電源を供給し、OSをSDカードにインストールすることで動作します。一言でいってしまえば、約6000円で買うことができる、タバコの箱サイズの小さなパソコンです。秋葉原秋月電子に行けば買えますし、Amazonでポチッとしてもよいでしょう。翌日には届きます。

いくつかのモデルがありますが、最新版のRaspberry Pi3は、CPUが1.2 GHz クアッドコア Cortex-A53 ARMv8 64bit で、2.4GHz帯のIEEE 802.11 b/g/n(1x1:1)に対応したBroadcom BCM43438が搭載されています。f:id:dr_asa:20170511085921j:plain

公式サイトは、以下になります。

Raspberry Pi - Teach, Learn, and Make with Raspberry Pi https://www.raspberrypi.org/

Raspberry Piで利用できるOSは、公式サイトからダウンロードできます。Linuxベースのもの以外にも、Windows10 IoT CoreやRISC OSも利用できます。RISC OS はARMアーキテクチャシステム向けに設計されたOSです。

RaspberryPi3のセットアップは簡単です。公式サイトからダウンロードしたイメージをMicroSDカードに入れて初期セットアップをしてしまえば、すぐに使えます。

詳細な手順については、このあたりを読んでいただければと思います。

Raspberry Piで電子工作をはじめよう! ~まずはRasbian(OS)のセットアップから~ http://codezine.jp/article/detail/9027

RaspberryPiのセットアップが完了し、同一セグメント内の他のPCのターミナルコンソールからアクセスできれば準備は完了です。

OpenvSwitchのインストー

OpenFlowとは、ネットワークをソフトウエアで制御する技術です。ネットワークスイッチの動作を制御する標準プロトコルで、ネットワークの動作をソースコードで記述できます。OpenvSwitchはOpenFlowに対応したソフトウエアスイッチです。 今回は、これをRaspberryPiで動かしたい!まずはここまで頑張ります。

OpenvSwitchの公式サイトは以下の通りです。 http://openvswitch.org/ f:id:dr_asa:20170511090032j:plain

Ubuntu/Debianであればapt-getコマンド、CentOSであえばyumコマンドでインストールできますが、RaspberryPiでは、Rasbian というDebianベースのOSが動いています。そこでソースコードからインストールしていきます。

1. OpenvSwitchのダウンロード

以下のサイトにソースコードが公開されていますので、ダウンロードします。最新版は、2.5.0です。 http://openvswitch.org/download/

$ wget http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
--2016-06-24 22:31:42--  http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
openvswitch.org (openvswitch.org) をDNSに問いあわせています... 69.56.251.103
openvswitch.org (openvswitch.org)|69.56.251.103|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4603077 (4.4M) [application/x-gzip]
`openvswitch-2.5.0.tar.gz' に保存中

openvswitch-2.5.0.t 100%[=====================>]   4.39M  2.50MB/s 時間 1.8s

2016-06-24 22:31:44 (2.50 MB/s) - `openvswitch-2.5.0.tar.gz' へ保存完了 [4603077/4603077]

tarコマンドで解凍します

$ tar xzf openvswitch-2.5.0.tar.gz

2. ビルドの依存関係チェック

OpenvSwitchをビルドするにあたり、必要なパッケージをチェックします。

$ dpkg-checkbuilddeps
dpkg-checkbuilddeps: Unmet build dependencies: graphviz autoconf (>= 2.64) automake (>= 1.10) | automake1.10 debhelper (>= 8) dh-autoreconf libssl-dev libtool python-all (>= 2.7) python-qt4 python-twisted-conch python-zopeinterface

いろいろ必要なようですので、apt-getコマンドでインストールしていきます。

$ sudo apt-get -y install graphviz autoconf automake dh-autoreconf libssl-dev libtool python-all python-qt4 python-twisted-conch python-zopeinterface

また、uuid-runtimeとdkmsも必要になるので、ここでインストールしておきます。

$ sudo apt-get -y install uuid-runtime dkms

これで準備が完了しました。

3. OpenvSwitchのビルド

ソースコードを展開すると、以下のような構成になっています。 RaspberryPiのOSはDebian系なので、INSTALL.Debian.mdを読みながらビルド/インストールします。

$ ls
AUTHORS             INSTALL.Windows.md          Vagrantfile       ofproto
CONTRIBUTING.md     INSTALL.XenServer.md        WHY-OVS.md        ovn
COPYING             INSTALL.md                  acinclude.m4      ovsdb
CodingStyle.md      INSTALL.userspace.md        aclocal.m4        package.m4
DESIGN.md           IntegrationGuide.md         appveyor.yml      python
Documentation       Makefile.am                 boot.sh           rhel
FAQ.md              Makefile.in                 build-aux         selinux
INSTALL.DPDK.md     NEWS                        config.h.in       tests
INSTALL.Debian.md   NOTICE                      configure         third-party
INSTALL.Docker.md   OPENFLOW-1.1+.md            configure.ac      tutorial
INSTALL.Fedora.md   PORTING.md                  datapath          utilities
INSTALL.KVM.md      README-lisp.md              datapath-windows  vswitchd
INSTALL.Libvirt.md  README-native-tunneling.md  debian            vtep
INSTALL.NetBSD.md   README.md                   include           windows
INSTALL.RHEL.md     REPORTING-BUGS.md           lib               xenserver
INSTALL.SELinux.md  SECURITY.md                 m4
INSTALL.SSL.md      TODO.md                     manpages.mk

INSTALL.Debian.mdには、次のような記述があります。もし、めっちゃ急いでるようだったら、テスト無しでもできますよ。と。

-------------
If you are in a big hurry, you can even skip the unit tests:
`DEB_BUILD_OPTIONS='parallel=8 nocheck' fakeroot debian/rules binary`

DEB_BUILD_OPTIONS='nocheck' fakeroot debian/rules binary
-------------

というわけで、次のコマンドを実行してビルドします。

$ DEB_BUILD_OPTIONS='nocheck' fakeroot debian/rules binary

ものすごく、時間がかかります。コーヒーでも飲みながら待ちましょう。

なお、ビルドには、build-essentialとfakerootが必要になるので最新版が入っていない時はいれておきます。2016-05-27-raspbian-jessieは、最新版がすでに入っていたので不要でした。

$ sudo apt-get -y install build-essential fakeroot

4. OpenvSwitchのインストー

ビルドが完了したら、親ディレクトリにdebファイルが生成されています。やったね!

$ pwd
/home/pi/hello_trema

$ ls
openvswitch-2.5.0
openvswitch-2.5.0.tar.gz
openvswitch-common_2.5.0-1_armhf.deb
openvswitch-datapath-dkms_2.5.0-1_all.deb
openvswitch-datapath-source_2.5.0-1_all.deb
openvswitch-dbg_2.5.0-1_armhf.deb
openvswitch-ipsec_2.5.0-1_armhf.deb
openvswitch-pki_2.5.0-1_all.deb
openvswitch-switch_2.5.0-1_armhf.deb
openvswitch-test_2.5.0-1_all.deb
openvswitch-testcontroller_2.5.0-1_armhf.deb
openvswitch-vtep_2.5.0-1_armhf.deb
python-openvswitch_2.5.0-1_all.deb

いよいよインストールをしていきます。

$ sudo dpkg -i openvswitch-common_2.5.0-1_armhf.deb
$ sudo dpkg -i openvswitch-datapath-dkms_2.5.0-1_all.deb
$ sudo dpkg -i openvswitch-switch_2.5.0-1_armhf.deb

エラーが出なければ、これでインストール完了です。

5. OpenvSwitchの起動

インストールしたOpenvSwitchを次のコマンドで起動します。

$ sudo service openvswitch-switch start

Tremaのインストー

SDNはソフトウエアでネットワーク全体を制御するものですが、ソフトウエアである以上開発していくときにフレームワークがあったほうが楽です。Trema(とれま)とは、OpenFlowコントローラを開発するためのオープンソースソフトウエアです。

公式サイトは以下の通りです。 http://trema.github.io/trema/

OpenFlowに関しては、以下を読むことをお勧めします。 私はセレブな主婦なので、書籍を購入しました。 f:id:dr_asa:20170511090126p:plain

Tremaをインストールは次のコマンドを実行します。

$ sudo gem install trema

これで準備はすべて完了です。

Hello Trema

ソフトウエアでネットワークを!と言われてもピンと来なかったので、まずはHello Tremaを動かしてみます。考えても分からないところは手に教えてもらう、という勉強法で今まで生きてきたのでそのスタイルを貫きます。

以下からプロジェクトリポジトリをcloneします。

 $ git clone https://github.com/trema/hello_trema.git

普通のRubyのフォルダ構成なので、少し安心です。

$ ls
CHANGELOG.md     Gemfile.lock  README.md  lib    trema.conf
CONTRIBUTING.md  Guardfile     Rakefile   spec
Gemfile          LICENSE       features   tasks

1. スイッチ設定ファイル作成

trema.confというファイルがスイッチの設定ファイルになります。vswitch で始まる行が1台の仮想スイッチで、datapath_id が仮想スイッチを一意に識別するためのIDです。

datapath_id はMACアドレス的なものらしいので、重複しないように設定する必要があります。OpenFlowの仕様では、この値には64ビットの一意な整数値を割り振ることになっています。

この設定ファイルでは、0xabcというdatapath_id の仮想スイッチを1台定義しているという意味になります。

$ cat trame.conf
vswitch { datapath_id 0xabc }

2 制御コードの実装

制御部分は、Rubyで実装していきます。サンプルプロジェクトのlib/hello_trema.rbを使います。Trema::Controllerクラスを継承して作ります。

# Hello World!
class HelloTrema < Trema::Controller
  def start(_args)
    logger.info 'Trema started.'
  end

  def switch_ready(datapath_id)
    logger.info "Hello #{datapath_id.to_hex}!"
  end
end

このクラスには2つのハンドラがあります。

  • start ハンドラ コントローラの起動イベント発生時に呼び出される

  • switch_ready ハンドラ スイッチがコントローラに接続し、初期化が完了したときに呼び出される

つまり、コントローラが起動したら、コンソールに 「Trema started.」が表示され、コントローラにスイッチが接続したら、「Hello スイッチのdatapath_id!」が表示されるぞ!と。

ほかにもたくさんハンドラがあるので、すこしずつ勉強していきたいと思います。

ハンドラ 説明
switch_disconnected スイッチがコントローラから切断したとき
packet_in Packet In メッセージがコントローラへ到着したとき
flow_removed フローが消えたときのFlow Removedメッセージ到着時

3. Hello Tremaの実行

tremaコマンドを使って実行します。仮想スイッチの設定ファイルは-cオプションで指定します。

$ trema run lib/hello_trema.rb -c trema.conf

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for pi: 
Trema started.
Hello 0xabc!
Hello 0xabc!

う、動いた!

仮想スイッチを複数にしたらどうなんだろう、trema.confで5台ほど設定してみます。

vswitch { datapath_id 0xa01 }
vswitch { datapath_id 0xa02 }
vswitch { datapath_id 0xa03 }
vswitch { datapath_id 0xa04 }
vswitch { datapath_id 0xa05 }

動いた!!

 $ trema run lib/hello_trema.rb -c trema.conf
Trema started.
Hello 0xa05!
Hello 0xa03!
Hello 0xa04!
Hello 0xa01!
Hello 0xa02!

ありえないほど、地味ですね。どうしよう。 しかし、言葉では表現できないほど楽しい。 f:id:dr_asa:20170511090208j:plain

まとめ

RaspberryPi3をつかって、Trema+OpenvSwitchが動く環境ができあがりました。 ビルドでは、いろいろなエラーが出て苦戦しましたが、Tremaのおきて「最後まで絶対に諦めずやりぬく心」があればできるな!ということが分かりました。

実は、RasbperryPiではなく、Ubuntuの普通のサーバで「OpenFlow実践入門」を読みながら一通り動かしているのですが、スイッチ監視ツール、インテリジェント・パッチパネル、ラーニングスイッチなど動きはしたものの理解ができているか、と言われれば理解は出来ていない部分も多々です。ネットワーク技術とRubyの実装がどっちも分かってないと、果てしなくアレなので、時間をかけて勉強していきたいと思います。

おわり

「プログラマのためのGoogle Cloud Platform入門」が発売されます。

翔泳社より、表題の書籍が出版されることになりました。
監修であり共著者の中井さんを始めとして、執筆にご協力いただいた方々に改めてお礼を申し上げます。

本書では、Google Compute Engine、Google Container Engine、Google App Engineを中心としたGCPの主要サービスを用いて、最適なアプリケーションアーキテクチャーを実現する方法を具体的なサンプルアプリケーションを使って説明しています。

特に、GCPを利用する上で理解しておきたいインフラの基礎技術についても解説が加えられていますので、GCPを通してインフラ技術の基礎を習得したいという方におすすめな入門書となっています。

f:id:dr_asa:20170423230137j:plain]

Amazon CAPTCHA


技術の進化はとても早く、流行とともに忘れ去られるものもたくさんあります。
しかし、時が経っても大きく変わらないものもあります。

本書にまとめた、インフラ技術の基礎は
私が、新卒のころに担当していたオンプレミスの大規模基盤構築プロジェクトで
先輩エンジニアの皆さんから教えていただいたことをベースに書いています。

非常に厳しいプロジェクトでしたが、とりわけ出来の悪かった私に
基礎をていねいに体系立てて指導してくださった先輩方のおかげで、今の私があると思っています。



私は、出産と子育てで約8年間もの長い間、IT業界からは離れていましたが、
2016年の中頃、子育てがひと段落したので、ふたたびSIに携わりたいと思い、現職につきました。

私が育児で現場を離れている間、クラウドや仮想化、大規模分散システムなど
インフラストラクチャを構成する技術要素は大きく変わりました。

そんな中、オンプレミスで止まってしまっている私の知識と経験を十分知ったうえで
「一緒に本を書こう!」と声をかけてくださった、中井さんへの感謝は、、、、言葉にはできないものがあります。

いかに本質的なものを学ぶことが大事か、を
中井さんの圧倒的に高い技術力をベースにして、たくさん教えていただきました。




クビを覚悟のうえで。

私は、ものづくりが好きです。

刻々と変化する時代に合わせ、顧客のビジネスニーズに応じて、顧客と一緒にシステムを作る、というのは
非常にエキサイティングな仕事です。
それが大規模な社会基盤であったり、ミッションクリティカルであるほど、やりがいも大きくなるものです。
再就職にあたり、プライムベンダーに身を置いたのは、顧客に近い位置でものづくりに携わりたかったからです。

しかし、今日のSIの現状は、エンジニアが楽しんで、より良いものをつくろう!という
モチベーションで仕事ができない環境が多いのではないかと感じています。

そのような現状を打破し
新しい技術や開発手法にチャレンジして、イノベーションを起こすには
エンジニア自らがさまざまなことを学び続け、環境を変える以外に選択肢はないのかなと思っています。

しかし、ただやみくもに技術トレンドを追うだけではいけません。
型破りな人間になるためには、破るべき型がなになのかを知らなければなりません。

本書は、そんな若いエンジニアの皆さんのはじめの一歩を踏み出す手助けになればいいな!と思って書きました。
そして、またいつかエンジニアになりたいな、と思っている私自身にむけても。

おわり



www.youtube.com

Share My World (Mary J. Blige) 1997.04.22

Share my world
Don't you leave
Promise I'll be here
Whenever you need me near

TensorFlowでAIとピアノ連弾してみた話

音楽は良いですね。
音楽は、お酒との相性が抜群です。

というわけで、、、、
TensorFlow/Magentaを使った
A.I.Duet」でコンピュータとピアノ連弾する方法をご紹介します。

おことわり
人工知能が音楽を生成するというと、
何かしらの知性や才能のようなものが宿って
そこから生んでいるという感じですが、

人工知能にとって、音楽は「音のデータの連なり」です。
そして、「音楽を生成する」ということは
「それまでの音のデータの連なりからして、適切な次の音を予測する」ということです。
from 同僚の@icoxfog417 先生の詩集より

TensorFlow/Magentaとは

機械学習とは、データが持つ数学的な構造をコンピュータによる計算で見つけ出すしくみのことです。
機械学習の中でも、特に注目を集めているのが、ディープラーニング(深層学習)と呼ばれているものです。

アートの世界での機械学習の応用も、多くはこのディープラーニングの技術を使っています。

TensorFlowは、米Google社がオープンソースとして公開してるディープラーニング対応ライブラリです。
TensorFlow/Magentaは、ディープラーニングを研究するGoogle人工知能部門である「Google Brain」による
ニューラルネットワークを使って、アートを生成するプロジェクトです。
f:id:dr_asa:20170314124427p:plain


オープンソースソフトウェアで、Githubで開発が進められています。
Magenta

A.I.Duetとは

パソコンのキーボード(または対応するMIDIキーボード)でメロディーを奏でると
コンピューターがデュエット演奏してくれるWebアプリです。

TensorflowのMagentaをつかい、事前にプログラムされたアルゴリズムではなく、
既存のメロディーを使った訓練を受け、そこで得た知識を使ってレスポンスを返します。

これを動かすDockerイメージをビルドしたので、遊んでみる手順を簡単に紹介します。

1.Dockerの実行環境構築

ここでは、Google Cloud Platformの仮想マシンでDockerを動かす手順を説明します。

まず、こちらの手順にしたがって、アカウント登録をしてください。
book.mynavi.jp


Cloud Shellとは、GCPのサービスをブラウザから操作できるツールです。
Cloud Consoleの右上のコンソールアイコンをクリックしてください。

f:id:dr_asa:20170314130309j:plain:w400


Cloud Shellで、次のコマンドを実行します。GCPの東京リージョンに、「n1-standard-1」サイズの仮想インスタンスが立ち上がります。

$ GCP_PROJECT_ID=$(gcloud config list project --format "value(core.project)")

$ docker-machine create --driver google \
  --google-project $GCP_PROJECT_ID \
  --google-zone asia-northeast1-a \
  --google-machine-type n1-standard-1 \
  --google-machine-image https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20161109 \
  magenta


これで、Dockerの実行環境が構築できました。

なお、作成した仮想マシンSSHするときは、Cloud Consoleで[SSH]ボタンをクリックします。

f:id:dr_asa:20170314130710p:plain:w400


※なお、Dockerがうごく環境であれば、クライアントPCでもAWSでもAzureでも大丈夫です。
※Dockerって何?、、、そんなあなたは、「プログラマのためのDocker教科書」を図書館で借りてください!


2.「A.I.Duet」のコンテナを動かそう

Dockerが起動している環境にSSHで接続して、次のコマンドを実行します。

$ sudo docker run -it -p 80:8080 --rm --name magenta asashiho/ai-duet

3.「A.I.Duet」でピアノを弾こう

クライアントのブラウザから以下のURLにアクセスします。

http://<Dockerの動いているマシンのIPアドレス>/

こんな感じです。
www.youtube.com


おわりに

Googleらしい、とても面白い取り組みで、TensorFlow/Magentaすごく注目しています。



このMagentaを使ってMIDIデータから音楽を生成するしくみやノウハウなどをまとめた
Signalというタイトルの同人誌を出します。
NN/RNN/LSTMなどの理論や、実際にMagentaを使って音楽を生成する手順などを約40ページでまとめています。
理論は、同僚で共著の@icoxfog417 先生がしっかり書いて、それを私が読んで理解して動かすという感じです。
(想定読者が私になっているので、かなり易しく書かれています)
(私が書いた部分も、彼がきちんと監修してくれているので、ぜんぜん大丈夫です!)

f:id:dr_asa:20170313022558j:plain:w400


4/9(日)に秋葉原で開催される「技術書典2」で頒布しますので、ブース「き-03」にぜひ~!
techbookfest.org

詳しくは、まだ秘密ですが、、、、、
こんな感じです!
www.youtube.com


会場では「littleBits」という簡単な電子工作キットを使って演奏を楽しめます~~~
jp.littlebits.com



おわり