オンラインもくもく開催報告:IBM CloudとARでセンサデータを可視化してみよう 2020/08/28

ゲストセッション

オンラインや対面で勉強会を行う際には、すぐに本題に入ることが多いですが、今回はIBM Cloudに限定しないセッションを設けてみようと考えまして、新潟県新潟市の開志専門職大学情報学部 PANN YU MON 先生にご登壇いただき、Jupyter Notebook上で新潟県内の大学情報などを地図にマッピングして表示するサンプルについてお話いただきました。

講演資料 https://app.box.com/s/6iaqsui0oomqosb39qep1pobds6ojxly (資料内のデータはサンプルとのことです。)

[録画]


【オンラインもくもく】IBM CloudとARでセンサデータを可視化してみよう ゲストセッション 開志専門職大学 PANN YU MON 先生

Jupyter Notebookは、IBM CloudのWatson Studioで無料のライト・アカウントから利用できますので、結果としてIBM Cloud にも応用できるノウハウを学ぶことができました。

関連ブックマーク

情報学部 | 【公式】開志専門職大学

もくもく会報告

8月28日のもくもく会では、IBM Cloudと、VR/ARフレームワークの「A-Frame」を組み合わせて、センサーの測定値をARを使って可視化するサンプルの実装手順をテーマとしました。スマートフォンやPCでARマーカーを認識させると、センサー測定値に合わせてARコンテンツが表示されるというものです。センサーの値は専門家であれば容易に理解できますが、専門家ではない人であってもすぐに状況を理解できるように、センサーで測定した値(=センシングデータ)を、色や図形で可視化することについて、実装手順を解説した教材を作成し、もくもく会で実装する内容としました。IoTとARと情報の可視化をミックスさせたような内容です。

なお実物のセンサーがなくてもAR側のコンテンツ表示を確認できるように、Watson IoTの仮想センサーを活用している点がポイントです。Watson IoTのquickstartで使用可能な仮想センサーを用いることで、今回のようにセンシングデータを活用したアプリケーションを試すことが容易にできます。

[教材] qiita.com

[録画]


【オンラインもくもく】IBM CloudとARでセンサデータを可視化してみよう もくもく会セッション

もくもく会参加者の皆様にて、実際に動かすところまで確認できました。今回のくらいのボリュームが、オンラインもくもく会としてちょうど良いようです。

IBM User Group Conference 2020 運営記

オンライン開催

今までは、年2回やっていましたIBM Cloudの勉強会を、今年は、IBM CloudとIBMミドルウェアIBM発のオープンソースソフトウェアなどを対象に、関連するコミュニティと共同で2日間の勉強会を開催しました。COVID-19(新型コロナウイルス)と多くの方々がそれぞれの方法で日々戦うなか、オンライン開催として企画し、2020年6月25日と26日の2日間で開催し、無事に閉幕しました。ご協力いただき、誠にありがとうございました。次回開催の際にもよろしくお願いいたします。

録画した基調講演と各ブレイクアウトセッションの配信

当日、各スタッフが録画した基調講演と各ブレイクアウトセッションは、スピーカー切り替えなどシーンを削除し、公開しております。

再生リスト

www.youtube.com

公開中の資料

各スピーカーの方々が公開してくださったものは、下記からご覧になることができます。有料イベントではないため、資料が公開されていないセッションがありますのでご注意ください。

IBM User Group Conference 2020 - 資料一覧 - connpass

Twitterへの投稿

各参加者やスタッフが視聴したセッションについてTwitterに投稿したものを、下記にまとめてあります。

1日目 togetter.com

2日目 togetter.com

準備・運営

開催のきっかけ

5月上旬の「Think Digital Event Experience」の後に、日本でも最新のトレンドなどを紹介できるセミナーやりたい的な話が盛り上がりまして、各コミュニティ共同で「IBM User Group Conference」というイベント用コミュニティを立ち上げました。設立に参加したコミュニティは次のとおりです。

  • Japan IBM Middleware User Community (JIMUC) 

  • IBM Cloud Users Group (BMXUG)

  • Kabanero Meetup

  • Node-RED UG

  • TJBot Fan

  • IBM見習い隊

  • 水曜ワトソンカフェ

準備

日本アイ・ビー・エムデベロッパーアドボケイトの方々のサポートをいただきつつ、上記の各コミュニティ関係者が、それぞれの仕事の合間を縫って、基調講演と各ブレイクアウトセッションのスピーカー手配や登壇内容、資料作成、進行資料のたたき台作成、集客などを分担し、進めていきました。運営事務局のメンバーは、それぞれがイベント運営経験を持つデベロッパーやシステムエンジニアプログラマーのため、ある意味楽だったわけです。

またオンライン開催でしたが、今回は予算がなかったため、Zoom 配信環境などは、各スタッフが個人的あるいは所属企業で契約している環境を持ち寄りましたので、手作りのコミュニティイベントらしさがあったと思います。

当日やっていたこと

1日目基調講演(Keynote)の共同スピーカー

「AI、IoT、量子コンピュータクラウド、私たちは今何を学んでおけば良いのか?」と題しまして、ワンフットシーバス田中さんとの掛け合いで進めていきました。田中さんには、ProtoOut Studio(プロトアウトスタジオ)のご経験から社会人向けの学び視点、私からは4月に開志専門職大学に着任しましたので、それまでのSIer経験から、就職などで現場に関わっていく大学生にどのようなことを学んで欲しいか話させていただきました。

speakerdeck.com

途中、このような評価もいただきましたので、重要なことを伝えることができたかと思います。

1日目トラック2のオンライン司会と配信担当

f:id:kolinz:20200710162104p:plain

Watson Discoveryは、論文などを読み込ませ照会することに強いので、大学や研究機関で役立っていますし、学生向けプログラミングコンテストの「Master the Mainframe」や スポンサーの1つとして国連が関わっているグローバルコンペティション「Call for Code」など、これからプログラマーを目指す学生にとって有益なブレイクアウトセッションが集まりました。 Master the Mainframeは高校生以上、Call for Code は18歳以上の方がそれぞれ参加できます。 Master the Mainframeで入賞することで就職で有利になったり、個人的には、2019年のCall for Code で開発したAIアプリが日本におけるTop3ソリューションに滑り込むことが出来た結果、現在の仕事につながっています。

2日トラック1のソーシャルメディア担当

2日目は、準備段階でトラック1にAI・IoT関連、トラック2にコンテナ・運用関連をまとめました。2日目はハンズオンサポートしつつ、トラック1の各ブレイクアウトセッションについて、Twitterに投稿する形で進めていきました。 特に最終セッションの「IBMが考えていること ー新しいコミュニティーIBM Community Japan"の発足ー」は、個人的な思い出になりますが、2015年に日本GUIDE/SHARE委員会の活動で研究発表していたことから、本イベントの注目セッションの1つとして集客に活用していたという裏があります。

ハンズオンサポート

こちらが当日しようしたハンズオン資料になります。

資料URL IoTの基本ハンズオン 2020年5月版 - Speaker Deck

動画URL https://www.youtube.com/watch?v=-VLCSdjZvSw&list=PLziEfUdVSWb9MNDcUF6pEPJ50o89MGPKi

まとめ

運営事務局として、スピーカーとして、どちらでもミスはありましたが、それは次回の修正課題として、イベント自体は無事に閉幕することができたことが大変喜ばしく、皆様に感謝しております。次も開催しますので、ご参加お待ちしております。できれば、スピーカーとしてご登壇をお願いいたします。

増えているOps的なIT系ビジネス用語(Xopsでまとめた方が楽)

DevOpsに端を発した、xxxxOps的なビジネス用語

とりあえず、開発手法ではありません。ウォーターフォール型開発、アジャイル型開発、日々コツコツやっている業務などで共通して使っているビジネス用語なので、何をさすかはそれぞれ意味があります。

Ops

いわゆるシステム運用・保守のことを指しているのですが、最近は業務全般の効率向上も含まれるようになりつつあります。

Dev、開発が入っているもの

DevOps

とりあえず、以前書いた記事でも。

前編 https://gihyo.jp/dev/serial/01/information-share-mechanism/0001

後編 https://gihyo.jp/dev/serial/01/information-share-mechanism/0002

DevOpsは、営業チーム、開発チーム、運用チームで、受注し開発、納品するシステムについて、あらゆる情報(営業活動、開発のドキュメントや進捗、運用の計画やノウハウ、トラブルシューティング、追加機能のリクエスト情報等)を記述しまとめる文書共有の場を作ることから始めましょう。

ツールを使うことが重要です。

Confluence が国内外の大手企業からスタートアップまで使用されており著名です。Confluenceは無料で開始できるクラウド版、プライベートクラウド環境やオンプレミス環境で構築できるサーバー版、データセンター版があります。

DevSecOps

開発するアプリケーションにおける組み込み型のセキュリティ、組み込みシステムではなく、アプリケーションに組み込むタイプのセキュリティ、たとえばソースコード脆弱性チェック、暗号化、認証対策、SQLインジェクションXSS(クロスサイトスクリプティング)などの対策をアプリケーション開発全体に適用すること。

 

DevOpsにより開発したアプリケーションについてリポジトリ上で、ソースコード脆弱性チェックが手軽に始めることができますので、DevSecOpsは、小さく始めることができます。(WhiteSource Bolt - Free developer tool for open source security)

開発よりも、運用との絡みがメインのもの

AIOps

自然言語処理音声認識機械学習(深層学習を含む)など、いわゆるAI技術を用いて、業務を自動化したり、一部をAI技術で作ったAIアプリに代替させて業務効率を上げること。

たとえば、Jira Service DeskとIBM Watson (Assitant / Discovery)を組み合わせることで、ヘルプデスクへの問い合わせ対応について、一次対応をAIに代替させることができますし、Chatシステムと組み合わせることで、サーバーの起動や再起動をAIの支援を得て実行することも可能です。どれもAI、人間の作業の一部を代行しています。

BizOps

Business Operationsの略称。幾つか意味があって、わかりやすいものとして、企業の成長の円滑に後押しするための意思決定支援の仕組みと考えられます。

BizOpsチームは、企業内のすべてのデータにアクセスし、データを分析し、意思決定支援の仕組みを用いて、日々の業務支援や経営者の意思決定をサポートすることが目的です。つまり、徹底したデータに基づく経営を支援するための取り組みが、BizOpsと言えます。

引用元 https://hiperpool.com/blog/what-is-bizops

ChatOps

Chat Operationsの略称。Chatシステムを用いて、様々なシステムとChatシステムを連携させて、特定のスペシャルなエンジニアに依存しないように運用や業務を改善したり効率を向上する取り組み。

たとえば、メモリリークなど、サーバーを再起動させれば済むような場合に、Chatシステム上で、「〇〇〇のサーバーを5分後に再起動して」とメッセージを投稿すると、ChatシステムがAPIを用いて指定のサーバーを再起動といった処理が行われ、サーバー管理者が席にいなくても対処できるようになります。サーバー管理者も人間なので、病院にいったり、子供を保育園に迎えにいくことだってあります。

DXOps
Digital transformation Operationsの略称。DX関係で見かけるようになった。おそらくなんとかOps系で一番ふわっとしている。DXにより組織に、ITがより深く浸透することで、システム運用や業務効率を向上させることを指しているものと考えられます。(筆者の推測ですので悪しからず)
メールとExcelはIT活用とは言いません!神Excelは以ての外ではっきり言って無駄もいいところで、Excel表計算や小規模なデータの分析や予測、可視化に使うものです。
Digital transformation、つまりDX自体、2004年にスウェーデンウメオ大学のエリック・ストルターマン教授が「ITの浸透が、人々の生活をあらゆる面でより良い方向に変化させる」と提唱したことが始まり。
引用元 http://www8.informatik.umu.se/~acroon/Publikationer%20Anna/Stolterman.pdf
FuncOps

Functional Operationsの略称。未確認情報。

引用元 https://robhirschfeld.com/2015/03/16/functional-ops-vbrownbag/

NetOps

Network Operationsの略称。具体的な内容は調査中。

引用元 https://techtarget.itmedia.co.jp/tt/news/1908/07/news05.html

SecOps

Security Operations の略称。Jira Service DeskやService Nowといったヘルプデスクシステムを用いて、脆弱性情報やバグといったセキュリティ問題についてタスクを起票し、運用チームと共有することで、すばやく見極め、優先順位をつけ、修復などを行う。

通常、セキュリティチームと運用・保守チームは分かれていることが多いので、双方で情報共有し迅速に進めましょうということ。

AIOpsと関連し、AI技術を用いて、セキュリティ運用を効率化しようという試みもされている。

DevSecOpsと違って、システム全体を対象にしていることに注意。

ValueOps

小さく始めて、ビジネスとITの両方から価値を見つけ、改善を繰り返すこと。システム運用のみならず、業務効率向上にも使えます。(引用元 https://it.impress.co.jp/articles/-/12433)

まとめ

Xops

なんとかOpsがたくさん増えているので、まとめて、XOps(Cross Ops)で良いと思っている次第。運用情報学とかなんとか学問に出来そうな気がしています。

番外

GovOps

The California Government Operations Agencyのことらしい。

Oops!

やっちまった!的な意味です。この記事自体、ネタなので、Oops! 。

 

自動化や業務効率向上で仕事が減ったらどうするか?

他の業務もできるように多能工を目指すか、新しい仕事やビジネスを発掘していく「Emerging Business」に取り組むか、どちらかが考えられます。Emerging Businessは、新規事業アイディア100本ノックやって、3%くらいの確率で新規事業が生まれれば大当たり。自分の場合は、200個くらい考えて残ったのが2つ。20代の頃のお話なので、ベテランの方々が実行すれば、もっと多くの新規事業ができるはず。

やってみた:IBM Developer Develop a machine learning IoT app with Node-RED and TensorFlow.js

元記事

IBM Develoeprで公開されている「An easy, low-code way to incorporate AI capabilities into your devices – IBM Developer」をやってみました。 Raspberry Pi でNode-REDを用いて物体検出ができるはずですが.....。

結果

結果から言いますと、Raspberry Pi にカメラモジュールを接続して使用する場合、Readmeには、Raspberry Pi カメラモジュールを使えることが書かれていますが、Github経由で配布される以下のRaspberry Pi 向けのサンプルは動きませんでした。

github.com

原因として考えられるものとして、Node-REDでRaspberry Pi のカメラモジュールを呼び出す「node-red-contrib-camerapi」ノードが直近2年間で更新されていないことが考えられます。 「node-red-contrib-camerapi」ノードの代わりの手段を実装することで動作させることが可能です。

配布されているサンプルを使用した場合

カメラ部分に「node-red-contrib-camerapi」ノードを使用します。エラーが起きます。エラー情報から見るに、「node-red-contrib-camerapi」ノードに問題があると思われます。

f:id:kolinz:20200503162158p:plain
Raspberry Pi で、Node-REDとTensorflow.js でobject detectionエラー

サンプルの一部を改修して使えるようにする

「node-red-contrib-camerapi」ノードの代わりに、execノード、file in ノード、switchノードで代替した場合

エラーが解決されました。サンプルとの違いは、「node-red-contrib-camerapi」ノードの代わりに、execノード、file in ノード、switchノードを使用しています。

f:id:kolinz:20200503161911p:plain
Raspberry Pi で、Node-REDとTensorflow.js でobject detection

代替手段で実装した場合のNode-RED フロー
[{"id":"6510a613.c5fc28","type":"tab","label":"Raspi object detection flow","disabled":false,"info":""},{"id":"b2c20e37.87fb2","type":"debug","z":"6510a613.c5fc28","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":590,"y":200,"wires":[]},{"id":"6f9d9422.b0711c","type":"function","z":"6510a613.c5fc28","name":"process prediction","func":"let a = []\n\nfor (let c in msg.classes) {\n    a.push(`${msg.classes[c]} ${c}`)\n}\n\nmsg.payload = a.join(' and ')\n\nreturn msg;","outputs":1,"noerr":0,"x":630,"y":240,"wires":[["671c2ae5.6f2da4"]]},{"id":"1dd0defe.30c8a1","type":"file in","z":"6510a613.c5fc28","name":"image file","filename":"/home/pi/raspi-camera-image.jpg","format":"","chunk":false,"sendError":false,"encoding":"none","x":359.5,"y":173,"wires":[["37261ea3.c14952"]]},{"id":"7b8ac4d5.e4bf5c","type":"inject","z":"6510a613.c5fc28","name":"take photo","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":80,"wires":[["ce750bf4.348ee8"]]},{"id":"37261ea3.c14952","type":"change","z":"6510a613.c5fc28","name":"Set Headers","rules":[{"t":"set","p":"headers","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"headers.content-type","pt":"msg","to":"image/jpeg","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":150,"y":240,"wires":[["6152a65c.9b6238","19b4e4d7.9df4ab"]]},{"id":"6152a65c.9b6238","type":"image","z":"6510a613.c5fc28","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":false,"outputs":0,"x":299.5,"y":373,"wires":[]},{"id":"671c2ae5.6f2da4","type":"debug","z":"6510a613.c5fc28","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":610,"y":300,"wires":[]},{"id":"ce750bf4.348ee8","type":"exec","z":"6510a613.c5fc28","command":"raspistill -o /home/pi/raspi-camera-image.jpg -rot 90 -w 320 -h 240","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"raspistill","x":300,"y":80,"wires":[["1dd0defe.30c8a1"],[],[]]},{"id":"19b4e4d7.9df4ab","type":"tfjs-object-detection","z":"6510a613.c5fc28","name":"","modelUrl":"","x":390,"y":240,"wires":[["6f9d9422.b0711c","b2c20e37.87fb2"]]}]

上記をNode-REDでインポート後、「tfjs object detection」ノードの直下に「Model is Ready」と表示されたら、inject ノードのボタンをクリックしてobject detectionを実施できます。

Raspberry Pi 上のNode-REDに、「tfjs object detection」ノードを導入する手順

Raspberry Pi にNode-REDインストールしていない場合

OSはRaspbianを前提として、Raspberry Piで実行する : Node-RED日本ユーザ会 を参考に進めます。

Raspberry Pi に、「tfjs object detection」ノードを導入する

元記事で紹介されているサンプルのReadmeをもとに進めます。

リポジトリからクローン

$ git clone https://github.com/IBM/node-red-tensorflowjs

クローン先のパスを確認

$ cd node-red-tensorflowjs/
$ pwd
/home/pi/node-red-tensorflowjs

「tfjs-object-detection」ノードのインストール インストール時に、リポジトリをクローンした先のパスを含める必要があります。

$ cd ~/.node-red
$ npm install /home/pi/node-red-tensorflowjs/node-red-contrib-tfjs-object-detection

Raspberry Pi のカメラモジュールで撮影した画像をファイル確認するために、「image-output」ノードも追加します。

npm install node-red-contrib-image-output

Node-REDを再起動

sudo systemctl restart nodered.service

代替手段で実装した場合のNode-RED フローを、Raspberry Pi 上のNode-REDにインポートします。

「tfjs-object-detection」ノードで、model URL を入力しない場合は、標準モデルとして、オープンソースのcoco-ssd モデルを使用するようです。

まとめ

Tensorflow.js を用いて、Node-REDでobject detection(物体検出)を行うことができました。

開催レポート : Code and Response Day Online #1

昨日、2020年4月10日(金)に、Code and Response Day Online #1と題して、新型コロナウイルス対策と気候変動対策が今年のテーマとなった、2020 Call for Code Global Challenge の説明会と、クラウドハンズオンを開催しました。

f:id:kolinz:20200411054310p:plain 

開催結果
  • 参加方法 : Webexによるオンライン参加。各自でインターネット接続できる場所からの参加。
  • 参加者 : 12名 >>  目視で確認した最大人数になります。申し込み不要で開催ため、これより多かったかもしれません
  • 時間:18:00~20:00
  • 使用したオンライン開催ツール : Cisco Webex Meeting 無料プラン
開催内容
  • 第一部 : 2020 Call for Code Global Challenge 参加方法について説明会
    Call for Codeは、自然災害に打ち勝ち、防災や被災した人々の健康を改善するアプリやシステムを作成するグローバル規模のコンペティションです。公式ホームページがすべて英語のため、一昨年や昨年参加した経験なども盛り込んで、以下の日本語の解説資料を作成し、資料を画面共有でお見せしつつお話しました。

  • 第二部 IBM Cloud ハンズオン
    Call for Code の参加ルールに、IBM Cloudの使用があります。そこで、IBM Cloudをクレジットカード不要で無料で使用できる「IBM Cloud ライト・アカウント」を用いて、ローコード開発環境の「Node-RED」を活用し、架空のサンプルデータを用いて「サージカルマスクの在庫情報を共有する地図サービス」の構築についてお話しました。コピー&ペーストで実装できるように手順を整理してありますので、高校生や大学生のプログラミング入門的な位置づけとしても活用することができます。
    Call for Codeでは、新型コロナウイルス(COVID-19)と気候変動対策が、2020年のテーマのため、地図サービス構築はどちらのテーマとも親和性が高く、様々な応用が利きます。

  • 第二部 IBM Cloud ハンズオンの教材
    対象 : Webブラウザ(Chrome またはFirefoxMicrosoft Edgeのいずれか)の操作ができる人。

    qiita.com
    qiita.com

オンライン開催中の様子

下図は、第二部のIBM Cloud ハンズオンで作成する見本を、画面共有機能を用いてお見せしているところです。

f:id:kolinz:20200411061410p:plain

画面を共有してハンズオンを進めていきます。ただ参加者の様子が見えないので、時々チャット機能を使って、様子を確認する必要があります。

もしつまづいているようであれば、参加者に画面を共有していただき、サポートすることも可能です。

まとめ

2020年は、新型コロナウイルスの影響で働き方や家庭環境など様々なチェンジを求められる年になりそうです。Call for Code の締め切りは、7月末日になりますので、それまでは今回と同様の説明会やハンズオンを開催していきます。

参考情報

 

Rancher環境の構築

Rnacherに使用する環境

  • Ubuntu 16.04 Server
  • sudoが使えるユーザー名:user
  • 固定IP:192.168.56.20

Rancherに必要なDockerをインストール

Rancherの実行に必要なDockerのバージョンは、17.03.2 になっています。Rancher 2.x のNode Requirements を確認しています。Dockerインストール後、再起動します。

SSH接続してDockerをインストール

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -sc) \
       stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce=17.03.2~ce-0~ubuntu-xenial
$ sudo usermod -aG docker user
$ sudo reboot

再び、SSH接続

$ sudo apt-mark hold docker-ce
$ sudo apt-get update -y
$ sudo apt-get upgrade -y

Rancherをシングルノードで導入

Rancher用のコンテナを取得し、Rancherを起動します。

$ docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:latest

Rancherセットアップ

Webブラウザで、https://固定IP にアクセスします。

f:id:kolinz:20190131023255p:plain
Rancher、最初のセットアップ。adminユーザーのパスワードを変更。

表示されているIPでRancher Serverを使用するようにします。 f:id:kolinz:20190131023444p:plain

Rancherにadmin(管理者)パスワードでログインし、その後ログアウトし、Rancherを日本語化します。 f:id:kolinz:20190131023615p:plain

Rancherの画面が日本語化されていることを確認できました。 f:id:kolinz:20190131023725p:plain

クラスターを追加」をクリックして、Kubernetes環境に取り組みます。 f:id:kolinz:20190131023927p:plain

Jupyter Notebookの自分用環境をIBM Cloud IaaS で用意する。

$ sudo nano jupyter-install.sh

#!/bin/bash
sudo apt-get -y update
sudo apt-get -y upgrade
sudo timedatectl set-timezone Asia/Tokyo
sudo apt-get install -y build-essential python3-dev python3-setuptools libfreetype6-dev
ln -s /usr/include/freetype2/ft2build.h /usr/include/
sudo easy_install3 pip
sudo pip install numpy scipy matplotlib seaborn scikit-learn pandas psycopg2 ipython-sql pymysql
sudo pip install jupyter
cd
jupyter notebook --generate-config
date
sudo apt-get install -y iproute2
ip a
echo "Success"

$ sudo chmod a+x jupyter-install.sh $ ./jupyter-install.sh $ cp ~/.jupyter/jupyter_notebook_config.py ~/.jupyter/jupyter_notebook_config.py.origin $ vi ~/.jupyter/jupyter_notebook_config.py

#c.NotebookApp.allow_remote_access = False
c.NotebookApp.allow_remote_access = True

#c.NotebookApp.ip = 'localhost'
c.NotebookApp.ip = '*'

#c.NotebookApp.open_browser = True
c.NotebookApp.open_browser = Flase

#c.NotebookApp.port = 8888
c.NotebookApp.port = 8888

#c.NotebookApp.token = '<generated>'
c.NotebookApp.token = '任意の英数字' 
例 c.NotebookApp.token = 'zaq12wsx' 

$ nohup jupyter notebook &

$ sudo tail -f ~/nohup.out

Webブラウザで、サーバーのIPアドレス:8888 でアクセス。Tokenにc.NotebookApp.tokenで指定した文字列を入力してログイン。