僕は発展途上技術者

Rack で作るジブン Web フレームワーク(1)

以下の方を対象読者としています。

  • Ruby は少しわかる
  • ファイルやフォルダを作ることができる
  • Web はあまりわからない

Rack の厳密な説明は他にゆずるとして、とりあえず Rack とは、それを使って Web フレームワークを作ることができるものと覚えておいてください。

さっそく使ってみましょう。

Rack は gem のライブラリとしてインストールできます。以下のコマンドでインストールします。

$ gem install rack

Rack を使って Web フレームワークを作るには、以下の2つのファイルが必要です。

config.ru

require './app.rb' # 同じフォルダ内の app.rb を読み込みます。
run App.new # 読み込んだ app.rb で定義されている App のインスタンスを作成します。

app.rb

class App
  def call(env) # Rack ではこの call というメソッドを定義するのがルールです。
    [
      200, # 返す HTTP ステータスコード
      {'Content-Type' => 'text/html;charset=utf-8'}, # コンテンツのタイプ。HTML で文字コードは utf-8 です、と宣言しています。
      ['<html><body>Hello</body></html>'] # コンテンツの中身
    ]
  end
end

上記2つのファイルがあるフォルダから以下のコマンドで rack を起動します。

$ rackup

ブラウザを起動し、http://localhost:9292 にアクセスしてください。

以下のように Hello(App で定義したコンテンツの中身) と表示されたら成功です。

「Scratchで楽しく学ぶ アート&サイエンス」という本を書きました

「Scratchで楽しく学ぶ アート&サイエンス」という本を書きました。初の単著です。

書籍の説明にもある通り、こども向けと思われがちな Scratch をあえて大人向け、あるいはこどもでもある程度 Scratch をやっている中級者 Scratcher 向けに書きました。

Raspberry Piではじめるどきどきプログラミング増補改訂第2版」のときには、まだ大人は誰も知らなかったマイクラを素材に書きたいと提案し、今回また、入門書はたくさん出ているので、まだほとんど出ていない中級者向けのScratch本を出したいとチャレンジングな企画を持ち込みました。「おまえはいったい何を言っているんだ?」と言われそうな提案を理解してくださった日経BPの田島篤さん、面白いと言ってくださり監修を引き受けてくださった阿部和広先生に感謝です。


タイトルを決めるとき、「東大式...」って入れて「受験勉強にも役立つ」とか謳えば売れるのではなんていうジョークがでました。しかし、完成した本書は、受験勉強はおろか、まったく何の勉強の役にも立ちません。あとがきの言葉を借りれば、以下の通り。

「本書で取り上げているさまざまなプログラム例は、それをやったからと言って、直ちに何かの役に立つというものではありません。これで、資格が得られたり、お金がもらえたりするわけでもありません。 ただ、その過程において、知的な興奮が得られるはずです。わからなかったことがわかるようになる、できなかったことができるようになる、そして、ひとつのことがわかっても、さらに新しい疑問が生まれるという連鎖を、ぜひ経験してもらえればと思います。 ――阿部和広」

将来のためではなく、今楽しいからプログラミングする、あるいは本書でとりあげているテーマから派生して数学、物理、アートなどなどに興味を持って楽しんでやってみることを推奨する問題作となってくれればと思っています。

Scratch Day in Tokyo 2018 Show & Tell 振り返り

REFLECT: SHARE YOUR OWN REFLECTIONS

Lifelong Kindergarten p.173 より。

Lifelong Kindergarten: Cultivating Creativity through Projects, Passion, Peers, and Play (MIT Press)

TEN TIPS FOR PARENTS AND TEACHERS(クリエイティブな社会(Creative Society)を目指すために親や先生がすべき10のこと)の10個目として挙げられている「振り返りを共有する」ということ。親として、という文脈だけど、こどもたちや若者と比べると思っていたほど先は長くないぞという大人にとっては、これすごく大事だなと年々思うようになってきた。

要は、反省して同じ失敗は繰り返すなということだ。でも振り返りって、ちょっとの努力でできるのに面倒くさいのでさぼってしまいがち。ソフトウェア開発の現場でもドキュメント化し、メンバーで振り返りを共有するということは、表現方法こそ少し違うがScrum などの各種手法のほぼすべてがその重要性を説いていると思うのだが、まあだいたいどこも手を抜いてしまう…

というわけで、面倒だなあという気持ちに抗って、Scratch Day in Tokyo 2018 を振り返ろうと思う。今年も例年通り担当した Show & Tell をメインに。

Keep(来年も続けたいこと)

  • 今年発表された作品は Show & Tell @ Scratch Day 2018 in Tokyo から見ることができます。スタジオに全作品を置く、あらかじめ発表順とScratch IDをファイル名につけてダウンロードしておくはマスト。
  • 今年 Scratch Day Kashiwa と同日開催となってしまい主催する宮島くんに司会をお願いできなくなったので、青学の御家さんにお願いしました。テーマパーク感あふれる新鮮な司会で Scratch Day にふさわしい名司会ぶりでした。やむを得ず僕自身がやらずに本当に良かった。
  • PCの操作を青学の竹中先生にお願いしました。なんとか僕一人でPCの操作とこどもたちの誘導もできるんじゃないかと思ったのだが、発表順を変更しなくてはならなくなったり、発表順になっても発表者が現れないなどハプニングが連続したので、分担して黒子に徹してよかった。快く引き受けてくださりとても助かりました。来年も司会含め最低3人は必要だと実感した。
  • 講義室の方に一台PCを置いて無理やり Show & Tell 作品発表コーナーをつくっておいた。どの程度機能していたのか正直不明なのだが、Show & Tell 後に発表者の何人かは流れていったようなので、たまり場をつくる口実にはなったのではないだろうか。
  • Show & Tell はすべての年齢のこどもたちが対象。初心者もプロ級も、こどもも大人も誰でも歓迎というスタイルがこれまでで一番現れていたと思う。

Problem(問題点)

  • これはうれしい問題点ではあるが、過去最高の29作品の応募があり、基本的には全員採用というこれまでのポリシーを維持するために、ひとり3分というとても短い持ち時間となってしまった。
  • キッチンタイマーや iPhone/iPad のタイマーを使ってタイムキーピングしようとしたがどれもしっくりこない。いっそ Scratch でタイマーを作ったほうが良さそうだ。
  • 予想以上にたくさんの聴衆の前で話さなければいけないとわかり戸惑っていた初参加の方がいた。結果的には堂々としたプレゼンができていて立派なものだったが、初参加の参加者への配慮が必要かもしれない。

Try(来年改善したいこと、やってみたいこと)

  • もはや1時間の2部構成では来年は無理そうだ。講義室とメインホールとに分ける、講義室のほうは聴衆の人数が少ないので初参加の人にはそちらをすすめる、Scratch と Scratch 以外で分ける、など何らか分散する施策が必要だ。

昨年までの振り返りは以下の通り。

Lifelong Kindergarten 読了

英語の本ではGetting Real以来の僕にとっての神本(英語の本自体あまり読んでいるわけではないけど…)。

日本語訳(ライフロング・キンダーガーテン 創造的思考力を育む4つの原則)でもいいので、CoderDojo関係者などプログラミング教育やScratchに関わっているすべての人は読むべき。バイブルだと思う。

Creative Society(創造的な社会)をどう作っていくかという一見難しそうなテーマなのに、かなり平易な文章と簡単な英単語だけで面白く書かれていることに感動する。4つのPとか、Computer Clubhousesのメンターの役割は Catalyst、Consultant、Connector、Collaborator(全部Cで始まっている)といった言葉遊びを味わうなら原著の方がおすすめだと思う。

地図バー x 調布Facebook交流会 ドローンナイト に参加してきました

毎月プレミアムフライデーに調布で行なわれる地図バーというイベント、今回は「ドローンナイト」ということで、調布市内でどうやってドローンを飛ばすかを考えたり、屋内で飛ばせる200g以下のトイドローンを実際に飛ばしてみる体験などをしました。

地図バーを毎月開催されている古橋さんは、災害時にドローンをいち早く飛ばし、災害対策用の地図を作成し人命救助などのサポートに役立てようという、民間のボランティアベースで、DRONEBIRDという活動をおこなっています。

活動内容を紹介する動画がなかなかいかしてます。ジェダイの次くらいにサンダーバードの隊員になりたかった僕は、もうさっそく隊員になりたいと思ってしまいました。

調布でドローンを飛ばせる人を増やしたいというのが会の趣旨だったようです。そして災害時に役立てるように普段からドローンの操縦を練習しておく必要がありますね、ということで、調布近辺でドローンを飛ばせるいくつかの場所の紹介がおこなわれました。

続いて、実際にドローンの操縦を皆で体験してみようということで、会場となっている沙ら+と同じビルのそこそこ広い空きスペースを利用し、飛行体験会がおこなわれました。ゲストとしていらっしゃったドローン芸人の谷+1。さんが様々なタイプのドローンを紹介してくださいました。天井が低かったため残念ながら実際には見られなかったのですが、ドローンで飛ばしたマシュマロをキャッチするというのが谷+1。さんの持ち芸です。

その後、イベントが終了した後もドローン話は盛り上がり、ドローンを活用した様々な事例の話が面白かった。ドローンを利用したスマホの密輸、アフリカルワンダで活躍する医療物資を高速で届ける救命ドローン「ジップライン」などなど。実際に操縦を体験した後なら、これがいかに神業なのかがわかる「オンナノコズ」というプロモーション動画が衝撃的でした。

さてさて、一夜あけて昨日Amazonでポチッた Parrot ドローン Mambo が届きました。

本日すでに三回目の充電中のため待機中…

ML2ScratchとScratch2MiPを使って、倒立2輪ロボットMiPをゼスチャーでコントロール

ML2ScratchとScratch2MiPを使って、MiP をゼスチャーでコントロールしてみました。

ML2ScratchはScratchXとTensoflow.js を使ったサンプルページをつなげる ScratchX のエクステンションです。Webカメラの画像から機械学習で学習した分類結果をScratchXに送ります。

詳しくは、1つ前の以下のエントリーを御覧ください。

» TensorFlow.jsとScratchXとをつなげて、機械学習を簡単に体験、利用できるML2Scratchを作ってみました

ScratchXは別のエクステンションScratch2MiPを使い、倒立2輪ロボットのMiPに対して、分類結果に従った命令を送っています。

» 自立して二輪で走るロボットWowWee MiPをScratchXからプログラミングできるようにしたScratch2MiP

ScratchXはこのように、2つ以上のエクステンションを読み込むことができるので、合わせ技でいろいろなことができるようになるのが面白いです。

TensorFlow.jsとScratchXとをつなげて、機械学習を簡単に体験、利用できるML2Scratchを作ってみました

機械学習を気軽に体験し、なおかつそれを利用してScratchの環境でプログラミングできるので、簡単に動くアプリケーションを作ることができるML2Scratchを作ってみました。

» ML2Scratch - GitHub

上記デモ動画では、ウェブカメラでグー、チョキ、パーの画像をいくつか取り込んで機械に学習させたあと、学習した結果からウェブカメラに映る手の形を判定し、ScratchX上のネコのキャラクターに「グー」「チョキ」「パー」と言わせるという簡単なプロジェクトを紹介しています。

機械学習には、膨大なトレーニングデータが必要と思われがちなのですが、Googleから発表されたばかりのTensorFlow.jsを利用することで、それぞれ20枚ほどの画像を用意しただけで十分な精度の判定を実現できるので驚きです。

「手の形を判定するんですよ」と指定することなく、ただひたすらに各分類ごとの画像を学習させるだけなので、たとえば、赤い色のものばかりを見せたあと、青い色のものばかりを見せて学習させることで色を判定したり、同じ人の顔を角度をいろいろ変えて学習させたあと、次に別の人の顔を学習させることで簡単に顔認識を実現することもできたりします。

指を上下左右それぞれの方向に向けた画像を学習させて、それをコントローラー代わりにしてキャラクターを動かすゲームを作ることもできます。

機械学習の数学的な知識などが必要となってくる実装部分はブラックボックスのまま、それをアプリケーションにどう応用するか、あるいはどう楽しむかを考えることができるフェーズに移ってきたのかな、ということを感じさせてくれます。

Pythonistaで合気道の審査技イメージトレーニングアプリを作ってみた

合気道には試合がない代わりに昇級・昇段審査というものがあります。技の名前を言われたら、それを演武するのですが、級・段が上がるに従い、その数が増えていきます。審査というものは、普段の生活ではなかなか味わえない緊張感を感じるもので、プチパニックに陥り頭が真っ白になってサッと体が動かないこともままあります。また、記憶の引き出しの金具も錆びついてきていて、なかなか滑りが悪くシュッと引き出すことができなくなってきています。

そこで、ランダムに技の名前を言う、というだけのイメージトレーニングアプリを作ろうと思い立ったのですが、たったそれだけの機能を作るためのiOSアプリを作るのは面倒だなと。。電車に乗っているときに聞けるように、iPhoneで使えるようにはしたいのです。

そこで、以前に購入してインストールはしていたのですが、積読ならぬ積アプリになっていたPythonista 3を使ってスクリプトを作れるのではないかと、実際に触ってみたのですが、これがびっくりするくらい強力でちょっと引くくらいでした。よくこれ、App Storeのレビューを通ったなと… 簡単に言ってしまうとPythonの開発環境で、Pythonでちょっとしたスクリプトが作れるくらいに思っていたのですが、iOSの様々なAPIにもアクセスでき、Objective Cとのブリッジ機能も提供しているので、もはや何でもできてしまうんじゃないかという強力ツールでした。

Pythonistaがどれだけ革命的かは、こちらに書かれています。

» iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る

で、できたのがこちらの審査技イメトレアプリです。配列に入れた審査技をランダムに言ってくれます。全て漢字で書くとおかしな読み方をする箇所があったので、そういうところはひらがなで書いたり、うまく切って読んでくれるように、適当な場所に読点を打ったりしています。

僕はこれを聞いて、頭のなかで技の型を思い浮かべるのです。

配列の中身を変えれば、英単語の練習だとか、いろいろ応用できそうです。大したコードではないですが、一応、このエントリーの最後に公開しておきます。

そして、Pythonista、App Storeを通さず、自分用にちょっとしたアプリを作ることができて大変便利そうです。たとえば、位置情報を取得して、最寄り駅 + 「もうすぐ帰るよ」というLINEメッセージを送るだけのアプリだとか、いろいろと作ってみたいと思います。

【再掲】ドメイン紛争。英文での反論例

14年前(!!)のエントリーの再掲です。

オリジナルはこちら -> 3mon.com ドメイン紛争。英文での反論例

反論メールを掲載していたサイトをうっかり更新し忘れで失ってしまったので、Intenet Archive で掘り起こしてきました。

時代は変わり、個人でドメインを登録してウェブサービスを作ろうという人は減ったのかもしれません。またそのドメインを停止するようにと企業から連絡を受けることも少なくなったのかもしれませんが、もし同様に困っている方がいたら、そうした方の参考になればいいと思って再掲しました。

=== ここから再掲部分 ===

3mon.com はあるアメリカの会社から、その会社の会社名と紛らわしいということでドメインの使用を停止して欲しい、という連絡をドメイン登録の代行をお願いした会社経由で受けました。

しかし、この Web サイトはいっさいその会社と関係ありませんし、3mon.com というドメイン名を使ってその会社に対して何か悪さをしようという意図は全くありませんでした。 このため、連絡を受けたときはかなり困惑すると同時に、「このまま訴えられたりするんだろうか」なんてびびってしまいました。何せその会社はアメリカの会社といえども、誰でも一度は名前を耳にしたことがある会社。そんな大企業に一個人が立ち向かってもしょせん無駄だろう、とさっさとドメインを明け渡すのがいいかな、とも思いました。

しかし、ドメインに関わる仕事をしている知人経由で専門家の方のアドバイスを受けているうち、「そんな暴挙を許してはいけない。少なくとも反論くらいはするべきだ」という結論に達したので、以下のような反論のメールを送りました。

その後、その会社からの連絡はないままもうすぐ2ヶ月が過ぎようとしています。向こう側には分がないということであきらめてくれたのだろうと楽観視しております。

私と同じように、個人でドメインの登録をしたら、そのドメインを停止するようにと企業から連絡を受けて困っている方がいるかもしれない。そうした方の参考になるかもしれないと思ったので、反論のメールをここに掲載しました。

なお、断る必要もないかとは思いますが、念のため。この反論のメールを参考にして実際に反論した結果、トラブルに巻き込まれたとしても私は一切責任を負いません。自己責任でおこなってください。あるいは心配であれば弁護士など専門家に相談することをお勧めします。

xxx: 相手側担当者

yyy: ドメイン登録会社

zzz: ホスティングサービスの会社

mmm: ドメインの停止を求めてきた会社

Dear xxx,

I am writing you concerning the domain name "3mon.com" which I registered through yyy.
You should have received the message from yyy replying to the letter you sent them on July 16, 2004
regarding "the Registration and Use of "3mon.com" Ref. No. nnn". yyy notified me that they have not
received any response from you, so I am writing this message by myself to make sure my message is
conveyed to you.

I would like to continue to use "3mon.com".

I have no intention to confuse customers of mmm Company, and I believe I have not actually confused anyone.
The attached is the access log of "Search word" during this one week (zzz allow the users
to access the access log of only the last one week). Some of keywords are Japanese, so please have someone
translate them for you. You will find that no one has reached my web site by searching "mmm" or
any "mmm" product name.

The following one paragraph should be already mentioned in the reply message from yyy, but I will repeat it.

The name "3mon" came from one of the well-known Japanese saying "HAYAOKI WA SANMON (3mon) NO TOKU"
("Early riser gains three coins" or "The early bird catches the worm" in English) "mon" is the old
currency in Japan and "3mon" stands for "a little precious money."

I clearly say that "3mon" comes from that saying in the top page of my web site. If you have someone
who understands Japanese, please ask that person to translate the web site for you. Almost all Japanese know
this saying and I think no one will imagine that my web site is something to do with "mmm", an American company.

I get up early because I believe it gives much more productivity. I spend the morning for programming software or
for learning programming and I use my website to show my work, that is, some software tools and programming tips.
That's why I named my web site "3mon.com". Anyone who is interested in my work can retrieve them in free.
Recently I created a sub page (http://3mon.com/cgi-bin/movingsale.cgi) for selling some of my household goods
because we will move back to Japan, but this is absolutely nothing to do with "mmm" product.

I didn't register this domain for the purpose of selling. I have never tried to sell the domain name to other party,
and I will not do in the future.

By the above explanation, I hope I could persuade you to stop asking me to terminate the use of "3mon.com".
But if you still insist that I should stop using "3mon.com", please let me know and clearly explain why I should do so. 

Sincerely yours,

Junya Ishihara(webmaster@3mon.com)

ストアカで中国語の体験レッスン「ゼロからカンタン超速入門講座」を受けてみた

あらゆるスキルの個人教室、ワークショップを検索できるウェブサービス「ストアカ」でみつけた中国語の体験レッスン「ゼロからカンタン超速入門講座」を受けてみた。

ストアカを試してみたいなと思っていたのと、IT界隈では熱い深センを春頃には訪れたいなと思っているので中国語を勉強し始めたいなという目的を一気に2つ達成しようと思ってのことだ。

結論から書くと、何か新しいことを始めるときは大概最初の敷居が高いのを低めてくれるストアカも良かったし、忙しい社会人向けに非常に効率良く概要を教えてくれる講座の内容もとても良かった。

中国の方は合理的というのを聞いてはいたが、講師の陳氷雅さんの教える内容は、ポイントがコンパクトにまとまっていて非常に合理的。中国人の考え方から始まり、ここをおさえればとりあえず通じるという最低限のポイントをコンパクトに教えてくれるので、短い時間で使えるようになりたいというこちらの要望にぴたりとはまる。

あまり内容に触れすぎると営業妨害になるので、ひとつだけ印象深かったことを挙げる。中国語の母音の発音は日本語よりも強くはっきり発音するため、日本語のように口をあまり空けず「ァ」と発音してしまうと通じにくいとのこと。かなり意識して大きめに「ア」と発音するのだが、あまり慣れていないのであごが少し痛いくらい。この感覚は英語の発音と似ている。アメリカに住んでいた時に英語の発音を教えてくれる夜間の社会人向けの講座に参加したことがある。そこで、アクセントがついている母音をかなり意識してほかよりも強めに発音すれば通じやすい、ということを習ってからは、それまでと比べて格段に通じるようになった覚えがあるのだが、それと要領は同じ。

日本語を使うときとは顔の動かし方まで変わるほど大げさになるため、これが日本人にとってはどうにも恥ずかしい。いわゆる帰国子女っぽい、なんだかかぶれてる感がでてしまうのだが、これを恥ずかしがらずにクリアできるかどうかが言語習得の鍵だと思う。

とまあ、効率よく学べるコツを少し教えてはもらったが、この後はいかに継続してコツコツ勉強できるかどうかにかかっている。

プロフィール

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

Raspberry Piではじめる どきどきプログラミングを書きました。

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

Twitter @jishiha

最近のエントリー

アーカイブ