伊藤一成: 複数のプログラミング言語で記述可能なピクトグラムコンテンツ作成環境の提案と実装, 情報処理学会論文誌TCE, Vol.7, No.3, pp.1-11 (2021年10月)に関して,通常情報学広場からの無償ダウンロードは公開後2年経過後です.今回,情報処理学会の論文公開規定に基づき,ピクトグラミングサイトから無償でダウンロードできるようにしました.
伊藤一成: 複数のプログラミング言語で記述可能なピクトグラムコンテンツ作成環境の提案と実装, 情報処理学会論文誌TCE, Vol.7, No.3, pp.1-11 (2021年10月)に関して,通常情報学広場からの無償ダウンロードは公開後2年経過後です.今回,情報処理学会の論文公開規定に基づき,ピクトグラミングサイトから無償でダウンロードできるようにしました.
ピクトグラミングの学習用テキストを更新しました。一つ前のバージョン20210909に対して、「5章 ピクトスイミング」「6章 物体移動」の2章を追加しました。また8章を変更しました。
ピクトグラミングの学習用テキストのページからダウンロードできます。こちらのページも更新いたしました。
引き続きピクトグラミングシリーズをよろしくお願いします。
ブロックピクトグラミング(日本語PC版)にビデオモーションセンサーの機能を実装しました
画面右上にチェック☑を入れて操作するアイコンがあると思います。一番右のビデオのアイコンの右にあるにチェック☑をオンにしましょう。
するとカメラの映像がピクトグラム表示領域にオーバレイされます.
イベントカテゴリのブロック一覧は以下の通りです.
イベントカテゴリのブロックは「実行ボタンが押されたとき」のコ型ブロック内の実行が終了するまで有効なので,実行ボタンが押されたときに「n秒まつ」のブロックを入れておくと良いと思います.この点ご注意ください.
ビデオモーションセンサーのブロックは以下の3通りを用意しています.ある特定の座標の色情報の変化が特定の条件を満たすとそのコ型ブロックの内部のプログラムが実行されます.色情報の取得及びプログラムの実行タイミングは0.5秒おきになっています.
体の特定の場所の明るさの値が30以上変化したときに実行されるブロック.明るさ(明度)の値は,0(暗い)から255(明るい)の間の整数値をとります.最新の値を取得した際,一つ前(0.5秒前)に取得した値より30以上変化しているときに実行されます.
体の特定の場所の明るさor赤色成分or緑色成分or青色成分(0から255)が一定以上変化or一定以上に変化or一定以下に変化したときに実行されるブロック.特定の座標の色情報は,RGBカラーモデルに基づいて保持されています.RGBカラーモデルでは,それぞれの座標に対して,「赤色成分」「緑色成分」「青色成分」に分割し,それぞれの色成分も明るさと同様に0から255の値をとります.このブロックは,指定した体の特定の場所の座標の明るさあるいは指定した色成分の最新の値を取得した際,一つ前(0.5秒前)に取得した値との比較して条件を満たしたときに実行されます.
特定の座標の明るさor赤色成分or緑色成分or青色成分(0から255)が一定以上変化or一定以上に変化or一定以下に変化したときに実行されるブロック 一つ上のブロックでは,体の特定の場所の座標の値を変化の検知の対象にしていますが,こちらは,指定された特定の座標を対象としています.
イベントの検知及び発生タイミングは0.5秒おきになっています.
下は,人型ピクトグラムの左手を触ってあげると喜ぶプログラムです.
とりあえずの実装なので,ご容赦ください.Tentativeバージョンとして,今後改良をしていきます.
ちなみにイベントカテゴリには,キーイベントのブロックも実装してますので,ちょっとしたミニゲームなどを作成することもできます.
ビデオ機能のない,一つ前のブロックピクトグラミング(日本語PC版旧版)旧版を使いたい方はこちらからアクセスください.
ピクトグラミングシリーズには,タートルグラフィックスの機能があります.
ピクトググラミングシリーズ独自の特徴として
1. 移動や進行方向の変化に時間の概念を取り入れ可能
2. 人型ピクトグラム回転,移動命令と同じく,「待ち」命令を取り入れている.
があります.
ブロックピクトグラミングを例にあげます.タートルグラフィックス関係のブロック(命令)は以下のとおりです.
ピクトグラミングでは,以下の通りです.第2引数に時間を指定できるようになっています.また,後ろにWをつけたFDW,BKW,RTW,LTW命令もあり.Wが付くか付かないかの挙動は,R,RW命令やM,MW命令と同様の対応関係になっています.Picthon(ピクトグラミングPython版)やJavaScpict(ピクトグラミングJavaScript版)でも同様になります.
命令の様式 | 処理 |
---|---|
FD arg1 [arg2] |
人型ピクトグラムを進行方向にarg2 秒かけて距離 arg1 だけ等速で進める.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
BK arg1 [arg2] |
人型ピクトグラムを進行方向と逆向きにarg2 秒かけて距離 arg1 だけ等速で進める.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
RT arg1 [arg2] |
人型ピクトグラムの進行方向をarg2 秒かけて時計回り方向に角度 arg1 だけ等角速度で回転する.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
LT arg1 [arg2] |
人型ピクトグラムの進行方向をarg2 秒かけて反時計回り方向に角度 arg1 だけ等角速度で回転する.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
FDW arg1 [arg2] |
人型ピクトグラムを進行方向にarg2 秒かけて距離 arg1 だけ等速で進める.移動が終了するまで次の命令は実行されない.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
BKW arg1 [arg2] |
人型ピクトグラムを進行方向と逆向きにarg2 秒かけて距離 arg1 だけ等速で進める.移動が終了するまで次の命令は実行されない.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
RTW arg1 [arg2] |
人型ピクトグラムの進行方向をarg2 秒かけて時計回り方向に角度 arg1 だけ等角速度で回転する.回転が終了するまで次の命令は実行されない.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
LTW arg1 [arg2] |
人型ピクトグラムの進行方向をarg2 秒かけて反時計回り方向に角度 arg1 だけ等角速度で回転する.回転が終了するまで次の命令は実行されない.arg2 が 省略された時は,arg2 に0が入力されているものとして取り扱う. |
また各言語の表記は以下の通りです.
英語表記 | 英語 | 日本語 | にほんご |
---|---|---|---|
FD | Forward fd |
前進 | ぜんしん |
BK | Backward bk |
後進 | こうしん |
RT | RightTurn rt |
右回り | みぎまわり |
LT | LeftTurn lt |
左回り | ひだりまわり |
FDW | ForwardWait fdw |
前進待ち | ぜんしんまち |
BKW | BackwardWait bkw |
後進待ち | こうしんまち |
RTW | RightTurnWait rtw |
右回り待ち | みぎまわりまち |
LTW | LeftTurnWait ltw |
左回り待ち | ひだりまわりまち |
今回,以下の変更を行いました.
1. タートル描画に関する命令を使った場合,自動的に大きさ0.1, 線の太さ1, 体に対する描画がonになる.
2. 描画中は人型ピクトグラムが進行方向を向く.
1.は,ピクトグラム作成が主題ですので,大きさや線の太さはデフォルトにしています.よってタートル描画をする際,大きさや線の太さを変更する命令を記述することが最初に必要でしたが,これを省略し,描画に集中できるようにしました.
また,ピクトグラミングシリーズは正面からの視点でした.タートルグラフィックスでは上からの視点が望ましいです.2.は,プールや海の上で泳いでいるのを上からの視点で表示しているイメージを想像してもらうために進行方向を向くようにしました.人型ピクトグラムは顔や衣服などがないので,このような泳ぎメタファの導入によって正面視点と上から視点の両方の切り替えが可能となりました.
ブロックピクトグラミングを使った例を示します.
まずは正五角形です.
”待ち”のあるなしと時間をうまく組み合わせることにより様々な図形を描画できます.
今回の変更はピクトグラミングシリーズ全てが対象です.ピクトグラミングのPython言語版Picthonの例です.同じくWと時間をうまく組み合わせることにより様々な図形を描画できます.
for _ in range(4): pic.FD(200 * math.pi * 1/4, 2) pic.RTW(90, 1) pic.LTW(90, 1) pic.RT(90)
ブロックピクトグラミングのブロックカテゴリ名も,「タートル」から「泳ぎ」(英語版 Swimming)に変更いたします.
またタートルグラフィックスの機能に関する名称に関しましても,ピクトグラミングシリーズでは以後,説明で参照する場合を除き,この機能に関しては「ピクトスイミング」という名称を使っていきたいと考えております.これまでも,「私は人型なのになぜ”タートル”なのか」と人型ピクトグラムから常に言われておりました.やっと肩の荷が降りました.このアイデアは,すっとこさまよりいただきました.ありがとうございました.
ピクトグラミングで、タートルにしたときに、ピクトさんも描画方向に向けて回転して欲しいなぁ…。
— すっとこ (@suttokodokkoy) September 30, 2021
そんな(浮いている、泳いでいる)イメージでした。やっぱり、オリジナルの「タートル」も上からの視点でしたし。
— すっとこ (@suttokodokkoy) September 30, 2021
関数や手続きの中で自分自身を呼び出す処理を再帰呼出しといいます.
プログラミングを学習する際,この再帰の概念でつまづく人も少なくありません.
懸垂を10回するプログラムを例に再帰について考えてみたいと思います.
図 (1)
図 (2)
これを再帰を使わずにブロックピクトグラミング(ピクトグラミングブロック版)で作成した例です.回数を引数指定して懸垂をする関数(実際は手続き)「懸垂」,図(1)の状態にする手続き「初期状態」と,図(1)→図(2)→図(1)の状態変化をアニメーションで表現する手続き「1回曲げ伸ばし」が定義されておりこちらは折りたたんで表示してあります.人型ピクトグラムとは異なる視点である第三者視点だと,繰返しを使った表現が思いつくでしょう.
次に再帰を使って,記述してみます.こちらは関数(実際には手続き)「懸垂」の中で「懸垂」を呼び出しています.皆さん1回懸垂をしては,あと何回だ!がんばろう!と繰り返し念じた経験はないでしょうか?もちろん懸垂以外の,腕立て伏せ,トラック一周,漢字の書き取り…..など繰り返す処理であれば同じことが言えます.これは,実際に懸垂をする人型ピクトグラムになりきって考えた視点と考えられるでしょう.
再帰の考え方を教えるのにご苦労されている先生方多いと思います.ハノイの塔だったり,再帰図形だったりと色々工夫されたりしますが,一度こういうのからスタートするのはいかがでしょうか?いかなる人も反復的な身体動作に関する身体知は有していると思います.
画面は大きく分けて二つの部分から構成されます.上は,ピクトグラムを表示する「ピクトグラム表示領域」,下は,プログラムを記述する「プログラムコード入力領域」です。
プログラムコード入力領域にプログラムを入力することで,人型ピクトグラムのポーズを変えたり動かしたりすることができます。ピクトッチでは,ブロックを組み合わせてでプログラミングできます.
ピクトグラミングではプログラムの作成途中において3つの機能をオンオフできます.
画像(名称) | 説明 |
---|---|
![]() |
画像の右に表示されているチェックボックスをオンにすると,座標系が表示されます.座標はXY座標系(X方向とY方向の値,両方を組み合わせて位置を表現する)です.横方向がX座標で左端の-320から右端の320まで,縦方向がY座標で上端の-320から下端の320までをとります.つまり,中心が(0,0),左上が(-320,-320),右上が(320,-320),左上が(-320,-320),右上が(320,-320),つまりX軸正方向が右,Y軸正方向が下となります.数学の座標軸とY軸だけ逆方向なので注意して下さい. |
![]() |
画像の右に表示されているチェックボックスをオフにすると,人型ピクトグラムは「ピクトグラム表示パネル」上でピクトグラムの体の部位を直接ドラッグすることででも操作することができます。また線分や楕円などの図形もスマホ操作で描くことができます. |
![]() |
画像の右に表示されているチェックボックスをオンにすると,「プログラムコード表示領域」に改行コードを入力した(エンターキーを押した)場合にはプログラムを実行せず,「初めから再生」ボタンを押したときのみ実行されます. |
ピクトッチでは再生・停止などのコントロールは,コントロールボタンから制御します.
画像(名称) | 説明 |
---|---|
![]() |
はじめから再生する. |
![]() |
はじめから早送り再生します.全体の実行時間が長い時に,概略を知るのに便利です. |
![]() |
停止します. |
![]() |
停止している状態から再生します. |
![]() |
プログラムコード入力領域に記述されているプログラムをすべて消去します.消去前に確認のダイアログボックスが表示されます. |
作成したコンテンツのダウンロードは2通りあります。
[1. ショット画像のダウンロード]
(1)画像ダウンロードボタンを押すと,作品名.png の名前でショット画像が保存されます.
[2. アニメーションのダウンロード]
(1)動画ダウンロードボタンの右側にあるチェックボタンをオンにします.
(2)一度最初から最後まで実行します.ゆっくり実行されますが,内部的にはアニメーション画像が動的に生成されています.
(3)動画ダウンロードボタンを押すと,作品名.gif の名前でアニメーション画像が保存されます.
画面右上のプログラムコード入力領域にブロックの形状の命令を組み立てて定義します.
ピクトッチでは,ピクトグラム表示領域上における様々なスマホ操作により,対応した命令を自動的にプログラムを記述する領域に追加できます.
タップする場所 | スマホ操作 | 処理 |
---|---|---|
人型ピクトグラム | 1本指でドラッグ | 人型ピクトグラムの対応する部位を回転 |
2本指でドラッグ | 人型ピクトグラムの平行移動 | |
人型ピクトグラミング以外 | ドラッグ | 線分の描画 |
ピンチイン/ピンチアウト | 楕円の描画 |
ピクトグラミングのビジュアルブロック版である,ブロックピクトグラミングのPC日本語版とPC英語版を更新しました.
主に追加した機能は
1. 反転表示
2. 線画オブジェクトのグループ化と移動
3. 文字列入出力
です.
ピクトグラムというとサイン用途で使われるものが有名ですが,コミュニケーション用途で用いるピクトグラムのデザイン指針を定めたJIST0103(コミュニケーション支援用絵記号デザイン原則)およびISO19027(Design principles for communication support board using pictorial symbols)では,サイン用途の配色と反転した,黒背景に白字のピクトグラムが推奨されています.そのため,「マークを設定するブロック」に「反転」も指定できるようにしました.「マークを設定するブロック」は「図形」カテゴリの一番上にあります.
ピクトグラミングシリーズでは,人型ピクトグラム以外のオブジェクトは基本図形(線分または円)の集合で描きます.従来からフレーム単位の描画(Processingで採用されているような描いて全て消すの繰返し)をすればオブジェクトを移動させる(ように見える)ことはできました.しかしより簡便で理解しやすい方法を実装しました.
一つ以上の基本図形から構成されるオブジェクトを定義できるブロック,定義されたオブジェクトを表示するブロック,定義されたオブジェクトを等速直線移動するブロックの三つを「図形」カテゴリに追加しました.下に例を示します.「物体を定義するための囲みブロックを使い「りんご」というラベルを設定して定義しています.囲みブロックの内部には,円と線分を描く二つのブロックがあります.これが構成要素となります.さらに「実行ボタンが押されたとき」の囲みブロックの中に,りんごを平行移動する命令があり,これにより「りんご」が等速で落下します.単に定義したオブジェクトを,定義した際の位置に表示するだけであれば,「物体〇〇を描く」ブロックを使います.オブジェクトの作成を通じて,複数の命令をまとめラベリングする手続き化の処理に慣れ親しんでもらいます.
等速直線運動以外の動きをしたければ,変数を設定して微小時間ごとに変化量を変えれば,実現できます.これは人型ピクトグラムを移動,回転する場合も同様です.次のプログラムは「りんご」が自由落下します.
ピクトグラミングでは,これまでも吹き出しの形で文字列を一定時間表示したり,ピクトグラムの構成要素として文字列を設定する機能はありました.しかしこれからはいずれも付加的な機能としての位置付けです.
一方,汎用プログラミング言語を用いた初学者向け学習では,文字列入出力をベースとするプログラムが題材になります.今回,カテゴリ「入出力」を追加し,ダイアログボックスを表示し値を特定の変数に格納するブロックと,画面上に小型化した人型ピクトグラムをカーソルに見立てて文字列を整列して逐次表示するブロックの二つを用意しました.この機能はすでにピクトグラミングPython言語版であるPicthonおよびJavaScript言語版であるJavaScpictには実装されていましたが,今回ブロック版にも実装しました.下の例は,高等学校情報科「情報Ⅰ」教員研修用教材でも紹介されている利子を計算するプログラムの例です.同一クラス内で学習者の習熟度に応じてテキスト型とブロック型の言語を併用する運用も想定できます.ピクトグラミングシリーズは基本静止画またはアニメーションピクトグラムを作成するのが目的の仕様になっているため,入力を要求するブロックはプログラムの最初に配置するようにしてください.途中に配置しても最初にダイアログボックスが表示されますので注意ください.
ブロックピクトグラミングPCひらがな版および各種スマートフォン版は順次新バージョンに変更していきます.
また,しばらくの間,各ページのフッタに旧版のブロックプログラミングのアプリケーションページへのリンクは残しておきます.旧版の利用が必要な場合,そちらのリンクを辿って利用ください.
次回の全体のアップデートは2021年年末を予定しています.特に高等学校「情報I」のデータ活用,中学技術科「情報分野」での授業での利用を想定した機能を中心にいくつか追加する予定です.
ピクトグラミングのトップページをリニューアルしました.
アクセスしたデバイスにより自動的に表示するトップページを変更するようになっています.
アクセスしたデバイス用の4通りのアプリケーション(Pictogramming, Block Pictogramming, Picthon, JavaScpict)と使い方へのリンクのみで構成されるシンプルかつ軽量なページです.それ以外の例えば,学習用テキスト,作品例等の関コンテンツへのリンクは全てフッター部分に集約しました.
今後は定常的に,トップページ以外のサイト構造やページをより使いやすいサイトをすべく随時更新していきます.今後ともピクトグラミングシリーズをよろしくお願いいたします.
(1) PC,タブレットでアクセスした場合のトップページです.
(2) スマートフォンでアクセスした場合のトップページです.
ピクトグラミングの派生アプリケーションの一つであるPicthonで,共通テスト「情報」で採用予定のDNCL2をサポートしていきます.
まずは,共通テスト「情報」サンプル問題Q2で提示されているプログラム程度は動作するように実装しました.
人型ピクトグラムが頑張って地面に文字列を描いていきます.
画面下のプルダウンで「DNCL2」を選択すると,DNCL2の基本命令がボタン入力できます.今のところ共通テスト「情報」サンプル問題で使われている最低限度の命令のサポートのみですが,正式なDNCL2の仕様は今後公開されると思います.
DNCLは読むために最適化された記述言語なので,それで読み書きすることの一長一短もあるのですが,検討の余地があると考えて,研究,調査も含め開発していきます.