ビスケットのあれこれ

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

ネ申Excelは悪くない

2014-06-29 09:43:31 | 1
ネ申Excel問題というのは,表計算としてExcelの本来の使われ方を大幅に越えて,ありとあらゆる表をきれいに表現するソフトとして使われるということの議論ですね.三重大の奥村先生の論文や,日経ウーマンでの方眼紙のようにする技の紹介などが面白い議論です.この背景には日本独特の表文化があって,それをうまく支援するアプリが全然浸透していないという点にあると思います.いえ,きっと一太郎にはそういう機能があると思いますが(僕は確認してません),一太郎付きで売られているパソコンってあまり聞かないし.

奥村先生は,データを発信する側は人間だけじゃなくちゃんとコンピュータにも読めるように作るべきだ,とおっしゃってます.コンピュータの処理のレベルが低い現状では,情報発信側は気をつけるべきだというのはおっしゃる通りですが.Google様によってありとあらゆる情報が機械に読み取られ,次のレベルのデータ処理に変わってきつつあるので,いつまでも古くさいプログラム言語の文字列処理にこだわっても仕方がないのではないかとも思うわけです.

これと似た問題に,HTMLの失敗があります.HTMLは文章を構造化させて人間とコンピュータとで両方に見やすいデータ構造を提供しようとしました.画面サイズが変わってもコンピュータがいい感じでレイアウトしますよ,ってことを狙ったわけですが.

ところが,そんなHTMLの想いとはまったく別に,というよりWebに飛びついたデザイン重視の人たちの要求はHTMLのショボいレイアウトではけっして満足せず,TABLEをすごい形で使ったり,画面全部をGIFやFlashにしたりしたわけです.このページは800x600のサイズで見て下さい,というページも多かったですね.

その後,CSSが格段に機能向上し,Javascriptでプログラム的に解決したり,視覚障害者向けの情報を考慮してとか,SEOが大事とか,主役はWebではなくて,アプリに変わってきたとか,もっと複雑にいろんな話題に変わってきていますが.まあ,変わろうとしてますね.

ネ申ExcelはGIFやFlashでWebを作っていた時代なのかなぁと思います.ソフトを作った人の想いとはまったく別の使われ方をしてグチャグチャになっている.だからネ申Excelを書いている人たちをバカにするのではなくて,そこに新しいソフトウェアの重要なヒントが隠されている,と考えるべきなのです.

たとえば,日本語には全角と半角という問題があります.モダンなプログラミング言語なら全角と半角に関係無しに文字列のマッチングをして欲しいですし,ときどき打ち間違って0(ゼロ)の変わりにO(オー)や◯(マル)が使われていたとしても,見た目が似ていたらマッチングするくらい,いまのコンピュータにはなんてことはないですよね.増井さんのピテカンも,Googleのもしかしても標準に入っていていいと思います.それくらい,人間に近づけたパターンマッチ能力を基本機能としてそなえたプログラミング言語なんてとっくに現れてて欲しいくらいです.

言語じゃなくて,ライブラリでよいじゃないかと言われそうですが,僕はその言語の記述形式のままで == がリッチなのがよいと思う派です.というのは,この手のプログラムは使い捨て系だからです.ちょこっと書いて,ちょっと使う.そんな使い方の言語でstringmatch(a, b, MATCH:ZENNKAKU | MATCH:ZUKEI ) みたいなオプションはいちいち覚えていられないです.

日本の書類の表文化だって,すごい表現力が豊かなのに,たとえば表なんだけど時々(A or B)みたいな構造を許しているわけですよね.そういうのは標準形に変換しなさいと強制するのは,逆に表現力を奪っているとも言える.元々は,たとえば普通に4x4の表の構造でよいと思って入力していったら,それでは入力しきれない特殊なデータに出会って,設計的に正しいやりかたは元々のデータ構造の仕様を変更することなんでしょうけど,そんな特例はここ一つだけなんだから,罫線を1本引いてすましちゃえと.だって誰がみてもわかるよね.ってことですよね.

この程度の変更や特例に弱いデータ構造を普通の人に使わせるなよって話です.むしろそんな,罫線を1本ひいてすましちゃう発想を賞賛して(これもまたコンピュータに毒された人には絶対に思いつかない発想ですから),そこに新しいソフトなり言語なりのヒントを見つけるべきです.

僕はコンピュータをできるだけ使いやすくしたい,と思っています.「できるだけ」というのが非常に厳しいんですよ.だってあと30年後にすごい方法が発明されて,未来にはそれが当たり前になっているものがあったとき,それが3Dホログラムのように今の時代に出来ないものだったらいいんですよ.でも実は今の時代でもとっくにできることで,単に今の時代の研究者や技術者の発想が貧困で思いつかなかっただけ,というのが,あと何個くらい隠されていると思いますか?それをどうやって探したらいいですか?それを探し続けるのが「できるだけ」ってことですから.

(前の「子どもに触らせるということ」への反応に,「おじさんがマウスを持ち上げるのは笑われて.子どもだと…」という内容のものがいくつかあったので,おじさんが笑われているExcelを題材にしました)

一般の人への情報教育

2014-06-27 17:59:05 | 1
昨日の情報教育のある集まりに出席して思ったことです.

世の中がコンピュータだらけの時代に「社会の構成員が等しく持っている(べき)知識・思考基盤」(久野さん)というのが何であるか.コンピュータが一般的ではなかった時代と同じであるはずがない.そういうのをざっくりと「情報教育」と言ってしまいます.で,情報教育で何を教えるべきか.社会人を,コンピュータの専門家,専門家予備軍,違う分野の専門家,そこまで全然行かない一般の人,に分類したとします.僕が興味があるのが「そこまで全然行かない一般の人」が知るべきこととはなにかです.

大問題なのは,古い技術しか知らないというのもありますが,教育に携わっている人たち全員に共通認識がないという点だと思います.

仮にこういうことをトップダウンで決めてロビー活動を沢山やったところで,他の分野との利権に勝てる気がしません.それより実質的にそうなっちゃう方向はないのか.

僕は去年あたりからビスケットのワークショップの最後に小さなお話を入れるようにしてきました.ワークショップで体験したことが,コンピュータや社会のいろんなこととどう関係しているのかという.実は,その内容は子どもに対してというよりも,そのワークショップを見学に来ている保護者の方に向けて話しています.

たとえば,一番入門でやるワークショップ(最短20分)では,メガネが一つでいろんな動きが出来るようになった後,二つの絵を描いて,メガネを二つにして2コマのアニメーションを作る,というところまでやります.この最後に次のことを見せます.

まず,尺取り虫が動いていて,そこにボールを置いて,3つ目のメガネでボールと虫がぶつかったときボールを蹴るというのを作ってみせます.それが動いているのを見せると,ボールを蹴るだけじゃなくて,他人が持っているボールを奪って一人で2つのボールを蹴る虫が現れたり,いろんな動きをみることができます.そこで,どういう解説をするかというと,

「みんなは,今日はメガネ1つで上や下や速い遅い,くるくる回る,といういろんな動きをさせました.その後,メガネを2つにして,パクパク動かしたり,虫が歩いたりをやりました.で,メガネを3つにしたとき,ボールを蹴ったり,乗ったり,奪ったり,さらに面白い動きができましたね.では,このメガネを4つ,5つ,10個,100個,1万個って増やしたらどうなると思いますか?(少し間をとる)実はみんなが知っているDSのゲームとか,スマートフォンとかも中身はコンピュータのプログラムで動いています.あの中にはメガネが1万個や100万個も入っています.でも,一つ一つのメガネは今日やったように,すごく簡単なことしかやりません.縮んだ虫が伸びる,伸びた虫が縮む,虫にボールがあたるとボールを弾く,こういう簡単なことを100万個も組み合わせると,もの凄く複雑なことができるのです.みんなもメガネを沢山つくればすごいゲームが作れるようになります.今日はその入門をやりました」

こんな感じです.この話を聞くと,いろんなゲームやアプリが手におえないブラックボックスではなくて,中身が少しは想像できそうかな,と思うはずです.どんなメガネがあればよいのだろうと考える子どもも出てくるかもしれません.

僕はそんなに学習指導要領を読み込んではいないので,これは何年生のどこに入る,ということは言えません.そんなことよりは,これを知ることはその人の人生に確実に良い影響を与えると思います.どこかの学年でやるべきですよね.

もう少し高度なやつで,風邪の感染を作って指数関数と情報の話,二進法を作って人間とコンピュータの違い,こんな定番の解説がもうすでに幾つかあるんですよね.

それらを,子どもにやるんでもいいんですが,僕は子どもの教育に携わっている大人たちにぜひ受講してもらいたい.文系理系関係なく,殆どの大人はこの授業を楽しんでかつ感心してくれるはずです.コンピュータバリバリな人以外は,いままでのいろんな謎が解けるでしょうし,知的好奇心もくすぐられる,とにかく楽しいです.まずは,この議論をする人たち全員の共通理解をつくって,それからみんなで考えて行けばよいのではないかと思うわけです.

大人向けだったら2時間あればこういうの全部できます.できれば一人1台ずつPCを用意して自分の手で動かしながらやるとよいです.

ちなみに,ニコ生のアーカイブでも少し見れるはずです.

小さい子どもにコンピュータを触らせるということ

2014-06-25 20:05:25 | 1
ビスケットは,開発して新しい機能を追加したときなど,必ず子どもたちが使っている様子を自分目で見てどんな風に使っているかを見てきます(最近はその暇が無くて他人に任せていたりして,かなりまずいんですが).3年前くらいの面白いエピソードをご紹介しましょう.

ちょうど,Androidタブレットで動くビスケットを開発していて(これはまた一般には配布していません.実験環境だけです),それがどのように子どもたちに使われるか見に行きました.僕としても指で直接操作するタブレットのUIの開発は初めてで.実は,マウスとタッチペンの操作は結構似ています.どちらも,非常に小さいエリアを結構正確にポイントできて,ドラッグもできますから.どちらかというと,ペンの方がドラッグが得意でしたね.小さい子はマウスクリックが全然出来ないとか(ボタンを押すときに指先だけ押すということができないので,手を握ってしまって,その結果マウスが動くのです).そういった所をマザマザと見せられて,その都度パラメータとかを直して,ちゃんと反応できるようにしていました..

ところがタッチパネルの指操作は,想像の次元をこえてます.

まず,最初に衝撃を受けたのは,ある子ども(小1で,3年前ですからタブレットなんて初めて触るくらい)が頑張って部品をドラッグしようとしているんですが,何度やっても部品をつかむことが出来ないみたいなんです.何度もやってもつかめなくて,どんどんイライラしてきてます.彼の指先をよく見たら,その部品の真上を触っているのではなく,部品よりもっと向こう側で指を下ろして,指の腹でその部品を引きずろうとしていました.彼のやろうとしていたことはこの図のような感じです.

まあでも,普通に机の上に100円玉が置いてあって動かそうとしたら,こういう操作の方が自然ですよね.

この手のプログラムを作ったことのある方ならお分かりだと思いますが,マウスやペンのUIでのドラッグというのは,最初に画面に触った(クリックした)場所からスタートして,その場所の下にあるオブジェクトを探します.見つかると,それを持った状態にして,ペンやマウスが動いたのと一緒にオブジェクトを動かします.ところが,この図のような持ち方だと,最初に画面の何も無いところを触るので,なにもつかめません.つかめないまま,ドラッグしても何も起きません.こうプログラムしている以上,その想定をこえる操作には対応できていないのです.

さらに別の子はこんなことを編み出しました.その子はメガネのなかにある魚を動かそうとしています.ところが,上の子と同じように魚の真上を触るのではなく,魚の手前を触って指先に引っ掛けて引きずろうとしています(赤い矢印).そうするとどうなるかというと,ビスケットは魚ではなくて,メガネをつかんでいると認識してしまって,メガネごと移動します(橙の矢印).何度やっても魚ではなく,メガネ全体が動きます.

そんなことを数回やった後,その子はなにをしたか.

もう片方の手で,勝手に動いてしまうメガネを押さえて動かないようにしようとしたんです.


完全に負けましたね.

僕らは,画面の上で触って動いているように見えるソフトを作った.けれども,実はあるお約束にしたがった操作しかしないという大前提で作っているのですね.子どもはそんなことを知らないのでやりたいようにやります.

これらは,最初からわかってて設計しなおせば,こういう操作にも耐えられるようなUIを実装するのはそんなに難しくありません.実際,開発中の次期バージョンはマルチタッチで指の腹でひっかけて引きずるとか,台紙が動かないように別の手で押さえる,というのは入れました(そこだけできたけど,ビスケット本体を作っていないので,このコードは日の目を見ないかもしれません).

ところが,別の現場ではもっとすごいことをやられまして.幼稚園児です.最初,自分の指先から色が出てくるのを不思議がっていました.何度も自分の指を見て,そこからインクが出ていないことを確認しています.そうやって描いているうちに,塗りつぶすのが面倒になったのか,手のひらをベタっと画面に押し付けました.手形です.当然ですよね.彼はそこに自分の手形が出てくるのを期待して押しました.でも残念ながら現状のタブレットのタッチ機能はせいぜい10点を同時に認識するという程度で,だからこの場合,手のひらの幾つかの点が何点か画面に表示されただけです.ずらしてもいないので点だけです.

これをちゃんと動かそうとするとタッチパネルのデバイスを根本的に変えなければダメですよね.この応用で,ステージに沢山置かれた魚をいっぺんに片付けたいと思った子が,手のひらでざーっと引きずろうとしていましたよ.当然この魚たちは一斉に引きずられるべきですよね.


マウスやペンは,人間の手から道具を介して画面を触っているので,比較的大人しい操作に留まっていたのだと思います.それが指先で直接操作できる,となったとたんに,このようにバラエティに富んだ操作を発明されてしまうのです.

ところが残念なことに,最近は幼稚園児が平気でiPadを使う時代です.iPadの殆どのアプリは画面をタッチするだけで,ドラッグさせるような複雑な操作はそれほどありません.たまにドラッグさせる場合でも,対象のものが触りやすいように大きかったり,触ったときに持ち上げたようなアニメーションを見せたりして,「指先で持つ」という作法に慣れるように訓練できています.最近では,そんな文法を熟知した子が増えてきて,オリジナリティ溢れる操作をする子が少なくなってきたと思います.

こういうのに対して,皆さんはどう思いますか?

僕はまずソフトウェアやデバイスの負けを感じます.自分たちがいかに特殊な操作法に毒されていたのか気づかされました.一方で,その特殊な操作法に染まって行く子どもが増えて行くこともまた悲しいです.彼らの無垢な部分が汚されて行く感じで.

僕が何にこだわって,何を大切にしようとしているかお分かりいただけたでしょうか.柔らかい手触りの木の積木の玩具を作っている職人みたいなものかもしれませんね.



2014/7/13 第1回 ビスケットユーザーズカンファレンス を開催します.
(6/26 追記)

viscuit と scratch の違い シリーズ

2014-06-24 19:46:13 | 1
ことあるごとに,ビスケットとスクラッチとの違いをこのブログに書いていますね.

スクラッチのようなコンピュータは普通のコンピュータなので,わりとこれは何なのか普通のコンピュータを知っている人なら理解しやすいと思いますが,ビスケットは全然普通のコンピュータじゃないので,その根本的な考え方の部分がわからないと伝わらないというか.なので,こうやってことあるごとに違いを書いてます.

どちらも,絵でプログラムを書いて,実行結果は絵の動きです.その視点ではかわりません.じゃあ,何が違うのか.

スクラッチは「絵でプログラムを書いている.プログラムで絵を動かしている」というものです.しかしプログラムの絵と,動かしている絵とはまったく別のものですね.たまたま同じ「絵」という言葉を使っているだけです.この二つの文はそれぞれ分けて考えることができて「絵でプログラムを書いている」というシステムは沢山あるし,「プログラムで絵を動かしている」というシステムも沢山あります.スクラッチはたまたまこの二つを同時に言えている,だけなんです.ですが,二つの文には何のつながりもなく,その中心にあるコンピュータは普通のコンピュータと変わらないんですね.普通のコンピュータの複雑さはそのまま残っています.普通のコンピュータを複雑なまま教えたい人にはいいかもしれません.

それに対してビスケットはちょっと違います.ビスケットは「絵の上にコンピュータを作った」というものです.普通のコンピュータとは違います.絵の上に新しいコンピュータを作ったのです.コンピュータのプログラムは絵で表現され,絵のこと(絵の配置)を計算します.動かすとアニメーションになります.

プログラミング言語の世界では,何かを専門に計算するプログラミング言語はその対象に近い書き方をするのがよい,という考え方があります.一番古い例は,数値計算を沢山したかったので数式を直接かけるのがよいと考えてFORTRANが生まれたり,知識の計算を沢山したかったから知識表現のデータ構造のままプロログラムがかけた方がよいと考えてLISPが生まれました.ビスケットはそういう根源的なプログラミング言語の誕生に近い考えで設計されています.絵を動かすような計算を沢山したかったから,絵でプログラムを書くことにしたのです.

絵の上のコンピュータというのがどれくらい画期的なのか.

私たちはビットマップディスプレイやマウス,タッチパネルといったデバイスのおかげで,画面上の絵を触って動かして,まるでそこにそういうものがあるかのように操作できます.絵の上で動くコンピュータというのは,コンピュータのメモリそのものが絵ということですから,絵を触れるということは,コンピュータのメモリを直接触ることができる,ということを意味しています.ビスケットを使っていて,新しいのだけれど,古くて懐かしい感じがするのは,そのようにメモリを直接触っているからなんですね.

ちょっとコンピュータの専門家向けに話すと,プログラミング言語がどのように発展して行くのか,見て行く必要があります.プログラミング言語の設計には表面的な部分と,中身の部分とがあって,中身の部分がどれだけ発展するのかが重要です.たとえばポインタとGCはメモリをものすごく高度にしました.ラムダやマルチスレッドやオブジェクト指向や.それらに対して,どんな書き方でそういう構成要素を組み合わせるのかというシンタックスの問題があります.最近のプログラミング言語はどれも似たようなものになってしまい,新しいプログラミング言語はシンタックスが新しいもののことを言うのだと思っている人も多いのかもしれません.中身が新しいもの,つまり新しいコンピュータの計算方法を考える,という道も忘れないできちっと進めて行きましょう.

ビスケットでは,絵が動くことが計算することそのものです.何か違う計算をして結果的に絵が動いて見えているのとは全然違うのです.

プログラミングをなぜやるべきか

2014-06-20 01:10:51 | 1
いろんな意見が出てますね.大別すると,プログラミングをやることで「なんとか力」が身に付くという間接的な理由と,今のビジネスや就職に役に立つという直接的な理由.

それらはもっともだと思いますけれど.僕はやらないと勿体ないんじゃないか,ということを言いたいです.

コンピュータは何に使えるでしょうか.何のための道具でしょうか.コンピュータほどいろんな用途に使える装置はないでしょうね.そもそも装置の形をしていないものまでもあるし.その可能性は無限と言ってよいでしょう.これから未来において発明されるだろう新しい応用を想像するとワクワクしますね.

そして,プログラミングをやるべき理由は数えきれません.コンピュータの応用の数だけあるのです.コンピュータが色々なものに使える変幻自在な装置である秘密はプログラミングにあります.もちろん小さくなったとか,電池が長持ちするようになったということで応用の範囲は広がってきましたけれども,それは二次的なものであって,すべてはプログラミングから始まっています.

プログラミングができるということは,このまだ沢山埋もれているコンピュータの宝探しに参加できるということです.そんな楽しいワクワクする探検に関わらないなんて勿体ないと思いませんか?

大人も子どもも,プログラミングでワクワクしましょう.