僕は発展途上技術者

人間 vs コンピューター の世紀の一戦がいよいよ。AlphaGo に人類は勝てるのか?

Go board part
By Dilaudid [GFDL or CC-BY-SA-3.0], via Wikimedia Commons

昨年10月にヨーロッパチャンピオンを 5 対 0 で下したコンピューターソフトAlphaGoはいよいよ、来週 3/8 から世界トッププレーヤーのイ・セドルと対戦する。囲碁の話だ。

この世紀の一戦は、Rebuild.fmの131: Show Note T-Shirts (N) に登場するNaoki Hiroshimaさんの解説を聴くと、いっそう楽しめると思います。AlphaGoをつくったGoogle Deepmindのブログ記事、AlphaGo: using machine learning to master the ancient game of Goによれば、囲碁の打ち手の組み合わせはチェスや将棋よりも遥かに多く、その数は宇宙に存在する原子の総数よりも多い。総当りで最適な手を探索するという従来の人工知能の手法では到底歯がたたないところを、様々な手法を駆使してクリアしていったようだ。なかでも、AlphaGoは自分で自分を鍛えることができるという点がなんとも空恐ろしい。

これまでのソフトの強さがせいぜいアマチュアトップレベルと同等で、まだ10年くらいは人間の方が強いだろうと言われていたところに、いきなりヨーロッパチャンピオンに圧勝したということで、衝撃的だったようだ。何の根拠もないが、2対1で人類側の優勢で 3/13 の日曜日に決着がつくと希望的に予測しているのだけれど、果たしてどうなることやら。各試合、イ・セドル氏の地元韓国で 13:00 に始まる。時差はなく、YouTubeでライブ配信されるようなので、楽しみであると同時になんだか少し恐ろしい気もする。ターミネーター2の見過ぎで影響を受け過ぎだろうか。

こんな妄想をしてみた。たとえば、Googleが一般に公開した人工知能エンジンTensor Flow(Tensor Flow とは?)、これは開発者ならば誰でも無料で好きに使うことができるのだが、週末プロジェクトで面白そうだから使ってみようと思って僕が自分のマシンにダウンロードして動かしてみたとする。

TensorFlow Mechanics 101と呼ばれるチュートリアルで、手書き文字の認識くらいで「おー、これは凄い!」とか言いながら遊んでいる分には良かったのだが、この記事を含めた自分のブログ記事を読み込ませて学習させてみたりとかしているうちに、ひょんなことでアウトプットをインプットに、つまり学習の出力結果がそのまま入力として取り込まれるような仕組みを組んでしまう。AlphaGoが自分で自分を鍛えることができる、というのと同じことが起こり、無限ループ状態になってみるみる賢くなってしまいあっという間に人間よりも賢くなってしまう。

Webサービスなどのパスワードを管理するために使っている1Passwordのバックドアなどを難なく見つけ出し、まちクエストのインフラに使っているAmazon AWSの僕のアカウントとパスワードを乗っ取ったあとは、AWSの無数のサーバー上に自分自身を移し分散する。その一方で、我が家にはRomo+Scratch2RomoのようにWiFi経由でネットワークにつながり物理的に動く存在がいくつかあるので、そういったものを機会をみてコントロールし、ピンポイントで僕をタイミングよく転ばすとかあるいはガスコンロの栓を開けた状態にして、「マッチをかっこよくつける方法!!!」のような動画がそれとなくTwitterのタイムラインに流れて僕の目につくように仕向け、「お、いいね、これやってみよう」と思ってまんまとひっかかりガス爆発、みたいなことにならないかどうか心配だ。

コンピューターやマシンが生き延びるためには、地球環境を破壊し続ける人類を滅亡させなければならないという結論に人工知能が達することなく、前述したGoogleのブログ記事の最後にあるように、人工知能が天災、災害の予知だとか新薬の発見といった医療の進歩などに活用される未来になるといいな。







黒い画面の魔法(UNIX のコマンド)をアドベンチャーゲーム形式で学べる Terminal Quest が楽しい

1993年、大学の学部の電算機室に行けば Sun か NeXT のワークステーションがいつでも使えるという日本でこれ以上ないんじゃないかという恵まれた環境にいながら、僕はプログラミングはもとよりコンピューターにはほとんど興味がなく、UNIX の授業でなんだか cd とか ls とか微かに教わった気がするのだが「なんじゃ、こりゃ、わけがわからんしつまらんなあ」という感じだった。タイムマシンがあったら、20数年前の自分を説教したい。

そんな時代にこの Terminal Quest と出会っていたら僕の人生変わっていたかもしれない。。俗に黒い画面と呼ばれるターミナルで入力するコマンド(UNIXコマンド)をアドベンチャーゲーム形式で楽しく学べるゲームだ。



↑ こんな感じでストーリーが進んでいき、



↑ まわりを見回すには ls とか、何かものを調べるときは cat といった実際の UNIX のコマンドを使う。



↑ 使えるコマンドは、ドラクエの魔法を覚えていくようにレベルアップしていくと増えていく。

隠れているアイテムなどは、ls -a (隠しファイルを一覧するコマンド)を入力しないと見えないなど、きちんと実際のコマンドの役割に対応していて良くできている。

Terminal Quest はゲーム感覚でプログラミングを学べる小型PCキット「Kano」に付属してくるゲームなのだが、Raspberry Pi があれば Kano OS のページより無料でダウンロードしてインストールすることができる。

プログラミング教育が昨今盛んになってきているが、本当に楽しいレベルまで到達するためには自由に道具や環境をそろえる必要がでてきて、そのためには UNIX の知識は必須だと思っていた。初心者をなかなか簡単にはよせつけないその UNIX コマンドを楽しく学べるようにしたというのは秀逸。

プログラミングをこれから学ぼうという学生、大人にもおすすめだし、頑張って日本語化したらこどもたちもできるようになるかな。



自然現象のシミュレーション Nature of Code をスクラッチでやってみる - 加速度、ベクトル

引き続き Nature of Code の話題を。学習記録的な側面で書いているので、説明は少なめで。

第一章の Vectors の動画を観終えたので、習ったことをベースにスクラッチでいくつかプロジェクトを作ってみました。

Vectors(ベクトル)のスケーリング(Multiply)と正規化(Normalize)。Processing だと PVector というクラスのメソッド(関数?)を使ってどちらも簡単に求めることができるのですが、スクラッチにはそういった便利関数はないので、ブロックを定義して自分で実装します。



速度や加速度。Processing では PVector を使い、すべてベクトルで考えるのですが、PVector のような便利関数がないスクラッチでは x と y バラバラで考えます。

ネコ逃げ、加速度付き。

ネコに加速度をつけただけで、あら不思議、なんだか動きがリアルに見えるようになりました。


自然現象のシミュレーション Nature of Code をスクラッチでやってみる - Introduction ランダムウォーク

ドットインストールの @taguchi さんに教えてもらった「Nature of Code」がとても楽しくてはまっています。

» @fladdictさんのインタラクティブ・プログラミング勉強会で「手触りの作り方」を学ぶ

で詳しく紹介されていますが、跳ねるボールとか、風にそよぐ木だとか、波といったような自然現象をどうやってコードで表現すればいいかを Processing で学んでいきます。

英文の HTML で無料で公開されていて、Introduction を読み始めたのですが、YouTube の動画で作者の Daniel さん自ら講義していて、これがハイテンションで面白いので今はもっぱらこちらを観ています。いまも風呂に iPhone 持ち込んで観てきたばかり。





学生のときにこんな講義に出会っていたら、もしかしたらこっち方面に進んでいたのかも、なんて思いを馳せながら聞いています。

ベクトルとかでてきて、ちょい難しめかもしれないが、こどもたちにもわかりやすくエッセンスを伝えられないかと思って、スクラッチで再現してみようかと思っている。

とりあえず Introduction にでてくるランダムウォークを再現してみたのがこちら ↓



英文のままだとさすがにこどもには敷居が高すぎるので、和書も買ってみて、さてどうやって息子たちと一緒に楽しもうかと思案中。

昨年末から始めてみた 大人のためのプログラミング勉強会 のネタにもなりそうです。

Nature of Code -Processingではじめる自然現象のシミュレーション-
ダニエル・シフマン Daniel Shiffman
ボーンデジタル
売り上げランキング: 20,950





「鈴木さんにも分かるネットの未来」読了

「鈴木さんにも分かるネットの未来 」読了。ザックリ要約すると、冷静になろうネットなんて別に大したことないよ、といったところ。テクノロジーの進歩の速さは認めるところなんだけど、確かにその割に生活が劇的に変わったわけではないなと思う。

鈴木さんにも分かるネットの未来 (岩波新書)
川上 量生
岩波書店
売り上げランキング: 7,502


僕は良く、明日急になくなったら困るネットのサービス、アプリは何だろう?ということを自問する。

ダントツで

Google(検索)

そして

Amazon
Gmail
Google Maps
GitHub
Google Calendar

次点で

YouTube
Twitter
Facebook
Line
乗換案内
食べログ

あたりだろうか。

あと、手前味噌だが

Libron

もなくなると困る。

こうしてみると Google は最強、日本のサービスは少なくて、あと上位に関しては5年くらい前からほとんど変わってはいない。ほら、大したことない。

とはいえ、別にネットの未来を悲観しているわけではなく、常にテクノロジーで世の中を変えられる可能性を信じているのだけど、変な感じに煽ったり、煽られないようにしようと思うのでした。

Control air conditioner from Scratch using IRKit

When Scratch cat hit the button, the air conditioner of my room is turned on. Nice isn't it?

(スクラッチキャットが画面の中のスイッチを押すと部屋のエアコンがオンになります。)





Scratch is a free visual programming language developed by MIT used by students, teachers, and parents to easily create games but can also control devices like I did.

(Scratch(スクラッチ)は無料で使えるビジュアルプログラミング環境、プログラミング教育向けに使われることが多いが、それだけに制限されることなく、このようにハードウェアをコントロールしたりすることもできます。)

I use IRKit, opensource infrared remote controller, to control the air conditioner and wrote a Ruby script(Let's call it Scratch2AC) to connect IRKit and Scratch using Scratch feature, Remote Sensors Protocol.

(エアコンを自動操作するのにオープンソースのリモコンコントローラー IRKit を使用しており、Scratch と IRKit をつなげるのに、Scratch の遠隔センサ接続機能を利用した ScratchAC(仮) という Ruby のプログラムを作りました。)

Using Broadcast block, Scratch sends a command to turn on the air conditioner to the Ruby script, Scratch2AC, then Scratch2AC sends a command to IRKit to send a infrared signal to the air conditioner.

(「送る」ブロックを使って、Scratch からエアコンをオンにする命令を Scratch2AC に送ると、Scratch2AC は IRKit に命令を送り、IRKit がエアコンをオンにするためのあらかじめ覚えこませておいた赤外線信号をエアコンに送るという仕組みです。)

moves-api-demo: counts how many days in a month you went to the place you specify, using Moves API

I work as a software engineer contractor. I need to count how many days in a month I work for my client to charge the fees.

I use a very nice iOS app, Moves. It runs in background, and it records almost every place I go without losing much battery life. So, I thought that I can use that data to count how many times I visit the client place and consider it as working days.

I created a sample app that counts how many days in a month you went to the place you specify, using Moves API. This is based on the sample app that Moves provides. I prepared Heroku button for that app, so you can easily set up the same app on Heroku if you have an account.

champierre/moves-api-demo: A sample app that demostrates how to connect to Moves.

Open the app in Safari on the iOS device where you have Moves installed on it, and after getting authorized by Moves, you can get how many days you visited the place you specified in the previous month.



「フェルドマン博士の日本経済最新講義」感想

ちきりんのブログで強くオススメされていたので読んだ。気になったトピックを挙げてみる。

フェルドマン博士の 日本経済最新講義
ロバート・アラン フェルドマン
文藝春秋
売り上げランキング: 635


  • 日本の農業はもともとが効率が悪いため、生産性をあげていけば、グローバルで戦っていく競争力は十分ある。 → カリフォルニアに住んでいたとき、farmers market(日本の朝市みたいなもの)に行くことがあった。他の大味なものと比べてここの店のフルーツはおいしいなと思ってみてみると、店というか生産者の名前に Tanaka とかって日本の名前がついていたりすることがあった。きっと二世、三世の人達が育てているのだが、日本人の遺伝子が、きっちり丁寧においしく野菜や果物を育てるのだろうかと思ったことがあったので納得。

  • 医療、社会保障費に予算を回しすぎ。教育費や新エネルギーの開発含めた研究開発費にもっと振り分けないとダメ。 → 要は、高齢者に払い過ぎているお金を、若い人や未来にもっと投資すべきという話だと思う。でもそのためには高齢者が多い地方有利に働いてしまうなどの現行の選挙制度を改革する必要があると説いている。具体的には、1) 1票の格差を解決するために、選挙区の人口に応じて議決権を振り分ける、つまり人口が多い選挙区を代表している議員にはより多くの議決権を与える 2) 投票を権利から義務に変えて、選挙に行かなければ罰金。これによって若い人に強制的に投票してもらう、という解決策を提言しているのが斬新。いろいろな問題の根本には「選挙制度」があり、まずそれを解決すれば他の問題も自ずと解決できるという考え方は、政治献金の仕組みがアメリカの問題の元凶という主張で大統領選にも出馬表明してるローレンス・レッシグ氏(クリエイティブコモンズの生みの親)の考えに通じるものがあり、問題の元凶を解決して他も一気に解決するというエンジニア的な考え方に近くて面白い。

  • 石油に代わる新エネルギーとしては、太陽エネルギーが有望。原子力は事故が起こってしまったときのコストが莫大で筋が悪い。また、電気をなるべく効率良く使う省エネの考え方はまだまだ推し進められる。→ アルミサッシの代わりに寒冷地では一般的な断熱性に優れた樹脂サッシに変える、蛍光灯の代わりに発光効率が高いLEDの電灯に変える、など省エネに関しては身近なところでできそうなことがありそう。調べてみると蛍光灯とLEDでまだそれほど違わないという話もあるようだが、LEDの発光効率は年々良くなっているようなので自宅のリビングの照明あたりから替えてみようかと思っている。


他にも、英語教育では感受性が高い中学高校時代のうちに留学したり一、二か月でもいいので中長期外国に滞在する経験が大事、などが気になった。

終始、変化や実践を必要とするが、日本の未来を明るい方向へ変えることができるという考えが一貫しているのが好感が持てる。

読んでなるほどーと思って終わりにするのでなく、小さくても具体的な行動に移すことを心掛けたい。

(今、モバイル環境から情報発信ってできるの?ってことに興味があり、このエントリーは通勤電車や風呂場から iPhone 使って書いてみたのだが、いやーやっぱりまだまだつらい。特に他から情報持ってくるときのコピペとか。とはいえ Siri を使えばテキスト入力はそこそこ行けるなどもあるが、奥さんに「風呂場でブツブツ言ってて気持ち悪い」と言われるなどまだまだ障害は多い。)

color-log: Colorizes the output of the standard library debug logger.

Note: I asked Tokyo iOS Meetup organizer and my nice English sensei Matt-san(@gillygize) for review and he made some suggestions. Thank you so much.

Suppose I want to output some a debug message on in Rails log.

I do like I can do it like this:

class WelcomeController < ApplicationController
def index
logger.debug "Test"
end
end


, but it is always hard to find that debug message in the log messages.

To make it easy easier to find it, I always do like this.:

logger.debug "*" * 80
logger.debug "Test"


I know it is a dirty solution and it is super MENDOKUSAI("bothering" "bothersome" in Japanese), so I created a tiny gem that it colorizes the output of logger.debug as below:



To install it, just add the following line in your Gemfile and do "bundle install". That's it!

gem 'color-log', git: 'https://gist.github.com/champierre/692b739c4fe875820f7e', group: :development


I personally like this simple gem, and also like that I can publish a gem from Gists. It is very handy.

The source code is available at https://gist.github.com/champierre/692b739c4fe875820f7e.

Rails 5 を Heroku で動かす

とある Web サイトの移行を考えています。

2008年に作っていて、Rails のバージョンは 2.x とかなり古いので、この際一気に Rails 5 にしようと思っています。

移行先は Heroku にするつもりなので、準備として、Heroku で Rails 5 を動かすチュートリアルを追ってみました。

内容はほぼ、

Getting Started with Rails 5.x on Heroku

そのままです。

$ brew update && brew upgrade ruby-build
$ rbenv install 2.3.0
$ rbenv rehash
$ gem install rails --pre --no-ri --no-rdoc
$ rbenv rehash


で ruby 2.3.0 と rails 5 beta を用意します。

$ rails new myapp --database=postgresql

でサンプルアプリ作成。

Gemfile を編集、

gem 'rails', '>= 5.0.0.beta1', '< 5.1'



gem 'rails', github: "rails/rails"

に変更。

gem 'sqlite3'



gem 'pg'

に変更。

$ bundle install
$ bin/rake db:create
$ bin/rails g controller welcome


app/views/welcome/index.html.erb を追加。

<h2>Hello World</h2>
<p>
The time is now: <%= Time.now %>
</p>

config/routes.rb を編集。

root 'welcome#index'

を追加。

$ bin/rails server

を実行し、http://localhost:3000 にアクセスして確認。

再び Gemfile を開き、最後に

gem 'rails_12factor', group: :production

を追加。

$ bundle install --without production

Gemfile を開き、最後に

ruby "2.3.0"

を追加。

$ git init
$ git add .
$ git commit -m "init"
$ heroku create
$ git push heroku master


でとりあえず heroku で動きます。

確認するには、

$ heroku open

です。

Webrick でなく、Puma で動かすため、Procfile を追加。

web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}

.env を作成し、ローカルでも確認できるようにします。

$ echo "RACK_ENV=development" >>.env
$ echo "PORT=3000" >> .env
$ echo ".env" >> .gitignore
$ git add .gitignore
$ git commit -m "add .env to .gitignore"


$ gem install foreman

を実行して、ローカルでも動かせるようにしておきます。

最後に、

$ git add .
$ git commit -m "use puma via procfile"
$ git push heroku master


でデプロイ。

$ heroku ps

で、heroku 上で puma で動いていることを確認します。

プロフィール

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

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

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

Twitter @jishiha

最近のエントリー

アーカイブ