プログラミング入門の入門

小学2年生のスウちゃん(仮名)は最近、“プログラミング”づいている。

「ロボットごっこ」

1年生の終わりころ、スウちゃんが「ロボットごっこ」をしかけてきた。たとえば「スウちゃん、ちょっと新聞とってきて」と頼んでも、「動かないよ。ロボットに命令してみて。」ってな感じで、新聞一つとってきてもらうのに「前に5歩、左向け。ドアを開けろ。前に8歩……」と延々と指令しなければならない。ゲラゲラ笑ったあと、ロボットと命令者を交代してまたゲラゲラ。

Scratch

これを楽しむということは“プログラミング”に興味を持つかも、と思い、まずはタブレットで楽しめる Scratch Jr. を紹介したら大喜び。が、操作性が今ひとつ(なかなかブロックが思うように移動・接続できない)なのと、単純すぎるのか、ほどなく飽きてしまった。

そこで PC で Scratch を教えてみる。ちょうどその頃(2016年3月末) NHK で「Why!? プログラミング」という番組の放送があり、ますます興味が湧いてきて、かなり真剣に取り組んでいる。

ところが今度は Scratch の自由度の高さが仇となった。キャラクター(コスチューム)を自由に描き変えることができるのだが、そこでお絵かきに夢中になり肝心のプログラムのほうはそっちのけ。まあそれはそれでいいのだけれど。

さらには、なんだか複雑なゲームを構想してしまい、とてもじゃないがすぐに結果が出ないので熱気が冷めてしまった。その前に習得しなければならないものがとてもたくさんある。

ハードウェア IchigoJam

一方で、機会があって「IchigoJam 体験」に参加。スウちゃんは初めてのハンダ付けに挑んだ。案外うまくできるものだ。CPUと数点のパーツだが自分で組み立てて、それでテレビに文字が出るというのは感動するようだ。手で触れることのできる形あるものというも実に大事なことなのだなとあらためて思う。

しかし、いろいろとハードルが高い。コンポジット出力なのでPC用モニターにつなげず、下手をするとテレビにもその端子がなかったりする。家のは大丈夫だったが、いざ始めようとするとテレビの真ん前に本体とキーボードをいちいちセットしなければならないのがちょっと面倒だ。それにそのキーボードの端子も PS/2 だ。これは家にもいくつかあることはあったがどれも US 配列で、日本語JIS配列が前提の IchigoJam BASIC だと、多用するダブルクオーテーションや丸括弧がキートップの印字と異なっていて、スウちゃんはひどく苦労している。しかも黒い画面に表示できるのは白い文字のみ。おっさんホイホイであることは間違いないが、現代の子どもにとって快適な環境とは言えなさそうだ。これを楽しめるようになるには、もうしばらく別のところでの修行が必要だ。

Code.org

Scratch は自由度が高くて的が絞れず、BASIC は何かと障壁が高い上に味気なく、どうしたものかと思っていたところに Code.org にたどり着いた。

  • (+) ステージが細かく設定してある。ゴールが設定されているため気が散らない。
  • (+) ゲーム感覚でクリアしていくことで、飽きることなく続けることができる。
  • (-) 日本語がおかしなところが多い。子ども向けだと翻訳も変えなければならないのだと思わされた。

ゲームっぽいところは良し悪しで、ただそのステージをクリアすることのみが目的となってしまうのがちょっとよくないところ。

スウちゃんは「コース2」から始め、現在はそれを終了しようとしている。「コース3」は日本語訳がされておらず英語のままだ。課題のところはちょっとした文章になっているから自分で理解するのは当分のあいだは無理で隣から教えてやるしかなさそうだが、せめてブロックの単語は英語で覚えてもらうことにしようかなと思っているところ。

ともかく小学2年生である現在のスウちゃんには、これがいちばん受け容れられた。

「ルビィのぼうけん」

そうこうしているあいだに、絵本「ルビィのぼうけん」がちょうど出版された(2016年5月)のでさっそく購入。スウちゃんは主人公が自分と似ているなあととても親近感を覚えて、かなり気に入ったようだ。ワークも、もともと手を動かすのが好きなので特に着せ替えなどは大いに楽しんでいる。

ただ、前に Scratch や Code.org などのビジュアルプログラミング言語を体験してしまっているためか、頭の中だけとか紙と鉛筆だけだけだとなんというか、まどろっこしいような感じらしい。もっと早い時期か、あるいは逆に高学年か中学生くらいになって概念だけを抽象化して捉えられるようになってからのほうが楽しめるのかもしれない。

まとめ

親としてもしっかり事前に構えていたわけではなかったので、いきあたりばったり的に「そういえばこれはどうだろう」と思いついたものに触れさせてみたという感じで、ここまでスウちゃんが実際に体験した順に書いてきた。

いまになって振り返ってみて、ここまでに挙げたものを「小学生が“プログラミング”入門するのに適した順番」に並べ替えてみると、

  1. 「ルビィのぼうけん」
  2. Code.org
  3. Scratch
  4. ハードウェア (IchigoJam や Arduino?)

になるだろうか。最後の項目に前後してテキスト型プログラミング言語(Python だろうか)が入るかなあ。

「子どものプログラミング」というのは流行のようで、習い事としても人気になりつつあるらしい。ちょっと調べてみただけでもいろいろな教材があって、正直言って驚いた。それでもまだ未成熟という感じもして、もう数年経てばきっと多くの事例がフィードバックされて、より洗練された言語、教材、教授法が出てくるのだろうと思った。

「プログラミング学ぶ」ではなく「プログラミング学ぶ」

さて結局のところ、小学校低学年というこの時期だと“プログラミング”といっても、言語はどれかとか具体的なコーディングとかではなく、プログラミングに通じる思考法みたいなもの、つまり

  • 論理的に考える
  • 手順をこまかく分割
  • 類型化してまとめる
  • 条件分岐を考える

というようなことを習得する、ということに尽きる。そしてそれは日頃の遊びやお手伝い(たとえば工作、お料理の手伝い……)にすぐに活かされるものだ。

そう考えると将来プログラムを組めるようになる、とかとはまったく無関係に単に「日常生活にとって大事なことを学ぶ」という、何と言うことはない普段の学校や家庭での学びと何も変わらないのだ。

だから、小学生低学年程度の子どもが“プログラミング”に接するというのは、「プログラミング学ぶ」ではなく「プログラミング学ぶ」ということ、“プログラミング”そのものが目的ではなく、ひとつの手段・道具に過ぎないのだと思う。

繰り下がりのあるひき算で、「減減法は筆算でつまづく」か

スウちゃん(仮名)は2年生になり、小学校でも筆算を習うようになった。早い時期から位取りの概念を掴んでいてもらいたく、家では1桁どうしのころから筆算に慣らしていたので、特に苦労はないようだ。

学校の宿題のドリルをやるのを脇で観察していたらスウちゃんが「自分のやり方でやってもいい?」と聞く。何のことかと思って「いいよ」と返事をして見ていると……。

32-19たとえば「32-19」の場合、スウちゃんは次のようにやる。

  • 2から9はひけない。そこで9から2をひいて、7
  • その7を10からひくと「3」。これを一の位のところに書く
  • 十の位の計算はさきほど使ったぶんの1を減らして、「1」

父である私は多数派(たぶん)のやり方、「10から9をひいて1、それを2とたして3」とやる。調べてみると自分のやり方には「減加法」という呼び名があるようだ。それに対して「減減法」というのがあって、「9のうちひけるだけの2をひいて、ひききれなかった7を10からひいて3」とやるらしい。スウちゃんのやり方は「減減法」の亜種という感じだ。

調べていて、「減減法は筆算でつまづく」というのを何回か見かけた。そうだろうか。

スウちゃんは、筆算の問題をたくさん見ているうちにこの「法則」を発見(という言葉は使わなかったけれど)したとのこと。だから筆算のときだけこのやり方になる。というか彼女の中ではこのやり方自体が「筆算」という解法の一部らしい。それなりに理にかなっており筆算の邪魔になってはいないように見える。将来何か困ることがあるのだろうか。

スウちゃんのやり方は、この論文では「誤りのパターン」と言われている

スウちゃんに繰り下がりの意味をあらめて聞いてみると、学校でも習ったとおりにきちんと説明できる。それに、1年生のときの「20未満ひく1桁のひき算(繰り下がり)」は「ひき算カード」で何か月も宿題として暗唱させられていたから、それはすらすらと口から出てくる。

いずれにしろ、機械的に計算する(筆算とはそもそもそういうものだと思うが)場合はともかく、「ひき算」や「繰り下がり」の意味を見失わないようにしておくことが肝心なのだろう。

WordPress 10周年 (自分の中で)

しばらく何も書かずに間が空いてしまいました。

ふと気がついたらこのブログの最初の記事「WordPressの導入」を書いたのがちょうど10年前でした。それまでの手書き(というのも変ですが、テキストエディタで HTML タグを陽に書きながら、という意味)でWebサイトを作るというのがだんだん億劫になり、何かいいソフトはないものかと探してみてたまたま見つけたのが WordPress でした。その WordPress が現在、ここまで広まっていようとは夢にも思いませんでした。

WordPress の最大の強みのひとつは、このソフトウェアを取り巻くコミュニティの存在です。「ソフトウェアはコピーされても、コミュニティはコピーできない」という言葉を何度も思い出します。この10年のうちの長い時間を日本語版作成チームの一員として過ごせたことをとても光栄に思います。そういう関わりをしなければきっと私は WordCamp にも参加しなかっただろうし、いろいろな人たちに出会うこともなかったでしょう。

WordPress のもうひとつの強みは、これは私の思いですが、GPL を採用していることです。WordPress は、GPL の元で公開されているソフトウェアの中で最も成功しているもののひとつでしょう。GPL であることが今日の WordPress の隆盛の大きな要因だろうと思います。また逆に、WordPress は GPL の理念を広めるのにとてつもなく貢献している存在です。WordPress に接して初めて GPL を知った人は大勢いるのではないでしょうか(もしこれを読んでいるあなたが WordPress を利用しているなら自分のサイトの管理画面の左上の W マークをクリックして「自由について」というページを見てみてください。ここからリンクを張れないのが残念ですが、つまり URL は (自分のサイト)/wp-admin/freedoms.php です。WordPress をインストールして利用していてもこのページはあまり読まれていないでしょう。翻訳に関わった者としてちょっと残念に思っています)。

10年。けっこう長い時間です。たとえば WordPress や GPL をまったく知らない子どもだった人がそれらをよく知って利用するまでになるくらい。さてもう10年経ったら、WordPress や GPL はどう発展しているでしょうね。

薪ストーブのガラスを交換

薪ストーブのある暮らしについて書こうと思っているうちに時間が経ち、その最初がいきなり大きなトラブルのことになってしまいました。

今年(2015年)の初冬は暖かで、シーズン最初の火入れは例年より20日ほども遅く、11月も終わる頃。その2日め、「ピシッ!」という音とともに、ストーブ扉のガラスに、向かって左上から中央ほどまでヒビが入ってしまいました。火はガンガン燃えているし(だからこそヒビが入ったのですが)、どうしようと思っている間にまた「ピシッ!」と音がしてヒビは右下にまで達し、ガラスは2つに割れてしまいました。

この薪ストーブはもう20年ほど前のアメリカから個人輸入のもので、有名メーカーのものでもなく(いま調べてみるとこのメーカーの主力商品は焼却炉)、いまや廃番になっているようで部品として調達することはほぼ無理です。そこでまずはネットで「薪ストーブ 耐熱ガラス 交換」で検索しました。ほぼトップに出てくるブログ記事「薪ストーブのガラス交換」を読み、そこで紹介されているネット通販(これも先ほどの検索でほぼトップに出てきます)で入手できることがわかりました。そのサイトで簡単に見積りをとることができます。電気硝子建材の「ファイアライト」(5mm厚)が耐熱800℃と薪ストーブ向きで、うちのガラスは 400mm×250mm ほどの大きさなので、1万円強になりそうです。

扉をあけて内側から見たところ
ただ、形状が簡単な長方形ではなく、上辺が丸くカーブしています。加工料もいくらか上乗せになりそうですし、何しろこれを正確に伝えなければなりません。せいぜい 1mm ほどの誤差しか許されず、神経を使いそうです。

そこで、直接会って話せるガラス屋さんを探してみることにしました。電話帳(タウンページ)を繰ってみます(紙の電話帳を使うのはかなり久しぶりです)。「ガラス店」の欄は、ガラスが割れたらすぐに電話を受けたいという業者が、町名をやたらと羅列して何行にもわたって場所をとっていて、ちょうど「水道工事」や「鍵」の欄と似たようなことになっています。こういうところは今回のような特殊な案件を持ち込んでもまったく相手にしてくれないかふっかけられるかのどちらかしかなさそうな気がして、見送りました。ちょっと町工場ふうの業者が割と近くだったので、そこに電話してみました。先に結果を書きますが、これが大当たりでした。

私「そちらは、割れたガラスの修理など個人相手もやってらっしゃいますか? 実は薪ストーブの耐熱ガラスが割れてしまって、それを直したいんですが。」

ガラス店「あー、そういうのはストーブのメーカーに問い合わせられたほうがいいと思いますよ。」

私「実は個人輸入もので、メーカーに連絡をとるのは絶望的なんです。しかも20年ほど前のもので廃番になってるらしくって。」

ガラス店「そりゃあしかたないですね。」

私「それで、耐熱800℃くらいのガラスを切ってもらえたらと思ってお電話しました。」

ガラス店「えっ、800℃! それは無理なんじゃないかなあ。200–300℃のなら扱ったことあるけど。」

私「そうですか。ネットでいろいろ調べてみたら、ネット通販で買えるところはありそうなんですよね。だけど形が長方形じゃなくて、ひとつの辺がまーるくなってて、それを正確に注文するのがややこしそうなんで、近所で直接話せるところがないかなと思ってお電話したんですよ。」

ガラス店「そうなんですか。そのガラスの商品名わかります?」

私「電気硝子建材の『ファイアライト』ってやつみたいです。」

ガラス店「あ、それ扱ってます。そんな高熱でも大丈夫なのか。在庫あるんじゃないかな。」

私「そうですか! 400mm×250mm くらいの大きさです。」

ガラス店「ちょっと在庫調べときますよ。ちなみにネットでいくらくらいでした?」

私「その大きさだと1万円ちょっとになりそうでした。」

ガラス店「うーん。それくらいでできますよ。」

私「ありがとうございます!!」

ガラスにヒビが入ってすぐに電話したのが金曜日の夕方でした。翌土曜日は営業していてしかも外の仕事にも出かけないとのこと。その土曜日に再度電話で確認すると幸運なことに在庫があり、すぐに車で割れたガラスが入ったままのストーブ扉ごと持っていきました。

さっそく作業を始めるガラス屋さん。きれいに2つに割れているだけなので、それをきちんと合わせながら新しいガラスの上に重ねて油性ペンでさーっと線を引き型を取ります。詳しい説明も何も必要ありません。これが対面のいいところ。

雑談しながら作業は進みます。

ガラス店「へえ、扉こんなに重いんですね。薪ストーブはこれまでやったことないもんだから。昨日あれから問屋に聞いてみたりしましたよ。」

私「割れた原因に思い当たることがあって。夏の間に、いったんガラスを外してその回りのガスケット(ガラスロープ)を取り替えたんですよね。そのあと取り付ける時に、この金具のネジをしっかり締めてしまったんですよ。締め付けがきつ過ぎたのが原因だと思います。でもまあたぶん20年ほど一度も交換していないんで、劣化もしてたでしょうけど。」(締め付けすぎが破損原因になるというのが今回検索してみてたくさん出てきました。しょっちゅう扱っているストーブ屋さんならともかく数年に一度(あるいはまったく初めて)しかやらない者だとうっかりしてしまいます。事前にちゃんと調べておくべきでした)

ガラス店「なるほど。確かにちょうどその金具のところから割れてますもんね。」

私「耐熱ガラスを納めることもあるんですね?」

ガラス店「厨房機器や工場の機械の覗き窓なんかですね。それぞれそんな大きくないんだけど、その度にファイアライトを小さいので仕入れていると高くついて。そんな注文が何度かあったんで大きいので仕入れてたんです。それでその端材みたいなのが残ってたんですよ。」

私「なんてラッキーなんだろう。」

ガラス店「はい、できました。はめてみましょう。あれ、ぴったり同じ大きさなのに入らないな。」 (ぴったり入らなかったのは私がつけすぎたボンドがあちこちにはみ出して硬化していたからです。ガラス回りにはボンドは要らないというのも今回検索して知りました。まったく事前に調べておくべきでした。そのはみ出た部分をマイナスドライバーでこそぎ落として、ガラスは無事にはまりました)

ガラス店「今度はネジを締め過ぎないようにね。」

私「はい。」

ガラス店「じゃ、1万円とは言いませんから、8000円で。」

私「ありがとうございます!!」

という具合。面倒な説明も要らず、トラブル発生から24時間以内(実質30分足らず)、8000円(税込)で、ストーブ扉の割れたガラスは完全復旧しました。もし有名メーカーの純正品だったら、たとえばブログ記事のこんなところこんなところ、ストーブ店のこんなところなどを見ると、数万円もかかるところでした。親切な町のガラス屋さんに出会えてほんとうにラッキーでした。

Google Talk は生きている、のか?

先日、ChatSecure という携帯端末向け XMPP クライアントを試してみたとき、Google Talk (Google トーク)をふつうの XMPP として使えることに気がつきました。

2015年の初めころ、Google Finally Kills Off GoogleTalk and XMPP (Jabber) Integration などの記事を見て、XMPP との互換性を捨てて「Google ハングアウト」に移行する形で Google Talk はなくなったものだとばかり思っていました。そう、No, it’s not the end of XMPP for Google Talk というタイトルの記事を読んでいても、です。

これらの記事を目にした前後からついその時に至るまで、自分がふだん使っているクライアント Gajim で Google Talk のアカウントにログインできなくなっていました。それで「ああ、終わったんだな」と思い込んでしまったのです。

ところが先日 ChatSecure を試した際、その ChatSecure では GMail アカウントを用い、まったく他所の XMPP サーバーのアカウントの間でチャットできたのです。

前の記事を今よく読み返してみると、

Note that you can still continue to use the Google Talk Service with a third party XMPP client and the Google Talk XMPP servers continue to federate with other domains.

とあります。

ではどうして、PCのクライアントからはログインできなかったのでしょう? いろいろ検索して調べてみてわかったことは、Google アカウントの「2段階認証」を有効にしていたためにクライアント Gajim からログインできなかったようです。自分もこの2段階認証に切り替えたのが、ちょうど前の記事が出てそれを読んだ頃だったのかもしれません。

アプリ パスワードでログイン」というヘルプがその解決法でした。そこにあるとおりにパスワードを生成し、それを Gajim で使うことで無事にログインできました。いったんログインできてしまえば、あとはまったくふつうの XMPP アカウントとして使うことができます。

時系列的にまとめると

  • Google は 2005年ころ Google Talk というサービスを始めた。それは XMPP の拡張で、サードパーティの XMPP クライアントでも利用でき、また他の XMPP サーバーとも相互に会話できた。
  • Google は 2013年に Google Hangout という、Google Talk 後継のサービスを始めた。この時点で「Google Talk というサービスは終了」と言われているが、Google Hangout の機能のうちの文字によるチャットは Google Talk 互換であり、つまり XMPP として利用できた。
  • 2015年2月、Google 自身による Google Talk アプリ(Windows版)は廃止された。(Android版や、FirefoxやChromeの拡張機能の版も存在していたと思うが、たぶん同じ頃に消えたのだろう)
  • この2015年2月に「Google Talk は死んだ」と言われた。たとえば You Have No Choice: Google To Shutdown GTalk Feb. 23, Hello Hangouts など。しかしその記事でもじっくり読んでみると、However, users who are unable to give up GTalk can use third-party Windows apps, such as the open-source Miranda IM, Jitsi, and Psi, to continue using GTalk. と最後のほうに書いてある。

ということのようです。ただし「安全な接続」については注意が必要です。それこそ前の記事に書いたような、OTR など終端間暗号化(E2EE)を用いるのがいいかもしれません。

ChatSecure — 携帯端末向け XMPP クライアント

ChatSecure という XMPP クライアントの存在を教えられて、手元の Android 端末にインストールしてみました。

インストールは簡単。初期設定はまずアカウントです。Android端末だとたいていは google アカウントが入っているはずで、ChatSecure にもそれを使うかという画面になります。他の XMPP サーバーにアカウントがあってそれを使いたい場合は横にスワイプしてそこで設定します。

ChatSecure の特徴は、このアプリの名前や開発元(The Guadian Project)からわかるように、何と言っても「暗号化」です。OTR (Off-the-Record) という規格にしたがって、終端間暗号化でチャットできます(もちろん相手先もこれに対応していること)。 OTR については、「OTRでオフレコチャット!」の記事などが詳しいです。

「大した内容のチャットじゃなし、暗号化なんて別にどうでもいい」と思うかもしれませんが、巷で流行している LINE のようなサービスと比較して書いてみます。

クライアント-サーバー間が暗号化されているか

これは TLS(SSL) でも実現できます。Wi-Fi 接続やら、インターネット接続プロバイダー、回線会社など途中経路での盗み見・改竄を防げます。

サーバー-サーバー間が暗号化されているか

独立していて他のサーバーとの相互乗り入れができない、ほとんどのメッセージングサービスではあまり関係がないかもしれません。XMPP はサーバー間の相互接続が当たり前ですが、それらのサーバーが適切に設定されていればサーバー-サーバー間も暗号化されています(ちょっと古い記事ですが、Support for STARTTLS and SASL in s2s Connections の図がちょうどいいイメージです)。

サーバー内でも暗号化されているか

TLS でクライアント-サーバー間が暗号化されていても、たいていの場合、サーバー内では復号されて相手先の読めるところに保存されます。サーバー内で何がなされているか、ユーザーは知るすべがありません。サーバーの運営者を信用できるかどうかにかかってきます。発信時に個々のメッセージを暗号化(つまり終端間暗号化 End-to-End Encryption (E2EE))すればここで盗み見・改竄されることを防げます。

端末内の余計な情報を収集していないか

ChatSecureこれは通信の暗号化とは関係ありません。たとえば LINE では、端末内のアドレス帳など余計な情報を収集したりすることがあります。LINE のアプリはソースが公開されていませんので、本当のところ何をしているかはわかりません。独立型チャットサービスでしかもサードパーティのクライアントが許されていないようなものは、運営者をもう単に信じるかどうかという問題です。XMPP や OTR といったオープンな規格、ejabberd のようなオープンソースのサーバー、ChatSecure のようなオープンソースのクライアントという組み合わせでは、そのような信頼できない行為を隠しようがありません。

ChatSecure は OTR を使わなくてもよくできた XMPP クライアントだと思います。見た目は直感的で、操作に戸惑うこともあまりなさそうです。日本語化もされていますし、さほど詳しくないような人にもお勧めできます。

昨年のクリスマスプレゼント「インラインスケート」

また今年もこの時期になったわけですが、昨年のプレゼントを1年間経ってから振り返ってみるシリーズです。

当時6歳のスウちゃん(仮名)の元に届けられたのはインラインスケートでした。秋口に一度アイススケートに連れて行ったらずいぶん楽しかったらしく、何度もせがまれてそのうち2,3回はまた連れて行ったのでした。いっそのことアイスでなくてもいいのでは、とサンタクロース代理人である私は考えました。

当時、まずおもちゃ屋を見てみたのですが、確かに値段の安いおもちゃ風のものはありました。でもちょっとちゃちすぎないか、と思わされる作りでした。いっぽうでネットで調べてみると本格的なものは値段も本格的。そこでそのあいだくらいという感じの「RIP SLIDEジュニアアジャスタブルインラインスケート5点セット イエロー L」にしてみました。これを書いている2015年11月現在、同じものは品切れとなっているようです。

サイズはやや大きかったのですが、靴下を履いてしっかり締めればグラつきはなく大丈夫のようです。滑りはそこそこよかったです。いちばん近くの練習場所は舗装があまり上等ではなく、どちらかというとそちらのほうが問題ですね。いい場所で滑ればかなりいいのだと思います。

アイススケートで少し慣らしていたこともあって、よたよたと歩いては転び立ち上がるというのを数回繰り返した後は、徐々に滑る(というよりは「歩く」か「走る」程度)ことができるようになりました。子どもはすごい。

残念なのは、まわりの友だちも持っていないと楽しく一緒に遊べない、という点ですね。まあちょっと早すぎるかなという年齢でもあるので、同い年の友だちが持っていないのはしかたありません。サイズはアジャスタブルでもう数年は大丈夫なので、そのあいだに仲間が増えるといいな。