PaSoRich – ICカードリーダーをScratch3.0で

グラフィカルなプログラミング環境であるScratch

2019年に3.0へと移行し,HTML5対応Webブラウザのみでも利用できるようになりました。

Scratch 3.0には「拡張機能」を追加する仕組みがあり,ブロックを増やすだけでなく,外部機器を制御できるようになっています。たとえば「micro:bit」や「LEGO Education WeDo 2.0」といったものです。

Scratch 3.0自体がリリースされて間もないため,拡張機能は限られたものが提供されている段階です。いずれ様々な拡張機能が登場したり,ユーザーが作ったものを申し込みで追加できるようになると思います。

今回,Scratch 3.0の拡張機能としてICカードリーダーを扱えるように作業してみました。

量販店で最も入手しやすいICカードリーダーの1つであるソニー社「PaSoRi」パソリをScratch 3.0で利用するための拡張機能「PaSoRich」パソリッチです。

PaSoRi with Scratch 3.0
https://github.com/con3office/pasorich

これを利用するとICカードの識別番号を読み取ることが出来ます!

Pasorich2019

簡単なデモプロジェクトでは,「s」キーでICカードを読み取って配列に識別番号を登録し,「スペース」キーでICカードを読み取って登録した識別番号に対応したセリフを表示します(デモなので3パターンだけ)。物理的なカードと画面上のステージを組み合わせたプログラムが組めるわけです。

ICカードは,いま使っている会員カードや電子マネーカードが利用できます。使い切って家で眠っているもの,旅行先で利用したが持って帰って使ってないものも使えます。

つまり,カードを入手するのに大きな苦労はしない上,数を用意するのも難しくない。それでいて,識別番号という面白い特性が利用できるのです。

カード対戦ゲームを作ることから始まって,かざす果物カードによって果物が表示されていく提示教材とか,宝探しで見つけ出したヒントカードをかざすと次なるヒントが音声で流れてくるとか,児童生徒カードと先生カードとの組み合わせでいろんな記録システムを作成するといったことも可能です。

ちょっと面白そうでしょ?

(追記)

試す環境を構築するのも大変なので,デモサイトを用意してみました。

Scratch 3.0 GUI with PaSoRich
https://con3office.github.io/scratch-gui/

Windows環境の方はICカードリーダーが認識されないことがあります。以下のZadigという汎用USBドライバをインストールすると認識することもあるようです。Windowsユーザーの方はお試しください。

Zadig - USB driver installation made easy
https://zadig.akeo.ie/

(追記ここまで)

でも残念ながら,いまのところこの拡張機能を使うのはとても難しいです。

第1に,ICカードリーダーが必要です。ソニー社のパソリという製品のみ対応です。

第2に,ChromeというWebブラウザのみ対応です。

第3に,冒頭で説明した理由のため正式なScratch 3.0では利用できません。

第4に,技術的理由で,ネットを介した環境では利用できません。
(これはHTTPS通信なら大丈夫だったようです)

へ?それではどうやって使うのか?

自分のコンピュータに自分専用のローカルなScratchをつくって,そこで利用するしかありません。(もしくはデモサイトをどうぞ。)

PaSoRichを追加したローカルなScratch環境を構築するのです。

以下が手順です。

  1. コンピュータに「Node.js」と「Git」というソフトウェアをインストールする
  2. GitHubサイトにあるScratchの大元ソフトウェアをコンピュータにコピーする
  3. 2.をするときは,あらかじめPaSoRichを追加したバージョンを選んでコピーする。
  4. コピーしたScratchの準備を整え,scratch-guiを(「npm start」で)動かす
  5. Webブラウザで http://localhost:8601(または http://0.0.0.0:8601 )をアクセスする
  6. ローカルなScratchが使い始められるのでPaSoRichの拡張機能を追加する。

以上です。

PaSoRichを組み込んだ「scratch-vm」と「scratch-gui」のGitHubリポジトリは以下の通りです。

https://github.com/con3office/scratch-vm

https://github.com/con3office/scratch-gui

これを以下のページの説明のように作業を進めることでローカルなScratchを構築できます。(アドレスを置き換えて入力します。)

Scratch 3.0の拡張機能を作ってみよう/下準備

ぜひ挑戦してみてください。

(追記)

動作条件が厳しく,動かないケースが多いと思われます。まさに挑戦して確かめてください。

[参考情報]Web USBでPaSoRiを扱えるOSをまとめてみた

20190119_Sat サーバー整理とプログラミング教育

センター試験担当ではなく休日。

さすがに職場に入構することは出来ないので文献資料を持ち帰って自宅で過ごす。研究会発表の原稿を書きたいのに,頭の中で熟成が追いついておらず,なかなか文字にならない。現実逃避が続く。

インターネット・サーバーを何らかの形で管理している研究室は多い。

このブログも職場外のレンタルサーバーを借りてサイトを構築し,ドメイン名を確保して公開・情報発信をしている。いろいろ実験もしたいので,複数のサーバーやドメイン名を確保していたりする。

当然のことながら経費はかかる。そして,経費節約のため見直しは大事。

稼働しているものを確認して,サーバー整理出来ないか検討を始めた。

ブログのWordPress,WikiのMediaWiki,メーリングリストのMailman,SNSのMastodonなど,それに付随するものも含めて,あれこれサービスを設定してきた。これを機会にアップデート作業もしておこう。

アマゾンWebサービス(AWS)に構築したサーバーを最小モデルで動かし続けているが,これはさすがにコストがかかる代物なので,愛おしいコンテンツたちを退避した上で他に統合することにする。

小学校段階のプログラミング教育に関して,さまざまな捉え方がある。

もっとも「学習指導要領が示した情報活用能力育成の一環としての小学校におけるプログラミング教育」という限定的文脈で考える場合は,同じ小学校での取り組みを考えるにしても,学習指導要領改訂の経緯に沿わなければならないところもあって,議論をする際にはどういう前提なのかを明確にする必要がある。

学習指導要領が示す前提を無視するなら,小学生でWordPressを使ったエントリー記事作成やら,ブログ更新アプリを利用した積極活用なんてことをすると,それはもしかしたらサーバーサイドのアプリケーションプログラミングに役立つかも知れないから,長い目で見た場合のプログラミング教育の入口(体験)の一つなんじゃないかと言えないこともない。

Raspberry Piで自分コンピュータを構築するという作業だって,そういう体験の一つになり得るんじゃないの?と言うこともできる。いっそのこと図画工作室にメイカースペースを作れば,フィジカルなプログラミング体験の推進だと叫ぶことだって出来るやも知れない。

学習指導要領が示す前提を踏まえるなら,いくらサーバーアプリを活用しても,自分コンピュータを構築しても,メイカースペースを確保しても,それはねらっているプログラミング教育ではない。

とはいえ,学習指導要領が示す前提を踏まえたプログラミング教育の実像が何であるのか,何にするのがベターなのかは,数少ない例が示されている以外はこれから積み上げていくことになる。その部分に関して言えば,まだ多様な姿があり得る部分だし,学校にかかわる人々の間でどんどん発想していけばよい。

プログラミング的思考については,定義と呼ばれるものが置かれたものの,それをどういう文脈に配置して展開させるのかは曖昧なままである。そういう文脈が何なのかを模索する部分なら知恵を出し合う余地が残されている。いろいろなアプローチが登場しているが,これといったものはまだない。

そんなことを考えながらサーバーのメンテナンスをしていたら,自分でWebサービスを構築してみたい気持ちになってしまった。

スマートフォンアプリは開発したことがあるが,Webアプリケーション開発には本格的に取り組んだことがない。プログラミングというよりはアプリケーションフレームワークをカスタマイズするといった方が近いようにも思うが,さて,どうだろうか。

プログラマブルであることと,カスタマイザブルであることの境界線はすでに曖昧化しているが,そういう技術変化の中では,もはや「プログラミング教育」という言葉で考えること自体が難しくなっているのかも知れない。

20181217_Mon

センスメイキング』(プレジデント社)を手にした。

実はほぼ同じ主張をしている同じ著者の本『なぜデータ主義は失敗するのか?』(早川書房)を少し読んだことがあった。

簡単に書けば,データサイエンスといった自然科学的な手法に圧倒されるばかりでなく,人文社会科学的なセンスメイキングもお忘れなくという主張である。もう少し踏み込んで書けば,センスメイキングの方がより重要だということだ。

実はどちらの本にも,プラグマティズムの創始者として知られるチャールズ・S・パースが整理した「アブダクション abduction」(仮説形成)のことが触れられている。これは推論方法の一種で,よく知られている「帰納法」(induction)と「演繹法」(deduction)に並ぶ第3の方法とされている。

もともとは近代科学の方法を探究していたベーコンによって,単純枚挙による帰納法ではない「真なる帰納法」として模索されていた手法であり,その日本語訳が想起させるように,問題に対する仮説を形成した上でそれを検証するというものだ。単なる帰納法とも演繹法とも違う。

それで宿題を思い出した。

以前,ブログに「プログラミング的思考と論理的思考」を書いた。

そこで「問題解決に際して,帰納的思考を展開するのか,演繹的思考を展開するのか。そういう観点からプログラミング的思考と論理的思考を位置づけて論じること」もできるかも知れないと書いて,そのままにしていたが,ここに「アブダクション」(仮説形成)が登場する展開になるであろうことは容易に想像がつく。

端的に書けば,プログラミング的思考とはアブダクション(仮説形成)による思考のことである。

「プログラミング的思考」なる言葉を持ち出した人々が意図しているのは,プログラミング的思考の育成によってアブダクションにもとづく思考方法や手法が育成されることだといえる。

ところが,そのことを明確に意識して論じたものがほとんどないため,プログラミング的思考を論理的思考として検討する際に,帰納法的に捉えたり,演繹法的に捉えたりする視点が混在してしまい,議論が迷走してしまうのである。

たとえば,プログラミングにおける「順次」「分岐」「反復」という要素について,これらを用いてアルゴリズムを考えることが重要であるといった理解は,プログラミング的思考の演繹的な部分だけを見ているだけに過ぎない。

また,意図する動きを実現する方法に[いくつかの模範解答があると考えて、それらから記号や組み合わせを学ぶといった捉え方も帰納的な部分を試みているに過ぎない。]正解はないのだからどんな命令や記号でもよい,といった多様な方法を許容するという考え方は,逆に単純枚挙な(帰納的)態度が行き過ぎたものにも似たように捉えられる。コンピュータプログラミングには,計算処理コストなどの現実的な制約が存在する。(訂正:当初書いた内容だと、むしろ「真なる帰納法」に」近いものになってしまうことに気づく。アブダクションは発見の方法であり、仮説をどんどん形成することにこそ意味があるのだから。)

ここに第3の方法である「仮説形成」手法がプログラミング的思考を指向する際の基調になり得る余地が見出される。

もともと,教育学でお馴染みのジョン・デューイによる問題解決学習に関する言説を見れば,プラグマティズムの考え方があり,よってアブダクションの考え方も自ずと反映されている。問題解決としてのプログラミング的思考にそれを重ね合わせる考え方もそれほど目新しいものではないだろう。

しかし,いまだ「プログラミング的思考」にまつわる論説や議論において,明確な特性を示しえていない状態が続いているため,プログラミング的思考を「どのように扱うのが妥当であるか」の基準を個々の教員に持たせられないでいる。

ここではっきりと「プログラミング的思考とはアブダクションによる思考である」と措定し,問題解決の文脈で展開されてきた仮説形成と検証の蓄積を土台にしてコンピュータや情報通信技術の課題に取り組んだ方が,同じ悩むとしてももっと明確に悩めるのではないかと思う。

20181205_Wed

研究室の段ボール整理。

スチール書棚を追加し,引越用段ボールに入ったままの文献資料を取り出したものの,まだ段ボールは残っている。中身を確認して廃棄作業に取りかかる。

旧い教育関係の新聞が溜まっているので,興味深いIT/ICT関連記事が掲載されている号を除くために駆け足で紙面を参照する。ちょうど10年くらい前のものだが,あまり進展が感じられない内容も多く,日本の教育の不易の安定性に呆れを通り越して感心すらしてしまう。

そんなタイミングに,職場にもかかわらず新聞勧誘がやってきて,新聞紙を捨てようとしていた場で,流通関係の新聞紙を契約することになってしまった。一生懸命に可哀想な新聞社営業マンを演じていたのと,こちらもネットで新聞記事を活用させてもらっている後ろめたさもあり,3ヶ月だけの限定講読のボランティア。けれども,こんな勧誘するなら,これ以降は二度と新聞講読しないことを心に誓う。

学生たちがプログラミング体験活動。

児童研究という時間帯が確保されていて,学生たちの自主活動に充てられている。ある活動グループがプログラミング体験をしたいというので,iPadやSpheroとMESHを貸し出し。

あらためてSphero(ボール型ロボット)の掴みの強さを感じた。まずはリモートコントロールで自由自在に動かす体験で楽しんでから,設定されたゴールにプログラミングしたコードで到達する課題に挑戦する流れ。

使っているのがSphero miniということもあり,フローリングでは移動中のスリップも多くて,同じプログラミングコードでも毎回の動作結果が一致しないことがある。それも込みで楽しく試行錯誤していたが,教育となるとここからどう活動をデザインするかは課題かも知れない。

MESHは傾き/振動センサーとジェンガを組み合わせてゲームを楽しんでいた。こちらはセンサーをどのように組み合わせるのかで多様な活動デザインが可能だと思う。ジェンガ・ゲームに組み合わせるというのは,なかなか楽しいと思った。

今回は,プログラミングに抵抗感をいだく後輩学生たちに興味関心を持ってもらうための活動だったので,難しいことは考えるべきではないが,こうした導入からもう一歩先へ進むための道筋を考えることはとても大事だと思う。

20181102_Fri

卒業研究の指導など。

算数ドリルWebアプリケーションの開発に挑戦しているゼミ生たちが,研究室にやって来て開発作業に取り組んでいる。

といっても数カ月前からHTML5やらWeb開発やらを取り組み始めたばかりだから,とにかく見様見真似状態で試行錯誤が続く。初めてプログラミングに取りかかろうというのだから,エディタソフトの選定やら,開発と実行環境の違いやら,そういうところの理解をするのもなかなかのハードルであった。

HTML5でWebアプリを組むといっても,HTML, CSS, JavaScriptは当然として,JQueryやBootstrapといったものライブラリの利用が混ざったサンプルなんかも出てくるから,それを紐解くだけでも大変である。さて,どこまで実現できるかは彼らの努力次第といったところ。

私もせっかくだからGoogle App Scriptを勉強がてらいじってみることにした。昨今は参考書として『詳解! Google Apps Script完全入門 ~Google Apps & G Suiteの最新プログラミングガイド~』や『Google Apps Script Webアプリ開発 超入門』といったものが発刊されたので取り組むのに良い機会だ。

専門ゼミナールでは,3年生達と卒業研究の話。

そろそろテーマについて考え始める頃となった。どんなことに関心があるのかを出したもらって,絞り出したり絞り込んだりしよう。