読者です 読者をやめる 読者になる 読者になる

飛行機トラブルでホテルに缶詰

このところ、国内外の出張が増えていて、今月も10日ほど、クリーブランドアムステルダムマドリードと世界一周の出張に出かけていた。

私は海外出張のトラブルというものがこれまでほとんどなかったのだけど、今回はクリーブランドからアムステルダムに向かう飛行機が飛ばないというトラブルに見舞われてしまった。クリーブランドからアムステルダムJAL系では直行便がないらしく、フィアデルフィア経由で行くことになったが、その便がエンジントラブルで定時に離陸できず、予定より5時間遅れての出発となった。乗客のほとんどは別便か、夜も遅かったのでクリーブランドに泊まるかしたが、私のようにトランジットな人4人は仕方なく待ってフィアデルフィアまで向かった。もともと50人乗りくらいのコミュータだったが、それでも4人というのはなんとも言えない親近感あるフライトだった。CAも、規則で安全に関するアナウンスをしてはいたが、フィアデルフィアの夜景が見え始めると、着陸5分前にもかかわらず客席から携帯で夜景を撮っていた。

深夜遅くに到着し、アメリカンエアが用意してくれたHoliday INNに移動、翌日の夕方6時までホテルに滞在した。このHoliday INN、どうみてもホテルのなかまで治安に不安を覚えるホテルだった。よく知る、サンフランシスコとはまるで違っていた。ロビーには泥酔した客が大きな声で話をしていて、その横を季節柄サンタコスの女性がいたが、超ミニスカートのどう見てあれなサンタさんだったし、翌日、朝食を取りに(食事代はアメリカンエア持ち)ホテル内のレストランに行ったが、ネイティブでも聞き取れないんじゃないかくらいの言葉でまくしたてられた。とても翌日、市内観光をする気にはなれなかった。ひたすら部屋に閉じこもり、昼食はレストランのテイクアウト、仕事をしつつ時が過ぎるのと待っていた。

今考えると、まあまあの経験値増にはなったかもしれないし、久しぶりのアメリカに嬉しくもあったのだけど、順調にフライトしてくれるに越したことはなかった間、と改めて思った。

 

YAUC 2016 Summerに参加

宇都宮toRubyの id:akimacho が中心に宇都宮大学で、子供+大人向けのハンズオンセミナーを開催するというのをご本人に聞き、なぜかわが社は出勤日な9月22日に行ってきた。
内容は以下に詳しいので多くは書かないけど、Arduino+FaBoとUnityチュートリアルの2本立てで、結構盛り沢山な内容だった。

akimacho.hatenablog.com

17時までの予定が19時までやっていたとのことだったが、私が都合で退席した15時の時点での進み具合からはそんなもんだろうなぁ、と納得。

自分は、参加した皆さんがどんな感じで進めていくかが気になったので、自分で楽しみながらも階段教室をうろうろ上ったり下りたりしていた。最初は親御さんもお子さんもいっしょにモニターを覗き込んでいたのに、途中でお母さん一人が頑張ることになっちゃったり、高校生ががんばっていたけど途中で興味半減になっちゃったり、ゆっくりながらも確実にパスしていっている年配の方がいたりと、初めてのパターンは少なかったけれど、色々なパターンが集まっていた。
それとなんといってもスタッフが手厚かった。学生さんと聞いたけど、ちょっとでもつまずいていそうな人に声をかけてサポートしていたので、置いてきぼりな人はほとんどいなかったんじゃないかな。素晴らしい!! Helpが表示されているスマホ片手に説明している姿を見ると、頑張りに頭が下がる思いだった。

自分はUnityはほぼ初めてだったので勉強になった。その時の教材は自宅でなんとか終わりまで作れたと思う。(最終形がどこかにあるのかな?)
FaBoはLチカくらいのことをやるのにはとっても便利。LEDのピン配置やLEDを点灯させるための抵抗はある意味Duckなので、それを排したのは今風なのかもしれない。

id:akimacho は次は何をやるのかな? とっても楽しみです!!

那須九尾まつりでの那須ラボ

黒田原で開催された那須九尾祭りの塩原町教育委員会ブースで、那須ラボがViscuitを子供たちに紹介すると聞き、お手伝いしながら参加させてもらった。

https://www.facebook.com/dreamypocket/

最近1ヶ月くらい雨と台風が続いていたけど、この日はまるで夏が戻ってきたかのような暑さになった。そんな中Canvasからも3名の応援が来て、PC6台で来場者にViscuitを触ってもらうことができた。

一時は待つ人も出るくらい盛況で、みなさんの関心の高さを感じられた。

Viscuitで書いたキャラクターをViscuitランドにアップロードできるようにセッティングされていたので、みんなそれぞれのキャラクターを描いてはアップロードをしていた。祭りが終わるころにはラッシュアワーどころの騒ぎじゃないくらい、ランドがキャラクターで埋め尽くされてしまった。後半になるにしたがって、徐々にキャラクター自体が派手になり、特異な動きと複製したキャラクターの数で目立つようになってきた。でもその時の工夫に思わずうなずいたり、あっと思わせるものがあったりと、見ていて本当に飽きることが無かった。

スタッフの一人がScratchでゲームを作ってきていた。なかなか面白いゲームだったから、今後はプログラミングに慣れた子供とソースコードを見ながらわいわいやれたらさらに楽しいだろうなと思った。

次回、というか10月30日に田代友愛小学校でのイベントがあるので参加したい。
詳しくはこちら。
http://canvas.ws/project/nasumachi_programming

最近の那須ラボでの様子

そういえば那須ラボと言っているけど、実は正式名称を知らなかったりする。ブログには「なすラボ」とある。これは那須塩原(なすしおばら)クリエイティブ・ラボのこと。でも実はドリーミーポケットが本当の名前かな。今度聞いてみよう。


ところで、那須ラボに通い始めてもう1年なんですね。早い!!
最近は本人もいろいろと知識をつけてきたし先生との関係も理解できて来たので、なるべく口出ししないように本人のやりたいことをやってもらっている。
前回は久しぶりにOsmo Codingをやった。一度の実行で使うブロック数も自然と増えたし、思ったように動かせられることも増えたが、反面Osmo Codiingでやれることに少々つまらなさを感じてきたようでもあった。
それで後半は少し前から希望していたMinecraftのGalacticraftを先生にセットアップしてもらい試すことになった。
先生の予想にやや反して、Modを動かすまではそれほど大変じゃなかったようだけど、このMod自体、まともにやるとロケット発射まですら大変な時間と労力が必要なことが分かった。ということでCreativeモードで大幅に端折り、先生と子供は無事、月面で対面することができた。
でも地球に帰還するのも大変みたい。。。。。

ProjectEuler Problem62で==メソッドを調べてみた

Problem 62 「立方数置換」

立方数 41063625 (3453) は, 桁の順番を入れ替えると2つの立方数になる: 56623104 (3843) と 66430125 (4053) である. 41063625は, 立方数になるような桁の置換をちょうど3つもつ最小の立方数である.
立方数になるような桁の置換をちょうど5つもつ最小の立方数を求めよ.

class P62
  def initialize
    @keta_values = keta_values
  end

  def  keta_values
    # ある桁数の最初の立法数を求める。ex. 3桁なら5(=125)、4桁なら10(=1000)、
    (0..20).map do |keta|
      ((10**(keta-1))**(1/3.0)).to_i + 1
    end
  end

  def main
    keta = 5 #5ケタ以上を探す
    loop do
      cubics = cubics( keta )
      cubics.each_with_index do |cubic, idx|
        return cubic[0] if permutations( idx, cubics ).size == 5
      end
      keta += 1
    end
    "Not find"
  end

  def cubics( digit )
    # ex. for return value. 36 ** 3 -> [46656, "45666"]  これは [立法数、立法数の各値をソートして文字列にした]

    (@keta_values[digit]..10000000).inject([]) do |cubics, n| # 10000000 ** 3  is 22digits
      cubic = n * n * n

      if cubic.to_s.size > digit
        return cubics
      elsif cubic.to_s.size == digit
        cubics << [cubic, cubic.to_s.enum_for( :each_char ).sort.inject{|conb,s| conb+s}]
      end

      cubics
    end
  end

  def permutations( idx, cubics )
    drop_cubics = cubics.drop( idx )
    base = drop_cubics[0]
    drop_cubics.select { |cubic| base[1] == cubic[1] }
  end
end

puts P62.new.main

cubics()で立法数を求め、その各桁を文字列変換しソートしたものを配列にし
て返す。permutationsでは、cubics()の結果を他の立法
数と比べ、同じものを配列に入れて返す。mainでは、同じものが5つあれば、
立法数を返す。

cubics()の
cubics << [cubic, cubic.to_s.enum_for( :each_char ).sort.inject{|conb,s| conb+s}]

は当初以下のようなコードだった。これだと答がでるまでに15秒以上かかっていた。

cubics << [cubic, cubic.to_s.enum_for( :each_char ).sort]

同様のことをC++で書くと100msecかからないので、Rubyといえども遅すぎる。
調べてみると処理速度改善に一番効きそうなのはpermutations()の以下のコードだ。

base[1] == cubic[1]

これの左辺値は当初 ["4","5","6","6","6"] のようなArrayだったので、"45666"のようなStringに変えたらどうかと試してみた。すると15秒だったのが4秒に短縮できた。やったー。どうもArray.==は再帰的にエレメントを比較しているのに対し(Array.cを最後まで読み切れてないけど,,,) SrtingだとCのmemcmp()に行きつく。たぶんこれが原因だろう。
これでもまだ遅いのだけど、==が左辺値のメソッドだと知っていることで、簡単に改善すべき箇所に気づける良い例だと思った。

夏休み、100校1万人プログラミングにチューター参加してきた。

7月29日に、"みんなのコード"が主催する下のイベントでチューターをしてきた。

code.or.jp

今、流行りの子供向けプログラミングの1つだが、小学校で必修化するにあたってどうしよう、を少しでも解決しようというイベントである。

申し込みページを見ると、開催地にScratch Dayが開催された古賀市があって、toRuby宇都宮のラズパイ勉強会の高井さんのホームグラウンドだから、彼は必ず参加するに決まっていると思って申し込んだみた。結局、送迎から何から、高井さんにはすっかりお世話になってしまった。感謝!!

みんなのコードから開催1週間前に資料が送られてきたが、自分が何をすればいいのか明確ではなく、不安のまま学校に向かったのだけど、幸いにもみんなのコードから一人、チューターとしてきてくださったので、私の役はHour of code版のマインクラフトの使い方説明プレゼンと子供達の質問に答えたり話しかけること、で済んでしまった。

生徒達は普段、学校でマインクラフトをやっているようで、説明の時の反応は良かったが、Hour of code版は初めての子が多かった。でも操作はいたって簡単なので、みんなすぐに課題にとりかかり、始めて間もなく1段階クリアした時の効果音が教室に響き始めた。早い子はほんとに早く、30分くらいで全部の課題を終わらせた子もいたので、その子達は同じHour of codeのスターウォーズアナと雪の女王をやってもらった。

一方あまり上手に進められない子を見てみると、ループを使うあたりで引っかかっている子が多かった。この課題、キャラクターを決まった位置まで動かすことが目的になっていて、最初は直進するだけなので、”前にすすむ”ブロックを必要な歩数分くっつけると完成する。次に向く方を変えながら、でもシーケンシャルにブロックをつなげる課題があり、そしてループや条件分岐のブロックが登場する。動きも複雑になり、動く以外の振る舞いも導入されてくる。すると子供達の進み具合に幾つかのパターンが現れる。最適なコードを書く子、冗長な部分もあるがループを導入できてる子、ループブロックは置いてあるが中身は空(!!)で、シーケンシャルにたくさんのブロックを置いて実現できている子、たくさんブロックはあるけどゴールにたどり着けない子、そしてループブロックが頭に重くのしかっているのか、手が止まっちゃう子だ。シーケンシャルに実現できている子にはループブロックの使い方や、ループの切り出しをアドバイスするとできるようになる。たどり着けない子も、きっと時間をかければできるんだと思う。そして手が動かない子はちょっとかわいそうだったけど、こちらもなす術が無かった。

授業の後半はややゲームをしている感じになったので終わりにし、最後に生徒に感想を話してもらい授業は終了した。教室をでる時に先生から一人一人にHour of codeの Certificationを手渡されて帰って行った。

 

正味90分だったけど、なんだかあっという間だった。

もっと子供達のコードを見たかったし、お話ししたかったし、もっと気づかせてあげたかったな。語り好きの私にはちょっと不完全燃焼だったな。

 

校長先生から、この小学校では来年度からプログラミングを授業に取り入れると伺った。ハードはiPad40台、近々さらに10台増やすとのこと。やや箱物重視な感じもしたけど、主担当の先生、古河市ではエバンジェリストと呼ばれるそうなのだが、その先生ならきっと大丈夫でしょう。それでも1年間という長いスパンで、何をどこまで教えていくのだろうか。また実習時にチューター役の先生は付くのだろうか。そして、今回のように募集に応えた生徒ばかりではない状態で授業が成り立つのだろうか。いずれ解消できるとは思っていても心配になってしまう。

 しかし、Certificationを手にした時の、子供達の達成感と満足感のあの笑顔を見たら、あまり細かいことは考えず、子供が楽しめればいいのだと強く感じた。そして先生も、その笑顔もモチベーションに一緒に楽しんじゃえばいいんじゃないかな。

 

追加

これから数年間はどちらかというと先生の立ち上げ期間になるだろう。先生にこそプログラミングの楽しさや技法を学んで欲しい。そのためには実務としてプログラムを作ったことのある人間たちが率先して協力すべきだと思う。ボランティアで自分達の培ってきた技法や哲学を先生方に教えるのは、自分達のいるソフトウエア開発の世界への強い投資になるはず。そのためには、今は性善説ベースな仕組みにしかなっていないので、ボランティアをよりシステマチックにサポートする体制も必要だろう。やるべきことはたくさんたくさんあるね。

 

那須ラボ7月

これまで、その時々でやりたいことをやっていたけれど、OSMOに会って、ようやく継続してやれることがみつかってきたようだ。以前もOSMO Tangramをやらせてもらって楽しめた時もあったけど、ちょっとその場限りな感じだった。しかし前々回から始めたCodingは面をクリアしていく楽しさもあるようだが、クリアした面を敢えて違うCodingで達成できる、という楽しさも知ったようだ。最初は1ブロックづつだったのが、昨日は一気に進められるよう、ブロック4段5段+ループ制御と複雑度があがっていた。ゲームチックにゴールが存在するようなので、とりあえずは飽きるまで進めばいいかな。