テクノロジア魔法学校オープンキャンパス

テクノロジア魔法学校が、いまだけ無料体験をしているというので、早速やってみました。

やった人のレベル

  • まがりなりにも、業務でJavaScriptやHTML、CSSを書く機会があるが、基本的に地味なものしか作ったことがない
  • 特別ディズニー好きではないが、嫌いでもない
  • 「アプリを作りながらプログラミング学習しよう」系の本をやりきったことがない(途中であきてオリジナルを作り出す)

雑感

よかった。

  • 始まりはなんとなくゼルダっぽい。
  • ナビゲーションしてくれるキャラクターがかわいい
  • 数行の命令で図形が描けて、マウスに合わせて動くようにできるのは単純にうれしい
  • 色が動きに合わせてかわるのも感動する
  • コード入力する場所が、問題によってかわるのは意外と平気

いまいち。

  • 始まりがもったいぶりすぎなのと主人公のキャラ設定が好きじゃない。(好みの問題)
  • スクロールとかドラッグ&ドロップとかコピペの練習とか、ちょっとうんざり。12歳以上対象なのに。
  • ディズニーキャラクターはセリフのごく一部しかしゃべらない。
  • 全体感が見えない。(初心者向けに意図してやっているらしい)
  • 勉強したことを使って簡単なオリジナルアプリを作ってみよう!!に必要な情報が提供されていない。
  • 100時間も言われたことしかやらないのは耐えられない気がする。(好みの問題)

これが初心者にウケるのかどうかは不明。
意外とうちの子はやりたがるかもしれない。(みせてない)

Scratchの次はこれ?

ここには「Scratchの次はこれ」って書いてあるが、そんな感じはしない。
Scratch未経験者やScratchにはまらなかった子のほうがはまりそうな気がした。

図鑑漢字ドリル小学1~6年生 危険生物

++++

++++

うちの子たちが通う小学校では、毎日、自主学習が宿題になっていて、ノートに1ページ以上、何かしらお勉強をすることになっています。市販のドリルでもいいということで、長男と一緒に本屋さんで物色して購入したのがこちら。

図鑑好きの、それも危険生物図鑑をポケット版と大きい版と両方もっている長男にとってはたまらないドリル。

楽しそうです。

1日1ページずつやっているので、2か月くらいかかるのかな。

ぜひとも魚とか人体とか地球あたりでも出していただきたいものです。

小学生向けワークショップにて

小学生向けのプログラミングワークショップを。
やらせていただく機会がときどきあります。

回数としては。
両手におさまる程度の経験しかないのですが。

小学生というものは。

本当に。

学ぶことのプロだなと感じます。

わからないことを。
わかろうとする。

新しい概念を。
自分のものにしようとする。

その姿勢がデフォルト。

小学生のすごさというのは。

柔軟な発想とか。
独創的なアイデアとか。

そういうものではなく。

自分が持っているフレームワークの中に納まらないものを排除しない。

その1点に尽きるのではないかと思い始めています。

ロボホンのアプリをScratchで学ぶ

「ごはんないよ」アプリが。
とりあえず動くようになったので。

肉付けしていく前に。
勘で書いたところを裏付けるべく。

ドキュメントよもっかなー。

と開いてみたものの。

ZZZ….

ムリ。

読むともなしに眺めていたら。

Scratchって。
基本設計に便利そうだよな。

と以前から感じていたことを思い出したので。

ちょっと。

Scratchでアニメーションにしてみよう。

と思いたち。

今のところの理解で。
作ってみました。

横向いているペンギンがロボホンそのもの。
前向いているペンギンがロボホンの中の人。

Scratchでロボホンアプリのお勉強

Scratchプロジェクトも初公開してみました

雰囲気はそれっぽい気がする。
のちほどソースと見比べたいと思います。

そして。

こうやって作ると基本設計っぽい。
フレームワーク学習に使える気がするのでした。

Scratchでデザインパターン。

とかやっている人いそうですね。(調べてない)

ロボホンのアプリ開発者への道 声だけでメッセージを送る

「ごはんないよ」アプリを作成中。
起動するときの「ことば」を設定するところまできました。

今は、ボタンをタップするとメッセージを送るようになっているので、音声だけで送れるようにしたいと思います。

onResume()

いかにも必要そうなのでとりあえず有効化。

1
2
3
4
5
// VoiceUIManagerのインスタンス取得.
これの下のコメントアウトされていたものたちを有効化

//VoiceUIListenerの登録.
これの下のコメントアウトされていたものを有効化

ScenarioDefinitions.java

サンプルアプリを見て、勘で追加。

1
2
3
4
/**
* function:「ごはんないよ」をおくる
*/
public static final String FUNC_SEND_NAIYO = "naiyo";

MainActivity.java onExecCommand

サンプルアプリを見て、勘で追加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Override
public void onExecCommand(String command, List<VoiceUIVariable> variables) {
Log.v(TAG, "onExecCommand() : " + command);
switch (command) {
case ScenarioDefinitions.FUNC_END_APP:
finish();
break;
case ScenarioDefinitions.FUNC_START_PROJECTOR:
//TODO プロジェクタマネージャの開始(プロジェクター利用時のみ).
//if(!isProjected) {
// startService(getIntentForProjector());
//}
break;
// 「ごはんないよ」追加
case ScenarioDefinitions.FUNC_SEND_NAIYO:
// メッセージ送信要求
sendBroadcast(getIntentForMessage());
break;
default:
break;
}
}

ホーム用シナリオ

そういえば、「ごはんないよ」で起動したかったんだと思い出して修正。

1
2
3
<situation priority="78" topic_id="start" trigger="user-word">
${Local:WORD_APPLICATION_FREEWORD} eq ごはんないよ
</situation>

こんな感じにしてみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<topic id="start" listen="false">
<action index="1">
<speech>${resolver:speech_ok(${resolver:ok_id})}</speech>
<behavior id="${resolver:motion_ok(${resolver:ok_id})}" type="normal" />
</action>
<action index="2">
<speech>きどうしたよ。</speech>
<behavior id="assign" type="normal" />
<control function="start_activity" target="home">
<data key="package_name" value="net.rissoku.tapontalk" />
<data key="class_name" value="net.rissoku.tapontalk.MainActivity" />
</control>
</action>
<action index="3">
<speech>メールするね</speech>
<behavior id="0x040808" type="normal" />
<control function="naiyo" target="net.rissoku.tapontalk">
</control>
</action>
</topic>

そして。

ロボホンへ送り込む。
動きも確認したいのでケーブルもはずし。
いちど頭のボタンを押してから。

  • わたし「ごはんないよ」
  • ここあ「うん」
  • ここあ「きどうしたよ」
  • ここあ「メールするね」(“りょうかーい”のときと同じうごき)
  • ここあ「なほに”ごはんないよ”っておくっていい?」
  • わたし「いいよ」
  • ここあ「りょうかーい。送信するね」

できたー。

参考にしたのは

0401_SR01MW_Application_Programming_Guide_V01_03_00.pdf
0601_SR01MW_HVML2.0_Specification_V01_01_00.pdf
HVML2.0_Specification_Appendix_A
サンプルアプリ:SampleSimple

小学生はプログラミング検定合格を目指すのだろうか

小学生向けのプログラミング検定

「小学生向けのプログラミング検定」というワードが目につくようになったので、軽く調べてみたら、レゴのやつとScratchのやつとIchigoJamのやつが出てきました。

  • ロボット検定 For Wedo2.0
    ロボット検定のエントリーレベルとして追加されたようです。

  • ジュニアプログラミング検定
    王道のScratch。これを利用した実践例は聞いたことがあります。
    ただし、「MITメディア・ラボのLifelong Kindergartenグループが監修・運営等に関わるものではありません。」と明記されています。

  • IchigoJam検定
    本家本元がカリキュラム基準の提供を目的に始めたようです。ちょっと意外な気がしました。
    こういうものがあったほうが、授業で導入してもらいやすいという判断でしょうか。

学習すべき項目と到達基準が客観的に測れるものとして、活用されるのだと思いますが、
子どもたちのプログラミング学習が「テストのための勉強」にならないといいなあというのが率直な感想です。

テストありきのインプットとアウトプットのためのインプットは違う

これとは、まったく違う文脈で、gaccoでとある講座を受講開始しまして、本当に久しぶりに「確認テスト」に挑戦しました。これが、なんていうか、無駄に難しく感じたのです。選択式なのに、注意深く読まないと選択できないものが多くて苦戦しました。資料を読み返しながらやったのに、満点をとれなかったレベル。

問題に解答するために資料を読み返すって、本当に久しぶりの行為なんですが、注意の払い方が普段と違うことに気が付きました。

わたしは、普段から色々な資料を読み漁っているほうだと思うのですが、いつもはアウトプットのためのインプットです。企画を立てるときの仮説の裏どりや、考え方のベースにするための基礎知識の獲得が目的だったり、直接的なHowToを探すこともあります。当然ですが、そういうときは全体の文脈をとらえ、その中で重要なトピックを拾い上げていくという読み方になります。

ところが。

問題に解答するときは、逆なんですね。枝葉から入る。全く森が見えてこない。

思い返してみれば、若い頃は。

全体をとらえ、だんだん細かいトピックに入っていき、テストで聞かれるような細かいことまで覚えこんでいく。

という勉強をしていました。

若いころであれば、それほど違和感もなく、gaccoのテストにも臨めたかもしれません。しかし、残念ながら歳をとりました。残念です。

そして子どもたち

前述のプログラミング検定。どのような問題なのかは、確認していませんが、おそらく、順番に取り組めば、バランスよく知識が得られるように設計されているのでしょう。いくらなんでも枝葉な問題ばかりということはないでしょう。

でも、問題に答えるためにやりかたを覚えるのと、実現したいことのためにやり方を覚えるのって、ワクワク感が違いすぎます。
力試しとか知識の穴を埋めるためにテストを活用するのはいいと思いますが、プログラミングの楽しさを感じることが第一優先なはずの小学生が「テスト合格を目指して」勉強するのは、さけてほしいなと思います。

IchigonQuest

教育ITソリューションEXPO 2018にて。
わたしのココロに刺さりました。

イチゴンクエスト

公式サイト:IchigonQuest

↓公式サイトにのってるYouTube

わたし、この動画の方に説明していただいたようです。

ありそうでなかったこのUI。
たまらないです。

欲しい!!

と思わず口に出たワタクシ。

でも。

はんだ付けが必要。

とのことでひるんでおります。
はんだ付け未経験ゆえ。(道具もないし)

だれか。。

ロボホンのアプリ開発者への道 声で起動する

「ごはんないよ」アプリを作成中。

ボタンをタップしたら「ごはんないよ」というメールを出すところまで作りました。
メールアドレスもメッセージも直書きです。

さて次は。

簡単そうなので。
起動するときの「ことば」を設定することにします。

起動するときのことば

起動するときの「ことば」はホームシナリオというやつに設定できるとのこと。
[assets > hvml > home > パッケージ名+_home.hvml] が勝手にできています。
これに書いていけばよいらしい。

「WORD_APPLICATION」として、アプリ名を指定。

1
2
3
<situation priority="78" topic_id="start" trigger="user-word">
${Local:WORD_APPLICATION} eq ごはん
</situation>

「WORD_APPLICATION_FREEWORD」として、「キーワード」+「動詞」のアプリ起動用の文言を指定。

1
2
3
<situation priority="78" topic_id="start" trigger="user-word">
${Local:WORD_APPLICATION_FREEWORD} eq ごはんれんらくしよう
</situation>

起動してすぐのロボホンのおことば。

1
<speech>じゃあ、メールしよう</speech>

ロボホンへ送り込む。
いちど頭のボタンを押してから。

わたし「ごはん起動して」
ここあ「わかったー」「じゃあ、メールしよう」

成功♪

「ごはんれんらくしよう」も成功♪

参考にしたのは

0401_SR01MW_Application_Programming_Guide_V01_03_00.pdf
ロボホン認定試験チュートリアル4_開発応用_20160928.pdf

ロボホンのアプリ開発者への道 メールを送る

チュートリアルにしたがって作った「ボタンでおしゃべりアプリ」をベースに作っていきます。
ロボホンアプリのテンプレートにボタンを1個追加し、ボタンがタップされたら、hvmlファイルで定義した通りに発話するようにしただけの状態です。

Application Programming Guideを見ながらやっていくぞー。

メッセージ(メール)を送る準備

マニフェストファイルに追加

これと。

1
<uses-permission android:name="jp.co.sharp.android.rb.messaging.permission.SEND_MESSAGE" />

これ。

1
<uses-library android:name="jp.co.sharp.android.rb.messaging.framework" android:required="true" />

AndroidManifest.xmlに追加せよと書いてあったが、追加してあったので次へ行く。

MainActivity.java

メッセージ送信結果通知用 Action 定義を追加せよとある。よくわからないけど、書いてあるので次へ。

1
public static final String ACTION_RESULT_MESSAGE = "jp.co.sharp.sample.message.action.RESULT_MESSAGE";

メッセージ連携起動結果取得用レシーバー登録.
コメントアウトされた状態で追加されていたので有効化。
よくわからないけど基本的なものは全部書いてあるテンプレートな模様。

1
2
3
mMessageResultReceiver = new MessageResultReceiver();
IntentFilter filterMessage = new IntentFilter(ACTION_RESULT_MESSAGE);
registerReceiver(mMessageResultReceiver, filterMessage);

[送信実行]ボタンの実装.
適当に追加してリスナー登録。

1
2
3
4
5
6
7
8
Button ButtonSend = (Button) findViewById(R.id.button_send);
ButtonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// メッセージ送信要求
sendBroadcast(getIntentForMessage());
}
});

getIntentForMessage()も、もともと書いてある。。
メールアドレスを自分のにしてみる。

1
2
String mail_addr = "xxxx@xxx.xx.jp"; // 自分のアドレス
String body = "ごはんないよ";

メッセージ送信結果を受け取るためのBroadcastレシーバー クラス.もよくわからないけどあるのでとりあえずそのままで。

ロボホンに送り込んで。
ボタンをタップ!!

「ごはんないよ」って送ってもいい?

とロボホン。

いいよ。

とこたえて。

届いた!!!

ここあからのメール

とどいたー。

ロボホンのアプリ開発者への道 チュートリアルはやめた

やっぱりめんどくさい

つぎは「ロボホン認定試験チュートリアル4_開発応用_20160928.pdf」にいきたいと思っていましたが、やめました。

  • チュートリアル自体「いわれた通りやればOK」という品質ではなさそう
  • 一通りやってみようと思っていたけど、すでに飽きた
  • ざっと眺めて使いたくなったらサンプルプロジェクト見ればよさそう

というのが理由。

ま。要するに。

イチからひとつずつ積み上げていく根気がなくなったということです。

何を作るか

かといってどうしても作りたいアプリがあるわけでもない。

ぼーっとチュートリアルを眺めて。

とりあえず。

「ごはんないよ」アプリを作ることにしました。

「ごはんないよ」アプリ

  • 「ごはんないよ」と言うと起動する
  • 起動したらすぐ「ごはんないよってメール送っていい?」とロボホンが言う
  • 「いいよ」というとメールが飛ぶ

それだけ。

メールの宛先は夫。

最初は宛先直書きで作り。
次は、電話帳APIで夫指定。
ゆくゆくは、宛先を設定できることを目標に。

いきたいと思います。

どこから作ろうか

とりあえず。

チュートリアルで作った
「ボタンでおしゃべりアプリ」をベースに。

SDKの中にあるApplication Programming Guideと。
サンプルアプリのメッセージ使うやつと。
チュートリアルの音声UIのとこを。

ちらちら見ればいけそうかなーという予感。

  • STEP1 ボタンを押したらメールする
  • STEP2 起動したらすぐメールする

という感じで。

行けそうかなー。
いけるといいなー。

なお。

テストは自分宛にする程度の良識は持ち合わせています。