ビスケットのあれこれ

ビジュアル言語ビスケット(Viscuit)に関するあれこれを書いてゆきます.

小学校の田んぼとプログラミング教育

2016-01-31 12:21:15 | 1
僕はこのブログで「プログラミングを学ぶべき理由」をずっと説明してきました.要約すると,プログラミングはこれから重要なスキルであると言われているけれども,それ以前に,「コンピュータとはなにか」ということを知るためにプログラミングを学ぶべきなんですよ,ということです.

「コンピュータとはなにか」というのが説明が難しい.だいたいコンピュータの専門家でもここはうまく言語化できていないんじゃないでしょうか.僕もかなり手探りな状態です.

それで,最近つかっている例が田んぼです.多くの小学校に小さな田んぼや畑があって,担当の学年が決まっているのだと思いますが,お米や野菜を育てています.秋には収穫されて,それが給食に出されたりします.なんのために,これを小学生にやらせているのでしょうか.普通にスーパーに行けばお米や野菜は簡単に手に入ることができます.大人になっても趣味で農園をやっている人はいますけれど,大半の人は購入で済ませてます.まして,これからは農業の時代だからすべての子どもたちに農業体験は必須である,ということでもありませんよね.

逆に私たち大人が気持ち悪いと思うことは,子供達が,お米や野菜がどうやって育つのかを知らない,ということですよね.都会に育つ子供達だと,どうやって育つのかをまったく知らないまま大人になってしまう可能性があります.魚の切り身の話もありましたね.子どもは売られている切り身しか見たことがないから,切り身の状態で海に泳いでいると思っているとか.

教育を効率とか将来の効果とかそういう視点だけでみてしまうと,田んぼはたぶんやらないです.ところが,大半の大人たちは,それを知らない子どもを気持ち悪いと思う.なので,小学校で田んぼをやることは,なんとなくいいことだという合意は取れているわけです.

たんぼをやるというのは,分解すると,水とお日様が大事だとか,雑草をとらないと栄養が奪われるとか,小さい種から少しずつ大きくなるとか,毎日見てても成長の変化には気がつかないけど,長い期間で見ると確かに成長しているとか,そういう,わざわざ言葉にしなくてもいいくらい常識的なことをなんとなく知るということですね.

コンピュータとはなにかというのも,そんな難しい話をしているのではないのです.水やお日様や種や成長といったことに相当するコンピュータの中身のことを知るということなんです.

野菜の成長のことなんか何にも知らなくても,スーパーで買ってくるぶんには困らないように,コンピュータの中身を知らなくてもコンピュータは使えます.でも,野菜の成長のことを知らない子どもが気持ち悪いと同じような感じで,コンピュータの中身をしらない人が大勢いるのは気持ち悪いと思うわけです.

ものと情報

2016-01-18 17:01:31 | 1
最近,ビスケットを使ったコンピュータサイエンス入門講座や,その内容についてコンピュータの専門家たちと話をしていて,なんとなく感じたことを書いてみたいと思います.


感染のシミュレーションを使って,情報とは何か,情報の原理について説明しています.そこでの説明は,「物は相手に渡すと自分のところからは無くなります.情報は相手に教えても自分は忘れません.ここでやっているのも,風邪を他人にうつしても自分は治りません.だからすごい勢いで拡散します.情報が拡散しやすいというのは,情報が原理的にもっている性質そのものなのです」というものです.

コンピュータは情報を処理する機械です.情報の処理を積み重ねて,そこにあたかもものがあるかのように動かしてます.たとえば,チケットの販売を考えると,昔はチケット売り場にそれぞれ100枚くらいずつ在庫を持っていて,お金と引き換えにチケットを売っていたわけです.どこかの売り場で売り切れたら,まだ売れ残っている売り場を探して買いに行った.いまは,チケットというものはなくて,あと何枚残っているか,という情報だけで,全国どこからでもチケットを買うことができるわけです.実に便利ですけど.もともと情報とものは全然違うのに,情報の処理を積み重ねてあたかもものがあるかのように動かしている.その辺りはきちんとしたお作法でプログラムを作らないとそれができないのですが,それを知らないでシステムを作ったりすると,昨年の夏にあった,嵐のコンサートでホテルの空室以上に予約をとってしまったというような珍事件が起きるわけです.

いま幾つかのグループで,いくつかのプロジェクトが同時進行していて,それぞれのグループで使っているグループウェアが違っていて,なかなか慣れるのが難しいのですが.でドキュメントを共有する方法もちがっていて,掲示板に共有したり,GoogleDocsつかってみたり.その中でどうしてDropboxでの共有が心地良いのかなと考えているのですが,その理由がファイルがモノっぽく見えるからなのかなぁとぼんやり思ってます.いろんな高度な機能が追加されて,それらの機能がアクセスしやすいところにある,という設計だけではダメな気がします.

ビスケットを作るときにインタフェースですごく意識したのが,情報の編集ではなくて,ものをつくっている,という感じをどう出すかだったんですよね.その一つが,いらなくなったメガネを捨てるときに,いっぺんには捨てられなくて,中の部品を一つずつお片づけして,空になったメガネをもとに戻す,という,情報の編集の観点からはなんとも面倒な手順をあえて残してあるところなんですが.

プログラミングを学ぶべきたった一つの理由

2015-10-27 15:51:23 | 1
いよいよプログラミング教育ブームですが,自分の子供に教える・教えないという範囲ならば好き嫌いで済みますけれど,小学校義務教育への導入という極端な話になると,なかなか議論は尽きません.とはいえ,海外に遅れてはいけないということで,反対派を一気に押し切るというのは私は好きではありません.私の根底にあるのは,これほど面白くて大好きなコンピュータを万人に好きになってもらいたい,という気持ちがあるからです.義務教育への導入の理由は万人を説得できるものでなければならないと考えています.

たとえば,最近出版された神谷さんの「子どもにプログラミングを学ばせるべき6つの理由」という本を例にとりますが,この本は非常にうまく現在のプログラミング教育ブームをまとめている良い本です.今のブームの理由がわかると思います.しかし,ここであげているような6つの理由では,根っこから反対している人を説得できないのではないかと思うのです.それらの理由はすべて正しいけれども,すべて反論の余地があります.例えば「楽しい」という理由はぼくもその通りだと思うけれども,じゃあ楽しいのは他にないのかと言われると他にも楽しく学べるものはあります.その他「問題解決能力」「論理的思考力」「将来の可能性」「自分に自信」「創造力」というのもまったくその通りだし,一つのことでこれだけ6つも特徴が揃っているものはプログラミングの他にないとプログラミング側の人は思いますけれども,反論側の人からすると,それぞれ別にわざわざプログラミングでやらなくたって他で教えられるじゃないか,とも言えてしまいます.創造力なんて工学系の人は安易に口に出してはいけない言葉で,美大を出た人の教え方には到底叶わないですよ.なので,僕はこれらの特徴は副産物として,つまり他の理由としてプログラミングを学ぶけれど,学んだおかげで付録で付いてくるもうけものにしておいて.で,他の理由(それが僕は絶対的にプログラミングを学ぶ理由だと思っていますが)それ一点で主張してゆくことが,反対派に反論の余地を残さない方法なのではないかと思うのです.もうけものの理由の方は,それぞれ専門家がいらっしゃるので(「自分に自信」をつけさせる専門家とか)その方々に「プログラミング教育ってこういう分野にもつかえますね」と言ってもらうのを待ってからでも遅くはなくて,まあ第二フェーズで話題になることでしょう.

で,我々コンピュータの専門家が責任を持って口に出して良い「プログラミングを学ぶべき理由」というのは「コンピュータとは何かを知るため」の一点だと思います.この話をしたとき専門家ぽい人にびっくりされることがありました.「そんなものはやっていくうちに自然と身につくのではないか」だそうです.リコーダーをちょっと吹いただけで音楽とは何かを語れるようになるのかというと,なるともならないとも言えないですが.少なくともその議論の中に音大でバリバリ音楽を追求した人が関わっていなければ,非常に薄っぺらい議論になるくらいは想像できます.

昨今のプログラミング教育ブームは,コンピュータとは何かを追求している研究者ではなくて,コンピュータをどう活用するかという実務家の周辺で起こっているので「コンピュータとは何かを知るため」という深い議論にならないのではないでしょうか.コンピュータを使った研究者はたくさんいますが,コンピュータとは何かを追求している研究者は激減して,やはり世の中にすぐに役に立つ研究が人気ですし,研究費も豊富です.そういった違いも一般の人にはわからないですよね.すごいシステムを作ったプログラマーの方がプログラミングの専門家っぽくてわかりやすいですしね.

なぜ,「コンピュータとは何か」が重要なのでしょうか.それは,これから20年後のコンピュータがどのように進化しているかだれにもわからないからです.ヒントとしては,コンピュータがいかに進化したとしても変わらない普遍的な性質を見極めるということだと思いますが,それこそまさに「コンピュータとは何か」を議論するということです.

どんな教科でも,小学校で教えることは,まずはその分野の普遍的なこと(に優しく触れられるもの)を優先的に教えて,大学の専門になるに従って常にホットで実務的な内容にシフトしてゆきます.

たとえば,こんなことです.コンピュータの一つの命令というのは非常に小さい変化しかさせることができません.小さい変化を大量に組み合わせることで複雑なことができます.その動作が高速で正確なのであたかも最初からコンピュータはすごいことができるかのように見えますが本当は違います.ものすごい賢い部分もあるのに,肝心のところで馬鹿だったりします.すべては人間が作ったプログラムによって決まるのです.

コンピュータとは何かを考えると,同時に人間が考えるというのはどういうことかを考えたりもします.人間が苦労せずに簡単にできてしまうことが,コンピュータでは苦労したり,その逆だったり.

こういったことを,単なるお話として知るのではなくて,プログラミングという体験を通じて理解してゆく.そのためにプログラミングを学ぶべきなのです.

ということで,このブームの間に,いろんな種類のコンピュータ周辺の専門家たちと「コンピュータとは何か」の議論を深めて,そこからプログラミング教育の絶対的な理由を構築していかねばと思うのでした.

火山 2進法のカウンター

2015-08-24 09:29:38 | 1
ビスケットで2進法を教える,簡単なやりかたができたので紹介します.この作業だけだったら小学生でもできます.ただ,ここで起きていることの説明を理解するのは難しいかなと思います.高校で2進法を習うそうですが,それの導入などに使えると思います.


まず準備としてですが,ビスケットのHPから「すごいゲームセンター」の「やってみる」を開きます.
歯車のボタンを押して設定画面を開きまして,

「滑らかななうごき」のチェックをはずします.


煙の絵を描きます.このとき,太いペンで,半透明の色で描いてください.好きな色で,丸く塗りつぶせばよいです.


煙が上に動く,というのを作ります.動く速度は,ちょうど煙の大きさ一つ分くらい(よりちょっと離れててもよい.近いのはダメ).


次に,火山の絵を描きます.これはなんでもいいです.


画面には煙の部品が置かれているとおもいますが,それを全部片付けて,火山を一つだけ入れます.


メガネの左右の同じ位置に,火山をぴったりいれます.ぴったりなので火山は動きません.


火山のメガネの右側に,煙を一つおきます.これで,「火山からは煙がでる」ということを延々と続けて動くことになります.それでまっすぐ上に繋がった煙が見えるとお思います.

ここでは,煙が生成されるのと,煙が上がるという組み合わせでこのように見えますが,煙が上がるというメガネを壊すと,火山の真上に煙が生成し続けます.煙は半透明で描かれているので,煙が重なってどんどん濃くなって行く様子が観れると思います.


煙が生成されるのが早すぎるので,火山のメガネの右側に大きな時計をいれて,ゆっくり動くようにします.煙が時々現れてそれが上に上がって行きます.

これだと単調に煙が上がって行く,のどかな感じですが.変わった上がりかたをやってみます.


煙のメガネの左側にもう一つ煙を重ねていれます.ここでは分かりやすいように煙をずらして入れてますが,ぴったり重ねていれてください.

さてどうなるでしょうか.










動画はこちらです.


煙が二つ重なると,一つになって上に上がってます.

数を数えながらこのアニメーションを見るのがよいと思います.どの数の時に煙は上に上がるでしょうか(これでもまだ動きが早すぎる場合は大きな時計を2つ3つメガネの中にいれてください).

2,4,8,16と2倍ずつで煙が上に上がっていきます.煙の並びのパターンと,何回目かというのは1対1に対応しているので,パターンから数へ,数からパターンを当てる遊びができるはずです.おはじきやコインをつかって,煙のパターンをつくって当て合う遊びができるでしょう.

このとき,大事なのは煙が繋がっていないとき,そこに空白がありますがその空白の距離が重要だということですね.何マス分離れているかを間違えると,数との対応も間違ってしまいます.たとえば

これは2マス空いてますが,

こっちは3マス空いています.なかなか区別は難しいですね.

そこで空白のマスがわかるように,小さな煙を追加します.

めがねはこのように変わります.
1)煙と煙が重なると,煙が一つ上に上がって,空いたところに小さな煙になる
2)もうひとつは,煙とちいさな煙が重なると,ちいさな煙は消える.

これで動かすと

のようになり,マスの数を間違えることはなくなります.

煙を1として小さい煙を0として横に並べると二進数になります.

二進法の基本は
 2つが重なると,1つに合わさって1つずれる.
 空白の数が重要なので,小さい煙や0をを使う.
たったこれだけなのでした.

ビジュアルプログラミング言語の可能性

2015-08-20 07:18:21 | 1
さっそくなんで,まず文字のプログラミング言語とビジュアルプログラミング言語の違いから見て行きましょう.

有名なScratchですが,これはビジュアルプログラミング言語というより,文字のプログラミング言語のGUI版と捉えるべきものです.ブロックがあって,どのブロックとどのブロックが繋がるか繋がらないかというのは,つなぎ目の形でわかるようになっている.

文字の言語は,適当に文字を並べても正しいプログラムにはならずに,ある決まった規則にしたがって作らなければならない.それが文法ということですが,文法に従って文字を入力するのはなかなか難しいのです.「,」 と「.」が違っててもエラーですから.それをScratchはGUI上の制約として表現することで,誰でも簡単に文法に従ったプログラムを作ることができるようになりました.

逆にScratchのプログラムと同じ動きをする文字のプログラムとの関係を比べて見ると,文字の言語がどういうものなのかがわかると思います.で,そういうのにピッタリのツールが高尾さんが作っている Smalruby というルビーのScratch版ですね.ブロックを並べて Ruby というボタンを押すと,そのブロックの並びに対応したRubyのプログラムを見ることができます.

Rubyの面白さは,簡単に文法を拡張できるような仕掛けにあります.それがRubyが広く愛されている理由だと思いますが.Smalruby もその仕掛けをさらっと使って,RubyをScratchを動かすために専用に作られた言語っぽく見せています.Scratchがどういう言語なのかを知るためには,Smalrubyの中身を見るのがよいかもしれません(もちろん,Smalrubyが現在開発中であり,この先どこまで Scratchとの一致路線に突き進むのかは分らないので,本当のところは不明です).

これらの画面上のプログラムと文字の言語によるプログラムをつなぐものが,構文木という構造です.構文木がどういうものかは検索してみて下さい.いい解説がいっぱいあります.文は主語と述語に分かれて,主語は名詞句と助詞に分かれて,といった木を逆さまにした形のものですで,Scratchのようなビジュアルプログラミング言語は画面上のブロックの並びから構文木を直接つくってしまうのです.

なんでこんな話をしているかというと,ビスケットは構文木を使わないプログラミング言語だからです.構文がまったくないわけではないので「使わない」という言い方は正確ではないですが,構文木の表現を超えたところにいろんな意味を含ませているという感じですかね.

そもそもプログラミング言語というのは,人間とコンピュータとの間で考えとか知識とかを共有するためのものです.人間がコンピュータに一方的に命令するため,というのは狭くて,コンピュータが自分がこれから行おうとしていることをプログラムで表現してそれを人間に見てもらう,という使い方もできるわけです(コンピュータが自分でプログラムを生成するというのもアリです).人間同士の共有にも使えます.何かが表現されていて,それを解釈する方法が定義されていればよいのです.その定義も厳密じゃなきゃいけないということはありません.用途によっては曖昧な解釈をする方が好まれる場合もあるのです.

英語圏の人たちがプログラミング言語を設計したので,プログラミング言語がどんどん英語に似て,文法について厳密になって来た,という部分はあるでしょう.日本語だったらここまで厳密じゃないですからね.自然言語だけじゃなく,図や絵でも音楽でも考えや知識を表現することができます.それらの表現にもある種の構造はあるでしょうけれども,英語やプログラミング言語のように厳密に文法は決まってはいません.どちらかというと表現されたものから,状況によって構造を読み解いて意味を解釈する,というものです.

つまり,ビジュアルプログラミング言語の可能性というのは,表現と解釈をどう定義するか,というところまで広げることができるのです.ビスケットは表現の部分でアナログ的な情報を許して,解釈の部分で曖昧性を許しました.ビスケットが作るアニメーションは見ていて飽きないのはそこから自然と生まれてくるカオス的な現象があるからです.

では,次回はビスケットが生まれる前にいろいろと研究されていた構文木がない表現の世界の説明をします.

プログラミング言語を作るということ

2015-08-19 08:42:37 | 1
ビスケットが作られて12年になるわけですが,ビスケットを脅かすような面白い言語はなかなか登場しないなぁと,寂しい想いもあります.昔はいっぱい登場した気がするんですが.

昨日,研究者の人たちに僕のビジュアル言語の新作とか見せてたときに,どうやって作っているのかわからないと言われまして.彼はコンピュータの専門家ではないけれども,研究で普通にプログラムは書いているレベルですが.

考えてみると,プログラミング言語って作るのは結構むずかしいんですよね.普通のプログラムより1ランク上のむずかしさがあります.それでも文字の言語に関しては,作るためのツールもよい本も昔からあって,作り方は知りたい人が知れる状態にはなっていると思います.逆に文字の言語は歴史が古すぎて新しいものを思いつく方がむずかしい.

それに対して,ビジュアルプログラミング言語ってすごい可能性があるんですよね.文字の言語には到底出来ないようなことが,簡単にできてしまう.これからはビジュアルプログラミングの時代だと僕が思ったのは20年くらい前なんですが(笑).

一方で,ビジュアルプログラミング言語の作り方って全然情報がないですね.僕は誰かに教わったとかじゃなく,独自に作って来たのですが.そんなにむずかしくはないです.ゆっくりと世の中が進んでいた時代ではそういう勉強の仕方でもよかったのでしょうが.いま,情報に満ちあふれて,ちょっと検索すればいろんなノウハウが簡単に手に入る時代に,ビジュアルプログラミング言語を作る方法だけ独自であみ出せって言われても,それは無茶な話なのかもしれません.

というわけで,ビジュアルプログラミング言語の作り方というか,僕がもっているノウハウをこれからどんどん書いて行くことにしました.もちろんビスケットの中身の話もあるでしょうが,僕自身他にもいろんなビジュアルプログラミング言語を作っているので,もっと範囲は広くなります.

という,自分に対する決意表明でした.忙しいので,ゆっくりやります.

コンピュータサイエンス入門「シミュレーション」のやり方

2015-07-31 10:36:07 | 1
ビスケットを使ったコンピュータサイエンス入門の授業「シミュレーション」が出来たので,その原稿をここに載せます.小4くらいから大人までで,ビスケットを触ったことがない人を対象にしてます.45分です.親子で参加してもらうと,教え合ってくれて楽ですし,その後の家庭での発展も期待できます.作業自体は簡単なので,実際のイベントでは小1くらいの子どもから参加してました.本人がどれだけ分っているかは不明ですが,親が一緒であれば大人への啓蒙という意味で良いと思います.

ご自由に真似てご活用ください.
このリンクで制作すると同じ環境になります.



1. 鉛筆ボタンを押して棒人間を描いて下さい.描き終わったら丸ボタンを押します.


2.描いた絵は部品になります.棒人間を何人もステージ(四角いところ)に置いて下さい.


3.めがねをもって来て,2つのまるのなかにそれぞれ棒人間を入れます.すると,棒人間は動き出します.


4.めがねの中の絵がズレ方で絵の動く方向と速さが変わります.では,棒人間を横に動かして下さい.(めがねの右側の棒人間を右にズレるように置く)


5.また,鉛筆ボタンを押して,元気のない人を描いて下さい.


6.元気のない人をステージに一人だけ置いて,上に動くようにしてください.


7.問題を出します.最初に描いた棒人間は健康な人です.元気の無い棒人間は風邪をひいてます.では,健康な人と風邪をひいた人がぶつかると,風邪がうつる,というめがねを作って下さい.


8.ヒントはこれです.これで,健康な人と風邪をひいた人がぶつかると,という意味になります.このめがねの右側はどうすればよいでしょうか.


9.こういう間違えをする人がいます.これは健康な人と風邪をひいた人がぶつかると,一人の風邪をひいた人に変わるという意味なので,人が一人減ってしまいます(めがねに×がついているのは,絵の数が左右で違っているという意味です)


10.これも間違えです.これは健康な人と風邪をひいた人が一緒に動くという意味です.


11.正解はこれです.これで,健康な人と風邪をひいた人がぶつかると,二人とも風邪をひく,という意味になります.


12.このまま走らせると,このように風邪をひいた人が一カ所に固まってしまいます.


13.この「クルン」という引きずるボタンを押すと,絵の端をもって絵を引きずることができます.


14.風邪がうつるめがねの右側で,風邪をひいた人の足をもって少しずらして,絵が斜めを向くようにします.


15.そうすると,風邪をひいた人は広がって進むので,感染の威力が増します.健康な人の数をふやして実験してみましょう.


16.では,病院を建てて下さい.(最初はあえて,これ以上の説明はしません.少し間をおいて分らない人のために)
まずは,病院の絵を描いて,それを置いて,病院のめがねをつくればいいんだね.病院のめがねは,風邪の人の病気を治すってことだよ

17.これは良くある間違えですが,これだと病院が消えてしまいます.×がついてますね.


18.正しくはこれです.


19.走らせるとこのようになります(自由に実験をさせる,病気を撲滅させたり,一向に減らなかったり,などを体験させる).


20.(全員ができたところで)では,解説をします.この風邪がうつる,というめがねはコンピュータの中で置きていることです.モノというのは,相手にあげると自分のモノが無くなります.ところが情報は相手に伝えても自分の分は無くなりません.風邪は相手にうつしても,自分は治りません.情報というのはこのように移動ではなくて複製が基本的な性質です.情報は簡単に広がるけれど,それを消すのは非常に大変です.病院を沢山建ててもなかなか減らせられないというのはそういうことです.個人情報をネットに書き込むのは気をつけようといわれているのは,この風邪が広がるように,簡単に広がるけれども,一度広がってしまったものを消すのは非常にむずかしいからです.


21.こういう遊びを「シミュレーション」と言います.めがねを変えると感染の広がり方とか治りやすさを調整できます.いろいろな専門家がコンピュータでこのようなシミュレーションをしていろいろな役に立ててます.身近なものは天気予報とか大きな建物の設計などにも使われています.
(ここまでで開始から20分くらい)

22.今日はもう一つシミュレーションを作ってもらいます.今作ったのは一方的に風邪をひいた人が強いというものでした.今度は絵を3つ使って,対等なルールにします.3つで強さが対等になっている関係ってどんなものがあるでしょうか?ジャンケンです.みんなに,ジャンケンを作ってもらいます.

23.ジャンケンの作り方は.まず絵を3つ描きます.グーとチョキとパーですね.それから,それを動かすめがねを作ります.グーが動く,パーが動く,チョキが動く,とめがねが3ついります.ぶつかるめがねも作ります.グーとチョキがぶつかると,グーの勝ちなので2つともグーになるというものです.ぶつかるめがねも3つ必要です.合計6つのめがねですね.ステージにはグーとチョキとパーをそれぞれ5つくらい置きます.それで走らせてみて下さい.

24.(分らない子のために,作っている様子を見せる.ただし走らせない)


25.(走らせると,最初はバランスが取れているけれど,バランスが崩れると1種類の絵だけになってしまう.走らせるたびに結果が変わる)

26.解説します.最初に相手を滅ぼしてしまった手は必ず負けます.たとえばグーが頑張ってチョキを滅ぼしてしまったとすると,パーにとって天敵のチョキがいなくなるので,最後はグーが負けてしまいます.作っているうちはこんな結果になるとは想像できなかったですよね.だけど,このジャンケンのルールをよく見ると,当たり前のことです.本当は走らせる前に気付いていてもおかしくはなかったのですが,走らせて初めて気付きました.シミュレーションでは,こういった走らせて初めて気付くということが結構あるんですよ.人間の思考の補助としてのコンピュータの重要な役割です.もっとプログラミングができると,本格的なシミュレーションができるようになりますよ.

27.ではあと5分くらい残っているので,後は自由に遊んで下さい.どうもありがとうございました(ここで40分).




二進法を縦に書く

2015-07-03 08:05:45 | 1
二進法をビスケットで作ってもらうとき,こういう間違えをされる方がいらっしゃるんですよね.

下のめがねで1+1=10となる部分ですが,本当は1と1が重なっている場所に0が来るようにしないとダメです.
正解は

これです.

二進法がビスケットでこんなに簡単に表現できるのは,桁という発明のおかげです.桁は漢数字には無いですよね.0のおかげで書ける方法というか.桁をきちんと意識して作らないといけないわけです.

もう1つビスケットの欠点として,めがねは横に丸が並んでいるということもあります.めがねは変化を表現してますが,横に並んでいるために横方向の変化を意識しにくい書き方です.縦方向の変化はみて一発でわかるのですけれども.
たとえば,これだと

魚よりロケットの方が変化がわかりやすいですよね.

ということで,二進法も縦に書きます.

これだと桁を間違わないですよね.新しい1が次の桁に生成された感じがします.

パクパクも

になりますね.

ビットマップディスプレイの衝撃

2015-07-01 12:38:54 | 1
大人向けの講座が終わりまして,びっちりのお客さんに来ていただいたのと,その内1/3が女性だったということで,楽しく華やかな講座になりました.ネットが切れるてきなトラブルもなかったですし.途中で二人ペアになってとトランプで遊ぶワークを入れたのですが,うまい具合に男性と女性がペアになって楽しそうで羨ましかったですよ.

講座が終わって,昨日あたりから,こういう話もすれば良かったかな,というのがいろいろと浮かんできたので少しブログに書いていこうと思いますね.

一つはビットマップディスプレイは完璧なデバイスであるって話です.僕が最初に触ったコンピュータはマイコンと言ってましたが,テレビに繋がないで,数字が表示されるLEDが並んでいたやつですね.7本の棒が「日」の字に並んでいて,それをつけたり消したりして数字を表示します.

これは数字で45ですが,デジタル時計でも使われてますよね.これを頑張ってアルファベットを表示する方法を考えた人がいます.

ABCですけど,Bが8と区別がつかないので小文字にしてます.これくらいならいいですが

Sは5と区別できないので,点を光らせてます.すごい苦し紛れですね.こういうやりかたはどれくらい使われていたのでしょうね.

そのあと,テレビ画面に表示するようになって,ドット絵という表現になります.ドット絵もすごかったですね.四角い点で目を書いているだけなのに,楽しそうにも悲しそうにも見せられるんですからね.

で,色がもっと自由に使えるようになって,ドットも細くなってきて,とうとう写真が表示できるようになりました.

僕はビットマップディスプレイが出た時の衝撃,これさえあればデバイスはもう完璧じゃないか,と思ったのですが.

そのあとは,物凄い大きなサイズの写真データを1/10のサイズにするMacの専用ボードだったり.それからコンピュータはどんどん早くなって,ネットとwwwの発明もあって,画面の上で動画が表示されるようになるわけですが.ハードウェアは着々と進化して,動画もなんの問題もなくなりました.全編CGだけで映画が作れるようにもなりましたね.もう10年以上も前からですよね.

こんな進化の先どうなるのか,と考えると,あとは人間の発想が残された問題になります.ハードウェアではないです.

同じ話は,CDが出た時にも思いました.僕はその頃ブラスバンドでチューバを吹いてましたが,CDの話を聞いた時,もう楽器いらないんだ,と思いましたもの.数字をたくさん並べさえすればどんな音楽でも作れる時代になるんだと.

一休さんの虎退治じゃないですけれど,あなたの欲しい音楽を言ってくれれば,僕はそれを作れますよ,ってことなんです.ビットマップディスプレイがあるので,どんな映画だって作れますよ.0と1を並べさえすればいいんですから.

昔,山に10年こもって,石仏を彫ったお坊さんの話がありますが,それくらいの根気があれば0と1からなんでも作れそうですよね.

ここで一番重要なのは,自分が欲しい音楽とか映画とかを頭の中でイメージできるか,ということです.まずそれがあって.で,イメージできたとしてそれをどうやって0と1で表現するか.ここで実時間の領域に直接落としてしまうと,それこそ今のCGで作られた映画のように大勢の人間がすごいアプリを駆使して作ってゆくことになるのだと思いますが.

僕はここにまったく違う視点を入れられるんじゃないかと思っています.それがプログラミングということなんですが.プログラミングといってもCGソフトを自分で書けって話ではないですよ.ビスケットでメガネを2つ3つ作って動かしたら,いつまで見てても飽きない動きが得られるわけです.その動きを一コマ一コマ手で作ったらそれこそ大変ですが,動き全体の世界のルールを決めてあとはそれに従って動いてくれればよいということです.プログラミング言語のもっとすごい発展させた技術を使うと,ものづくりの視点の軸が全然違ってくるんですよ.

映画だったら登場人物の性格をあらかじめ入力しておいて,そこに起きる事件を入れると自動的にお話ができてゆくってことですかね.CGや音声合成だったら不自然さを消すのが大変かもしれませんが,小説くらいはなんとかなるかもしれませんし(実際,人工知能研究で最近挑戦されてますね).もっと制約して和歌だけの文通で表現するドラマとかだと全然ばれないかもしれないです.そういう生成を全自動でやるというのはコンピュータは得意ではないです.そうではなくて,やれることを全部単機能として外に見せて,それを人間が専用のプログラミング言語でプログラムして,動いた結果が小説ってことです.生合成をとったりとか,口調を整えたりとか,表現の面倒な部分は人工知能にやらせて,人間はプログラムで全体をコントロールする感じ.



相対アドレスを思いついたきっかけの事件

2015-06-04 10:21:34 | 1
僕がコンピュータ上の名前について興味を持つようになったのは,博士課程1年くらいの時に受けたいたずら電話事件でした.これは中々面白い事件なので書いてみます.

当時,大学の近くで一人暮らしをしてまして,家には電話が引いてます.大学で研究者同士の連絡に電子メールは使えましたけど,まだまだ一般の人とのやりとりは電話の時代でした.インターネットはあったけど,まだWebはありませんでした.ネットのアプリというのは電子メール,ネットニュースくらいでしたかね.

電話といえば,丁度ダイヤルQ2というサービスが始まったころです.これまでの通話料だけじゃなく,情報量を代行して情報提供者へ支払らうというものでした.株価とか競馬とか星占いとか,今だったらWebで提供されそうな情報だけじゃなくて,音声掲示板というサービスを提供している会社も現れました.今の出会い系掲示板みたいなものですが,暗証番号がかかっているところとか,オープンな掲示板とか.で,雑誌にはそのサービスの電話番号の広告がガンガン載りだしたような時代です.

ある日,夜中に家に帰ると,僕の電話機に留守電のランプが点灯していました.再生してみると「100件」くらいのメッセージが吹き込まれています.当時の留守電はテープ式なのでそれくらいの数のメッセージは全部録音可能でした.びっくりして聞いてみると,ほとんどが無言で切られるのですが,ときどき,「なんだ,男かよ」といった声が入っていたりします.それも全員違う人のようです.

もう,お分かりでしょうが,僕の家の電話番号がどこかにバレたらしいのです.対策を立てようがなくて,3日くらい続きました.300件くらい.寝てても鳴るので,ベルの音は止めました.

当時のNTTのサービスで迷惑電話を防ぐのがあったのかどうかは覚えていません.でもその手のサービスは特定の番号からの通話を防ぐものであって,この事件のように不特定からの通話には無防備です.あと,ナンバーディスプレイというのもまだ始まっていません.

もう,これは自分の電話番号を変更するしかないですよね.まるで年金番号流出と同じ解決法ですよ.

困っているところに,また丁度電話がかかってきます.つい,その電話に出てしまいました.そうしたら,弱々しい声の男の人が「もしもし」と言っているので,こちらは怖そうな声で「おまえ,この番号はどこで知った」と言うと「ダイヤルQ2の掲示板です」やっぱり.僕はそんなの使った覚えがないけれど,誰かが僕に成り済まして掲示板に僕の番号を入れたに違いない.それで,その掲示板の番号を教えてもらって,アクセスしてみました.

ほとんどろくなメッセージが入っていなくて,数件目で僕の番号がでてきました.実は引っ越したばかりで,当時は引っ越しをすると番号が変わっちゃうので,前の番号に掛けると,新しい番号はXX番ですという,女性の合成音が流れるようにしてもらってたのですが,その声でした.誰かに恨まれるような覚えはないのだけれど,その番号アナウンスを録音して,勝手に掲示板に入れた奴がいると.

雑誌で,女の子に出会えると思って,情報量を払ってダイヤルQ2に掛けて来た人が最初に見つけた番号が僕の番号で,それが女性の合成音で.きっと恥ずかしがり屋で自分の声は隠したいんだなと勝手に想像して,期待して掛けてきますよね.


その掲示板は作りがひどくて,登録したメッセージを消すことができません.もしかしたら登録した人が暗証番号を設定して,とかあるのかもしれませんが,たぶんそれすら無かったと思う.僕は暗証番号を知らないし.というか,サービスの入り口の番号はわかったけれど,その業者がどこかも知りません.

で,NTTに電話して,このQ2の業者の番号を教えてくれと頼みましたが,それはまた簡単には教えてくれません.で,被害の状況を説明して.折り返しかかって来て,あなたの番号が掲示板から確認できたので,ということでやっと業者を教えてもらって.

僕は北海道に住んでましたが,業者は横浜の方でした.当時の電話料金というのは横浜だと2.5秒で10円というとんでもない高額なんですが,それも自腹で電話しまして,やっと消してもらえたと.それで恐怖の電話は止まりました.

トイレの落書きにもいろんな電話番号がかかれていますが,それを見て電話する奴がいるかもしれませんけれど,これほど短時間に集中していたずらされることは無いですよね.なので,被害者はトイレに書かれていることは気がつかないかもしれませんね.

僕に電話をかけて来た300人以上の人たちは,全員悪意はないんですよね.女の子に声をかけられない弱々しい男子たちなんですよ.でも,システムが悪いとすごいひどいことになっちゃう.僕の番号を掲示板に載せた犯人も,どれくらいの悪意があってやったんでしょう.ここまでひどいことになるとは想像できないですよね.そもそもその犯人は僕のことを知っている人なのかどうかもわからないですし.

ということで,今インターネットで置きているいろんな問題は,電話の世界でもとっくにあったと.番号ってダメじゃん,なんです.

自分の研究テーマは,オブジェクト指向から入って,分散オブジェクト,マルチエージェントと進みつつあって.これからの世の中はオープンシステムだと息巻いていた時期です.

で,インターネットの仕組みを勉強したら電話番号と本質的に何も変わっていなくて,基本的には悪人を想定しない設計ですよね.小さい悪でも,システムが悪いとそれを増幅してしまうシステムというか.

そんなこんなで「相対アドレス」というのを思いついたのでした.自分の中ではインターネットがこれほどインフラになるとは思っていませんでしたから,どうやってもっとマシなネットを作るか,という,それはそれは大それたことを考えられたのでした.今の時代に,インターネットを根本から置き換える研究なんて始めたら,その人はマッド扱いされますよね.

ちなみに相対アドレスだとこれがなぜ解決できるかというと,電話番号は相対名になるので,彼らからは「XX掲示板にかかれた,3番目の投稿の人」という番号で呼び出されるからです.なので,こちらのフィルタは「XX掲示板」経由のアクセスは禁止,とすれば全部止められます.

======
とても楽しいと評判の,プログラミングを知らない大人向けの講座をやります.

コンピュータの本質を新規開発に活かす