Hatena::ブログ(Diary)

西尾泰和のはてなダイアリー

2016-09-01

35歳になりました

7月23日に35歳になりました。なんやかんやでブログに書くのが先延ばしになっているうちに気がついたら1ヶ月も経ってしまいました。

30歳から毎年誕生日に更新していたのに、どうして今年はこんなに遅くなってしまったのか。書きかけ原稿には「35歳と言えば『エンジニア35歳定年説』を連想するわけですが」なんてことが書いてあったりして、「35歳」という節目に気負いすぎなのでしょう。過去の誕生日記事を読みなおしてみると、昔はもっと軽い感じでした。というわけできちんと書くのをやめて、書こうと思っていたことをざっくりまとめてみます。

エンジニア35歳定年説の話題は、「色々なプログラミング言語を学ぶこと」に話の舵をとって、そのまま完結しないで中断していました。色々なプログラミング言語を学ぶことで視野が広がるというのであれば、プログラミング以外のことを学ぶことも視野を広げるわけで、というあたりが次の段落へのつなぎになるのかな。

その次の段落のメモとして「未踏社団の理事」「1ヶ月に1回ペースでの活動報告」とか書いてあるので、昨年の9月から始めた未踏社団の理事としての活動と「何をやっている団体かわからない」という問題の解決のために定期的な活動報告を行うようにしたことなどを書こうとしたのかと思います。これは次の段落への伏線でしょう。

その次のメモは「ブログの更新頻度が落ちている」でした。これはこのメモを書いた時点では「ブログには、技術的なメモを書いていたけど、ここ数年技術に割く時間の割合が減ったから」なんてことを書こうと思っていたのだけど、これって間違いですね。技術にはコンピュータ関連ではないものだってあるし、そもそも技術的なメモ以外のことも昔はたくさん書いていたので。更新頻度が落ちている原因は「気負い」でしょう。完成度の高いものをリリースしようと考えた結果、リリース自体がされなくなる、という完璧主義の罠です。

もっと気負いを捨てて生きた方がよいのでしょうか。40歳不惑まであと5年、まだまだ惑いまくりの人生ですが、今後ともよろしくお願いいたします。

2016-07-12

ESP8266のファームアップデートがSYNCで止まる問題→解決

ESP8266(ESP-WROOM-02)のファームアップデートがSYNCで止まる

→指定したファームの横のチェックボックスをチェックしなければならないことを見落としていた。

2016-06-14

未踏IoT開発合宿 #1に参加しました

未踏社団が昨年開催した未踏開発合宿#0が好評だったので、IoT研究会の上田真史さんにご尽力頂いて、IoTにテーマを絞った合宿を行いました。

今回、僕は上田さんの講義を聞きつつ、センサと液晶をI2Cバスにつないで、センサから読んだデータを液晶に書くというのをやりました。おかげで今までよくわかっていなかったI2Cについてかなり理解が深まりました。そこで半年後の自分が復習しやすいようにスライドにまとめておきました。

本合宿には、未踏社団の法人会員でもあるさくらインターネット様から「さくらのIoT」のα版を無償提供いたきました。また個人会員である青木俊介さんのご協力でkonashiの提供を頂きました。この合宿については未踏研究会#3でも報告される予定です。

未踏社団に開発合宿のノウハウが蓄積されて、こういう開発合宿をどんどん開催できるようになると、未踏社団の目的でもある「創造的人材を多角的に支援し、業界横断的なネットワークをつくることで、ITを中心としたイノベーションを加速すること」にもつながっていくかと思います。次回は9月ごろ開催予定です。

2016-05-13

レジ「972円です」客、支払う。レジ「104円のお返しです!」

ビジネス街のレストランで972円の昼ごはんを食べている僕。聞くとはなしにレジのやり取りが聞こえていくる。


レジ「972円です」

レジ「104円のお返しです!」


……えっ、何が起きたんだ?


出題編

しばらく考えて、客もレジも間違ったコインを渡したり、渡さなくて良い余計なコインを渡したりしていなくても成立しうるストーリーを思いついた。これを考えるのは結構面白かったので、ブログ記事にすることにした。(間違いを許容すると別解がある)

ヒント編

僕の思考の過程を追いながら一歩ずつ回答に近づいていこう。


僕「100円がお釣りとして返ってくるということは、客は100円玉は出していないということだろう」

僕「仮に客が1000円を出していたら、お釣りは28円だ」

僕「客が104円のお釣りを受け取るには、1076円払う必要がある。76円払うには1円玉を出す必要があり、お釣りに1円玉が返ってきているからこれはおかしい」

僕「仮に客が1500円出していたとしたら、528円返ってくる。これもおかしい」

僕「レジが972円だと言ったが、実際に支払われたのは972円ではないのでは?」

僕「このシチュエーションでそんなことが起こるには…」

僕「今僕が食べているランチも972円」

僕「回りを見渡すと、僕みたいに一人で食べている人も、複数人で食べている人もいるな」

僕「複数人で972円のランチを食べてレジに向かえば、レジが『一人あたり』972円と言って、客が複数人分まとめて異なった額の支払をするケースはありえる」

僕「2人分払って2000円出すとお釣りは56円、3人分だと84円、4人分だと112円」

僕「実際のお釣りは104円だった」

僕「4人だとオーバーするし、2人だと48円足りない」

僕「3人だと20円足りない」

解答編

僕「つまり、こうだ」


客、3人でレジに向かう。

レジ「(一人あたり)972円です」

客、3020円払う。

レジ、それを見て3人分だと理解する。

レジ「104円のお釣りです」


客の暗算能力が低くても、レジには計算機があるから問題無いだろう。


レジ「(一人あたり)972円です」

客、3000円取り出す。

レジ、それを見て3人分だと理解して計算機に3人分と入力する。

計算機に、2916円と表示される。

客、それを見て、財布にあった10円玉を2枚追加する。

レジ、受取額として3020円と入力する。

計算機に104円と表示される。

レジ「104円のお釣りです」


別解

コインの間違いを許容する場合「客がお釣りを100円にしたくて1072円支払おうとしたのだけど、1円玉と間違えて5円玉を出してしまい、1076円支払ったことになり、お釣りが104円になった」という別解がある。「4円」が「1円と5円の差」だという解釈だ。

2016-04-14

TensorFlow Playgroundはニューラルネットを理解するのにおススメ

ネットワークの重みや各ニューロンがどういう入力の時に発火するのかが、学習していく過程で各時刻可視化されてとても良い教材です。 http://playground.tensorflow.org/

うずまきのデータセットに関して「中間層が1層しかないとうずまき(線形非分離な問題)は解けない」という誤解があるようなので、まずは1層でできるという絵を紹介。なお僕のタイムライン上では id:a2c が僕より先に気付いていたことを名誉のために言及しておきます。

f:id:nishiohirokazu:20160414114802p:image

で、じゃあよく言われる「線形非分離な問題が解けない」ってのはどういうことか。それはこんな問題設定。入力に適当な係数を掛けて足し合わせただけでは適切な境界を作ることができません。

f:id:nishiohirokazu:20160414115500p:image

こういうケースでは中間層を追加すると、中間層が入力の非線形な組み合わせを担当してくれるおかげで解けなかった問題が解けるようになります。

f:id:nishiohirokazu:20160414115458p:image


1つ目のデータセットでは特徴量の選択の重要さがわかります。このデータセットではx^2とy^2を入力にすると問題が線形分離になるのであっさり解けます。「x^2 + y^2 < R」ってのが「半径Rの内側」に対応するのです。

f:id:nishiohirokazu:20160414120112p:image

だけども、xとyだけでは線形には分離できません。

f:id:nishiohirokazu:20160414150301p:image

そこで中間層を追加してみると、それぞれの中間層が少しずつ分担して問題を解くのを観察できます。中間層のニューロンの個数を増やしたり減らしたりしてみても面白いでしょう。1個、2個、3個の各パターンを観察するのがおすすめ。

f:id:nishiohirokazu:20160414150259p:image

f:id:nishiohirokazu:20160414150258p:image

f:id:nishiohirokazu:20160414150255p:image

f:id:nishiohirokazu:20160414120051p:image

と、こんな感じできれいに可視化された環境でいじって試すことができるので、とても良い教材だと思います。