パスワードを忘れた? アカウント作成
7474 story

ブロックを組み立ててプログラムを作ろう 39

ストーリー by GetSet
幼児にもプログラミングの楽しさが伝わるかも 部門より

MIYU曰く、"LEGO「MindStorms」の 開発者でもあるヘンリック・ルンド教授が新しく開発した「I-BLOCK」 の事を、 ITmediaが紹介しています。
「I-BLOCK」は、普通のLEGOの4倍の大きさがある「LEGO Duplo」サイズの ブロックにそれぞれ“PIC16F876”マイコン(1個数百円)と2つのシリアルポート、電源コネクタを組み込んだものです。 ブロックは、演算とコミュニケーションを担当するスタンダードブロック、 光・音・接触などの情報を得るためのセンサー類が付いた入力ブロック、 音や光などを出したり、動いたり、情報を表示するための出力ブロック、 電源が用意されていて、 普通のレゴブロック のように「I-BLOCK」を組み合わせていく事で、「プログラム」が出来上がる様になっています。
記事では、ブロックを実際に組み合わせて計算をしたり、正しい綴りの練習をしたりする様子が紹介されていますが、 ブロックの組み合わせを変える事で「起きる事」を変えられるというのは なかなか楽しそうに思えました。商品化はまだ未定のようですが、出たら欲しい気がします。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 関連研究 (スコア:4, 参考になる)

    by oltio (3848) on 2004年02月08日 16時30分 (#491617) 日記

    関連研究どぞー

    • AlgoBlock: by NEC。基本的な演算子と条件分岐をブロックにして、つなぎあわせる事ができるもの。
    • Triangls [mit.edu]: おなじみTangible Media Groupのもの。プログラムを構築するものではないが、文章をつなげて物語を作るという応用がある。ブロックが三角形な理由は、石井さんが「四角形に飽きた」からだそうな。
    • BlockJam [sony.co.jp]: SonyCSLの Henry Newton-Dunnの作品。こちらは音楽構成に特化している。
    • Self-Describing Building Blocks [merl.com]: MERL(Mitsubishi Electric Research Labs)。単にブロックの組み合わせ状態をデータとして取得できるだけ。Quakeを使って、作った建物の中で遊べるデモが良かった。
  • by Futaro (2025) on 2004年02月08日 19時52分 (#491687) ホームページ 日記
    「いやぁ、びっくりしました。」

    「朝起きたら、昨晩までいじっていたI-BLOCKの複雑な構成を作ったかたまりが、自分で空いてるブロックを勝手に持ってきて、増えてるんですよ。おまけに、私の作った構成から、自分自身で構成を勝手に変更して、進化しているみたいなんです。いやね、このままどうなるか楽しみでもあって、明日もこのままにしておこうと思うんですけどね。でもI-BLOCKの「彼」は、いったいなにを考えているんでしょう?今度音声インターフェイスブロックを接続して聞いてみたいです。」

    このA氏は一週間後突如として自室の中で消息が途絶えたと言う。

    # なーんてね。
  • やられたー (スコア:3, 参考になる)

    by Anonymous Coward on 2004年02月08日 20時48分 (#491703)
    未踏ユースの関係者です。
    やられました。
    今回のプロジェクトではマイコンを組み込んだブロックのシミュレータを作成して、そのフレームワークを利用したアプリケーションを作成しているのですが、特にブロック同士が通信しあい、分散システムを作るって点は我々にはないおもしろさです。
    実際にブツも作りたいなーと思っていたところこれですか。
    こいつも、物理接続の部分でやはり信号線がネックになってる感じですね。

    負けないように研究を続けたいと思います。
    • Re:やられたー (スコア:4, 参考になる)

      by oltio (3848) on 2004年02月08日 22時09分 (#491730) 日記
      別コメントで挙げた [srad.jp]関連研究はすでにあたっておられるものと
      思いますが、接続の自由度を落さないとロバストなものを作るのは難しいと
      いうのはどこも同じようです。

      ただ、この話は結局、竹内先生が述べておられるように、構成要素を
      何にするかが肝であり、かつ大変困難な問題だと思います。
      I-Blockの記事中で触れられている、ニューラルネットワークに基づいた
      光追跡を行う車は、元ネタは Valentino Braitenberg の
      "Vehicles" かと思いますが、単純な機構でMindstormを制御しようと
      いうのであれば、こういう解もあると思います。Braitenberg's Vehicles
      については、A.K. Dewdney「Computer Recreations」に記事がありますので
      参考にしてください。Scientific American 1987年です。(多分5月)
      日経サイエンスの「別冊サイエンス」にも収められていますが、絶版です。
      親コメント
    • by naruenosekai (13637) on 2004年02月09日 18時11分 (#492317)
      USBかLAN接続で、1つのブロックが小規模なLinuxマシンで、
      組み上げると色んな物になる物を是非ともお願いしたいです。
      親コメント
  • by ikuuya (14857) on 2004年02月08日 16時57分 (#491628) 日記
    まさしくオブジェクト(モノ)指向ですな。

    だけではアレなので、ちょっと補足を。
    各マイコンをプログラミングできるなら、プログラムの構造が目に見えますね。
    • by pz00 (10663) on 2004年02月08日 17時40分 (#491643)
      ブロックならスパゲティ化しなそうですね。
      親コメント
    • by G7 (3009) on 2004年02月08日 20時02分 (#491690)
      ちょっとオブジェクト指向とは違う面も有りますね。

      オブジェクト指向って、知らない人(^^;には、
      「機能」がオブジェクトになっているもの、みたいに捉えられてる節が有るけど、
      実際は(そういうのも全く駄目とまでは言わないけど、どちらかってーと)
      機能じゃなく「状態」がオブジェクトになってるんだよね。
      つまり機能じゃなく機能を被る側のものがオブジェクト。

      んだから、データを保持するため(だけ)のブロックとかも本来欲しいんですよね、
      もしオブジェクト指向なブロックを作るっていうならば。
      まあ、今回のコレがオブジェクト指向「でなければならない」ってわけではないけど。

      とりあえず表をぱっと見た範囲では、「機能(演算または入出力)」のブロックばかりで、
      状態はせいぜい添え物って扱いみたいですね。個人的趣味(OOPオタ)としてはちょっと残念。

      ちなみに、我々プログラマが何時も戦っている(=バグ退治してる)対象は、
      大抵の場合、機能ではなく状態だと思います。
      機能って、それこそこんなブロックにするのも簡単(ユーザにとって)なくらいに
      直感的に判りやすい(だからそれを並べるだけならバグも入りにくいし子供も遊び易い)んだけど、
      状態はそうでもないみたい。
      だけど状態ってプログラムには必須なんだよねえ。

      というわけで、ちと先走るけど、真のハッカーを養成するためのギブス^H^H^Hブロックを作るならば、
      状態ブロックと、その状態を見るためのテスターっていうか「デバッガ」なブロックとが
      欲しいような気がします(^^;

      #あとはクロージャっていうかBlockかな。そうすれば(Smalltalk風にやれば)IF文が作れるから。

      #あと、電源ぶっこ抜いたらどうなるのかな?
      #フラッシュメモリとかを少々使って、「状態」を電源抜いても覚えてるブロック、なんてのが有ったら面白そう。
      #まるでContinuationじゃん(^^;

      さて。今回のこれ、どっちかってーと、パイプラインアーキテクチャじゃないかな。
      UnixのPipeでもお馴染みのアレです。
      個々のブロックにCPUが有るってのは驚きだけど、
      Unixで各プロセスが独立したCPU Time(=仮想的なCPU)を割り当てられてるのを見ると、
      まあそんなもんかなという気もしてきます。

      ええと。自分の経験の範囲で似てるものっていうと、やっぱり
      MAXやPureData [cool.ne.jp]の路線かなあ。
      足し算引き算をしてみせる辺りなんか、正にソックリ。
      オブジェクト指向との距離の具合なんかも(^^;まさにそっくり。
      こういうソフトを直接手で弄れるようにしたら今回のブロックになった、という印象。
      親コメント
    • by Anonymous Coward on 2004年02月08日 21時20分 (#491712)
      オブジェクト指向になってない、オブジェ指向です。
      如何に美しく積み上げるかが肝なわけです。
      親コメント
    • by Anonymous Coward on 2004年02月08日 17時39分 (#491641)
      「コピペ再利用」ができないので、自然と再利用を意識した設計ができるようになる………?といいね

      #そこまでデカいもん作らんか
      親コメント
      • by G7 (3009) on 2004年02月08日 20時12分 (#491696)
        いちおう考えてみるテスト。

        再利用って、出来るんだろうか?
        作り次第だけど、もしかして出来ないかも?

        というのは、機能(であるブロック)に、恐らく状態がべったり張り付いているので、
        1つの処理構造を複数の処理から呼ぶことが出来ない、んじゃないかと。

        実際のプログラムでは、同じ関数を二度呼んでも、ローカル変数とかの「状態」は
        毎回新たに作られていて、しかも互いに干渉しないわけで。

        まあ、「再帰」を諦めればいい、という話もあるけど。

        #「MidiPipe」を作ったときに、
        #自作のPipeの組み合わせの「関数」化を行なう仕組みを導入しようとして、
        #はたと困ったのでG7
        #複数の場所から呼ばれても、状態が混線せず、returnも正しく各々の呼び元に返る、
        #という仕組みが必須であることを想定していなかったので、お手上げ。
        #いい勉強になりました(^^;
        #ちなみに大きいお友達はこちらでお勉強 [dreamhost.com]するのがGoodかも。
        親コメント
        • by oltio (3848) on 2004年02月08日 22時27分 (#491738) 日記
          一般的にオブジェクト指向の話で「再利用(reuse)」と言った場合は、
          再帰呼び出し等で必須の「再入(reentrant)」可能かどうかの話とは
          関係ないのではないですか。同一のランタイムユニットによる再利用
          というよりかは、異なるユニット間で同じコードを改変する事なく
          利用できるかどうかが「再利用」性に関わるのではないかと。
          (システムの設計上、両者が不可分である場合もあるでしょうが)

          I-Blocksの件においては、そもそもデータフローに近い設計なので
          比較のしようがありませんが、仮にブロックのある塊を「オブジェクト」
          だと思うにしても、それらは当然のようにインスタンスなので、
          再入も再利用もないもんだ、と思います。仮に、その塊を「関数」あるいは
          「手続き」だと思うとすれば、再入可能にする事は不可能ではないかも。
          ただ、結線を工夫しないと難しいかな。(入口:出口の対を複数持てる
          ようにすれば良い。ただし排他制御が必要になる)
          親コメント
          • 失礼、"reentrant"は「再入可能」ですね。 「再入」単体なら"reenter"か。
            親コメント
          • >一般的にオブジェクト指向の話で「再利用(reuse)」と言った場合は、

            うーん。まずこの話は(前に書いたように)OOPの話じゃないんですよね。
            あと、OOPでだって再帰をやりますから
            (OOPかどうかと、再帰とかがあるという意味での手続き型かどうかと、は事実上直交なので)、
            「OOPの話で」という限定にはあまり意味がないと思っています。

            >同一のランタイムユニットによる再利用
            >というよりかは、異なるユニット間で同じコードを改変する事なく
            >利用できるかどうかが「再利用」性に関わるのではないかと。

            実体プログラミングの場合、
            Cut&Pasteは出来てもCopy&Pasteは出来ない、つまり
            普通の意味での再利用をしようとしたら元の回路をぶっ壊さないとならない(^^;ので、
            それを再利用と呼ぶのは、なんか違うような気がしています。

            #一旦手にしたものを壊すのが凄く苦手なのでG7
            #その点、一般的なソフトウェアは、真の意味で壊さずに済むんで、凄く助かっています。

            >仮にブロックのある塊を「オブジェクト」
            >だと思うにしても、それらは当然のようにインスタンスなので、
            >再入も再利用もないもんだ、と思います。

            Smalltalkみたいなやり方を見ていると、
            インスタンスの再利用という概念もあるような気がしてきます。
            Smalltalkとまで言わなくても、永続オブジェクトとかオブジェクトを(R)DBに保存するとか
            という世界でも、似たような感じかな。
            狭義の「プログラム」が終わっても尚消えずに残るようなオブジェクトには、
            それ自体に「再利用」という道が拓けてるんじゃないかと。

            >ただ、結線を工夫しないと難しいかな。(入口:出口の対を複数持てる
            >ようにすれば良い。ただし排他制御が必要になる)

            排他するか、陰でコッソリと"インスタンス"を複数作るか、どっちかですね。
            親コメント
      •  あんまりデカい物でなくても、落とすとコードがバラバラになっちゃいそうですね。

         紙カードの束を落として行単位でばらばらになるってのを、オブジェクト単位で再現出来る(笑)。
        #紙カード使ったことない世代なのでID

        親コメント
  • by bikeman (14466) on 2004年02月08日 21時48分 (#491723)
    こっち [cqpub.co.jp]は、無線機を作ろうというブロックです。
  • この手の「ブロックでプログラミング」ネタを見ると、たいてい
    ブロック間は電気信号をやりとりするのだけど、この方式だと、
    データフローにした場合はデータが見えない、アクターモデルに
    するとメッセージが見えない、という事になります。
    実用性やロバスト性を考えるとそうせざるをえないのかもしれま
    せんが、どうせなら「どっちも見たい」と私は思うのです。

    で、インターネット物理モデル [eto.com]のようなやり方で
    それが実現できないかと思うのですが、どないなもんでしょう。
    仕掛が大きくなってしまうのは不可避かな。家庭用玩具にはなり
    ませんかね。
    • 実を言うと、チームの間ではインターネット物理モデルの続編で
      コンピュータ物理モデルを作りたいという話を前からしていました。
      かなりいいところまでプランニングしていたんだけど。

      家庭用インターネット物理モデルという案も前から出てました。
      親コメント
    • >データフローにした場合はデータが見えない

      そうなんですよね。
      上のほうで俺が書いた「オブジェクト指向とはちょっと違う」
      っていう話題と同じでして、データ(もしかしてそれこそがオブジェクトかも知れない)は
      ブロックの下(?)を流れ去るだけで、俺らの目には触れない。
      枯れ川は目に入るけど水が(一見)流れてなくて寂しい、みたいな。

      #ところで、オブジェクト指向を「使って作った」技術ではあるかも知れないが、
      #今度はそれを使って表現できるものは、オブジェクト指向とは限らない、ってものが
      #世の中には一杯有ります。一例でJDBCみたいなRDBの単なるラッパーライブラリとか。

      多分、プログラムをこういうブロックみたいな(物理的な)媒体で表現する場合、
      データだのなんだのみたいな「動的な(動的に生成/消滅する)」ものを
      どう表現するか、が鍵になるんだと思います。

      ノイマン式(だっけ)計算機の中では、静的なコードと動的なデータが渾然一体となって動くんだけど、
      同じノリはブロックで表現するのがなかなか大変そう。
      #というか、渾然一体と決別できるなら、ノイマン(だっけ)式を超えられたことになっちゃうぞ(^^;

      >で、インターネット物理モデル [eto.com]のようなやり方で

      手元のブラウザではその頁が旨く表示されなかったんで推測ですが、
      「キロバトル」という言葉(NHKのお笑い番組のあれ)を思い出しました(^^;

      画面上で配線っぽい行為をすることでプログラミングになる、というタイプの言語(?)の場合、
      それらのうち幾つかは、データが流れたときにそれが何らかのかたちで「見える」
      ように仕組まれているもの、があるようです。

      どうするといいんでしょうねえ。
      繋ぎ目のところに「今こんなデータ通ったぜ」とLED光って示す、みたいな感じとか?

      あと、前にも書いたけど、デバッガの発想は必要かも。
      デバッガってのは、任意の個所のデータを見ることが出来るってのと、
      あと、デバッガで表示できるように処理を一時停止できる機能が有る、っていうこと。
      つまり、今ココラへんまでデータが着てるはずだから、ちょっと止まって、見せてね、と。
      プログラムは本来光の速さで動くんだけど、それを敢えて遅くするのがデバッガ(の1つの面)なんだよね。

      で、ついでに。
      実のところ日ごろ思っているんだけど(^^;、デバッガに、
      「停止」だけじゃなく「スロー再生」モードがあればいいんじゃないかな?
      何を再生するかってーと、データの流れ(や変容)を、です。
      今ここ通ったとか、こう変化したとか、がゆっくりと目視できるってのが、よろしいんじゃないかと。
      人間(お子様含む)の目は、ほどほどの遅さのものの動きを追うのが得意(^^;なので、
      従来よく有るように逐一止めるスタイルより、このほうが便利なときも有るかもだ???
      親コメント
  • by greentea (17971) on 2004年02月08日 20時51分 (#491704) 日記
    自作パソコン作れないかな?
    --
    1を聞いて0を知れ!
  • Mindstormで作った、ルービックキューブ解決器
    http://jpbrown.i8.com/cubesolver.html
  • by Anonymous Coward on 2004年02月08日 17時36分 (#491639)
    のプログラムを思い出したのは僕だけじゃないハズだ。
  • by Anonymous Coward on 2004年02月08日 18時16分 (#491651)
    ちょっと違うのかな?
typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...