nsdの技術ブログ

工学の知識・経験を伝えるブログ

NASA Space Apps Challenge Ube 2020に参加して最優秀賞をいただいたお話

f:id:nsd24technology:20201013185139p:plain

はじめに

こんにちは。

最近、事業開発や起業に向けて動いているにっしです。

今回は、10月3日・4日にSpace Apps Challenge 2020というNASAが主催するハッカソンイベントの宇部会場に参加したので、感想をこの記事としてまとめたいなと思います。

注意:この記事は技術的な内容はほとんどなく、基本的には私のお気持ちを書いただけの記事です。

参加した経緯

実を言うと、もともとSpace Apps Challengeに対して興味はあまりありませんでした。
「宇宙なんもわからん」「衛星データ?可視化しても地図データ以外日常的にあんま使わんしなあ。。。」という個人的にあまり関わりが薄い分野だったこともあり、ネガティブなイメージがありました。
しかし、地元である宇部で(今年はオンラインだったけれども)開催されていることや以前関わりが合った方が運営に関わっていることから、なんとなく参加してみるかあという気持ちで参加を決意しました。

また、参加を決意した後は知らない分野だからこそ飛び込んでみて何か得られるように頑張ろうと思いながらハッカソン期間中はモチベーションを保っていました。

タイムスケジュール

今年は、新型コロナウイルスの影響で、完全にオンラインで開催されました。
各日程のタイムスケジュールは、以下のとおりでした。

  • 1日目:2020年10月3日(土)
時間  内容
09:00-09:30  受付、ツール登録 
09:30-10:00  事務局よりイベントの説明 
10:00-11:00  イデアワークショップ 
11:00-11:30  イデア発表 
11:30-17:00  開発 
17:00-17:30  中間発表① 
17:30-21:30  開発 
21:30-21:45  初日中締め、2日目の案内 
21:45-  開発 
  • 2日目:2020年10月4日(日)
時間  内容
09:00-09:30 朝のあいさつ、中間発表②
09:30-16:00 開発
16:00-16:45 成果発表 / 審査・表彰
16:45-17:30 デモ体験タイム / 投票
17:30-17:45 休憩(審査タイム)
17:45-18:00 結果発表、表彰式
18:00-18:15 クロージング
18:45-23:59 プロジェクト登録期限

注意点

以下の1日目の進捗や2日目の進捗の項で書いたことは、開発の詳細にほとんど触れず開発中やアイデア出しのときの"お気持ち"を書いているだけです。

お気持ちなんかどうでもいいという方は、成果発表の項まで飛ばして読んでください。

1日目の進捗

実は、1日目の日中は他の用事があり参加できていません。
9:30〜11:30までの時間帯のみ参加しました。

このハッカソンでは、まずNASAの課題(全部で23個ある)からやってみたいテーマを選択することから始まりました。

NASA Space Apps Challenge 2020 Categories:
・ (原文)https://2020.spaceappschallenge.org/challenges/
・ (日本語訳)https://blog.spaceapps.jp/entry/2020/08/28/152647

私は、「F-1・Connect / Can You Hear Me Now?」を選択しました。
このテーマを選んだ理由は、「人々が火星をはじめとして様々な惑星にすむようになった時に人々のコミュニケーションはどうなるのか」という妄想に近い未来を創造するのがなぜかとてもワクワクしたからです。
宇宙や衛星データに関しての知識は全く持ち合わせていなかったので、1日目の段階で自分の中での軸を惑星間コミュニケーションに絞ることができたのはとても良かったと思います。

この時点で、プログラム的にはアイデア発表まで終わっている状態ですが、まだテーマ選択と大雑把なビジョンしか決まってない状態でした。

f:id:nsd24technology:20201014145909p:plain

用事が終わった後仮眠をとったら、気づいてたら2日目に突入していました。
(逆にこの時点で十分睡眠をとったことで頭が整理されてよかったのかもしれないと思い込むことでポジティブに考えていました笑)

f:id:nsd24technology:20201014150227p:plain

2日目の進捗

前述の通り、1日目は用事の後ぐっすりして、2日目は夜中の0:30ごろから活動を再開しました。

まだテーマ選択と大雑把なビジョンのみしか考えていなかったので、アイデアイメージの深堀 & 言語化を行いました。

この作業を2:00までに完了することを目標にしました。

主に去年の作品等を見たり、マインドマップ書いてみた結果、なんとかアイデアイメージを固めることができました。(以下の画像参照)

(実はこの時書いた概要等はこの後変更されます。)

f:id:nsd24technology:20201014151751p:plain

そして、とりあえずWebアプリケーション上でビデオ通話機能を実装しようと思い、(やっと)開発を開始しました。

技術選定に関しては、アイデアが固まった時点でほぼ決まっていました。

Webアプリケーションのデザイン等を構築するフロントエンドフレームワークとしてNuxt.jsを採用。

また、ビデオ通話機能の実装では、簡単にビデオ通話の実装が可能になるSkywayというAPIを採用しました。

このビデオ通話機能の開発を9:00までにおおよそ完了することができました。

朝のあいさつ、中間発表②

ビデオ通話機能が一通り開発し終わった後、ちょうど2日目の最初のプログラムのあいさつと2回目の中間発表(僕は1回目参加できてないので実質1回目)を行いました。

ここでは、スライド等はまだできていなかったので、口頭で説明 $ ビデオ通話機能のデモを行いました。

ここで改めて自分のアイデアを発表して気づいたことがあります。

「あれ、このアイデアなんの解決にもなってなくね...何がいいんだこのアイデア...」

となってしまいました。

そこからは(精神的に)きつい時間でした。

f:id:nsd24technology:20201014161504p:plain

モチベも下がってきて、もうダメだ...と思っていました。

しかし、ハッカソンをやって何も得たものがない状態で終わることはできないなと思いながらモチベを維持しました。

「アイデアが中途半端で誰の役にも立たないようなもの」を発表するのが一番嫌だったので、このハッカソンの目標として「最後まで自信を持てるアイデア」を最低限考えようと決めました。 (この時既に最終発表3時間前)

そこから、ストーリー性を重視しながらスライドを作成していきました。

その結果以下のようなアイデアに収束しました。

惑星間通信が手軽にできる時代になると、 居住環境の多様化によって情報の肥大化が見込まれる。 これらの背景から、コミュニケーションにおいて(居住)環境等が話の種になることが増えると予想する。 この仮説から、我々はビデオ通話サービスで話しながらデータも表示することができるようなWebアプリケーションを作成した。

ソリューションを一言でまとめると、「ビデオ通話サービスと(人にとって身近な)オープンデータをセットにして提供することで、人々に話の種を提供し通話ができる」という至極単純なものです。

単純なものですが、自分の中ではっきりストーリーだてて説明できるビジョンが浮かび、(一応)論理的に話を進められる、自信を持てるアイデアとしてまとめあげることができました。

プロダクトはとても完成まで間に合いそうになかったので、UIをスライドに載せることで、聞いている方にイメージを持っていただけるようにしました。

f:id:nsd24technology:20201014164821p:plain

この時点で終了30分前とかだったので、最後の悪あがきとしてプロダクトのUIを多少マシなものに仕上げ、オープンデータとの(一部)つなぎこみを行いデモ動画を撮影し、成果発表に臨みました。

成果発表

成果発表の順番は、なんと惑星アミダくじ的な(?)決め方で決まりました。 (初めて見た決め方でおもしろかったです笑)

f:id:nsd24technology:20201014163334p:plain

惑星あみだくじ?の結果、順番は4番目になりました。

いろいろギリギリだったり、雑なところはありましたが、アイデアとして自信が持てているものを発表することができました。

実際の発表については、youtubeに上がっているので、そちらをご覧ください(以下参照)

youtu.be

google slideもコメント可能な形で掲載しておきます。↓

PraCall - Google スライド

表彰式

ということで、無事成果発表も終わりました。

正直プロダクトが無に限りなく近いので、ダメだろうと思っていましたが、

イデアの将来性等の観点から評価していただき、最優秀賞をもらえることができました。

本当にアイデア部分だけで評価していただいて、作り込めなかったのが本当に残念だったなと感じました。

f:id:nsd24technology:20201013185139p:plain

プロジェクト登録作業

ありがたいことに宇部会場で最優秀賞をいただくことができたので、グローバル審査の段階に進むことができました。

23:59までにプロジェクト登録を行う必要があったので、眠気で眠ってしまいそうになりながらもなんとかプロジェクト登録を終えることができました。

https://2020.spaceappschallenge.org/challenges/connect/can-you-hear-me-now/teams/pracall/project

本来はここでもう少しプロダクトの作り込みをしたかったのですが、眠気に負けてしまい達成できませんでした(今後の期待も含めて賞を頂いたはずなので、審査していただいた方にはとても申し訳なかったです...)

このイベントを通して得られたもの

まとめ

とても稚拙な文章で申し訳ないですが、以上が今回のNASA Space Apps Challenge Ube 2020に参加してみた感想です。

時間がなかったから〜みたいなのは言い訳にしたくないので、短時間でもっと作り込めるようスキル等をより磨いていきたいです。

最後に、本イベントを企画・運営していただいた方及び関係者の方々、イベントを開催していただき本当にありがとうございました。

"現在住んでいる町でNASAハッカソンが行われている"という状況でなかったら、おそらく自分はこのハッカソンに参加していなかったと思います。

宇部会場で開催していただいたから、それが私が参加するきっかけになりあまり知らない世界に触れ合えることができました。

他の参加者の方々は宇宙や衛星データに関する知見をたくさんもっていたので、こういう世界があるんだなあと刺激を受けることができました。

その中で最優秀賞をいただけたことは、本当に運がよかったことなのかなあと思い、この結果に満足せずより高みを目指していきたいなと思っています。

最後に、この記事を読んでいただきありがとうございました。
長々と感想という名の駄文を垂れ流してしまったので、時間がある時にちょこちょこ思い出しながら修正を加えようかなと考えています。

ご質問等ありましたら、@nsd244までご連絡ください。

追伸)
この記事では、自分の感想しか書いていませんが、他の方の成果発表も非常に面白いものがたくさんありました。 個人的にとても好きだと思ったプロダクトが公開されているので、宣伝?しときます
https://2020.spaceappschallenge.org/challenges/connect/can-you-hear-me-now/teams/pracall/project cluster.mu

宇部会場tweetまとめ

クラウドAI開発講座 from 高専キャリア×Microsoftに参加している #3

高専キャリアさんとMicrosoftさんのコラボによって開催されているクラウドAI開発講座の3週目の進捗記事です。 (大幅に記事を書くのが遅れてますm( )m)

進捗

先週は、Pythonでサンプルのコードを実行しました。 今週は、Cognitive Serviceと連携を行っていこうと思います。

今回の作業は、主に以下のドキュメントを参考にしました。 記事内にあるとおり、Cognitive Serviceの中のText Analyticsを今回は使ってみました。

qiita.com

APIに関する詳細は公式ドキュメントを参考にすすめました。

docs.microsoft.com

また、前回同様Pythonで作業をすすめているのでText AnalyticsのPythonドキュメントを参考にしました。

docs.microsoft.com

最終的には、送信したテキストの言語とネガポジ判定の結果を返す機能を実装することができた。

f:id:nsd24technology:20200725103658p:plain

まとめ

今週は、Cognitive ServiceのText Analyzeを利用してTeams Botに文章のネガポジ判定機能などを追加することができた。

今週で一通りAzureのチュートリアル的な部分は終えたかなと思うので、次回からはアイデアを固めてそれに向けて開発していきたいと考えている。

クラウドAI開発講座 from 高専キャリア×Microsoftに参加している #2

高専キャリアさんとMicrosoftさんのコラボによって開催されているクラウドAI開発講座の2週目の進捗記事です。 (大幅に記事を書くのが遅れてますm( )m)

進捗

前回の記事で紹介したコンテンツを一通り見ました。(Microsoft Learn for Studentsを除く)

自分は、Pythonで書きたかったので、公式ドキュメントを見ながらチュートリアルを行いました。 今週はPythonでサンプルのコードを実行して見るところまでを目標に作業を勧めました。

今回の作業を主に以下のドキュメントを参考にしました。 docs.microsoft.com

一部、公式ドキュメントに詳しく掲載されていないngrokの話やローカルとazureの接続部分などはちょまどさんの記事等を参考にしました。

qiita.com

qiita.com

また、僕が普段使っているOSはUbuntu20.04LTSなのですが、Bot Framework EmulatorのUbuntu対応が正式サポートされていたので安心してドキュメントどおりに作業できました。

github.com

そして、実際にローカルで立ち上げたteamsBotの動作確認を行うところまでを行うことができました!

f:id:nsd24technology:20200725073525p:plain

まとめ

今週は、pythonでTeams botチュートリアルを行いました。 来週はCognitive serviceとの連携を行い、APIを叩いていければなと思っています。

クラウドAI開発講座 from 高専キャリア×Microsoftに参加している #1

はてなブログの投稿は、1年振りくらいです。

今回は、クラウドAI開発講座 from 高専キャリア×Microsoftというイベントのキックオフセクションに参加したので、記事を書いていこうと思いまs。

クラウドAi開発講座 from 高専キャリア×Microsoftとは

「Azureを活用したTeams連携Botを活用せよ」というミッションのもと、高専キャリア様とMicrosoft様がコラボして開催しているオンラインイベントです。

スケジュール

実際に集合する機会は全部で3回です。

  • 7/4:キックオフセクション
  • 7/25:中間発表
  • 8/29:最終発表
    ※7/4〜8/28:開発期間

講座内容

作業の進め方としては、以下のコンテンツをみながらAzureへの理解を深め、Teams連携Botの作成を行っていく感じです。 コンテンツを見るだけではなく、メンターさんに質問する環境等もslack上で整っているので、活用していこうと思います。

進捗

今回は、とりあえずMicrosoft Azureへの登録だけ行いました。
これからとりあえず中間発表に向けて、開発を勧めていこうと思います。 毎週このブログで進捗を共有していくので、よろしくおねがいします〜

Ruby合宿2019春に行ってきたよ!

今回は、2019/3/5~3/8の4泊5日で行われたRuby合宿に行ってきたので、その体験記を書いていこうと思います。

Ruby合宿って??

詳細を知りたい人は、Ruby合宿公式サイトを見てください。
ここでは、簡単にRuby合宿について紹介します。
Ruby合宿は、島根県で毎年春と夏の2回開催されており、現役Rubyエンジニアにサポートしてもらいながら、数名のグループで(毎回異なる)テーマに沿ったプログラムを協力して作成します。
開発だけでなく、Rubyの父であるまつもとゆきひろ氏の講演、県内のIT企業・フリーランスの方々との意見交換(お話)の時間、県内のIT企業見学があります。
こんだけあって、しかも4泊5日でなんとお値段7,000円!
(ご飯や宿泊にはあまり期待せぬよう。。。) ちなみに、2019年春の合宿スケジュールは↓です。(1) Ruby合宿2019春スケジュール

どうせ強い人ばっかなんでしょ。。。?

そんなことないです!(僕の時は)
むしろ開発経験ない人が積極的に行くべきだと思っています。
簡単なことでもわからなければすぐにメンターさんに質問しましょう!

ということで皆さんの不安はなくなったと思うので、体験記を書いていきまーす!

NSDが勧める「Ruby合宿最高!」ポイント

僕が勧める「Ruby合宿のここがいい!」ポイントを挙げてみます!

  1. 事前講義
  2. まつもと氏講演会
  3. IT企業との交流会
  4. 開発
  5. 企業視察

???「てかこれ全部じゃん」
僕「全部よかったんですよ!!!!」
※媚びを売っているのではありません

事前講義

Ruby合宿では、実際に開発する前に事前講義がありました。(今回は2/16)(オンライン参加もok) 事前講義では、「Rubyの環境構築」「今回使うライブラリ(DXRuby, chipmunk)のインストール」「開発サンプルの配布と解説」を行いました。
youtube事前講義の内容は公開されているので、もし興味があれば見てください!

個人的に詰まった点としては、DXRubyのインストールです。 原因としては、C言語の環境構築をしていたためそのコンパイラのパスがchipmunkで使用するはずのパスと被ってしまったため、インストールしてもライブラリが使えなかったです。 解決方法としては、C言語コンパイラ(gcc)のパスを一回削除して、chipmunkで用いるパスを通してやることでライブラリが使えるようになりました。

まつもと氏講演会

今回の講演会では、「プログラマーの敵」というタイトルで講演して下さりました。 自分事としてとても考えさせられる内容で、とても身に染みるお話でした。 まつもと氏講演会

IT企業との交流会

IT企業さんとの交流会では、合計で8箇所くらいの会社さんとお話をしました。
Rubyがどんなとこに使われているのかとか話しました。
Ruby On Rails使ってまーすって言ってるとこが大半でしたね汗
また、フリーランスの方とも話して、「フリーランス目指してる人は、若いうちは企業でスキルつけてある程度実力がついてからフリーランスんあった方がいいよ」的なアドバイスももらいました。

Ruby合宿で作ったもの

今回のテーマは、「2D物理エンジンを活用した(パズル)ゲーム」でした。
合宿2日目から、チームに分かれて開発を始めました。(うちのチームは4人でした)
ちなみに、チームメイトは授業以外でプログラミングしたことないかんじでした。(僕もRubyは授業でしか触ったことなかったです)

まず、アイデア出しを行いました。
実は1日目の夜で僕たちは軽くアイデア出しを行っていたためまあまあスムーズにアイデアがまとまりました。
イデアとしては、「モンスターストライク(引っ張りアクション)+テトリス(積んで消す)」のようなものになりました。
そしてそのまとまったアイデアをもとにタスク決めを行い、4人で分担をしました。

分担としては、「ゲーム画面1(メイン処理)」「ゲーム画面2(障害物等)」「オプション画面」「画面遷移・デザイン」のようにして別れました。 僕は、ゲーム画面1(メイン処理)の部分を担当しました。
分担を行ったら、さっそく開発に移りました。 Sampleファイルをベースにして、実際にゲームを開発していきました。
バージョン管理はgitで行いました。

合宿2日目では、全体のUIの配置とかを決めて実装しました。

合宿3日目では、1つのボールを発射できる機能が完成し、ちょっとゲーム性がでてきました。

合宿4日目では、複数のボールを発射できる機能が完成しました。 この時点では、まだボールがそろったら消えるというテトリス部分の機能の実装ができていなかったので、少し焦っていました。

合宿5日目は、午後1時までが開発時間でした。
最終的な仕上げと、ボールが横にそろったら消える機能の実装を行いました。
なんとか、一通りの機能の実装を行うこともでき(プレゼン発表30分前)、形にすることができたかなあという感じです。
ボール同士の衝突判定にバグが残っている部分もあるけれど。。。

てな感じで、完成したゲームがこちらです!! (後でまたプレイ動画に置き換えます)

f:id:nsd24technology:20190430233042p:plain
タイトル画面

githubで全体のコードを公開しているので、よかったらみてみてください~。 github

苦労したとこ

特に苦労したとこは、複数のボールを発射するとこです。
一見簡単そうに見えますが、前のボールの当たり判定を維持させながら新しいのをどんどん追加しないといけなくて、正直めちゃくちゃメンターさんに聞きまくりました(笑)

まとめ

いままでいろいろ書いてきましたが、感想を一言でいうなら、
Rubyの開発経験全然なかったけど思い切って参加して開発経験積めてよかった!!!!
です。
ゲーム開発独特の難しさ(ループ内での処理, 画面遷移など)の一端を体験できてよかったです。
これで、ちょっとだけ物理演算使ったゲーム作れる状態になれたのでとても満足です。

もし参加を迷っている方などおられたら、とりあえず参加して開発体験を積んでスキルアップすることをお勧めします! (少なくとも、思ったのと違う。。なんてことにはならないと思います!)

参照

  1. Ruby合宿公式サイト
  2. Ruby合宿2018夏 行ってきました。(+宣伝)