よしたく blog

ほぼ週刊で記事を書いています

MRを体感しよう / Osaka HoloLens "2" ハッカソン2020に参加してきた

f:id:yoshitaku_jp:20200214161858j:plain
MBSに入ると出迎えてくれる「らいよんチャン

XR系といえば、仮想現実であるVRはエンタメ領域で活躍し、拡張現実であるARはPokemonGOなどが有名となり徐々にですが日常生活に取り込まれています。その中でもあまり聞かないMRとは、複合現実という意味を持ちカメラやセンサーを利用することで仮想現実よりも現実世界により近づけるものになっています。以前、VRはサッカースタジアムの中で選手となり観客から歓声を浴びる映像体験をできました。しかし、普通にテレビで見るよりかは没入できましたがやはり「映像」という印象を抱いてしまいました。MRになれば、実際のスタジアムの中に立ち観客席に人がいる映像を見ることが出来るのではないかと思います。

HoloLensはありがたいことに仕事の中で触る機会がありました。当たり前ですが、仕事の効率化を促進する利用で触ったこともあり、自分の中ではエンタメ領域でどんな事ができるのか試してみたい思いもありました。そんな中、今回のハッカソンを見つけたので東京から大阪と大移動ですが思い切って参加してみました。

osaka-driven-dev.connpass.com

f:id:yoshitaku_jp:20200214161534j:plain
たくさんのHoloLens2

イベント概要

イベントの概要はconnpassの内容を引用させていただきます。

所属を超えてグループで課題解決をしながら、HoloLens "2"で動くMRアプリの開発を体験するイベントです。 開発スキルのない方でも、おもしろいアイデアを提供したり、開発者と一緒にアイデアを出しながら、 プロジェクトをまとめたりという役割で参加することができます。 開発スキルのある方は、開発スキルを向上させたり、面白いエンジニアと出会える機会になります。 技術資料やスタッフのサポートがあるので、 「ハッカソンに興味はあったけど、敷居が高そうなので参加をためらっていた」 「いつか参加してみたいと思っていたものの、技術的にレベルが高い人向けのイベントだと思っていた」 と感じていた方や 「XRに興味や関心はあるけれど、触れたことのない」というHoloLens開発未経験の初心者や学生の方もお気軽にご参加いただけるイベントです。

今まで半日レベルのゆるいハッカソンに参加したことはあるのですが、2日がかりをフルに使うものは初めてでした。まず終わった直後の第一声はで「疲れた(良い意味)」です。というのも、普段から仕事をされている方なら経験するであろう、自分たちでどういうものを作るか考え、実装の方法を検討し開発、最後はプレゼンをするところまでをおこないましたが、この内容が2日間に凝縮されると頭のCPUとメモリを常時フル回転させるようなものでして、懇親会に参加する余裕なんて全くありませんでした(笑)。イベント全体としては、スタッフの方々は親切でして心強かったです。普段からHoloLensを触っているわけではないのでもっと頼ればよかったともったいない気持ちにもなりました。

f:id:yoshitaku_jp:20200214161543j:plain
大きいステージ

f:id:yoshitaku_jp:20200214161548j:plain
会場から見た作業場所

やったこと / 難しいと感じたこと

チームビルド

イベント全体を時系列で振り返ります。まずは11時にチーム作成をおこなうためのアイデア発表がありました。やってみたいことを考えてきた人が1分で発表しメンバーを募ります。ここで技術者が2名以上にならないとチーム成立とならず、案がなくなるか1人チームとしての活動を余儀なくされます。次の一覧が上がっていた案の自分メモですが、エンタメがやりたい自分はタワーディフェンスに惹かれていたのですがエンジニアが集まらず一人チームに…CSIや目からビームも面白そうなのですが、これまたチームとしては成立せずでした。興味があって参加しましたが、自分が技術的に貢献できないハッカソンでのモチベーション維持は難しいなと思いました。

  • タワーディフェンス
  • CSI科学捜査官
  • 医療分野放射線
  • 社会課題医療の分野AED
  • HoloGuitar
  • アナウンサーに起こしてもらう
  • 目からビームを出す
  • hololensで身近な近未来
  • マイライフレコーダー
  • 音と映像
  • WayFiding
  • 空間に情報おいて参加にちょっかい出したり

成果物共有とスコープ

実際に作業開始となるわけですが、まず話に挙がるのは最終的にどういうものを作るかです。気になるアイデアの元に集まってきたので話しているうちに夢が広がってしまいますが時間は限られています。しっかりと成果物のスコープを切って明確にしていかなければいけませんが、その辺りの舵取りがうまくできず難しかったです。少し話しているうちに盛り上がって脱線なんてことがよくあり、全員でコミットしたことはポストイットで書き出し「目に見える形」で残しておいたほうが良かったかもしれません。視覚化されている/されていないでは雲泥の差です。

余談ですが、感じたことをTwitterで雑につぶやいておくと、あとで振り返る時にその時のリアルな感情が見えていていいですね。今度から積極的に試してみよう。

コード管理とデプロイ

ひとまずのスコープが決まったあとは、実際にどうやって作業を勧めていくかという話になりました。やはりすぐ話題に上がるのはGitでのバージョン管理ですね。Webアプリでは誰かがリポジトリを作ってサンプルコードを載せて終わりそうですが、Unityの場合は容量が大きいようなので、載せるファイルの取捨選択で意見が割れました。こういうこともあるんですね。結局そのタイミングでは話の終りが見えず、やっている最中に最適解を探していく流れになりました。またデプロイに関しても、サーバにコードをデプロイするのとは違い、目の前の実機にデプロイをしなければいけないので難しい判断となりました。考えてもいい案が出ないので教えてほしいです。最終的にコードの管理とデプロイは成果発表前にデグレが発生しトラブルのもとになってしまいました(最終的にはまとまりました)。

さまざまな問題から考えた自分に足りないもの

知識としては知っているけど使いこなせないパターンが多く、ここ最近の体験からもラストワンマイルの素振りが足りていないなと感じました。Gitを使って簡単なことは出来るけど、実際のマスターと開発ブランチを分けて…運用となると明確な説明/提案はできないことからも裏付けられています。やはり人に説明できないことは自分の血肉になっていないのと同じだなということを悟りました。ブログにネタとして取り上げることも社内資料ももう少しラストワンマイルを意識しておこなっていこうと思います。

全体的な感想

ハッカソンのMVPはAEDを体験できるものが獲得し、社会的な意義も相まって納得の結果でした。出来上がりのプロダクトも素晴らしいものでした。文章全体を通して、個人的にうまくいかないことが多く問題点ばかり取り上げてしまいましたが、イベント全体としては非情に楽しかったです。貢献したい気持ちはあるのに貢献できる領域が少なくて手持ち無沙汰になる事が多かったことが悔しいです。反省して普段の業務に生かしていきます。コミュニケーションをとるのが好きなので、チームでワイワイ会話をしながら開発できるのは自分に向いているなと改めて感じました。普段の環境をもう少し理想の形に近づけたいです。HoloLensとUnityに関しては、自分が今まで持っていた知識と全然違うので興味を持って取り組めましたが自分には向いていなさそうということも感じました(笑)。創造性と美術的センスが問われそうですので0→1タイプの人が向いてそうですね。また、今回ハッカソンで体験したものを再現しようとするとビルドをするときにマシンスペックの高いものが必要なので初期投資も必要かなぁという感想も持ちました。

イベントに関わっていたみなさんお疲れさまでした。

Netlify で Python のバージョンを変更する方法

はじめに

2月から趣味のブログをnoteからPelicaとNetlifyの組み合わせで運用していこうと思っていたが環境構築の際に Error setting python version from runtime.txt が発生したためメモを残す。

NetlifyでのPythonデフォルトバージョンは2.7

この記事を書いた2020/02/05時点でNetlifyで使っているPythonのデフォルトのバージョンは2.7となっている。確認方法だが、まずNetlifyのSettings → Build & Deploy → Build image selectionから使われているBuild imageがわかる。そして、このBuild image内部で使われている言語のバージョンについてGitHub上のドキュメントに書かれており各言語のバージョンが確認できる。次のURLはBuild image内で使われている言語のバージョン一覧に飛ぶようになっている。

Ubuntu Xenial 16.04 (default) から抜粋となるが、記述時点のものを載せておく。

  • Ruby - RUBY_VERSION, .ruby-version
    • 2.6.2 (default)
    • Any version that rvm can install.
  • Node.js - NODE_VERSION, .nvmrc, .node-version
    • 10 (default)
    • Any version that nvm can install.
  • Python - runtime.txt or Pipfile
    • 2.7 (default)
    • 3.5
    • 3.7
  • PHP - PHP_VERSION
    • 5.6 (default)
    • 7.2
  • Go - GO_VERSION
    • 1.12 (default)
  • Java
    • 8 (default)
  • Emacs
    • 25 (default)
  • Erlang
    • 21 (default)
  • Elixir
    • 1.7 (default)

その他の確認方法

また、URL先の情報も随時更新されていくと思うので、更新されたときのために別の方法も書いておく。Netlify上のBuild commandで ls -al /opt/buildhome/ を実行することで、内部のディレクトリを確認することが出来る。画像は実際にNetlify上でコマンドを実行したものになる。この場合、2.7と3.5と3.7が使えることになる。Ubuntu Xenial 16.04 (default) に載っているものと同じなので正しいと考えられる。

f:id:yoshitaku_jp:20200205150959p:plain

NetlifyでPythonのバージョンを変えるには

もともとPythonのバージョンを変更しようとしたときに起こったエラーではあるのだが、runtime.txtにバージョン情報を記述することで変更が可能となる。自分の場合は2.7と3.5と3.7しか使えないのに3.6を指定していた為起こったエラーであった。

root
|(色々)
└runtime.txt

runtime.txt中身

3.7

これだけで良い。

参考情報

先人が歩いてくれたおかげで解決がスムーズとなった。投稿日を見ると2年前後経っているため、リンクが切れていることもありブログを書いた。

じぶん Release Notes 0.29.9

1月1日〜31日のあいだの出来事がリリースされました。

技術・開発関連

取り組み

技術面での取り組みは以下の通りです。

  • Node.jsでチャットボット修正
    • Node.jsはあまり触ったことがなかったので楽しい
    • 他人が作ったソースコードを見れて学びがある
    • 他人がVS Codeを触っているのを見れて学びがある
      • やはりペアプロは成長のスピードが速くいい経験だった
      • 2人の時間を取っているので投資効果は考えないといけない
  • Azure Resource Manager
    • リソース管理テンプレート系の概要は知っている
    • 具体的に書いたことはないので素振りができて良い

イベント

  • オフィシャルではないデータベース系の勉強会に参加した
  • 自社での全社員参加の会議で発表した

個人的なこと

個人的なことは以下の通りです。

読んだ

読み途中

買ったもの

主要な買い物は下記の通りです。

ブログ

リリースノートを除き、次のエントリを書きました。

今月はスライド作りに割く時間が多く、またそのためのインプットも並行しておこなっていたので薄めの記事が多かったです。またインフルエンザでも倒れていたのでストックの大切さを知りました。

PV数

1月は3282でした

1月の目標結果

  • 習慣化したいこと
    • スタディサプリENGLISHを週4日おこなう
    • ハードルを低くして再チャレンジ

Aquiさんに英語学習のアドバイスをもらい、月の途中からスタディサプリの使用をやめて英語上達完全マップに沿った勉強を始めた。 通勤の行き帰りでアプリでも、勉強方法を切り替えた後も継続ができたので達成とする。

2月の目標

  • 断捨離
    • 部屋にある荷物が多すぎるので整理する
  • PV3500達成
    • 狙いたいのは4000超えだが2月は日数も少ないので上位目標として設定する
  • 平日にブログを出す
    • ここ日曜日の夜に出すことが多いので設定
    • サイクルを取り戻したい
  • 英語・中国語の勉強の継続

第2回 クリーンアーキテクチャ輪読会

はじめに

Challenge-Every-Monthでクリーンアーキテクチャ輪読会を開催しています。クリーンアーキテクチャを読んでみたかったのと輪読会をやってみたかったこともあり、このコミュニティのメンバーと一緒にやれて本当に嬉しいです。第2回は「第4章・構造化プログラミング」「第5章・オブジェクト指向プログラミング」「第6章・関数プログラミング」の3章を自分が担当しました。

内容

輪読会の資料はこちらです。

docs.google.com

構造化プログラミングは、GO TO文の使用を制限し「順次」「反復」「分岐」を使っていこうとする考え方でした。

オブジェクト指向プログラミングは、ソースコードの依存関係がコントロールできる「ポリモーフィズム」で実現していこうという考え方でした。しかし、ポリモーフィズムと継承の違いがわからないなどメンバーから疑問が出たため議論しました。

ポリモーフィズムについて、脱脂綿さんがまとめてくださった記事です。すぐにまとめてくれて行動力がすごい…

note.com

最後に関数型は、変数への値の代入へ制限をする内容でした。変数が可変していくと様々な問題を引き起こすので出来るだけ避けたほうがいいようです。このあたりはあまり文献が見当たらなかったのでもう一度復習したいところです。

おわりに

クリーンアーキテクチャの内容だけでは自分の理解が追いつかず、様々な感想ブログや本を読みました。理解が進めば進むほどわからない事も増えてきたので、時間があれば精通している人と呑んだりしながら議論もしてみたいです。

関連資料

1-3章を担当してくださったKojirockさんのブログです。

kojirooooocks.hatenablog.com

ビッグデータとは

はじめに

今回のエントリは、半年近くビッグデータ分析処理基盤について勉強していたので、一旦自分なりにまとめようと思ったので書いた。ビッグデータ処理基板について書いていくが、まず今回は「そもそもビッグデータって何なんだっけ?」というところについてまとめておく。

wikipediaによると、

ビッグデータとは、一般的なデータ管理・処理ソフトウエアで扱うことが困難なほど巨大で複雑なデータの集合を表す用語である。

とされている。

https://ja.wikipedia.org/wiki/ビッグデータ より

ITの分野について詳しくなかったり抵抗のある人は、この時点でお腹がいっぱいになってしまうのではないかと思うが、今回は「自分なり」とも書いたし、またITの分野に精通している人に対して説明するものとしたい。

ビッグデータになる前のデータ

「故(ふる)きを温(たず)ねて新しきを知る」ことが最近大切だと感じているので、まずはビッグデータとなった背景についてまとめてみる。

なぜ「一般的なソフトウェアで扱うのが難しくなるほど巨大なデータ」となったかであるが、これはインターネットの発展があげられる。具体的な話で言えば、PCなどのハードウェアの発達やネットワークが高速化・安定化したことにより、多くの人がインターネットにアクセスできるようになった。インターネット人口が増加したことによって、インターネットを介するWebサービスも多く展開されていき、結果的に購買データやアクセスログなどの様々なデータが飛び交うことになった。 インターネットが発達する前で言えば、会社内の会計情報や在庫の管理に表計算ソフトで扱ったり…といったデータサイズは数十MBレベルで、インターネットに接続しなくても完結するデータが多かった。こうしてインターネットの発達によって、データの「量」が増加したのである。

形式

データの量の次はデータの形式である。インターネットの次は何が発展しただろうか。それはiPhoneを代表とするスマートフォンである。今では携帯電話と呼ばれる類のものを持っていない人は非常に限られた人たちだと思うし、ガラケーさえも持っていれば「懐かしい!」といった声が出るようになった。このインターネットに接続されたスマートフォンが、多種多様なデータの促進をしたと考える。PCだけが中心の時代にはリレーショナルな形に構造化されたデータを扱うことが多かったが、スマートフォンの時代になって、テキスト化されたデータや画像データ、最終的には音声データまで扱うようになった。これらは非構造化データと呼ばれる。今読んでいる文章もテキストデータであるし、Twitterなどで呟いたことがある人も多いのではないか。またテキストデータとともに画像を載せてみたり今ではinstagramもある。スマートフォンで会話をすれば音声データも扱っている。こうして処理をしなければいけないデータの「形式」が多様化していった。

    • 構造化データ
    • 構造化データ・非構造化データ

速さ

最後に速さであるが、これはデータが飛ぶ頻度の話である。データが頻度というと1日に1回や1時間に1回と言った日時バッチ処理を想像することが多いかと思う。しかし今の時代では、日時で飛んでいたデータだけでなく、ストリーム的に流れてくるデータも扱わなければいけない対象となった。量と形式の話にも通じるが、少量で形式が定まっているデータがストリーム的に流れてくる場合はまだ対応をできる場面があるように思うが、量も形式も増えてきている時代ではなかなか難しい。例えば、スマホの次に来ているIoT製品から飛んでくるデータは少量のデータがストリーム的に飛んでくる。ストリームデータが嫌ならば一度どこかに貯めれて処理をしていけばいいのではないかと思うかもしれないが、そうした場合しきい値を超えたデータや異常な値が飛んできた時に通知がほしいなどの要件に対応できない。こうしてデータの「速さ」にも注目しなければいけなくなった。

    • 日時バッチデータ
    • 日時バッチデータ・ストリームデータ

結局ビッグデータとは

ビッグデータを構成する3つの項目についてまとめた。ここで注意が必要だが、これら3つが揃った時点でビッグデータとなるわけではなく、「量」「形式」「速さ」のどれか1つでも当てはまればビッグデータとして扱うようにしたほうがよいということである。また既存のデータが「量」「形式」「速さ」について該当してきていれば、データの統制が取れなくなる前にビッグデータ分析処理基盤の構築を検討した方が良いと言える。

データを可視化をしよう / Google Data Studio を使ってみた

個人でも組織でもデータを管理する時にGoogleスプレットシートが使われることが多くなってきました。Google App Scriptからもデータ操作がしやすいですし、とても便利ですね。しかし、Googleスプレッドシートにデータを蓄積するだけで満足していませんか? Google Data Studioを使えば、蓄積するだけで見にくかったデータが、可視化されたデータにより直感的にデータの内容を把握することができます!

Google Data Studioとは

Google Data StudioはGoogleが提供しているBIツールです。クライアントにインストールすることもなくブラウザからアクセスして使うことができるので、すぐに使うことができます。

Google Data Studioでは、Googleのサービスを中心に様々なデータソースにつなぐことができます。いくつかのGCP系のサービスにも接続できるのも驚きです。次のものは一例です。

f:id:yoshitaku_jp:20200112211712j:plainf:id:yoshitaku_jp:20200112211717j:plain

データとの接続方法

さっそくデータと接続してみましょう。最初に次のURLにアクセスします。

https://datastudio.google.com/navigation/reporting?hl=ja

アクセスをすると次の画面になります。左上の作成ボタンをクリックしましょう。

f:id:yoshitaku_jp:20200112220004p:plain

次はどこのデータを使用するのか指定するため、データソースを選択します。今回はGoogleスプレッドシートを選択します。

f:id:yoshitaku_jp:20200112211712j:plain

選択した後は、自分が使用できるGoogleスプレッドシートが出てきますので、こちらも選択します。

f:id:yoshitaku_jp:20200112211743j:plain

次はGoogleスプレッドシート内のワークシートを選択していきます。以上です。

f:id:yoshitaku_jp:20200112211746j:plain

データの表示方法

Googleスプレッドシートとの接続ができたら次は表示です。当たり前ですが、一番最初はまだ何も配置していないのでまっさらな状態になります。

f:id:yoshitaku_jp:20200112211812j:plain

タブに並んでいるグラフを追加をクリックします。様々なグラフを選ぶことができます。今回は上から3つめにある、期間の時系列グラフを選択してみます。

f:id:yoshitaku_jp:20200112213152p:plain

右のタブにどの列のデータを指定するかなどを決める部分が出てきますので、設定していきます。グラフの大きさや形も変えることができるので、表示したいデータに合わせてレポートを変えていきましょう。

f:id:yoshitaku_jp:20200112214805p:plain

自分は最終的に週間のデータを次のように配置しました。昨年の最後にまとめたブログで数字だけを並べていたのとは大違いですね。

f:id:yoshitaku_jp:20200112213333p:plain

yoshitaku-jp.hatenablog.com

まとめ

昨年の反省からGoogle Data Studioに挑戦してみました。データを表示することによって、今現在足りていない指標が見つかったりもして、「じゃあこれからはどんなデータを集めればいいのだろうか」といった思考にもなってきて面白いです。週間のデータの次は、月間のデータを表示するようにしてみたり、Googleアナリティクスや別の集計データを表示することに挑戦しています。

じぶん Release Notes 0.29.8

12月1日〜31日のあいだの出来事がリリースされました。

技術・開発関連

技術面での取り組みは以下の通りです。

  • 12月はありませんでした

イベント

参加したイベントは以下の通りです。

読んだ

  • 読みきった本はありませんでした

買ったもの

  • iPhone 11 Pro
  • AirPods Pro
    • 買わなきゃ損なぐらい最高のガジェット

ブログ

リリースノートを除き、次のエントリを書きました。

PV数

11月は2,913でした

12月の結果

  • 必ず達成したいこと
    • スタディサプリENGLISHを毎日続ける
      • 会社の自己啓発支援で申し込んだのでやっていく
      • 未達
  • やったことない・チャレンジ系
    • 大島に行ってロードバイクで一周
      • 今年は全然乗れていないので最後に…
      • 未達

1月の目標

  • 習慣化したいこと
    • スタディサプリENGLISHを週4日おこなう
    • ハードルを低くして再チャレンジ

2019年のブログを数字で振り返る

2019年のアウトプットを数字で振り返ってみようと思う。下記の画像は2019年を通して取得してきた週間での、Twitterフォロワー数」はてなブログの読者数」「週間でのはてなブログPV数」「すべての記事をあわせた累計のはてブ数」となっている。週間で見返すことはあまりなかったが、区切りのタイミングで見返せるし一年通して取得しておいてよかったと思う。今後は月での合計値を取得したりと改良する必要はありそうだ。

f:id:yoshitaku_jp:20200101180822p:plainf:id:yoshitaku_jp:20200101180827p:plain

Twitterフォロワー数

Twitterフォロワー数は約200人の増加となった。広告やbotアカウントなどはすぐにブロ解をするようにしているので、ほぼアクティブなユーザの数が表されているはずである。あまり下がるタイミングはなく、右肩上がりが続いていて、関わっていただける人が増えていくのは嬉しい限りであると感じた。その反面、Twitter上で人と濃く付き合うことは減ってしまっていると感じていて塩梅が難しいとも感じている。技術的な話でいうと、自分が軸足を置く範囲がぶれてしまっているからそう感じるのかもしれない。来年は仕事で使うPython、Azureをメインに、趣味でVue.jsをやっていこうとしているので、同じ分野の人と積極的に関わっていけたらと思っている。

ブログ読者数

こちらは約20人増える結果となった。そこまで積極的に宣伝をする年ではなかった中、月に1人以上は増える結果となり嬉しかった。まだまだHelloWorld系記事ばかりで深みのある記事がかけていないが、

来年は仕事で使うPython、Azureをメインに、趣味でVue.jsをやっていこうとしているので、同じ分野の人と積極的に関わっていけたらと思っている。

と、書いたようにこちらでもかぶっている範囲の人に価値あるものを提供できればいいと思う。

週間PV数

目標に設定していたわけではないが、感覚として超えるだろうと思っていた週間1000PVを安定して超えることができなくて残念だった。記事を振り返ってみるとストック的に役立つものは少なく、イベントレポート記事などのフローで消化されていくものが多いと感じたし、この感覚は昨年の後半からは薄々感づいていたので、簡単なエラー記事でも上げていくように意識を変更させた。エラー記事用テンプレートも作成済みなのでどんどん出していきたい。Twitterへのシェアも意識的におこなわないことにしていたので復活させようかなと思う。

累計ブックマーク数

最後だが、ブックマーク数は100近く増加した。今後は、当たり前の話ではあるのだがバズるとはてなブックマーク数は爆発的に伸びるのであまり意識しすぎず、とは言え着実に伸びていくことを期待する。昔Qiitaに書いた記事が未だにいいねを貰えることがあるので、ロングテールのようなスルメのような記事を書いていきたい。これも繰り返しになるがフローよりもストック型の記事を意識していこうと思う。

.ipynbファイルをコマンドから実行する

Jupyter Notebookで作成したプログラムをインタラクティブに実行できるのはとても便利だ。しかし、ルーティンのように実行するプログラムを毎回ブラウザを起動させて実行するのが煩わしいタイミングもある。そこでJupyter Notebookで作成した.ipynbファイルをコマンドラインで実行できないか調べたら色々できたので備忘録として残す。

基本的にはnbconvertを使う。これはJupyterコマンドのあとに続けて書く。ex) jupyter nbconvert hogehoge

  1. jupyter nbconvert HelloWorld.ipynb --to python

このコマンドはHelloWorld.ipynb ファイルをPythonのファイルに変換し、Pythonコマンドから実行する。実行すると下記のように出力される。記事の本質からはズレてしまうが、やはり.pyファイルに変換して実行できる安心感はあるので載せておく。

yoshitakuMBA:jupyternotebook yoshitaku$ jupyter nbconvert HelloWorld.ipynb --to python
[NbConvertApp] Converting notebook HelloWorld.ipynb to python
[NbConvertApp] Writing 86 bytes to HelloWorld.py

Pythonファイルの中身は下記のように出力される。

#!/usr/bin/env python
# coding: utf-8

# In[1]:


print("Hello World")
  1. jupyter nbconvert --to notebook --execute HelloWorld.ipynb --output HelloWorld2.ipynb --debug

このコマンドはHelloWorld.ipynbを元にHelloworld2.ipynbを作成し、Helloworld2.ipynbを実行する。実行するタイミングでコマンドラインに実行結果を見るために--debugを付ける。

yoshitakuMBA:jupyternotebook yoshitaku$ jupyter nbconvert --to notebook --execute HelloWorld.ipynb --output HelloWorld2.ipynb --debug
[NbConvertApp] Searching ['/Users/yoshitaku/workspace/jupyternotebook', '/Users/yoshitaku/.jupyter', '/Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/etc/jupyter', '/usr/local/etc/jupyter', '/etc/jupyter'] for config files
[NbConvertApp] Looking for jupyter_config in /etc/jupyter
[NbConvertApp] Looking for jupyter_config in /usr/local/etc/jupyter
[NbConvertApp] Looking for jupyter_config in /Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/etc/jupyter
[NbConvertApp] Looking for jupyter_config in /Users/yoshitaku/.jupyter
[NbConvertApp] Looking for jupyter_config in /Users/yoshitaku/workspace/jupyternotebook
[NbConvertApp] Looking for jupyter_nbconvert_config in /etc/jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /usr/local/etc/jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/etc/jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /Users/yoshitaku/.jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /Users/yoshitaku/workspace/jupyternotebook
[NbConvertApp] Converting notebook HelloWorld.ipynb to notebook
[NbConvertApp] Notebook name is 'HelloWorld2'
[NbConvertApp] Applying preprocessor: ExecutePreprocessor
[NbConvertApp] Starting kernel: ['/Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/bin/python', '-m', 'ipykernel_launcher', '-f', '/var/folders/25/wwdn6b2d2n1gynshxmh1c_n40000gn/T/tmphkouzfm0.json']
[NbConvertApp] Connecting to: tcp://127.0.0.1:56322
[NbConvertApp] connecting shell channel to tcp://127.0.0.1:56319
[NbConvertApp] Connecting to: tcp://127.0.0.1:56319
[NbConvertApp] connecting iopub channel to tcp://127.0.0.1:56320
[NbConvertApp] Connecting to: tcp://127.0.0.1:56320
[NbConvertApp] connecting stdin channel to tcp://127.0.0.1:56321
[NbConvertApp] Connecting to: tcp://127.0.0.1:56321
[NbConvertApp] connecting heartbeat channel to tcp://127.0.0.1:56323
[NbConvertApp] Executing notebook with kernel: python3
[NbConvertApp] Executing cell:
print("Hello World")
[NbConvertApp] output: status
[NbConvertApp] output: execute_input
[NbConvertApp] output: stream
[NbConvertApp] output: status
[NbConvertApp] Applying preprocessor: coalesce_streams
[NbConvertApp] Writing 812 bytes to HelloWorld2.ipynb
  1. jupyter nbconvert --execute HelloWorld.ipynb --to notebook --inplace --debug

このコマンドはHelloWorld.ipynbを実行し、コマンドラインに実行結果を見ることができる。正確には、--inplaceを付けているために自ファイルを上書きし実行している形になる。

yoshitakuMBA:jupyternotebook yoshitaku$ jupyter nbconvert --execute HelloWorld.ipynb --to notebook --inplace --debug
[NbConvertApp] Searching ['/Users/yoshitaku/workspace/jupyternotebook', '/Users/yoshitaku/.jupyter', '/Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/etc/jupyter', '/usr/local/etc/jupyter', '/etc/jupyter'] for config files
[NbConvertApp] Looking for jupyter_config in /etc/jupyter
[NbConvertApp] Looking for jupyter_config in /usr/local/etc/jupyter
[NbConvertApp] Looking for jupyter_config in /Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/etc/jupyter
[NbConvertApp] Looking for jupyter_config in /Users/yoshitaku/.jupyter
[NbConvertApp] Looking for jupyter_config in /Users/yoshitaku/workspace/jupyternotebook
[NbConvertApp] Looking for jupyter_nbconvert_config in /etc/jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /usr/local/etc/jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/etc/jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /Users/yoshitaku/.jupyter
[NbConvertApp] Looking for jupyter_nbconvert_config in /Users/yoshitaku/workspace/jupyternotebook
[NbConvertApp] Converting notebook HelloWorld.ipynb to notebook
[NbConvertApp] Notebook name is 'HelloWorld'
[NbConvertApp] Applying preprocessor: ExecutePreprocessor
[NbConvertApp] Starting kernel: ['/Users/yoshitaku/.pyenv/versions/anaconda3-5.3.1/bin/python', '-m', 'ipykernel_launcher', '-f', '/var/folders/25/wwdn6b2d2n1gynshxmh1c_n40000gn/T/tmpd5mpe1ec.json']
[NbConvertApp] Connecting to: tcp://127.0.0.1:57529
[NbConvertApp] connecting shell channel to tcp://127.0.0.1:57526
[NbConvertApp] Connecting to: tcp://127.0.0.1:57526
[NbConvertApp] connecting iopub channel to tcp://127.0.0.1:57527
[NbConvertApp] Connecting to: tcp://127.0.0.1:57527
[NbConvertApp] connecting stdin channel to tcp://127.0.0.1:57528
[NbConvertApp] Connecting to: tcp://127.0.0.1:57528
[NbConvertApp] connecting heartbeat channel to tcp://127.0.0.1:57530
[NbConvertApp] Executing notebook with kernel: python3
[NbConvertApp] Executing cell:
print("Hello World")
[NbConvertApp] output: status
[NbConvertApp] output: execute_input
[NbConvertApp] output: stream
[NbConvertApp] output: status
[NbConvertApp] Applying preprocessor: coalesce_streams
[NbConvertApp] Writing 812 bytes to HelloWorld.ipynb

Jupyter Notebook で IOPub data rate exceeded エラー

エラー内容

IOPub data rate exceeded.
The notebook server will temporarily stop sending output
to the client in order to avoid crashing it.

Google翻訳による日本語

IOPubデータレートを超えました。
ノートブックサーバーは一時的に出力の送信を停止します
クライアントをクラッシュさせないために。

発生の状況

Jupyter Notebookを使って大量のテキストデータを処理している時、処理結果をprint文で表示しようとしたらJupyter Notebookの画面上に出現した。試しにテキストデータをファイルに出力したところ4.6 MBあった。正確な閾値は確認していないが上記のファイルサイズが一つの指標になればと思い参考として載せておく。

解決策

  1. 一度Jupyter Notebookをすべて落とす
  2. 次のコマンドを実行し設定ファイルを作成する。
    • jupyter notebook --generate-config
    • 設定ファイルは~/.jupyter/jupyter_notebook_config.pyに出力される
  3. 作成した設定ファイルをテキストエディタで編集をする
  4. 編集前
    • #c.NotebookApp.iopub_data_rate_limit = 1000000
  5. 編集後
    • c.NotebookApp.iopub_data_rate_limit = 10000000
    • #コメントアウトを削除する
    • 0を一桁増やす
  6. Jupyter Notebookを起動する