2020年2月23日日曜日

Scratch 1.4で作ったプログラムをScratch 3.0で読み込んだときの不具合を回避する

Macの新しいOS(macOS Catalina 10.15.x)でScratch 1.4が動かないため、Linux MintPuppy Linuxの力を借りて、Scratch 1.4での開発を続けているところです。先日、Linux Mintで作ったプログラムをScratch 1.4の機能を使って共有(アップロード)したところ、Scratch 3.0上で「コードが見えない」という不具合に遭遇しました。そこで、どんなときに不具合が発生するのかを検証し、解決を試みることにしました。

まず、この不具合が発見されたプログラムについて、LinuxのScratch 1.4からアップロードしてLinuxのFirefoxとMacのFirefox、WindowsのEdgeでScratch 3.0(オンライン)を開いてプログラムを見た場合も、同じく3つの環境でScratch 3.0(オンライン)を開いてプログラムのファイルを直接読み込んだ場合も、いずれもコードが表示されませんでした。Scratch 3.0(オフライン)についても、Linux Mint、Mac、Windowsで試してみましたが、やはり状況は変わりませんでした。

そこで、Scratch 1.4とScratch 3.0(オフライン)で、スクリプトやコードの違いを検証することにしました。問題のないものと問題が起きているものを見比べてみましたが、細かな点で差はあるものの、コードが見えない不具合を抱えているプログラムと問題がないプログラムとの大きな差を感じませんでした。

いろいろ考えながら検証しているうちに、Linux Mintからプログラムをアップロードしようとすると、Scratch 1.4が落ちるという現象が起きるようになりました。さらに困ったことになりました。仕方がないので、同じプログラムをRaspberry PiRaspbian)からアップロードを試みましたが、Scratch 1.4は落ちないものの、エラーを吐いてアップロードが途中で止まってしまいました。Puppy Linux改でもやってみましたが、結果は同じでした。エラーメッセージは、Raspbianで「Failed: INVALID_REQUEST…」、Puppy Linux改で「Failed: address not found」となっているので、どうやらこの作業の間に、Scratch 1.4からアップロードする先が何らかの理由で閉鎖された(一時的なものかもしれません)のではないかと推察しました。

これ以上、問題を検証することが難しくなりました。

仕方がないので、MacのScratch 2.0(オフライン)で開くとどうなるか試してみました。すると、不具合のあったプログラムのスクリプト(コード)が問題なく表示されました。さらに、このScratch 2.0(オフライン)からアップロードすると、Scratch 3.0(オンライン)でもコードが見えるようになりました。同じくScratch 2.0(オフライン)でプログラムを保存すれば、Scratch 3.0(オフライン)で開いてもコードが見えます。とてもややこしい状態ではありますが、Scratch 1.4で作ったプログラムで不具合があっても、2.0で読み込んでアップロードすれば、3.0でもコードが表示されることがわかりました。

こうなると、今後、Scratch 1.4を使い続けることが困難になってきていることが実感できました。とは言え、3.0への完全移行が得策と言えるかどうか、頭を悩ませています。

【追記】Scratch 2.0(オンライン)の頃に1.4からアップロードしていたものは、現在の3.0(オンライン)でもコードが見えるけれど、現在のScratch 3.0で直接1.4の.sbファイルを開いてもコードが見えなくなるものがある、ということがわかってきました。1.4から2.0になる過程で、コードの仕様に関する何らかの変更があり、2.0は、その変換を行っているものと推察しました。また、3.0も公開から今日に至るまで、仕様変更されている可能性があるのかなとも思いました。(2020.3.8)

【追記】この現象は、Linux版Scratch 1.4での日本語の扱いの問題であることがわかりました。Linux MintでWineを動かして確認しました。(2020.3.15)

【追記】Windows版Scratch 1.4で日本語に豆腐(□)が交じる現象が起きる環境を特定しました。(2020.3.15)

2020年2月2日日曜日

今更だけどLinux系OSでScratch 1.4の音(mp3)を再生する機能を検証する

Macの新しいOS(macOS Catalina 10.15.x)で32bitソフトであるScratch 1.4が動かなくなり、Scratchでの教材開発を1.4で続けていくためにはLinuxに頼らざるを得ない状況になっています。(自宅でWindowsは使いません)1.4を使い続けているのは、学校の特殊な事情により、1.4の出番がまだまだあるからです。そんな折、Scratch 1.4で音を再生しようと考えて、ネットにあったフリーの音源(mp3)を読み込ませようと思ったところ、「Unrecognized audio file format」というエラーが出て読み込むことができませんでした。どういうことかわからなかったのでネットで訪ねたところ、いつもお世話になっている@abee2さんより、いくつかヒントをいただきました。mp3のサンプリングbitの問題がありそうだというところに絞って検証をはじめました。

まずは、Scratch 1.4に入っている音で検証してみようと考え、いくつかのファイルを読み込んでみましたが、読み込めないものがあることが判明。これは詳しい検証が必要だと考えて、自宅にあるLinux系OSで動いているいくつかのマシーンで検証することにしました。

  1. Linux Mint 19.3 Tricia(MATE 64bit)
    • フリーのmp3ファイル … ×
    • ScratchのAnimalフォルダ内の「Cat」「Sealion」 … ×
    • その他のAnimalフォルダ内のファイル … ○
    ※/usr/share/scratch/Media/Animal/を見ると、「Cat」と「Sealion」だけmp3ファイルになっていて、残りはwavファイルになっている。ファイルを直接開くと、Linux上で再生される。
  2. Linux Mint 19.3 Tricia(Xfce 32bit)
    • フリーのmp3ファイル … ×
    • ScratchのAnimalフォルダ内の「Cat」「Sealion」 … ×
    • その他のAnimalフォルダ内のファイル … ○
    ※MATE 64bitと全く同じ状況。
  3. Raspbian 9.8(「$ cat /etc/debian_version」にて確認)
    • フリーのmp3ファイル … ×
    • ScratchのAnimalフォルダ内のすべてのファイル … ○
    ※/usr/share/scratch/Media/Animal/の音声ファイルは前2つと同様だが、mp3でもwavでも関係なく読み込むことができた。
  4. Puppy Linux 5.1.1 Wary日本語版にScratchなどを入れたものを使用)
    • フリーのmp3ファイル … ○
    • ScratchのAnimalフォルダ内のすべてのファイル … ○
    ※ダメ元でやってみたのにできてしまって自分がびっくり

フリーのmp3ファイルは、サンプリングbitが32bitらしいことがわかりました。だからLinux MintでもRaspbianでも使えないのは納得できたのですが、なぜPuppy Linuxで使えてしまったのかは謎です。Puppy Linuxでフリーのmp3ファイルを読み込んでプログラムを完成させて、そのプログラムをLinux Mintに持ち込んでも問題なく音が出るようになりました。こんな奇跡的なことがあって良いのだろうか。1つ問題が解決したので良いのですが、普段遣いのLinux Mintで使えないのは困るので、Audacityを使うことにしました。(サンプリングbitを変更するため)否、先述のPuppy Linuxは、私がいろいろいじってCD-Rに焼いたものがあるので、CDブートで使うという手もあります。…う~む、悩ましい。

3年生でのプログラミングの授業~Hour of Code™を利用して

事情により、3年生を相手にコンピュータを使った授業をしてほしいと頼まれたので、調べ学習か何かなのかと思ったのですが、最近プログラミングに挑戦しているからその続きをやってほしいとのこと。そう言えば、Scratchで授業やるのはかなりハードルが高いようで、「他に良い方法はないか。」と相談されていたのでした。その際、ブロックプログラミングに慣れる意味でHour of Code™をすすめたところ、PC支援員さんの支援のもと1時間だけやったようでした。

聞けば、統制型の授業(みんなで同じものに同時に取り組む)だったとか。それなりに楽しかったようだけれども、子供たちはなかなか思い通りに先に進まなかったと聞きました。ならばということで、Hour of Code™のアクティビティの画面を見せて反応を見ることにしました。「覚えてる」「やってみたい」と声が上がったので、学習活動の手順を以下のように示しました。

  1. やりたいものを1つ選ぶ
  2. 同じものを選んだ3人以上でグループを作る
    ※協力してやるから、話し合いながらできる人数を考える
  3. 作業をすることを考えて、PCや場所を選ぶ
    ※グループで使えるパソコンはMAXで人数分
  4. ここまで決まったらやってみよう

何となく選び終えた子たちが声を掛け合うかなと思ったのだけれど、「グループを作る」ということがわからない様子だったので一度中断。狭いスペースに全員集めて、グループ作りについてレクチャーをしました。同じものをやりたいと思っている子が誰なのか、声を掛け合いながら探してグループを作っていく。単純なことなのだけれども、パソコン室ではやったことがないので、慣れていないからできないんですね。グループにしたのは、相談し合いながら自然な学び合いを誘発したかったから。やりたいものが絞り込めていない子たちも、グループになりながら決めることができます。

やり方がわかったら、お互いに声を掛け合ってだいたい3~5人のグループになりました。それでも、同じ課題の子たちが3人以上にならないグループが現れました。よく聞くと、他のどのグループとも違うものを選んでいます。はじめからやりたいものが決まっていて、ずっと声を上げていた子たちでした。ならば、私やPC支援員さんがフォローするから2人でも良いことにしました。

ここまで、プログラミングのレクチャーは全くなし。前時の統制型の授業で「丁寧に指導」されているだろうから、むしろやりたい気持ちが高まっているはず。案の定、はじめのうちこそ操作のことで質問があったものの、「日本語表示にするには」と「ダウンロードはできない」という2つのこと以外は、ほとんど何も教えないですすめることができました。

教室からパソコン室へ移動してからはじめたため、作業時間は正味35分くらいでした。最後まで終わって、修了証のようなものが表示された子が数人あらわれたところで、ほぼ時間通り。はじめから、「残念なことに時間が決まっているから」と話していたので大きな混乱はなかったものの、やはり「もっとやりたい」との声が上がりました。振り返りも、はじめに提示した4項目の中で、どのあたりに問題があったか考えさせるだけ。こちらの狙いは、ブロックプログラミングのやり方や考え方に慣れさせることであって、覚え込ませることではありません。

ここまでできたら、Scratchにもつなぐことができます。「えんぴつに三角形を描かせる」でも「好きな図形を描かせる」でも良い。最低限の用意は必要だけれども、ちょっと難しい課題を乗り越えるための下準備は、これで十分。もしかすると、「遊んでいるようにしか見えない」と思われるかもしれませんが、私には、彼らが脳みそに汗をかきながら、たくさん考えて、学んで、表現したことがよくわかりました。図形を描く課題を選んだ子が、空中に線を描いていたので、「そろそろ紙と鉛筆が欲しくなってる?」と聞いたら、すごい笑顔でうなずいていました。
#もちろん、紙と鉛筆をわたしましたよ。