僕は発展途上技術者

サーバー(Ubuntu)上でBlenderを動かし、objファイルをインポートしてレンダリングする

最近はUnityやらARKitやら、Blenderを触っていてだいぶ3D慣れしてきました。

objファイルをブラウザからアップロードし、そのファイルで定義された3Dオブジェクトのスクリーンショットを表示したいという要望があり、いろいろと方法を調べたところ、サーバー側でBlenderを動かしてobjファイルをインポートしてレンダリングすればできるということがわかりました。その手順を紹介します。

まずサーバーにBlenderをインストールします。2018/1/11時点で最新の2.79をインストールするため、最新のパッケージを含んでいるレポジトリをadd-apt-repositoryで追加してからapt-getでインストールします。

% sudo add-apt-repository ppa:thomas-schiex/blender
% sudo apt-get update
% sudo apt-get install blender

参考 http://ubuntuhandbook.org/index.php/2017/09/blender-2-79-released-install-it-in-ubuntu/

BlenderはGUIで操作する3DCGソフトなのですが、操作内容をPythonで書くことができ、コマンドラインから実行することができます。

以下が、「--」以降の第1引数で指定した.objファイルを読み込み、第2引数で指定した.pngファイルにレンダリングしたイメージを書き出します。この.pngファイルがスクリーンショットになります。

Blenderを起動するとデフォルトでライトとカメラ、立方体のサンプルのオブジェクトが表示されるので、以下の命令で立方体のサンプルを削除しています。

bpy.data.objects.remove(bpy.data.objects['Cube'])

以下のようにして、Blenderをコマンドラインで呼び出します。

% blender --python import_obj.py -- cone.obj cone.png

--pythonオプションの後に、pythonスクリプトimport_obj.pyを指定し、-- 以降、第1引数にcone.objを指定し、第2引数に書き出す画像ファイルcone.pngを指定しています。

cone.objは円錐の3Dオブジェクトの頂点データを持っています。

上記コマンドで書き出されるcone.pngは以下の通りです。

cone.png

上記import_obj.pyは一つの.objファイルを読み込むだけの非常にシンプルなスクリプトでした。複数の.objファイルを読み込んだり、マテリアルを適用したり、カメラの角度やライトの当て方を変えるPythonのコードを追加することで自在に3Dオブジェクトのキャプチャを取ることができます。

The meaning of "Champion" in CoderDojo

各CoderDojoの代表者をChampion(チャンピオン)と呼びますが、ボクシングのチャンピオンなどを連想して他のメンターよりも優れている、あるいは偉いイメージを与えてしまってかねてから違和感を感じていました。初期の頃は CoderDojo Founder(最初に作った人)などと呼び、Championという呼び名はありませんでした。そこで調べてみたところ、https://coderdojo.com/start-a-dojo/ で、Dojos are Championed by individuals のように動詞として使われているのを見つけ、「おや?」と思ったのです。動詞だと「〔人・主義などを〕擁護する、支持する」という意味があり、その場合の名詞としてのChampionには、強くサポートする人、守る人という別の意味になります。どうもこちらの意味で使われているんじゃないかと思い、以下疑問をかかげたところ、CoderDojo Foundation の Nuala さんより「そのとおりだ」という確認のコメントをもらいました。

英語のニュアンスがわれわれ日本人にはやや違って伝わっている例として共有したいと思います。

===

The one who set up local CoderDojo is called “Champion”. For Japanese people, “Champion” sounds like someone who is superior than others, a person who defeated many rivals, like a champion in boxing matches.

I am involved in CoderDojo community since 2012, and at that time the founder of Dojo was not called “Champion”. I don’t remember well, but I think it was called "coordinator" or it was just "the first mentor". When someone calls me “Champion”, I feel a little hesitancy.

Then, recently, I found that “Champion” is used as verb in “Start A Dojo” guide as follows.

Dojos are Championed by individuals all around the world who are passionate about giving young people the opportunity to learn to code. 

In this context, it seems that "champion" is used like "support" or "defend", and I found that the noun "champion" has another meaning like "supporter".

So, "Champion" has 2 meanings.

  1. someone who is superior than others, a person who defeated many rivals, like a champion in boxing matches.
  2. someone who strongly supports something.

It seems that CoderDojo Champion means number 2.

I want to know if my understanding is correct and how native speakers or people in other countries think about this. Please feel free to leave your comments.

小さなリスクを取ることのすすめ

日本ではいままでオオカミは悪とされてきて、ヒツジが善だった。つい20年くらい前までは転職しようとすると「1つの企業に定年まで勤めるのが人間としての道だ」みたいにいうジジイがいましたが、最近では田舎しかいないだろう。まだ牧畜が盛んだったときはヒツジも大事にされたわけですが、いまや化繊(ITとかロボットの人工物)がメインになって羊毛のニーズが激減したと考えれば分かる。これからはオオカミの意識を持たないと最後は屠殺処分が待っているわけです。

突然雇い止めされた派遣社員がその前にやっとくべきだったこと(永江一石)

本当にその通りだと思うのだが、でも、日本人の国民性なのか、長く治安が良く平和な社会で生きてきたからなのか、多くの人はリスクを取ることに慣れていないと思う。

僕も、今は独立してフリーランスで生きていくという、普通の人よりもだいぶリスクのあるライフスタイルを選んでいるが、性格的にはどちらかというとヒツジタイプだと思っている。

大学までは、決まったレールに乗ったままエスカレーター式に進学していく道を選んだ。学生時代は先生の言うことを素直にそのまま聞くタイプだったし、学校で定めたルールをちょっとでも破るなんてことは思いもしなかった。誰かに怒られたりするのが嫌だなあという思いから、アルバイトは家庭教師以外はほとんどやらなかった。

でも、そんな僕がどうしてリスク耐性を身につけることができたのか思い返してみると、1) 環境を変える 2) 小さなリスクを取り続ける の2つが重要だったんじゃないかと考えている。

環境を変えるでいえば、4年間アメリカに移住し働いたという経験が大きく、ボケっとしていたら生きていけいないアメリカ生活に順応していくには、感覚的には3割増しくらいでアグレッシブにオオカミ側に行動や性格を切り替えていたと思う。

小さなリスクについては、いくつかエピソードがある。僕らが学生の頃はスキーに行くのがはやっていて、僕も良く行っていたのだが、皆が行く広いゲレンデを滑るのに飽きて、深雪が残るコース外や林の中を滑るのを楽しんだりしていた。あるいは、社会人になり、勤務時間中は作業服に着替えるという職場だったのだが、どうせ着替えるのだからスーツを着ないで私服で出勤してみたり、インドネシアに旅行したときは、あえて安宿に泊まったりしてみたり。どれも本当に大したリスクではないのだが、小さなリスクを取り続けることで、いつしかリスクに慣れていったように思う。

環境を変える、は効果は大きいがなかなか誰にでもできる簡単なことではないかもしれない。

一方、小さなリスクを取り続ける、というのは意外と簡単にできて、すぐにでも始められるのではないだろうか。知らない人に話しかけてみる、ちょっと空気を読んでない発言をしてみる、普段読まない本を読んでみる、などなど。

micro:bit を Scratch から操作できる s2m が日本語に対応しました

micro:bit を Scratch から操作できる s2m が日本語に対応し、ブロックの表示が日本語になりました。

MrYsLab/s2m: Scratch to micro:bit bridge.

micro:bit は約2000円と安価に入手できるイギリス生まれのプログラミング教育用マイコンボード。LEDを光らせたり、加速度センサーを使うプログラムを、ブラウザで開く専用のブロックエディタ、あるいは Python で作ることができるのですが、s2m はその micro:bit を Scratch からプログラミングできるようにしたものです。

通常はプログラムのファイルを micro:bit にコピーするところを、Scratch からだとダイナミックにプログラミングできるので、より手軽にプログラムを作って修正したりできると思います。

s2m の作者に日本語の翻訳ファイルを提供したところ、さっそく対応してくださり、日本語モードでも起動できるようになりました。

コマンドラインから

% s2m -l ja

と、言語を指定するオプションをつければ、s2m 用のその他ブロックが日本語で表示されます。

これで日本のこどもたちにも利用しやすくなったのではないかと思います。

「ギグ・エコノミー 人生100年時代を幸せに暮らす最強の働き方 」読了

ギグ・エコノミー 人生100年時代を幸せに暮らす最強の働き方
ダイアン・マルケイ
日経BP社
売り上げランキング: 70,505



終身雇用ではなく「ギグ(単発の仕事)」を基盤とした新しい働き方「ギグ・エコノミー」。

旧来の大企業に属し、終身雇用、持ち家を購入し、定年になったら引退し、その後は悠々自適、というライフスタイルはもはやあまり望めない、そうでない新しいライフスタイルの勧めなのだが、すでにフリーランスを10年以上の自分にとっては、目新しいことはあまりなく、再確認といった内容でした。

でも、その中で、いままでなんとなくは心がけていたが、改めて文章化され再確認できてよかったのが以下の2つ。

  • 小さな良いリスクはどんどん取ろう
  • 時間を長くすることはできないが、目新しいことに挑戦することによって時間を長く感じることができる

これらはお互い関連しており、だんだん年齢を重ねてくると、経験から、リスクがある程度精度よく予測できるようになってくる。そうなると、リスクのない行動を取りがちなのだが、そうするとあらかじめ結果がある程度みえているつまらない時間を過ごしがちになる。

こどものときのほうが時間を長く感じるのは、つねに目新しいことばかりで、人は新しい経験を重ねている方が時間を長く感じるからとのこと。

たとえばAという簡単そうにみえる選択と、Bという少し難しそうだなとみえる選択があった場合、できるだけBを選ぶようにしたい。あるいは、知っている人ばかりの飲み会と、完全アウェーの知らない人ばかりの飲み会とがあれば、たまには後者に行くことを選択していきたい。

Connecting the Dots - CoderDojo編

このエントリは以下の2つにわけました。

Connectting the Dots OtOMO編 からの続きです。

OtOMOのワークショップにこどもたちが参加し始め、僕自身も何度かファシリテーターをやるようになってから1年。当時僕が利用していたコワーキングスペース、下北沢オープンソースCafeのオーナーの河村奨氏より、アイルランドで始まったこども向けプログラミング道場 CoderDojo のことを教えてもらいました。きっかけとなったのがA-Listersに載っていた、GitHubサンフランシスコ会場でCoderDojoが開催されるという記事です。

開催場所は下北沢オープンソースカフェ、メンターはカフェの利用者にプログラマーやデザイナーが多いのでなんとかなるだろうということで、開催したい旨をメールで送るのです。

2週間後、CoderDojoの共同創設者James Whelton氏からの返事が届きます。

偶然にもほぼ同時期に東洋美術学校の副校長 中込大介氏もコンタクトしていたことがわかり、東京、日本およびアジア最初のCoderDojoを共同で、第1回はJamesの来日にあわせ、場所は東洋美術学校でおこなうことになります。

第1回までの時間、ウォームアップとして第0回、第0.5回を下北沢オープンソースCafeでおこないます。

そして、James Whelton氏来日。このとき若干19歳でした。のちに一般社団法人CoderDojo Japanを立ち上げることとなる安川要平氏を含むオープンソースカフェに良く来ていたメンバーがJamesを東京観光に案内します。

東洋美術学校でおこなわれた第1回 CoderDojo Tokyo。第0.5回およびこの第1回で、阿部和広氏がメンターとして参加し、ScratchからSqueakにもぐり、ブロックの挙動を変える方法を紹介しています。

最初のDojoのあとの数日後、CoderDojoのアイルランドでの様子、運営方法のコツなどを交換しました。

こうして現在のCoderDojo下北沢が始まり、いまでも毎週おこなわれています。

-こどもたちにプログラミングを教える CoderDojo Tokyo #1 を開催しました

同じ年の夏、アメリカはボストン、マサチューセッツ工科大学でおこなわれたScratch@MITに参加しました。

このときに出会うこととなる15歳のScratcherがもっとほかのこどもにもScratchの楽しさを伝えたいというので、CoderDojoのことを紹介し、「なんならやってみたら?」とアドバイスします。

このときの若者、宮島衣瑛氏がCoderDojo柏を立ち上げます。

同じ頃、WordPressのプラグイン開発者としてWordPressコミュニティで著名な宮内隆行氏が関西で最初のCoderDojoとなるCoderDojo串本を立ち上げます。

CoderDojo下北沢のメンターとしても参加していた高野直子氏が第一回 CoderDojo串本のメンターとして参加。また兵庫からわざわざ参加していた方もいました。

兵庫から参加した細谷崇氏はCoderDojo下北沢にも見学で訪れ、

CoderDojo西宮・梅田を立ち上げることとなります。

CoderDojo下北沢に約2年ほど関わったあと、最初は一緒に参加していた自分のこどもたちが部活で忙しくなったり、少しずつ興味が別のものに移りつつあり、僕自身もCoderDojoへの関心、情熱が薄れつつありました。それでもOtOMOへはたまに顔をだしたり、ScratchとドローンやロボットなどほかものとつなげるScratch2○○シリーズの開発を続け、プログラミング教育界には関わっていました。

2016年夏、関西を中心に各所で少しずつ立ち上がったCoderDojoが36となり、前述したCoderDojo西宮・梅田の主催者(CoderDojoではチャンピオンと呼称)細谷崇氏を中心としたコミュニティのメンバーがDojoCon Japanを大阪で開催します。

Scratch2○○シリーズについて話してほしいという登壇依頼を受け、阿部和広氏による「子供達にプログラミングをサポートする上で大事なポイント」 の基調講演で始まるDojoCon Japanに参加しました。

コミュニティとして大変盛り上がりをみせ、関西らしい初対面の人にもフランクにあたたかく歓迎してくれる人たちを目の当たりにし、その雰囲気をとてもうらやましく思いました。みんなが僕に対して、「なんならやってみたら?」という、いつか僕が言ったメッセージを送っている気がして、懇親会を去り際に自分の住む場所の近くにCoderDojoをつくることを宣言します。

2週間後、CoderDojo調布を立ち上げることとなります。

CoderDojo調布の第一回からメンターとして参加していた向井アリー氏は、自宅がある藤沢市から2時間近くの時間をかけて毎回来てくれていました。

また、まちクエストの同僚で沖縄在住の小川智史氏はかねてからこども向けプログラミング教育に興味をもっていました。

小川氏が東京に来ていたちょうどそのときに、CoderDojo調布を開催していたので見学に来ることを誘い、二人に「CoderDojoやってみたらいいんじゃない?」と言っていました。

2017年1月29日、同じ日にCoderDojo藤沢とCoderDojo嘉手納が始まります。

CoderDojo調布の一回目からメンターとして参加し、OtOMOのメンバーでもある猪股直規氏も、あきる野市から遠いところを通ってくれていたので、自分の住んでいる近くにCoderDojoをつくることをすすめていました。 立川に居を移すのをきっかけに、CoderDojo立川を立ち上げることになりました。

2017年11月、大阪で2回目となるDojoCon Japanが開催されました。

懇親会にて、再び細谷氏に乗せられ、こんどはDojoConの開催を宣言させられたのは、CoderDojo柏、CoderDojo立川、CoderDojoさいたま、そしてCoder調布と、奇しくも関東の道場ばかり、ということでDojoCon 2018は関東でおこなわれることとなりました。

「未来をみこして点をつなぐことはできない。未来になってから過去をさかのぼってでしかそれらをつなぐことはできない。だから、われわれにできることは、未来になってからそれらの点がつながるということを信じることしかない」

は、故スティーブ・ジョブス氏の言葉です。

この言葉自体は僕は好きですし、iPhone始め数多くの革新的なプロダクトを産んだ彼を尊敬はしますが、iOS版のScratchをApp Storeから削除し、開発者からの問い合わせのメールに対して冷たくただ一言「Sorry」とだけ返したジョブス氏には複雑な思いがあります。

故Steve Jobs氏に大きな影響を与えたコンピュータ科学者のAlan Kay氏は、Wiredの記事に次のようなコメントを寄せています。「子供もインターネットも、Apple社よりも大きなものだ。世界の子供達にとって良いものは、どこの上でも稼働できる必要がある」。Scratchは、Alan Kay氏が開発したSqueak環境の流れをくむプログラミング環境でもあります。

上記の話から、この点に関しては僕はアラン・ケイ氏に強く共感するので、最後は氏の言葉で終わりにしたいと思います。

The best way to predict the future is to invent it.

「未来を予測する最善の方法は、それを発明することだ」1971年、パロアルト研究所の研究内容の将来予測を再三に渡って求めるゼロックス本社に対する回答(経営陣と開発陣の軋轢や見解の相違を端的に表している)

DojoCon 2018が楽しみです。

Connecting the Dots - OtOMO編

このエントリは以下の2つにわけました。

Connecting the Dotsは、スティーブ・ジョブスがスタンフォード大学の2005年の卒業式でおこなったスピーチの中に出てくる有名な格言です。

You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future.

「未来をみこして点をつなぐことはできない。未来になってから過去をさかのぼってでしかそれらをつなぐことはできない。だから、われわれにできることは、未来になってからそれらの点がつながるということを信じることしかない」ということなのですが、目の前のことを、これは役に立つだろうか?自分にとって得なのだろうか?と考えるよりも、やりたいこと好きなことを一生懸命やれば、それが未来につながる、ということを教えてくれる言葉です。

2005年から遡ること約35年、パーソナル・コンピューターの父と言われるアラン・ケイはゼロックス社のパロアルト研究所の設立に参加、彼が提唱する理想端末「ダイナブック」を当時の技術で実現したAltoの上で、ユーザーが自らプログラミングできるSmaltalk環境を動作させてみせた。これを見学する機会を得たスティーブ・ジョブスがそのアイデアを取り入れ、LisaおよびMacintoshを開発したと言われている。

アラン・ケイが開発したSmaltalkを使ってシステム開発の仕事を手がけていた阿部和広氏は、2001年来日したアラン・ケイと出会い、「Smaltalkがこどものために教育のために生まれてきた」ということを知ります。以来教育の道を歩み、アラン・ケイがプロジェクトマネージャーの一人を務めていた2002年、2003年の未踏プロジェクトに参加、 アラン・ケイが手がけていた教育用のSmaltalk環境であるSqueak、およびその考えを引き継ぐScratchの日本での普及に大きく貢献します。阿部氏の活動の中のひとつに、当時月一でおこなわれていたOtOMOでのプログラミングワークショップがありました。

スティーブ・ジョブスのiPhoneの発表に衝撃を受け、発売当初はアメリカでしか発売されていなかった初代iPhoneを手に入れた僕は、ついに日本にも上陸し、開発者がアプリを作れるようになったiPhone 3Gで何かアプリを作りたいと思っていました。ひらがなを覚え始めた長男でも楽しめるアプリということで、ひらがなで単語を作って楽しめる「かなぶん」というアプリを開発してリリースします。

2010年iPadがリリースされ、さらに知育アプリを開発しようと考えていた僕は、初台のアップルセミナールームにておこなわれた、iPadをどう教育に活かすかを考える「iのある教育と学習」というセミナーに出席します。登壇者の一人、阿部和広氏が披露したのは「iPadはDynabookの夢を見るか」というプレゼンテーションで、そこではエンドユーザーのプログラミングを禁じたiPadに対する、こどもたちが自由にプログラミングできるOLPC + Scratchというもうひとつのプログラミング教育の形を示していました。

Apple Japan本社のセミナールームでiPad完全否定というこの話に衝撃を受けた僕は、即日3万円ほどのミニノートPCのEee PCを購入し、Scratchをインストールして自分のこどもたちにプログラミングを教え始めた。「かなぶん」以降、エンドユーザーがプログラミングできない知育アプリを作ることはなくなります。

その年の5月、「かなぶん」のデザインを手がけた前田製作所が「かなぶん」含めたいくつかのプロダクトを展示するということで、MTM05(Maker Faire の前身)を見に行った。そこでScratchのワークショップをおこなっていたのが、倉本大資氏が立ち上げたOtOMOで、阿部和広氏もファシリテーターの一人としてこどもたちにScratchを教えていました。

2011年3月、東日本大震災が東北を襲ったその約2週間後、僕はこどもたちを連れて三軒茶屋でおこなわれたOtOMOのワークショップに参加します。定例ワークショップでおこなわれたのは、阿部和広氏がファシリテートする「じぶんクエスト」でした。

Connecting the Dots - CoderDojo編 へ続く

MakerFaire Tokyo 2017 で出展した「子どもプログラミング喫茶」振り返り

子ども向けのプログラミング体験メニューを喫茶店のように注文してもらい、体験してもらう「子どもプログラミング喫茶」で OtOMO の一員として協力してきました。

子ども向けのプログラミング体験メニューを喫茶店のようにご注文いただきご体験いただけます。(各体験15-20分程度)Scratchを中心にフィジカルコンピューティングやロボットプログラミングにもチャレンジできます。協力:OtOMO、It is IT、東京都市大学 小池研究室、東京都市大学 等々力中学校・高等学校理科部

http://makezine.jp/event/makers2017/m0209/ より

全体的、運営的な振り返りはすでに中のひとたちに共有したので、個人的なもの多めで振り返ってみたいと思います。

Keep (今後も続けていきたいこと)

  • 体験メニューをいくつか用意しておいて(今回は7つ?)、その中から選んでもらうというコンテンツは非常に良い。自分でコントロールして動かす mbot、そしてマイクラと Scratch 連携は男の子に人気が高く、自由にしゃべらせることができる mugbot はわりと女の子に人気が高いというように、バラエティが多い分、幅広くプログラミングに興味を持ってもらえる機会になっていると思う。

  • 昨年の「子どもプログラミング・カフェ」に引き続き、Scratch2MCPIを使ってマイクラと Scratch をつなげてみよう、というメニューを用意した。昨年と同じで良いのか?何か新しい新鮮なネタを用意したほうがいいんじゃないかと思っていたのですが、結果的には、まだまだマイクラ人気は衰えていないようで人気メニューの一つのようでしたし、後述するように Scratch2MCPI のバグを発見する機会にも、改善する機会にもなって良かった。エンジニアというのはとかく新しもの好きで、何かつくってみては、次の面白そうなものに飛びついてしまって、作ったものをブラッシュアップせずに放置ということを繰り返しがちなのだけれど、立ち止まって石を積むことも大事だということも必要なんだと実感させられた。ちなみに立ち止まってうんぬんは、日本 Scratch 界の第一人者阿部先生が言っていたことの受け売りです。(ビスパ〜Viscuit Birthday Party 2016〜(7:保護者対談) 27:40 参照)

Problem(反省点)

  • いろいろと忙しくメニュー共有の場に参加できなかったり、体調が万全ではなく Maker Faire 一日目は半日しか参加できなかったりした。もうちょっと時間を割いて、運営側の皆さんと交流したかった。

  • 今回こどもたちからの「黒い羊毛だけしか積めないのは嫌だ、石のブロックを積みたい」という声から Scratch2MCPI の turtle モードで、実はブロックを変更できないというバグを発見した。また、「TNT を爆発させたい」という要望が多いのに、恥ずかしながら、その方法がわかっていなかった。作って完成と思ってしまっていて、あまり CoderDojo などでも Scratch2MCPI を使って実際に教える機会が少なかったのが、こうした要望をちゃんと汲み取れていなかった原因だと反省している。

Try (今後ためしてみたいこと)

  • Scratch2MCPI を使ってこどもに Scratch x マイクラ連携の方法を教える機会をもっと増やしていきたい。立ち止まることは大事。

  • Scratch2MCPI を間にはさんで Scratch1.4 とマイクラを連携させるのは、送るブロックのメッセージに日本語が使えないなどあって、UI 的にはいろいろつらい。Raspbian にオフライン版の Scratch2、でも中身は実は ScratchX、が始めから入るようになったので、日本語もつかえる独自ブロックが作れる ScratchX 対応版をつくる。

論文の引用、GitHub の Fork と Scratch のリミックス

Scratch(スクラッチ)にはほかの人のプロジェクトをコピーし、自分の好きなように変更して公開できるリミックスという機能がある。

学術論文の引用、GitHub の Fork にあたる機能だ。

リミックスをおこなうと以下のリミックスツリーという画面で、その作品のリミックスされてきた足取りをたどることができる。

また、リミックスされた作品には、自動的に原作者への感謝のコメントが表示される。

つまり、オリジナルの作品への敬意を払いつつ、どんどん人の作品をコピーして(悪意ある表現をあえて使えば「パクって」)、それをもとに自分のアイデアを加味することが推奨されている。

ちなみに僕の作品の中で1000以上参照されているのは、スクラッチキャットが正三角形を描くというのと円を描く(厳密にいえば正360角形)というごくシンプルなプロジェクトだ。

» #3 Draw a triangle

» #4 Draw a circle

2011年というかなり早い時期に作ったというのとタイトルが英語ということもあるとは思うが、いずれもリミックスしやすかったというのもあるのかもしれない。

以下は #4 Draw a circle をリミックスした作品のうちのひとつ。オリジナルの作品よりも数倍面白いとは思うのだが、謝辞をとても丁寧に書いてくれていて非常に嬉しくなる。

» Draw a Square and a Circle Remix 2

完成された作品をつくるのも良いが、このように他の人のアイデアを刺激するような、リミックスしやすい作品をつくるのも楽しい。

大人のためのスクラッチ - ダーツを10万本投げて円周率を求める

大人でも楽しめる題材でスクラッチを楽しんでみようということで、「大人のためのスクラッチ」というシリーズでスクラッチのプロジェクトを作ってみる。

第1回目は、ダーツをランダムに投げまくって円周率を求めてみよう、ということをやってみる。

元ネタは、「プログラミング練習問題集」というページのこちら↓

» モンテカルロ法で円周率を求める

モンテカルロ法というのは、本来は数学の理論などを駆使して計算で求めるべきことを、ランダムな結果がでるテストを膨大な回数繰り返して力技で求めてしまう手法のことを言う。

半径1の円とそれにピッタリくっつく1辺の長さ2の正方形があったとする。

いまからやたらめったらどこも狙わずにこの正方形の内側に10万回ダーツを投げたとして、そのうち円の内側に何本ダーツが入ったかを数えれば、円の面積と正方形の面積の比率がわかる。

正方形の面積は 2 x 2 = 4 なので、

円の面積 / 4(正方形の面積) = 円の内側に当たったダーツの本数 / 100000(ダーツを投げた回数)

と考えていいだろう。

たとえば、もしダーツがちょうど半分当たったら、円の面積も正方形の半分と考えていいだろうということだ。

両辺に4をかけて、

円の面積 = 円の内側に当たったダーツの本数 x 4 / 100000

となる。

さて、円の面積の公式を覚えているだろうか?小学生のときの記憶を思い起こしてみよう。

円の面積 = 円周率(π) x 半径 x 半径

が円の面積を求める公式だ。

なぜ、円の面積が上記の公式で求められるのかを直感的に説明したアニメーションをスクラッチで作ってみたので、公式だけ示されても納得いかない、モヤモヤするという方は見て欲しい。


[https://scratch.mit.edu/projects/164436069/]

もう一度、ダーツを投げる円と正方形の図をみてみよう。

この円の半径は1なので、

円の面積 = 円周率(π) x 1 x 1

円の面積 = 円周率(π)

つまり円の面積はそのまま円周率と同じなのだ。

赤字で書いた式を書き直すと、

円周率 = 円の内側に当たったダーツの本数 x 4 / 100000

で求めることができる。

実際に正方形と円が描かれた厚紙を用意して10万本ダーツを投げてみるのは面倒くさいので、それをスクラッチでシミュレーションしてみる。

まず、ペンを使って赤い円を描く。

実はスクラッチ上では長さを100倍引き伸ばした世界でシミュレーションする。

なので、半径が100の円を描くのだが、これは、太さ200のペンを一回ポチッと下ろすだけで描くことができる。

そして、ダーツを10万回投げるプログラムがこちらだ。

total という変数に 100000 をセットしている。

これがダーツを何回投げるか、つまり繰り返す数だ。

繰り返しの中身はこうだ。

前述したように、スクラッチ上では長さを100倍引き伸ばした世界でシミュレーションしているので、0, 0 を中心とした1辺200の正方形の中にランダムにダーツを投げることになる。

黒い点のスプライトを x 座標が -100 から 100 の間のどこかに、y 座標も -100 から 100 の間のどこかに定めて移動する。

これがつまりダーツをその場所に投げたということだ。

そして、赤色、つまり縁に触れたら inside という変数を1増やす。

つまり、inside の値は円の内側に当たったダーツの本数だ。

これを10万回繰り返し、最後に、円周率 pi の値を求めている。

赤字で書いた式と同じだ。

それでは実際にスクラッチのプログラムを実行してみてほしい。

10万回の繰り返しは時間がかかるが、シフトキーを押しながら緑の旗ボタンを押せば、ターボモードになって処理速度が速くなるので、少し待てば結果が出る。


[https://scratch.mit.edu/projects/163228277/]

ここまでで実際にやっているのは、正方形と円の中にダーツをただひたすら投げ、円の中に当たったダーツを数えているだけだ。

そんな力技で円周率を自分で求めることができるというのが面白い。

Scratchで楽しく学ぶ アート&サイエンス
石原 淳也
日経BP社
売り上げランキング: 11,183

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Scratchで楽しく学ぶ アート&サイエンスRaspberry Piではじめる どきどきプログラミングを書きました。

オンラインコンテンツ: 大人のためのScratch

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Email: webmaster at champierre dot com

Twitter @jishiha

最近のエントリー

アーカイブ