Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
子ども向けプログラミング学習サービスQUREOの技術的アプローチ
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yasuiro
September 10, 2018
Programming
0
110
子ども向けプログラミング学習サービスQUREOの技術的アプローチ
bitvalley2018で発表したスライドになります。
yasuiro
September 10, 2018
Tweet
Share
More Decks by yasuiro
See All by yasuiro
子供向けプログラミング学習サービスQUREOの開発裏話
yasuiro
0
660
Other Decks in Programming
See All in Programming
CSC307 Lecture 02
javiergs
PRO
1
780
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
280
組織で育むオブザーバビリティ
ryota_hnk
0
180
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
470
SourceGeneratorのススメ
htkym
0
200
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
750
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
230
MUSUBIXとは
nahisaho
0
140
CSC307 Lecture 05
javiergs
PRO
0
500
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
Raft: Consensus for Rubyists
vanstee
141
7.3k
It's Worth the Effort
3n
188
29k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
330
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
How to build a perfect <img>
jonoalderson
1
4.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
90
Become a Pro
speakerdeck
PRO
31
5.8k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Transcript
子供向けプログラミング学習サービス の技術的アプローチ
自己紹介 鈴木 康弘(すずき やすひろ)@yasuiro ・Web制作会社を経て2014年サイバーエージェントグループに入社 ・2016年よりアプリボットにてQUREOの立ち上げに携わる ・元Flashエンジニア。現在はFrontend界隈を中心に活動しています。 ・最近の興味はFacebook の Instant
Gamesとか
本日お話すること ・QUREOとは ・QUREO立ち上げの背景 ・システム構成 ・正誤判定と成績 ・画像同士における衝突判定 ・まとめ フロントエンド寄りのお話が多いです。
とは
https://youtu.be/zOk9o1fB0e4
None
https://qureo.jp ・子供向けオンラインプログラミング学習サービス ・ゲームを作りながら、プログラミングの基礎を学んでもらう ・ビジュアルプログラミングによる学習方法を採用 「実力がしっかり身につく、新しいプログラミング教材」
プログラミング環境とカリキュラムが一体化している が特徴的な点 ・現時点で300レッスン程あり、最終500レッスン位になる予定
立ち上げの背景
2020
プログラミング教育必修化
None
2013年設立 プログラミング教育
「プログラミング教育」の課題点 ステージ0 特に取り組みをしていない ステージ1 担当を決めて検討中 ステージ2 研究会や研修を行っている ステージ3 授業を実施している その他
地域間の格差が生まれている ※画像:文部科学省「教育委員会等における小学校プログラミング教育に関する取組状況等」より
None
教育ノウハウ ゲーム制作で培った開発力
システム構成
システム構成図
システム構成図 フロントエンドの領域 サーバーサイドの領域
None
正誤判定と成績
None
合っている? 間違っている?
子どもの書いたコードの正誤判断 その場で講師が判断できる 講師がいないため判断できない 塾の場合 オンラインの場合
課題 オンライン上でどのように判断するか?
レッスン数が300近くあり、 一つ一つ答えの定義をプログラミングしていくのは非現実的 どれだけ似ているかというアプローチ
コサイン類似度と呼ばれる、 文書などの類似度判定に使われるアルゴリズムを使用 使用しているブロックの種類をベクトルの軸に変換し 正解かどうかが判定可能に! 2つのベクトルの内積の値が1〜-1になる性質を利用した方法です。 ベクトルが「同じ方向を向いていれば1」「反対方向を向いていれば-1」 になり、1に近ければ同じ方向を向いているということになり 似ていると判断ができるアルゴリズムになります。 コサイン類似度とは
例1 正解ブロック 実装したブロック
例1 正解ブロック 実装したブロック ( 1 , 1 , 1 )
スタート 待つ 右回転 ( 1 , 1 , 1 ) スタート 待つ 右回転
例1 正解ブロック 実装したブロック ( 1 , 1 , 1 )
スタート 待つ 右回転 ( 1 , 1 , 1 ) スタート 待つ 右回転 類似度計算 1.00
例1 正解ブロック 実装したブロック ( 1 , 1 , 1 )
スタート 待つ 右回転 ( 1 , 1 , 1 ) スタート 待つ 右回転 類似度計算 1.00 同じ
例2 正解ブロック 実装したブロック
例2 正解ブロック 実装したブロック ( 1 , 1 , 1 ,
0 ) スタート 待つ 右回転 ( 1 , 1 , 0 , 1 ) スタート 待つ 右回転 大きさ 大きさ
例2 正解ブロック 実装したブロック ( 1 , 1 , 1 ,
0 ) スタート 待つ 右回転 ( 1 , 1 , 0 , 1 ) スタート 待つ 右回転 類似度計算 0.66 大きさ 大きさ
例2 正解ブロック 実装したブロック ( 1 , 1 , 1 ,
0 ) スタート 待つ 右回転 ( 1 , 1 , 0 , 1 ) スタート 待つ 右回転 類似度計算 0.66 比較的似てはいる 大きさ 大きさ
正誤の判定が可能になった 成績
どのように成績を付けているか?
概念の洗い出し 順次実行 30概念位を定義してあります 繰り返し 条件分岐 などなど …
概念をチャプターに紐付けて概念別に成績を付与 順次実行 S 繰り返し 条件分岐 … チャプター1 A B チャプター2
チャプター3
結果 順次実行 条件分岐 よし先に進もう チャプター3を もう一度やろう S B
結果 順次実行 条件分岐 よし先に進もう チャプター3を もう一度やろう 今後の学習の進め方がわかりやすくなる S B
None
画像同士における衝突判定
None
・透過部分は衝突させたくない ・今後専用のお絵かきエディタを実装する予定があり、 ユーザーが自由に素材を作成できる機能が入る ・画像は縦横比を保ったまま拡大縮小される 要件
ブロードフェーズとナローフェーズに分離
ブロードフェーズは矩形での判定
ブロードフェーズは矩形での判定 当たった!
当たった! 矩形同士の判定であればすごくシンプル
透過部分が重なっている場合でも判定されてしまう
ブロードフェーズで重なったと判定できたあと、 ナローフェーズでの工夫が必要
ナローフェーズにおける判定
案1 事前に判定領域をパス情報として用意する
判定領域用のパスを保持するようにしようと思いましたが “ユーザーが自由に素材を作成できる機能が入る” という要件があったため厳しそう
判定領域用のパスを保持するようにしようと思いましたが “ユーザーが自由に素材を作成できる機能が入る” という要件があったため厳しそう
判定領域用のパスを保持するようにしようと思いましたが “ユーザーが自由に素材を作成できる機能が入る” という要件があったため厳しそう
案2 ピクセルレベルでの判定
重なった領域のみピクセル単位で判定
重なった領域のみピクセル単位で判定 処理が重い
重なった領域のみピクセル単位で判定 処理が重い
案3 前処理&判定エリアの簡略化
リアルタイムピクセル判定は厳しい 一度だけ前処理をすることで リアルタイム判定を軽くできないか?
画像をロードしたタイミングで正方領域に分割し 領域内の透過ピクセル数の比率で、領域を衝突判定領域とするかを決定する この時、分割最大数を決めることで 画像のサイズに応じて分割数が多くならないようにしています。
画像をロードしたタイミングで正方領域に分割し 領域内の透過ピクセル数の比率で、領域を衝突判定領域とするかを決定する この時、分割最大数を決めることで 画像のサイズに応じて分割数が多くならないようにしています。 判定領域としない 判定領域とする
判定領域を算出
計算しやすいように判定領域を矩形ではなく円にする
隙間を埋める
円同士の衝突判定をする 距離関数(三角関数)で判定できるため、計算量が少なくなります
判定領域を円にすることで 拡大縮小や回転への計算も対応しやすくなる 行列を使用することで容易に対応できる
こういった場合は衝突とみなさなくなった
この場合は衝突とみなすようになった
この場合は衝突とみなすようになった 良い感じの判定
・パフォーマンスと判定のバランスが良い ・精度的には落ちる部分はあるが問題ないレベル
まとめ
・Tech Kids Schoolのノウハウが詰まったカリキュラム ・正誤判定にはコサイン類似度を利用 ・成績から得意不得意がわかり、学習計画が立てやすくなる ・透過PNG同士の当たり判定は領域の簡略化を画像ロード後 前処理として行うことで予め決められた判定情報を持たず に対応可能に
告知
None
ご静聴ありがとうございました