tag:blogger.com,1999:blog-83034450396191777052024-11-01T20:40:20.961+09:0032nd Blogger熱狂的 @keitahaga ファンたちの集いtakano32http://www.blogger.com/profile/02746905575832178114[email protected]Blogger127125tag:blogger.com,1999:blog-8303445039619177705.post-92064499252150822642021-12-12T23:03:00.005+09:002024-03-15T06:43:57.254+09:00とある Rubyist の「次の20年」<p><a href="https://adventar.org/calendars/6777">Rubyist近況[1] Advent Calendar 2021</a> の12日目です。前日とか次の日は適当にリンク先からたどってください。</p><p> 12月12日を今年のアドベントカレンダーの担当日に選んだのは、先月の同日、11月12日で40歳となったので、そのあたりについて書こうかと思いました。</p><p>11月12日は40歳に東京から千葉に引っ越しました。生まれ育った街に引っ越しています。</p><p>いまはリモートワークで仕事できますし、生まれ育った街も交通はそこそこよくなっており大手町まで40分くらいで出られるようになっているみたいです。いざという時は出勤もできますが、これからはなるべくなら人がたくさんいるところに行かないようにしたいですね。</p><p>このエントリでは11月12日からの人生を「第三の人生」としたときに、いままでどんな人生を過ごしたのか、これからの人生をどうしたいのか、自分が感じている人生の転換を区切りに、簡単に「第一の人生」「第二の人生」「第三の人生」と分けて所感を記録しておこうと思います。</p><p>おそらく、これは間違った見解であったり、微妙なところもあるのですが所詮は40歳ほどではこれくらいの感覚だった、ということを残しておこうと思いました。限られた時間で適当に考えて、適当に書いていますしね。</p><p>すみませんが、この文章はまとまりがないですし、他人に理解されることを目的としてないです。</p><p>自分用の記録ですが、読みたい方がいたらどうぞ。</p><p><br /></p><h1 style="text-align: left;">第一の人生</h1><div>生まれてから、会社員になるまでの人生。</div><div><br /></div><div>育った家庭は裕福ではありませんでしたし、家庭環境にも多少の問題はありましたが、特別に劣悪さが飛び抜けているということもありませんでした。総合的には平均より「少し悪い」か「悪い」くらいの環境だったのではないかと思います。</div><div><br /></div><div>「いや、あなたの家庭はよい環境だったでしょう」と私の家庭を周囲から観測している方に言われるかもしれませんが、そもそも見栄っ張りで世間体を異常に気にするという「悪い」環境でしたので、それが作り出している情報に騙されているだけです。そこまでよい環境ではありません。</div><div><br /></div><div>裕福ではありませんでしたが、この時期は自分が好きなことに挑戦して、無理なことは無理だと体験したり、自分が将来どんなことをしたいかの選択と集中などをしました。</div><div><br /></div><div>さいわい、いまはそれほどエンジニアとして大失敗した結果になったわけではない(気がする)ので、苦労が表に出にくいですが、いろいろと挑戦や失敗はあります。</div><div><br /></div><div>野球に挑戦してプロ野球選手になりたいと思ったことはありましたが体が大器晩成な育ちだったので少年野球ではそれほど活躍できなくて挫折しました。</div><div><br /></div><div>高校生のときは勉強をろくにせず将棋に熱中してしまって、何かに結びつかないかと思いましたが、別にプロ棋士などになれるほどの棋力はもちろんなくて単なる趣味になりました。しかも、いまはその将棋もメチャ弱くなりました。指さないと弱くなりますね。本当に。時期は羽生善治が活躍していたときですが、自分は米長邦雄の雀刺しばかり刺してました。</div><div><br /></div><div>ゲーム好きだったのでプロゲーマーのような職種、当時はプロゲーマーという職業は日本ではマイナーだったので、ゲーム雑誌のライターみたいなのが適職なのかもと思ったことなどもありましたが、思っただけでした。</div><div><br /></div><div>結局は中学生から高校生の時期にパソコンに興味をもちはじめて、高校生のときにはVisual Basic でプログラミングをはじめて、その後に C/C++で仕事をしている人たちが交流しているメーリングリストに入り浸るようになりました。</div><div><br /></div><div>大学生のときにはソフトウェアハウスでのアルバイトを通して業界の当たり前を知っていくことになりました。</div><div>この時期にものすごい量のソフトウェアマネジメントの書籍を読んで、マネジメントというものについて勉強しました。マネジメントは勉強しておくと関わってはいけない上司がすぐにわかるようになるので、プログラマの方々も勉強することをおすすめします。</div><div><br /></div><div>すでにソフトウェアエンジニアの世界に片足つっこんでいて、惰性でそのままエンジニアになった感じですね。</div><div><br /></div><h1 style="text-align: left;">第二の人生</h1><div>会社員になってから40歳になるまでの人生。</div><p>どうやら、自分は世間の人と比べるとちょっと変わり者だったのでかなり苦労がありました。</p><p>この「変わり者」という言葉は誤解されやすいのですが、変わり者だからといって勝手に何かの才能が芽生えたり、天才になったりするわけではないです。単に他の人とどうにも違う考え方などをしがちだった、ここではただそれだけの意味で「自分は変わり者」と記録しています。なんのことはない、ただ普通とは違うというだけのことですが、それだけで自分にとってはいろいろな経験や苦痛になりました。</p><p>新卒で大企業に入るも馴染めず、社会的なストレスから愚痴っぽくなり、インターネットにそういったことを書いていたら「宮本洋一」という人間から、繰り返し犯罪行為をされました。このときはとてもつらかったです。どんな犯罪行為であったのかは機会があったのでまとめてあります。ちょうどこの時期、宮本洋一氏からの嫌がらせによる風評被害で落とされた採用があったのでこういった文書が残ることとなったのですよね。実害は発生しています。実害を防ぎたい意図で書ききってしまったところがあり、いま読むと焦りからの誇張が散見されますが95%くらいは事実です。</p>
<iframe allowfullscreen="" frameborder="0" height="485" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/d5q2nmcqgZEjit" style="border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="595"> </iframe> <div style="margin-bottom: 5px;"> <strong> <a href="//www.slideshare.net/takano32/ss-48746278" target="_blank" title="インターネットにおける悪評 - 高野光弘編">インターネットにおける悪評 - 高野光弘編</a> </strong> from <strong><a href="https://www.slideshare.net/takano32" target="_blank">TAKANO Mitsuhiro</a></strong></div><p>宮本洋一氏は逮捕されなかったからといって、彼の犯罪行為はなかったことにはならないです。むしろ、逮捕されなかったのだから司法などでは償うこともないわけです。罪を償わないという卑劣さと悪質さ、ぜひ死ぬまで犯罪者である自覚を背負い続けてほしいものです。自分の家族は同じようなインターネットのインシデントがあると「宮本洋一が世界にはたくさんいる」といった表現をするようになっていますし、完全に「宮本洋一」という言葉は自分の周りでは悪質な人間を表したり、犯罪行為を表す言葉となってしまいました。これはもう自分にはどうしようもありません。すみません「<a href="https://www.amazon.co.jp/dp/B01M17MDNL/" target="_blank">日本姓氏語源辞典 (人名力)</a>」著者の宮本洋一さん…<br />2024年3月15日追記。「<a href="https://www.amazon.co.jp/dp/4908348103/" target="_blank">日本姓氏語源辞典</a>」という著作と「<a href="https://www.amazon.co.jp/dp/4908348111/" target="_blank">在日通名大全</a>」という著作が新たに確認できました。以前の著作はリンク先がなくなっていましたが、単に「人名力」を表題から取り除いて出し直したみたいですね。「人命力の宮本洋一」は犯罪を犯したということがインターネットに掲載されるようになったのでそのようなことをしているのかもしれません。許されることではないと思います。「日本姓氏語源辞典の著者、宮本洋一は犯罪者」で「在日通名大全の著者、宮本洋一は犯罪者」です。警察がきちんと犯罪と認めた行為を過去に行いました。これはもう揺るぎない事実なのです。罪を背負って生きなさい。</p><p>他の会社経験では明確なパワーハラスメントについてCTOに相談するも「仕事ができていないからハラスメントを受けて当たり前、仕事でパフォーマンスを出してからそういった相談をしなさい」というアドバイス(パフォーマンスが出ないのはハラスメントが起因なので、これは無限に解決に結びつかないアドバイス)が返ってくる会社でのつらい労働と会社都合退職。</p><p>技術力のないCTOが率いるベンチャー企業でハラスメント(後に冤罪であることを伝え聞いている)の疑いをかけられて会社都合退職。</p><p>いろいろとありました。</p><p>だいたい疲れる話ですね。何か掘り返されたときにそれらしい自衛ができそうな音声やメモなどの記録は残してありますが、可能であれば使うことなく墓まで持っていきたいです。</p><p>全体として第一の人生で豊かになった人生をすり減らして生計としていた時期なのだろうと、いまとなっては感じています。</p><p>仕事だけではなくてプライベートもすり減ることが多かったです。</p><p>基本的に悪人に騙されやすいんですよね。</p><p>どうしてこんなことになったんだろう…って思うこともありますが、変わり者なのだから仕方ないと思っています。たまに「変わり者だから」などの理由で済ませるのではなくて、諦めずに気合いを入れて変わり者をやめなさい、というようなことを言ってくる人がいますが、できたらやってますし、人の根幹について簡単にアドバイスをしようとするのは頭がおかしいと思っていますので、頭がおかしい人たちは相手にしないことにしています。すみません。</p><p><br /></p><h1 style="text-align: left;">第三の人生</h1><p style="text-align: left;">先月の11月12日が40歳です。第三の人生と書いているのは、40歳からの人生の予定とまでは言わないですけれど、生きていて感じていることですね。</p><p style="text-align: left;">ちょっと第二の人生での仕事が格闘技で例えるなら、有刺鉄線デスマッチや極真空手みたいな刺激の強い仕事が多くて疲れを感じました。</p><p style="text-align: left;">第三の人生ではスポーツチャンバラのような楽しい仕事を主軸にしていきたいと思っています。</p><p style="text-align: left;">すり減った人生を豊かにすることを主軸にしたいというわけです。</p><p style="text-align: left;">第一の人生で育んだようなものを再び取り戻さないと今後に不安があります。</p><p style="text-align: left;">60歳くらいになったらまた心をすり減らせるような人生を送る必要があるかもしれませんが、それはそのときに考えます。</p><p style="text-align: left;">楽しく過ごせて、それが続けられればいいんですけどね。</p><p style="text-align: left;">直近、なにやってんの?と言われるとフリーランスで仕事をしたり、していなかったりします。その時の気分によって体力や精神のすり減りがなるべくないことを重視しています。仕事を続けることよりも健康の方が大切です。</p><p style="text-align: left;">なんだかんだで精神的な豊かさがいちばん大切なのだな、と思うようになりました。</p><p style="text-align: left;">観測範囲では、同世代のエンジニアが頑張って知識を身につけていたり、技術力を向上させていたりする傍ら、なにか大切なものや精神をすり減らして言動がおかしくなってしまう方たちをたくさん見るようになってきてそう思うようになりました。第二の人生のわたしも何かおかしかったのでしょう。そう思って苦労やおかしかった言動は過去のものにしていきたい。だいぶ、この文章も苦いものがありますがね。</p><p style="text-align: left;">さしあたりは生まれ育った街で平穏に生きたいと思います。</p><p style="text-align: left;">この文章はツッコミどころある感じで書いてしまいましたが、どうせ所属している会社がないのですから会社に回りくどくこの記事をどうにかしてくれとか連絡されることもないし、たまにはいいでしょう。</p><p style="text-align: left;">40歳にもなって脇が甘いことがわかっている文章を適当にインターネットに書くくらいには稚拙です。でも、それが自分なのです。</p><p style="text-align: left;"><br /></p><h1 style="text-align: left;">今年の Ruby</h1><div>Rubyist のアドベントカレンダーですし、Ruby committer なので Ruby についても書きたいと思います。</div><div><br /></div><div>予定は未定とはいえ、今年に入れたい、入れられればよいと考えている修正があります。</div><p>振り返ると、昨年に FreeBSD の Dtrace 対応を無効にしないとコンパイルできないので規定を無効にするというコミットを入れました。</p><p><a href="https://takano32.blogspot.com/2020/12/ruby-on-freebsd.html">Ruby 3.0.0 のリリース前に微力ながらコミットした話</a></p><p>それから、じっくりと三ヶ月ごとくらいに調べていたのですが、どうやら FreeBSD のツールチェインが変わったのでリンクができなくなった、というような内容をどこかでみました。</p><p>しばらく、ツールチェインが元のように修正されないのか LLVM の動向を追っていたのですが、どうにもそういった雰囲気はなく、次のバージョンの LLVM 12 でも同じ挙動でリンクに失敗することを確認しました。FreeBSD のバージョンアップを待っていても解決するような問題ではなさそうです。</p><p>どうしたものか、と考えていたのですが、ふと ports の状況はどうなっているのかを見たら、Ruby と Dtrace についての議論を見つけました。比較的大きな修正を make する前にパッチして Dtrace を有効化してコンパイルが通るようにするというような処理が ports に入っていることを確認できました。</p><p><a href="https://bugs.freebsd.org/bugzilla//show_bug.cgi?id=257527">Bug 257527 - lang/ruby27: add DTRACE option</a></p><p>クリスマスまで残り少ないですがこの修正を Ruby の本体に入れることができないか見てみようと思っています。パッと見ではこれを取り込んでもライセンス的には問題ないはず。</p><p>留意するべきこととしては FreeBSD の ports は FreeBSD のバイナリを作ることができればうまく機能しているということになりますが、これを Ruby 本体に入れるとなると Dtrace が提供されている他のプラットフォームでも妥当性のある修正かどうかを判断する必要があります。</p><p>FreeBSD はおそらく ports で適用される修正をそのまま適用した状態で Dtrace が機能するのでしょう。Dtrace は他にも Solaris や macOS でも提供されている機能なので、その修正が Solaris と macOS で Dtrace を有効化したときに正常に機能するのかを確認したいところです。</p><p>Intel 64 macOS はどうにかなりそうな気配がありますが、M1 macOS ではどうなのかということや Solaris での確認に少し不安が残りますね。ports でのビルドで適用される修正が他のプラットフォームのことも考慮されているものならよいのですが、その確認はまだできていません。</p><p>ちょっとここまで積み残してしまったというか、気付くのが遅かったので今年に間に合うかは微妙ですが、手をつけたことについては最後まで追っていきたいと思っています。</p><h1 style="text-align: left;">あいさつ</h1><div>今年もさまざまな方のおかげで、無事に年を越せそうです。</div><div>来年もよいお年を。</div>takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-45916838501332286652021-02-18T17:45:00.004+09:002021-02-18T18:14:38.654+09:00デブサミのCiscoのブースでDevNetとCMLいうものを教えてもらった<p> とりあえずのメモ</p><p><br /></p><p>DevNet</p><p><a href="https://developer.cisco.com/">https://developer.cisco.com/</a></p><p><br /></p><p>DevNet 紹介記事</p><p><a href="https://gblogs.cisco.com/jp/2018/10/cisco-devnet-introduction/">https://gblogs.cisco.com/jp/2018/10/cisco-devnet-introduction/</a></p><p><br /></p><p>DevNet 紹介スライド</p><p><a href="https://www.slideshare.net/CiscoJapan/cisco-modeling-labs-cmldevnet">https://www.slideshare.net/CiscoJapan/cisco-modeling-labs-cmldevnet</a></p><p><br /></p><p>公式が提供している DevNet についての日本語の情報ポータル</p><p><a href="https://learningnetwork.cisco.com/s/jp-devnet">https://learningnetwork.cisco.com/s/jp-devnet</a></p><p><br /></p><p>Cisco Modeling Labs<br class="Apple-interchange-newline" />CML は Cisco Modeling Labs の略</p><p><a href="https://developer.cisco.com/modeling-labs/">https://developer.cisco.com/modeling-labs/</a></p><p><br /></p><p>Cisco Code Exchange</p><p>CML でのコード例などはこちらから探せる</p><p>レポジトリが GitHub などと結びついている</p><p><a href="https://developer.cisco.com/codeexchange/">https://developer.cisco.com/codeexchange/</a></p><p><br /></p><p>あとできちんとした記事にする…かもしれない。</p>takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-39016676740108335942020-12-25T23:20:00.015+09:002020-12-28T03:49:54.889+09:00Ruby 3.0.0 のリリース前に微力ながらコミットした話<h2 style="text-align: left;">概要</h2><div>今年もクリスマスです。Ruby 3.0.0 がリリースされました。</div><div>微力ながら Ruby 3.0.0 には自分の変更も取り込まれたのでそのメモです。</div><div><br /></div><h2 style="text-align: left;"> FreeBSD では Ruby 3.0.0 がビルドできない?</h2><div>3.0.0 のリリースを調整しているチャットで「どうにも FreeBSD 12-RELEASE では Ruby 3.0.0 がビルドできないらしい」という噂を聞きつけたのが24日の18:00くらいのことでした。</div><div><br /></div><div>3.0.0-preview1 と 3.0.0-preview2 と 3.0.0-rc1 などの 3.0.0 の系列は configure のときに --disable-dtrace を指定しないとバイナリが生成できないなあ、というところまでは24日に実機で切り出して原因を特定しました。</div><div><br /></div><div>その後はプライベートで Zoom 忘年会があったのでたらふく酒を飲んでしまい修正のことなどすっかり忘れる。寝る。</div><div><br /></div><div>以下参考。</div><div><a href="https://bugs.ruby-lang.org/issues/16674">https://bugs.ruby-lang.org/issues/16674</a></div><div><a href="https://bugs.ruby-lang.org/issues/17212">https://bugs.ruby-lang.org/issues/17212</a></div><div><br /></div><div>チケットとしては存在していたもののチケットを追えておらず、たまたまリリース前のワチャワチャでコアメンバーが話題にしているのを見なければスルーしていたと思う。</div><div><br /></div><div><h2>プラットフォームが FreeBSD のときは DTrace を既定で無効にする</h2></div><div>翌日の25日は10:00くらいにモソモソ〜っと configure のときの既定が --disable-dtrace に倒れていた方がよかろうと autoconf のための configure.ac をいじりはじめる。久々にいじったので気持ち悪かった。</div><div><br /></div><div>11:30 ほどに形が定まって、手元でのテストなども終わった。コアメンバーに報告し、そのまま「コミットしてください」という反応を成瀬さんからもらった。はやい。すごい。聖人。</div><div><br /></div><div>ところが、いままで Ruby にコミット入れるのは Subversion で ci.ruby-lang.org にアクセスしてやっていたもんだからイマドキの方法が分からん。</div><div><br /></div><div>GitHub.com からでもよいですか?と聞いたところ、これにも成瀬さんから PR でいいですよ、という返事をすぐにいただけました。</div><div><br /></div><div>ササッと github.com/takano32 に fork して PR を作りました。ありがとうございます。</div><div><br /></div><div><a href="https://github.com/ruby/ruby/pull/3999">Disable DTrace in FreeBSD by takano32 · Pull Request #3999 · ruby/ruby</a></div><div> <br /></div>
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">Ruby 3.0.0 リリースの直前に FreeBSD 12.2-RELEASE では DTrace を無効にしないとバイナリが生成できないという情報に気づき、インストール時に `--disable-dtrace` を必ずつけなくてもよいように既定を無効にした変更をしました。取り込み済みでリリースされています。 <a href="https://t.co/kgJwwfV3SW">https://t.co/kgJwwfV3SW</a></p>— カールおじ (@takano32) <a href="https://twitter.com/takano32/status/1342464120608542722?ref_src=twsrc%5Etfw">December 25, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<div>ちょいちょい CI の様子をみてもらってそのままマージしてもらいました。助かり。</div><div><br /></div><h2 style="text-align: left;">GitHub.com での主張がデカい</h2><div>これがマジでマジにリリースの直前の取り込みだったそうで面白いことが起こった。</div><div>GitHub.com では git でタグを打つとそのタグについてのページが生成されるのだが、Ruby 3.0.0 のリリースページは以下のように生成されました。</div><div><br /></div><div><a href="https://github.com/ruby/ruby/releases/tag/v3_0_0">Release v3_0_0: Disable DTrace in FreeBSD (#3999) · ruby/ruby</a></div><div><br />
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">Ruby に駆け込みというのもおこがましさのあるギリギリさで FreeBSD の対応をコミットしたら、タイミングがまさにタグ打ちの直前で、 <a href="https://t.co/IXkjVfF339">https://t.co/IXkjVfF339</a> のタグをみると目立つ位置になんか表示されとる!!! <a href="https://t.co/UyKphYO43Q">https://t.co/UyKphYO43Q</a> <a href="https://t.co/xqZUGy6kqx">pic.twitter.com/xqZUGy6kqx</a></p>— カールおじ (@takano32) <a href="https://twitter.com/takano32/status/1342378392151212033?ref_src=twsrc%5Etfw">December 25, 2020</a></blockquote><p>なんか少し笑ってしまった。</p><p>これじゃあ、このページを見たひとは Ruby 3.0.0 は @takano32 ってヤツがリリースしたんだってよ。みたいな様子に見えなくもないじゃないか…主張がデカい!!!成瀬さん、リリースありがとうございます。</p><p><br /></p><h2 style="text-align: left;">Ruby 3.0.0 についての所感</h2><div>さまざまな変更や改善があり期待できる。メジャーな部分については周りのブログなどを見ていただきい。</div><div><br /></div><div>個人的にテンションが高まったのは Erlang のように読み書きできそうな機能が増えたことです。</div>
<blockquote class="twitter-tweet"><p dir="ltr" lang="ja">Ruby 3.0.0 ではだいぶ Erlang に近い特徴が増えたと感じる。Ractor というアクターモデルが導入されたということは言うまでもないが、find パターンの追加はより Erlang っぽいコードを書く手助けになりそう。具体的にはバイナリのパターンマッチでパーサが書けそう。 <a href="https://t.co/uSIzS61LrT">https://t.co/uSIzS61LrT</a></p>— カールおじ (@takano32) <a href="https://twitter.com/takano32/status/1342459868796440576?ref_src=twsrc%5Etfw">December 25, 2020</a></blockquote> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<h2 style="text-align: left;"><br /></h2><h2 style="text-align: left;">最後に</h2><p style="text-align: left;">FreeBSD ではこの記事で扱った変更を取り入れる前までは Ruby 3.0.0 をインストールするときに下記のようなオプションが必要な状態でリリースに向く形でした。</p></div><div><pre>CONFIGURE_OPTS='--disable-dtrace' rbenv install 3.0.0</pre><p style="text-align: left;">この記事で紹介させていただいた変更によって以下のコマンドで入るようになりました。手元でも動作を確認済みです。</p></div><pre>rbenv install 3.0.0</pre><p style="text-align: left;">FreeBSD で Ruby 3.0.0 をビルドするという特殊な状況に向けての修正ですが、少ない変更の割には多くの方の時間を節約することができそうな修正になったのではないかと思います。</p><p style="text-align: left;">詳しく調べてみると <a href="https://reviews.llvm.org/D85785">LLVM がデグって DTrace のオブジェクトをリンクできなくなっているよう</a>なので、新しい LLVM がパッケージで降りてきたら、これをリバートするような変更を忘れないようにしたいと思います。</p><p style="text-align: left;">では、みなさんもよい Ruby 3.0.0 ライフを。</p><p style="text-align: left;">メリークリスマス!!!</p> takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-81298731654777618522020-12-12T22:19:00.005+09:002020-12-12T23:35:49.714+09:00今泉研究室では2006年にプログラミング言語Haskellの洋書を輪読していた<h1 style="text-align: left;">この記事は</h1><div><div><a href="https://adventar.org/calendars/5931">Imaizumi Lab Advent Calendar</a> に寄せた記事である。</div></div><h1 style="text-align: left;">Haskell との邂逅</h1><p> 2006年のわたしは Haskell というプログラミング言語に憧れをもっていた。</p><p>ところが、日本ではあまり話題になっておらず、Haskell の技術関連書籍はすべて洋書。</p><p>そんななか、今泉研究室は研究で英語の論文を読解できるようになるための訓練も兼ね、ゼミで洋書を輪読するという話を聞いた。</p><p>その日以来、研究室では周囲を言いくるめ、なんとかしてゼミで Haskell の洋書を輪読する方角へと誘導する私がいたのである…</p><p>そして、ゼミでは Haskell を使って関数型プログラミングを理解する Introduction To Functional Programming Using Haskell を輪読する流れにすることに成功したのであった!</p>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=takano32-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=0134843460&linkId=4238d0b4b7ff3360e5e429b143b6f23b" style="height: 240px; width: 120px;"></iframe>
<h1 style="text-align: left;">当時の Haskell 事情</h1><p>日本ではあまり話題になっておらず、というだけではイメージがしにくいと思われるので当時の Haskell 事情を簡単に列挙しておく。</p><p></p><ul style="text-align: left;"><li>Haskell の最大派閥となる処理系は GHC ではなく hugs 98</li><li>hugs 98 の仕様がコロコロ変わっており、書籍のサンプルコードが修正なしでは動かない</li><li>hugs 98 のキラーアプリは Audrey Tang が実装した Perl 6 の処理系となる pugs くらいしかない</li></ul>上記のような状況であり、なぜ Introduction To Functional Programming Using Haskell の輪読の誘導に成功したのか分からない…<p></p><p>わりと積極的にやりたいことをやろう!と言えばやらせてもらえた<strike>が、言わなければ放置される</strike>研究室だったと当時を振り返る昨今である。</p><h1 style="text-align: left;">Chapter 12: An automatic calculator</h1><div>Functional Programming Using Haskell のなかでも最難関の章を担当したときの資料とコードがでてきた。</div><div>An automatic calculator という証明系の処理系を作成する章である。難易度に容赦がない。</div><div>多くはすでに記憶にないのでコードと実行結果のみを示しておく。</div>
<script src="https://gist.github.com/takano32/f2663dc26f1a876e29aa0470f8dd95b5.js"></script>
書籍でこられのコードについて解説されていたという分量にも驚きだが、いくつかの自明なコードについては記述さえなかったと記憶している。
断片的にそのままの写経では動かなかったため、きちんと証明が動いたときにはうれしかった記憶がある。
そのうれしさにかまけて、後日ラムダ計算の簡約器を作ることになったのだが、それはまた別の話…
<h1 style="text-align: left;">所感</h1><div>短いが、今日の記事は以上である。上記の解説をまとめたスライドとレジュメを作成し 2006年3月20日に研究室で発表を行ったという記録が残っていた。</div><div>また、その他にも Functional Programming Using Haskell で担当した章はいくつかあり、すべてについて hugs 98 での動作を確認している。</div><div>くどいようだが書籍の写経そのままではコードは動作せず、動かせていた学生は自分だけだったと記憶している。</div><div>もっと詳しく知りたいなどのことがあればさらに解説を加えたり、別の章について言及するかもしれない。</div><div>記憶がある部分についてでご容赦いただきたいが…</div><h1 style="text-align: left;">輪読の様子</h1><div>なお、難しいことが英語で書かれていたのでゼミの発表内容の多くは壊滅的だったもよう。🙈</div>takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-48866221851137412852018-08-07T04:36:00.001+09:002018-08-07T04:47:59.036+09:00CoD: BO4 の Private Multiplayer Beta Weekend 1 に参加Call of Duty: Black Ops 4 の Private Multiplayer Beta Weekend 1 に参加した。<br />
<h2>
プライベートベータテスト</h2>
よくオープンベータテストというのは聞くと思うが、プライベートベータテストというのには耳慣れない方も多いのではないか。<br />
<br />
簡単に説明すると、オープンベータテストは参加する意思があれば参加できる、というようなテストになる。それに対してプライベートベータテストは参加するのに対象となるプロダクトの予約などをしている消費者が参加できるテストとなっている。<br />
<br />
しかしながら、今回の CoD: BO4 のプライベートベータテストは少し特殊で PS4 については製品の購入をしなくても参加できるものであった。<br />
PlayStation Store でプライベートベータテストの権利が販売されていた様子をみた方もいると思うので補足をすると、この販売は 100 JPY で行われていたものであるが、プライベートベータテストが終わった後には払い込みのあった決済手段に払い戻されるそうだ。<br />
なぜそんなことをしているのか、ということについて憶測にはなるが、これはクレジットカードが使えることを確認することによってレーティングが守れている状態でプレイされているということをシステム的に保証するものだと思われる。<br />
なお、プライベートベータテストの参加については Amazon.co.jp でもプロダクトコードを発行していたのでクレジットカードがなくてもそちらを経由して参加することはできたと思う。<br />
<br />
ちなみに、オープンベータテストやプライベートベータテストとは別にクローズドベータテストという言葉もよく耳にすると思うのだが、これはオープンベータテストやプライベートベータテストが原則的に参加する意思があれば参加できるというものであるのに対して、クローズドベータテストでは参加する意思がある希望者からさらに抽選されたりする場合が多い。<br />
<h2>
おすすめのプレイ</h2>
閑話休題。<br />
<br />
自分は CoD: BO シリーズについてはプレイ経験はあったものの、家庭用ゲーム機で参加という経験は浅かった。パソコンで慣れた操作に比べるとぎこちない。率直に表現すれば死にまくる、殺されまくる、ということになる。<br />
<br />
プレイリストにある Search & Destroy は実力がないと同じチームメンバーに迷惑をかけてしまいそうと感じる。Chaos TDM(Team Death Match) については撃ち合いがうまくないとゲーム内経験値が蓄積されにくいと感じる。<br />
<br />
個人的に初心者におすすめなのは Control だ。これは新しいゲームモードでなかなか他でも見かけない感じがするけれどもスプラトゥーンでいうところのガチエリアみたいなヤツである。ポイントを占領して維持することで戦績となる。<br />
<br />
Control が初心者におすすめできる理由はその目的が故にキルデスに依存しなくてもゲーム内経験値を稼ぐことができる、ということである。<br />
ポイントの占領と維持が目的なので占領に参加するだけでも経験値を積むことができる。<br />
ポイントの占領は敵チームメンバーを排除して一定時間、ポイント付近に滞在すること、滞在の間にキルされない、という行動で可能になる。<br />
これに貢献すればよいので、味方がクリアーしてくれたポイント付近に一緒に残り、防衛するという、初心者にとって比較的難易度が低い消極的な参加方法でも経験値を積める。<br />
初心者すぎて狙いがままならないようなプレイヤーでも索敵をして相手に撃たせて、すぐに逃げるといった行動でも十分に貢献できるのでよいと思う。<br />
逃げ回って占領だけするキャンパーになれというわけではなく、貢献しつつ育っていけばよいのではないか、ということだ。<br />
<h2>
おすすめのスペシャリスト</h2>
同じような理由で CRASH くんがいい。<br />
<br />
あとでかく<br />
<br />takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-34256796491465699962016-08-11T10:58:00.000+09:002016-08-11T10:58:56.604+09:00Linux に慣れてきたと感じる方たちに贈りたい心構えさて、夏ですね。<br />
<br />
春にはブログ界隈も「新入社員に伝えたい〜」とかそんなタイトルでたくさんのエントリが書かれていたものです。<br />
しかしながら、現実的なことを考えてみますと、人間というのは馬鹿なんです。春にそんなこと言われても、実際に新入社員が春にやることと言えば、分厚い仕様書をドンと渡されて「把握しておいて」くらいのものです。<br />
実務的にオペレーションをしたりするのはこの時期くらいからなんではないか、と思うわけです。何でああいう記事を春に書くんですかね。まあ、それはいいや。<br />
<br />
タイトルの通りなんですが、そろそろ UNIX や Linux を使いはじめたぞ、という方たちが心がけるとよいのではないかと思うポイントについて、自分の考えをまとめてみました。<br />
<br />
<h3>
「なぜ?」なのかを考える</h3>
<div>
SI-er とかになって、オレってば RedHat Enterprise Linux に Oracle の環境を作成して、それを使いこなしてどんどん成長してるぜぇ。って感じのお年頃の方もこの季節多いのではないかと思います。</div>
<div>
<br /></div>
<div>
だがしかしですね。きちんと本質を捉えて今後も同じ業界でやっていくためには「なぜ?」をきちんと考えましょう。たとえばですが、上述みたいな作業をした方は、たいていの場合は手順書に従ったりするわけです。その手順書というのが先人たちの知恵でもあり、自身の成長を遮る壁なのです。</div>
<div>
<br /></div>
<div>
ついうっかり何も考えずに SELinux を disable にしたりしてませんか?たぶん、そんな経験あるでしょう。周囲に聞いても「SELinux はトラブルの元だから」とか言われた、とか並の職場ではそんな感じなんじゃないですかね。</div>
<div>
では、なぜトラブルの元が規定の設定になっており、有効化されているのでしょう。そういったところからきちんと「分からない」「なぜ?」を調べていくことが、いつも利用している道具の仕組みを知るチャンスになります。</div>
<div>
<br /></div>
<div>
というのもですね。</div>
<div>
いまどき Linux のカーネル(譲歩して Lion's 本で PDP-11 のカーネルとかでもよい)を読破してから、システムを俯瞰的に見れる状態で実務に投入されている人材なんていないし、そんなこと社会人になってからではできないんですよ。</div>
<div>
ならば、システムを俯瞰的に見れるようになるにはどうするか、というと、ユーザの視点から「先人たちが作った仕組みであるはずなのに、なぜこのようなことになっているのだろう?」という視点をもつことが大切になってくると思います。上から部分的に謎を解いていき、どんどん謎を埋めていく、という作戦です。</div>
<div>
<br /></div>
<div>
SQL などでも JOIN とか VIEW を使うときも「こうするとできるから使う」ではなくて、 JOIN や VIEW を使うべき理由を考えることが大切です。考えた結果、割とそういったものは必要なかったりしたりして、他のクエリーで代替えすることで無駄な複雑性がなくなり、 KISS な状態でシステムを維持できるようになります。</div>
<div>
<br /></div>
<div>
「なぜ?」を繰り返していればそのうち 0x7C00 までたどり着くのではないでしょうかね。</div>
<div>
<br /></div>
<h3>
師が何をしているか理解する</h3>
<div>
たいていの場合は上司というのは自分よりもよりスキルセットが高いものです。</div>
<div>
それを利用しない手はありません。</div>
<div>
<br /></div>
<div>
ターミナルの操作からプログラムの書き方まで、身近な先人が身につけたのもを盗む、というわけです。このとき重要なのは一挙手一投足について「何をしているのか」を理解して師と同期することです。ターミナルでよく分からないカーソルの飛び方や補完が発生したら何をしたのか聞きましょう。聞かなければ自分はいつまでも非効率なままですが、一時の恥を忍べば、これからは思考のバリエーションが増えます。</div>
<div>
<br /></div>
<div>
与力のある場合は「いまこういう操作をしたけど、自分だったらこうするな」みたいなことを考えてみたり、師と仲がよければ提案してみましょう。いつも質問して盗んでいるばかりではなく、恩はきちんと返していくべきです。</div>
<div>
<br /></div>
<h3>
人が造りしものを恐れない</h3>
<div>
<br /></div>
<div>
近頃はオープンソースのライブラリを使ったシステムなどを構築していたりすることも多いのではないかと思います。そのときによくありがちなのが、エラーメッセージをきちんとみる、というのは実践しているが、そのさきの深みについては避けるといった行動があります。</div>
<div>
<br /></div>
<div>
どんなシステムも人が造ったものです。たいていのシステムはごく一部の「頭の中が理解できねぇな」って人が造ったもので理解できなかったりしますが、たいていのシステムは読み解くことで理解ができます。「これはオレの仕事じゃないから」はやめましょう。積もり積もった後回しで技術や知識がない自分を形成していくというプロセスに陥ります。</div>
<div>
<br /></div>
<div>
もちろん、時と場合を選ばなければなりませんが、大いに深みにハマり、大いに先人たちが作った仕組みに憤りを感じましょう。そして、願わくば先人たちよりもよいものをフィードバックしてオープンなシステムに反映していくのがみなの幸せにつながるのです。</div>
<div>
<br /></div>
<h2>
所感</h2>
<div>
ですます調で書いたらえらく仰々しい文章になった。</div>
<div>
しかし、成長したい、という人にはこれくらいしてもらいたいと感じる昨今です。</div>
<div>
<br /></div>
<div>
さて、手元の FreeBSD も 10.2-RELEASE から 10.3-RELEASE に上がったことだし、そろそろ外出するかな。</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-77430243345748264462016-07-20T10:32:00.001+09:002016-07-20T10:32:19.682+09:00英字配列を好んで使う指向があまり自分には理解できない件キーボードの話題です。<br />
表題の通りなんですが、英字配列が「カッコいい」という意識高い感じのプログラマが理解できない。<br />
<br />
理由はいくつかあるんですよね。まず、自分がかな打ちで日本語入力しているというのが理由のひとつではあるんですが、これは決定的な理由ではない感じですな。英字配列でもだいたいどこに仮名の文字がマッピングされるか頭に入ってるので、モバイルデバイスとかで英字配列のキーボードしか使えない、というときでもかな打ちで日本語入力しています。<br />
<br />
じゃあ、なんで英字配列を愛用している人が理解できないかっていうと、なんか使っている人たちの意識を見ていると気持ち悪いことが多いんですよ。「デザインがいいので英字配列使ってる俺カッコいい」みたいなワナビー系の感じとか「プログラマならやっぱり英語でしょ」というようなよく理解できない主張がとても気持ち悪い。<br />
<br />
だって、普通に不便じゃないですか。英字配列。キーの数が少ないんですよ。<br />
それに、いくつかのプログラミングでよく使う英字について入力しやすいという主張も見かけるんですが、だとしたらなんで日本語の文章を書くときによく使う日本語入力について効率がよいかな打ちをしないんですかね。よく分かりません。<br />
<br />
あと、文字コード的に英字配列気持ち悪いじゃないですか。man できる端末があったらたいていのマシンに ascii(7) あると思うので、 man ascii なり man 7 ascii で文字コードを見てみてくださいよ。0x2a が * で 0x2b が + てですよね。日本語配列だときれいに並んでますよ。<br />
「いくつかのプログラミングでよく使う英字について入力しやすい」英字の代表として挙げられることがあるダブルクォートなんかも 0x22 に位置していて、隣の 0x23 が # なんですよ。日本語配列のマッピングと一致していてとても気持ちいいんですよ。なんでダブルクォートごときで英字配列を選択しているのかよく理解できない。だいたいにおいておまえらはあまりC言語とか書かないだろうから、リテラル文字列に使うのはシングルクォートでいいじゃねぇか、という気もします。そんなシングルクォートは 0x27 なわけですが、これまた隣の 0x26 が & で日本語配列だと隣です。なんという整合性のとれた配列なんでしょう。<br />
<br />
日本語配列は JIS 配列なんて呼ばれたりもしますが、最近は同様の記号の配列で他国のキーボードも作られていたりするわけで、ようするに英語圏で英字配列を使い続けているのは MKS単位系が国際標準の世の中で、やれフィートだポンドだ、ガロンだみたいな気持ち悪い単位系を使ってるのと同じようなもんなんですよ。<br />
なんで日本人であるところの君らがわざわざ標準から外れていくの?という感じでこれもまた意味が分かりません。<br />
<br />
他にも MacBook などの日本語配列だと A の横に Ctrl がきていて規定の設定でも UNIX らしさがマシマシになってよりハッカーにとって優れていると思うんですがね。なんでわざわざ英字配列を選択しちゃうの…もったいない…<br />
<br />
最後になんですが、わたくしはそこまで何かに偏るってことはないので、基本的には英字配列も使えますよ。使うときもありますさ。しかし、あえて英字配列を選択しなければ英字配列のものが手に入らないという状況で、ここまで気持ち悪くてよく分からない理由で英字配列を選択する意味ってそんなにあるんですかね?という感じです。<br />
<br />
みんながもっと日本語配列のキーボードを使ってくれると、しいてはかな打ちとかしてくれれば、日本語配列のキーボードから仮名刻印を削ってオサレ!みたいな狂った製品が出回ることもなく平和なんですけど、あれはどうにかなりませんかね。<br />
<br />
あー、なんか書き殴ってたら収集がつかなくなったんですけど、ふと思ったので書いておきました。なんかこれくらいのノリのほうがブログっぽいでしょ。たまにはいいんじゃないかな、と。<br />
<br />
じゃあの。takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-57326696801430601742016-07-01T07:30:00.000+09:002016-07-01T07:30:47.955+09:00kcm89 をコンパイルできなかった記録<div class="tr_bq">
結論。挫折した。<br />
<br />
ドキュメント少ないし、 autotools ないな。</div>
暗黙的なルールあるんだろうな。<br />
が第一印象。<br />
<br />
トップでバーンと make<br />
<br />
<blockquote class="tr_bq">
% make<br />
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C src build<br />
cc -Wall -Wextra -O2 -DDEBUG -ansi -pedantic -MMD -MP -I. `llvm-config --cflags | sed 's/ -DNDEBUG / /g'` -Wno-long-long -c main.c -o main.o<br />
/bin/sh: llvm-config: command not found<br />
main.c:2:10: fatal error: 'llvm-c/Analysis.h' file not found<br />
#include <llvm-c nalysis.h=""><br /> ^<br />1 error generated.<br />make[1]: *** [main.o] Error 1<br />make: *** [build] Error 2</llvm-c></blockquote>
<br />
はい、聞いてないヘッダでてきたぁ。<br />
とりあえず、 brew で探して info してみる。<br />
<br />
<blockquote>
% brew info llvm<br />
llvm: stable 3.6.2 (bottled), HEAD [keg-only]<br />
Next-gen compiler infrastructure<br />
http://llvm.org/<br />
Not installed<br />
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/llvm.rb<br />
==> Dependencies<br />
Build: xz ✔, cmake ✘<br />
==> Options<br />
--universal<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build a universal binary<br />
--with-clang<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build the Clang compiler and support libraries<br />
--with-clang-extra-tools<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build extra tools for Clang<br />
--with-compiler-rt<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build Clang runtime support libraries for code sanitizers, builtins, and profiling<br />
--with-libcxx<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build the libc++ standard library<br />
--with-lld<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build LLD linker<br />
--with-lldb<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build LLDB debugger<br />
--with-python<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build Python bindings against Homebrew Python<br />
--with-rtti<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Build with C++ RTTI<br />
--without-assertions<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Speeds up LLVM, but provides less debug information<br />
--HEAD<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Install HEAD version<br />
==> Caveats<br />
LLVM executables are installed in /usr/local/opt/llvm/bin.<br />
Extra tools are installed in /usr/local/opt/llvm/share/llvm.<br />
This formula is keg-only, which means it was not symlinked into /usr/local.<br />
OS X already provides this software and installing another version in<br />
parallel can cause all kinds of trouble.</blockquote>
無難どころと思われるオプションで install しますかね。<br />
<br />
<blockquote class="tr_bq">
% brew install llvm --with-clang --with-clang-extra-tools --with-compiler-rt --with-libcxx --with-lld --with-python --with-rtti</blockquote>
<br />
がんばれー<br />
<hr />
これた。ちょっとこれ以上はいま時間取れそうになくて頓挫。<br />
<br />
<br />
<blockquote class="tr_bq">
</blockquote>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-27014585960089051042016-07-01T07:24:00.004+09:002016-07-01T07:25:39.710+09:00コンシューマの FPS ゲームに手を出したら痛い目にあっているいやぁ、PS4 - PlayStation 4 をついに購入してしまいましたね。5月。<br />
理由としては<br />
<br />
<ul>
<li>日本の動画配信サービスなどと相性がいい</li>
<ul>
<li>システムに手を入れず、PS4が単体でゲーム実況などができる機能を持っている</li>
</ul>
<li>ビッグタイトルがそれなりにある</li>
<ul>
<li>スクエニとか頑張ってますし、Steamで配信されているようなインディーズゲームもいくつか配信されています</li>
<li>たとえば、スマートフォンでプレイして「操作感がゴミだなぁ」と感じてしまった Minecraft や Downwell が人類の叡智である十字キーで遊べます</li>
</ul>
<li>後輩の誕生日プレゼントに PS Vita クロスバイの製品がふくまれた</li>
<ul>
<li>ウィッシュリストに入れていなくても砂が 2t とか送れるテクニックを使って送りつけてきたやつがいます</li>
<li>先輩としては沽券にかかわるので PS4 くらい一発でポチるぜといきました</li>
</ul>
</ul>
<div>
買ったモノなんですが、初音ミクマニアの私としては初音ミクモデルいったと思うでしょ?でもタイミングが悪かった。それはまだ発表されてない時期にポチった。</div>
<div>
<br /></div>
<div>
かといって普通のモデル買ってもつまんないでしょ、というわけで Call of Duty : Black Ops III モデルを購入して「Ubuntuカラーだ!」と気分をよくしたわけです。その後、初音ミクモデルが発表されて、ぐぬぬったわけですが、まあどうせ Play Station 4 は E3 の前後で 4K モデルが次期に発売されることがちらつかされたので、現在のやつで Play Station 4 に慣れたら、艦これモデルだかかすみちゃんブルーがきたときに書い直すかもしれないですね。</div>
<div>
<br /></div>
<div>
閑話休題。</div>
<div>
PS4 の購入とともに魔の契約と思っていた Play Station Plus についに今月から加入しました。ということで、 FPS ゲームのオンライン対戦や格闘ゲームのランクマッチをガンガンしていかないと使わないだけ損という貧乏根性がでてきております。</div>
<div>
契約はガッツリ12ヶ月契約ですね。後ろは振り返らない。ところが、Call of Duty : Black Ops 3 のオンラインプレイしてみたら、ぜんぜん相手を倒せない!!!</div>
<div>
驚くほど倒せないんですよ。</div>
<div>
<br /></div>
<div>
自信はあったんですよ。それなりに。PC の FPS で動きには慣れているので、基本的な「死んで覚えろ」系のことはできるんですよ。丁寧にクリアリング、パイカッテッイングしながら周囲の安全を確認してエンカウントポイントでの警戒、足音で敵の位置を探るなどなど。</div>
<div>
しっかし、圧倒的にAIMが定まらない、つまり狙いがガバガバ。</div>
<div>
マウスなら一発で敵の頭らへん、武器によっては「こっから腰撃ちで勝てるはず」というところに入るんだけど、アナログパッドきつすぎ。</div>
<div>
<br /></div>
<div>
何が言いたいかというと、基本的な立ち回りができていて、慣れているような動きをするんだけど、妙にトロい動きをしているヤツがいたら、それは私なんで接待してください。</div>
<div>
嘘です。温かい目で見てください。</div>
<div>
<br /></div>
<div>
くっそぉ、武器のカスタマイズとかしたいけど、勝てないとぜんぜんポイントが入らなくてスコープとかも気にいるような性能のものが手に入らない…</div>
<div>
11月には Call of Duty の次回作出ちゃうんで、それまでにはなんとかアナログパッドの右で AIM ができるようになっておきたい、欲を言うならスナイパーライフルでクイックショットしたり、壁抜きで相手を抜くようにはなっておきたいんだよなぁ。</div>
<div>
<br /></div>
<div>
ん?オーバーウォッチ?知らない子ですね。</div>
<div>
<br /></div>
<div>
PCのグラボ?ぶっ壊れると面倒なので自作には関わりたくないですね?</div>
<div>
<br /></div>
<div>
そんなこの頃です。よろしくお願いします。</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-43284086273925096542015-12-17T13:47:00.001+09:002015-12-17T13:50:24.491+09:00Smalltalk ではどれくらいまで長いクラス名が標準で使われているものなのか<a href="http://qiita.com/advent-calendar/2015/smalltalk">Smalltalk Advent Calendar 2015 #Qiita</a> の 12月16日の記事になります。<br />
<br />
仕事で結構長いクラス名ついてるなー、っていう感じのヤツが Seaside にふくまれてい<br />
て、コードを書くなどしていました。まあ、それはそれとして「標準で配布されているイメージで定義されているクラスの名前のうち、いちばん長いものってどれくらいの長さなの?」って気になっちゃったんですよ。<br />
<br />
気になったら調べてみよう。ということで、やってみました。<br />
環境は Smalltalk Pharo 5 です。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh91Hl568jJKgqYtY7wP3ndTte4-GsKOlt4dRQzRJmjZOr_ecW9ZqxPtTbLILcwokYdFFVXIWpjuQHpJ_MBKgqRGRJa_fYhPJORD8Xo54Y0qmNq6dGIucjS8yNn1wUqm8kVvLY_qj-buRA/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-17+13.17.24.png" imageanchor="1"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh91Hl568jJKgqYtY7wP3ndTte4-GsKOlt4dRQzRJmjZOr_ecW9ZqxPtTbLILcwokYdFFVXIWpjuQHpJ_MBKgqRGRJa_fYhPJORD8Xo54Y0qmNq6dGIucjS8yNn1wUqm8kVvLY_qj-buRA/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-17+13.17.24.png" width="320" /></a><br />
<br />
コードとしてはこんな感じ。<br />
<blockquote class="tr_bq">
| allClasses |<br />
allClasses := Smalltalk allClasses collect: [ :each | each name ].<br />
allClasses sort: [ :a :b | a size < b size ].<br />
allClasses inspect.</blockquote>
はい。他の処理系で試してみると違う結果が出るかもしれませんね。<br />
<br />
Pharo 5 での結果は以下のようになりました。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnLb2PQq-xYaP_BRe1ijgkYlRu3QcNANW83ZHGwKtl4Qs824q6K-4W0SO5m4K5Str_DWfpu_J3ZKPPA_deEYOFRVYnskdV91SHGoDgy76pscXqTlXQ3t1RYMj3dV-LrN0pzFoDApdUIB8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-17+13.17.37.png" imageanchor="1"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnLb2PQq-xYaP_BRe1ijgkYlRu3QcNANW83ZHGwKtl4Qs824q6K-4W0SO5m4K5Str_DWfpu_J3ZKPPA_deEYOFRVYnskdV91SHGoDgy76pscXqTlXQ3t1RYMj3dV-LrN0pzFoDApdUIB8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-17+13.17.37.png" width="320" /></a><br />
どうやら<br />
RBLiteralArrayContainsSuspiciousTrueFalseOrNilRule<br />
というクラスがいちばん長いクラス名のようです。50文字です。2位は48文字で2文字差でのトップとなりました。<br />
<br />
上の方だけみていると、フォントがプロポーショナルなためか、これより横幅が長く表示されているものがあって、ほんとうにこの結果あってるの?と思いましたが、下位の方をみてみると確かにきちんとソートできている模様ですね。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho-A7r7mHtb6lCGonWKX7JfxeP3-k35sCKPznK0CP5ug3QBvlCebrmetWQdhktb1IMZUt9jfERYYOCjnz4l57UAnOTK0vWSUS9Kshn4SZPPSnmjHcgznL4aP2lDoeKWRVmpf4dhxbW39w/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-17+13.17.57.png" imageanchor="1"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho-A7r7mHtb6lCGonWKX7JfxeP3-k35sCKPznK0CP5ug3QBvlCebrmetWQdhktb1IMZUt9jfERYYOCjnz4l57UAnOTK0vWSUS9Kshn4SZPPSnmjHcgznL4aP2lDoeKWRVmpf4dhxbW39w/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-17+13.17.57.png" width="320" /></a><br />
<br />
こういったシステム全体を俯瞰してすべてに対しての見通しがよいというのも Smalltalk のよさですね。<br />
<br />
みなさんも「どんなメソッド名がいちばんよく使われているか」など気になったら調べてみると面白いかもしれません。takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-17215436484934271062015-12-15T00:15:00.000+09:002015-12-25T18:57:59.546+09:00Smalltalk でシステムの基幹部を作っている会社に転職した話<a href="http://qiita.com/advent-calendar/2015/pyspa">pyspa Advent Calendar 2015</a> の 12月14日のエントリでありつつ、<a href="http://qiita.com/advent-calendar/2015/smalltalk">Smalltalk Advent Calendar 2015</a> の12月22日のエントリです。<br />
<br />
「pyspa のこと、ナニ書こうかな?」って思ってたんたけど、よく見たら自分の好きなことでよかった。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL9-aox9UgbW5iM9UlsjDRuWgJMqeuQALDQTDI5_zrkheHFx9NHCKmnh9at0wA0WaWapR6zvZsJf5cCmK5ZcjP1s6gctM0vFDBaoId5XGDUrERcF4l2T-7BI61pd8pseFtXF8p3h4sAq0/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-14+23.14.30.png" imageanchor="1"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL9-aox9UgbW5iM9UlsjDRuWgJMqeuQALDQTDI5_zrkheHFx9NHCKmnh9at0wA0WaWapR6zvZsJf5cCmK5ZcjP1s6gctM0vFDBaoId5XGDUrERcF4l2T-7BI61pd8pseFtXF8p3h4sAq0/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2015-12-14+23.14.30.png" width="320" /></a><br />
こんなワタクシは数学における四択問題の解答欄に数式を細かく書いて不正解となるようなバカでした。人の話はちゃんと聞く、見る。大切ですね。はい。<br />
<br />
そして、記事を書き終え、クリスマスを迎えた本日12月25日に Smalltalk の話でもあったな、ということで <a href="http://qiita.com/advent-calendar/2015/smalltalk">Smalltalk Advent Calendar 2015</a> 12月22日のエントリとしました。<br />
<br />
<h2>
転職</h2>
<div>
わたくしの今年のトピックはなんといっても転職ですね。</div>
<div>
今年の8月まで水色の六角形の会社で働いておりましたが、実際のところ、一昨年の夏くらいから、紫色の楕円をみると痙攣しそうになる病気になってましたね。いま思うと。</div>
<div>
<br /></div>
しかし、<a href="http://labs.gree.jp/blog/2014/12/12091/">全部丸投げしてもらったものは赤い宝石で大勝利</a>できたり、今年の頭くらいからちょくちょく赤いコードのレビューもしていたんですよね。さすがに紫の楕円だけではみな痙攣するようになってきたか、と思ったんですがレビューすると赤い世界では `SomeObject#true_or_false?` 的なものが `SomeObject#isTrueOrFalse` とか書いてありまして、クソ真面目にレビューで「これはなんか赤くないので治せってば」ってマサカリ投げてみたりすると「移植性を優先します」みたいなコメントが返信されてきちゃったりなんかして、クソワロスでした。<br />
<div>
<br /></div>
<div>
はー、もう。人海戦術の世界では何かがおかしくても、みなおかしいと分かりつつ、自分の船だけ前に進めようとして、全体として前に進んでいなくてもいいっていう雰囲気になるんだなぁって思ったんですよね。意思統一が計られていて、きちんと郷に入れば郷に従えを守るメリットを知ったるステージで仕事したいなぁと思うようになったんですよ。</div>
<div>
<br /></div>
<div>
そんなときに、 Smalltalk 界隈の重鎮から Smalltalk-er が不足していて困っている、という連絡をいただくことができまして、そのまま Smalltalk で仕事している会社に転職してしまいました。</div>
<div>
ちなみに、誘っていただいた方とは15年くらい前にはじめて知りあった感じです。大学生時代にアルバイトしていたソフトウェアハウスが自社製の Smalltalk の処理系を作成し、それを用いて Linux 向けや Windows 向けのアプリケーションを動作させ、高速化させる必要のあるリリース版の作成には各プラットフォーム向けに C言語 のコードを生成するっていうヤツ作っていたんです。そんなもんで、たぶん自分がプログラミングしてはじめて給金してもらった仕事は「独自 Smalltalk 処理系向けに GTK のバインディングと Win32 API のバインディングを書きながら、 Smalltalk VM の修正した」というヤツになりますね。我ながらクレイジーですね。これは。</div>
<div>
<br /></div>
<div>
そうそう、15年前ほどの付き合いという話でしたね。まあ、そのクレイジーな大学時代に、独自 Smaltalk 処理系によるプロジェクトについてのコンサルというような感じでわたしがアルバイトしていたソフトウェアハウスにきてくれていたのが尊敬する師、というわけでした。その師に誘われて断る理由もなく引きこまれていったという感じてす。</div>
<div>
しかも、ちょうど自分が悩んでいた「郷に入れば郷に従えを守るメリットを知ったるステージ」がほとんど Smalltalk という処理系が保証していますよ。だって、 Smalltalk って鎖国してガラパゴス化してるもん。</div>
<div>
<br /></div>
<div>
いま、うちの会社はまだ開発環境とかも「これでなんとかなるのでやってきた」という状態なので、ガンガンと「ごくある普通の近代的な開発」になるようにバシバシやってます。上にあまり人がいないし、自分がいちばんインフラとか暗黒UNIXテクノロジーに詳しいようなので、すんなり意見が通るのがラクですね。マルバツ表みたいなの書かなくても仕事できる!!!</div>
<div>
ちなみに、<a href="http://www.sorabito.com/recruit.html">エンジニアも採用している</a>ので興味のあるヤツらはなんか連絡するといい。</div>
<h2>
来年</h2>
<div>
よくわかんないけど、年末だし最後に来年についてとか書くといいのかなってふと思ったので「来年」って書いてみたんだけど、とりあえずいまの仕事について期待されているくらい、あるいはそれ以上の成果を求めて仕事していくっていうのと、落ち着いたらコミュニティ活動とかも積極的に顔出せるようになるかなって思います。</div>
<h2>
あれ?</h2>
<div>
主にみどり色のトグロについてのアドベントカレンダーだった気がするのだが、でできたのが紫色の楕円と赤い宝石と気球ですね。</div>
<div>
気球といえば、わたしは<a href="https://twitter.com/n0kada">中田さん</a>とかアラン・ケイとか<a href="https://twitter.com/umejava">梅澤さん</a>を勝手に自分の師として尊敬しているんですが、うまい具合に気球つながりで弟子入りできた気がします。いや、まだ公式に弟子にしてもらってないし、リアル気球しないと中田さんの弟子にはなれない!まだまだやることはたくさんあるな!!!</div>
<div>
<br /></div>
<div>
ということで、これからもヨロスク!</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-16032102174952531172015-12-06T00:10:00.000+09:002015-12-06T00:32:53.771+09:00BlockClosure の引数の数に対してことなる引数の数を与えてよしなに呼び出す<a href="http://qiita.com/advent-calendar/2015/smalltalk">Smalltalk Advent Calendar 2015 - Qiita</a> の 12月5日の内容です。<br />
Smalltalk のブロッククロージャについて書きます。<br />
このエントリで使用している Smalltalk は Pharo Smalltalk ですが、他の処理系でもだいたい同じのはずです。<br />
<br />
<h2>
BlockClosure をみてみる</h2>
Smalltalk では [ と ] で囲まれている部分がブロッククロージャとなります。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvR-s3mp4OpJ7kVkW6yLrspBm-ZGipakrp_g_QSeLaMRPdd_TuiC56NFzR_H1W5dacZiLE_QgWVPRZwQL4HX_dv7phzTIpFfDV8tAxOJzJbaa_4ZZ-KZ1GeacaoFur0CO5EABRY7sl8vQ/s1600/Screen+Shot+0027-12-05+at+23.42.19.png" imageanchor="1"><img border="0" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvR-s3mp4OpJ7kVkW6yLrspBm-ZGipakrp_g_QSeLaMRPdd_TuiC56NFzR_H1W5dacZiLE_QgWVPRZwQL4HX_dv7phzTIpFfDV8tAxOJzJbaa_4ZZ-KZ1GeacaoFur0CO5EABRY7sl8vQ/s320/Screen+Shot+0027-12-05+at+23.42.19.png" width="320" /></a><br />
<br />
[ ] を inspect it してみました。<br />
BlockClosure の詳細をみたい場合はどうすればいいんでしょう。っていうときに、 Smalltalk が他の言語と大きく異なる動的な評価という特徴を生かすことができます。<br />
<br />
BlockClosure のインスタンスに対して browse というメッセージを送ってみましょう。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3YpIKu6VsO6qDfXlo7NSXFFBZcwyaGc44QK3GuZVXdQM6-SCFqRd1ms25JdIyV7qu4ppP_c_KarPiEdmU9qyh96R63opD3pHu8Fh6LohVxF5wMN6jXaVy_Ll0Qo_vQxscip41QW5-nEs/s1600/Screen+Shot+0027-12-05+at+23.42.44.png" imageanchor="1"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3YpIKu6VsO6qDfXlo7NSXFFBZcwyaGc44QK3GuZVXdQM6-SCFqRd1ms25JdIyV7qu4ppP_c_KarPiEdmU9qyh96R63opD3pHu8Fh6LohVxF5wMN6jXaVy_Ll0Qo_vQxscip41QW5-nEs/s320/Screen+Shot+0027-12-05+at+23.42.44.png" width="313" /></a><br />
<br />
BlockClosure のインスタンスを inspect している下のペインで self browse と打ち込んで do it します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZUn_bGijdDzuCvG5G0jLrEnqwOaADDnRPV6p03xVEJNWCeMiv50IJmt_h5xwtPKsJ6xMGQ43wGlcF1lJD793cx2zaewOODmvKACXii9Yhmve_2t11XwOrna95lgM1BDI_BmCIhEuLnkk/s1600/Screen+Shot+0027-12-05+at+23.42.57.png" imageanchor="1"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZUn_bGijdDzuCvG5G0jLrEnqwOaADDnRPV6p03xVEJNWCeMiv50IJmt_h5xwtPKsJ6xMGQ43wGlcF1lJD793cx2zaewOODmvKACXii9Yhmve_2t11XwOrna95lgM1BDI_BmCIhEuLnkk/s320/Screen+Shot+0027-12-05+at+23.42.57.png" width="320" /></a><br />
システムブラウザに BlockClosure を表示することができました。ラクチン。<br />
<br />
<h2>
BlockClosure に引数を与えてみる</h2>
Ruby のブロックのように BlockClosure も引数を受け取ることができます。<br />
たとえば、ふたつの引数を受け取って、ふたつの引数を Transcript に出力してみましょう。<br />
<br />
BlockClosure にふたつの引数を設けて、ふたつの引数を与えるには BlockClosure でふたつの引数を受け取ることを明示的に記述して、BlockClosure>>#value:value: を使います。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwz_yazq78Zk9GeRpdtUDuJsGO_-FWCI-wPiWULqxFvcOIZc1n-e9aO0dulWY9kdE8h36HqqewXd5p6JtyORxfFtDF-tTLstiswLk6FSpJficsCgHKE28NNm-5ymg_KCVbuGni4Rncbg/s1600/Screen+Shot+0027-12-05+at+23.48.44.png" imageanchor="1"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwz_yazq78Zk9GeRpdtUDuJsGO_-FWCI-wPiWULqxFvcOIZc1n-e9aO0dulWY9kdE8h36HqqewXd5p6JtyORxfFtDF-tTLstiswLk6FSpJficsCgHKE28NNm-5ymg_KCVbuGni4Rncbg/s320/Screen+Shot+0027-12-05+at+23.48.44.png" width="320" /></a><br />
出力できました。<br />
<h2>
BlockClosure が受け取る引数の数とはことなる数の引数を与えてみる</h2>
<div>
ちょっと意地悪をしてみましょう。</div>
<div>
ふたつの引数を受け取る BlockClosure に BlockClosure>>#value: でひとつの引数を与えるとどうなるんでしょうか?</div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGDy9PoDQAvl9JrxSUCGJgUeByNmv9HXx3x-t8rRwjYSYXEjbKoNM_gfbrx6KhVUxpisEnQ0DjHWHEG6m2DUM7olFmRShKXEtux79bmkYOe9PuqD6EuvVVSx083H2-olQ_VD6ifG1_CY4/s1600/Screen+Shot+0027-12-05+at+23.49.03.png" imageanchor="1"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGDy9PoDQAvl9JrxSUCGJgUeByNmv9HXx3x-t8rRwjYSYXEjbKoNM_gfbrx6KhVUxpisEnQ0DjHWHEG6m2DUM7olFmRShKXEtux79bmkYOe9PuqD6EuvVVSx083H2-olQ_VD6ifG1_CY4/s320/Screen+Shot+0027-12-05+at+23.49.03.png" width="320" /></a></div>
<div>
ありゃりゃ、 Error が発生してしまいました。</div>
<div>
Ruby ではこういった意地悪をするとふたつめの引数には nil が入って例外が起こらないという挙動をするので、わりと適当に書きたいときは便利な挙動だったりします。<br />
<blockquote class="tr_bq">
% ruby -e '[1,2,3].each{|i,j| p i; p j}'<br />
1<br />
nil<br />
2<br />
nil<br />
3<br />
nil</blockquote>
</div>
うーん、厳密なのもよいけれど、柔軟に受け取る引数の数より少ない引数を与えて呼び出したときにエラーが出ないのも魅力的ですね。<br />
BlockClosure で受け取る引数とはことなる数の引数を与えてもエラーが発生しないようにできないものでしょうか。<br />
<h2>
BlockClosure の受け取り引数をよしなに処理するためのメッセージ</h2>
<div>
cull: というメッセージを使うと BlockClosure が受け取る引数の数よりも多い引数を与えても平気な挙動になります。</div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimgNp2jeuiWipVOu3eaXk7b-HLqf9Q5Bv6d_67NW8ylYz3n7z8NLLensOCIhkcXWAKF_vbF0-SKaRK5OHfR9qj0VTm1NEr9W3xRFKNqk9dpGLs5VvlHSqzRZ0VOchPFVl-OPb_mzJz9FI/s1600/Screen+Shot+0027-12-05+at+23.55.35.png" imageanchor="1"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimgNp2jeuiWipVOu3eaXk7b-HLqf9Q5Bv6d_67NW8ylYz3n7z8NLLensOCIhkcXWAKF_vbF0-SKaRK5OHfR9qj0VTm1NEr9W3xRFKNqk9dpGLs5VvlHSqzRZ0VOchPFVl-OPb_mzJz9FI/s320/Screen+Shot+0027-12-05+at+23.55.35.png" width="320" /></a></div>
<h2>
cull も万能ではないです</h2>
<div>
この cull: を使えばブロックの引数の数と不一致な数の引数を与えて呼び出すことができるわけですが、欠点もあります。</div>
<div>
それは何かというと、組み込みの状態からいじっていない BlockClosure では、よっつの引数までしか扱えないのです。<br />
原因は単純によっつまでしかメソッド定義がないからです。まあ、よっつ以上の引数なら別の方法を使った方がよくないか?という気もしますので、自然な気がします。</div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLMx5QfUKFobN8BFJyneDvmJvyYOj9way7d6fJZcwrJ-9unOvXRwgIHN5fG9TFs3CI3DUgwrjjRhwU_X0y3UPjSul3Kxeqy-tV-92PVo52yfhH2-zoGgu18fzo1VDqb-49TNk2n2uuVJw/s1600/Screen+Shot+0027-12-06+at+00.19.17.png" imageanchor="1"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLMx5QfUKFobN8BFJyneDvmJvyYOj9way7d6fJZcwrJ-9unOvXRwgIHN5fG9TFs3CI3DUgwrjjRhwU_X0y3UPjSul3Kxeqy-tV-92PVo52yfhH2-zoGgu18fzo1VDqb-49TNk2n2uuVJw/s320/Screen+Shot+0027-12-06+at+00.19.17.png" width="320" /></a></div>
<h2>
多くの引数をブロックで受け取りたい場合はどうすればいいのか</h2>
<div>
value: メッセージを送信して、引数に OrderedCollection とかを与えればいいんじゃないですかね。</div>
<h2>
おわりに</h2>
<div>
今回の話のネタ、ほとんど梅澤さんにアドバイスしてもらったことをまとめただけだったりします。</div>
<div>
すみません。すみません。すみません。</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-34188371949115294402015-12-05T23:16:00.001+09:002015-12-05T23:23:19.557+09:00Ruby でブロックを使ったメソッドを定義してみよう<a href="http://qiita.com/advent-calendar/2015/ruby">Ruby Advent Calendar 2015 - Qiita</a> の 12月5日の内容です。<br />
<br />
Ruby のブロックとかについて書きます。<br />
<br />
毎年アドベントカレンダーがある言語だし、同じような内容がたぶんあると思うんですけど、全部の内容を見直してかぶってないか確認するのとかしんどいので、ブロックのネタ書きます。<br />
<br />
<h3>
普通の使い方</h3>
<br />
みなさんもよく使うのは Array#each とか Range#each あたりでの使い方ですかね。<br />
たとえば、 1 から 10 の数字を画面に表示するコードとかは下のような内容になります。<br />
<br />
<blockquote class="tr_bq">
(1..10).each do |i|<br />
puts i<br />
end</blockquote>
<br />
このときに使ってる do と end の間にある部分がブロックと言うヤツです。<br />
<br />
わりとコイツは便利なんですが、組み込みのクラスや用意されたメソッドなどに対してのブロックは使えるけれど、自分でブロックを与えるメソッドを定義するということに慣れていないユーザが多いような気がするので、今日はその方法について書きます。<br />
<br />
<h3>
ブロックを受け取るメソッド</h3>
<br />
結論から言ってしまえば、 block_given? というメソッドと yield という式を使えば扱うことができます。<br />
たとえば、整数について偶数か奇数の集合ということを意識したクラスを作ってみます。<br />
名前は EvenOrOddNumbers とします。<br />
<br />
<blockquote class="tr_bq">
class EvenOrOddNumbers << Array<br />
end</blockquote>
<br />
ちょっと横着して EvenOrOddNumbers は Array のひとつ、という関係があるとしました。<br />
<br />
<h4>
偶数と奇数を判別する</h4>
<br />
さて、この EvenOrOddNumbers の Numbers に 偶数がふくまれているかを調べるメソッドと奇数がふくまれているかを調べるメソッドを追加してみましょう。<br />
<br />
<blockquote class="tr_bq">
class EvenOrOddNumbers << Array<br />
def include_even?<br />
each do |i|<br />
return true if i.even?<br />
end<br />
false<br />
end<br />
def include_odd?<br />
each do |i|<br />
return true if i.odd?<br />
end<br />
false<br />
end<br />
end</blockquote>
<br />
こんな感じで書くことができます。<br />
利用例は以下のような感じです。<br />
<br />
<br />
<blockquote class="tr_bq">
eoon = EvenOrOddNumbers.new<br />
eoon << 1<br />
eoon << 3<br />
eoon << 5<br />
p eoon<br />
puts "include even: #{eoon.include_even?}"<br />
puts "include odd: #{eoon.include_odd?}"<br />
puts<br />
eoon = EvenOrOddNumbers.new<br />
eoon << 2<br />
eoon << 4<br />
eoon << 6<br />
p eoon<br />
puts "include even: #{eoon.include_even?}"<br />
puts "include odd: #{eoon.include_odd?}"<br />
puts<br />
eoon = EvenOrOddNumbers.new<br />
eoon << 1<br />
eoon << 2<br />
eoon << 3<br />
p eoon<br />
puts "include even: #{eoon.include_even?}"<br />
puts "include odd: #{eoon.include_odd?}"</blockquote>
<br />
<br />
<br />
実行結果はこんな感じになります。<br />
<br />
<blockquote class="tr_bq">
[1, 3, 5]<br />
include even: false<br />
include odd: true<br />
[2, 4, 6]<br />
include even: true<br />
include odd: false<br />
[1, 2, 3]<br />
include even: true<br />
include odd: true</blockquote>
<br />
ここまでは普通にブロックを使うとこんなメソッドが作れて便利ですよ、みたいな感じで別にブロックを渡すメソッドは作ってないです。<br />
<br />
<h4>
偶数のみや奇数のみを扱うメソッドを作ってみる</h4>
<br />
本題ですね。偶数のみの each や奇数のみの each を定義してみましょう。<br />
<br />
普通はひとつの定義にまとめますが、ブログ的に面倒なので先ほどのクラス定義のあとに以下のコードを記述してもメソッド定義できるので、こんな感じに書いてみました。<br />
<br />
<blockquote class="tr_bq">
class EvenOrOddNumbers<br />
def each_even(&block)<br />
each do |i|<br />
yield i if i.even?<br />
end<br />
end<br />
def each_odd(&block)<br />
each do |i|<br />
yield i if i.odd?<br />
end<br />
end<br />
end</blockquote>
<br />
使い方はこんな感じです。<br />
<br />
<blockquote class="tr_bq">
eoon = EvenOrOddNumbers.new<br />
eoon << 1<br />
eoon << 1<br />
eoon << 2<br />
eoon << 3<br />
eoon << 5<br />
eoon << 8<br />
eoon << 13<br />
puts "EvenOrOddNumbers: #{eoon}"<br />
evens = []<br />
eoon.each_even do |i|<br />
evens << i<br />
end<br />
odds = []<br />
eoon.each_odd do |i|<br />
odds << i<br />
end<br />
puts "evens: #{evens}"<br />
puts "odds: #{odds}"</blockquote>
<br />
出力はこんな感じ。<br />
<br />
<blockquote class="tr_bq">
EvenOrOddNumbers: [1, 1, 2, 3, 5, 8, 13]<br />
evens: [2, 8]<br />
odds: [1, 1, 3, 5, 13]</blockquote>
<br />
上の定義の例ではブロックが渡されなかったときの挙動を考えていないのですが、ブロックが渡されなかったときの挙動を記述するには block_given? を使います。<br />
<br />
<blockquote class="tr_bq">
class EvenOrOddNumbers<br />
def each_even(&block)<br />
raise 'No block given' unless block_given?<br />
each do |i|<br />
yield i if i.even?<br />
end<br />
end<br />
def each_odd(&block)<br />
raise 'No block given' unless block_given?<br />
each do |i|<br />
yield i if i.odd?<br />
end<br />
end<br />
end</blockquote>
<br />
超適当なんですが、ブロックが渡されなかったとき、いきなり Exception を発生させるという処理を入れるとこんな感じです。<br />
<br />
each という名前がつくメソッドだとブロックがなかったときの挙動というのは、どんなものか考えるのか面倒なんで、マネしちゃだめです。<br />
<br />
<h3>
所感</h3>
<br />
ブロックの扱いについて、複数の引数を受け取るブロック、たとえば Hash#each_with_index とかはどうやって作るか?とか考えると面白いと思います。<br />
<br />
今日の内容はこんなところで。<br />
<br />
っていうか、最後まで書いて気づいたけど、数年前に同じネタをアドベントカレンダーに書いた気がしてきた・・・まあ、気にしない方針で。takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-13770305076898435782015-12-05T22:05:00.003+09:002015-12-06T00:25:06.642+09:002015年に参加する Advent CalendarRuby と Smalltalk と Pyspa のカレンダーに参加しています。<br />
今日、余裕あると思って Ruby と Smalltalk のカレンダーの内容を書くことになっているんだけど、わりと余裕なかった。<br />
<br />
これから書きます。takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-75059354799489817702014-10-28T22:28:00.000+09:002014-10-28T22:28:42.336+09:00@keitahaga 先生が Chrome for Android の脆弱性で貢献 x 2更新が滞っていたため、二件もスタックしてしまいました。<br />
<h2>
WEDNESDAY, JULY 16, 2014</h2>
<br />
<a href="http://googlechromereleases.blogspot.jp/2014/07/chrome-for-android-update.html">http://googlechromereleases.blogspot.jp/2014/07/chrome-for-android-update.html</a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK76AdoJJ5pOoyIfZRwkT5237_Ya_A39R5jeSz4Np97c_eweYrv15mKU7OkWLA0eJZj93xEP5iZMENnDJNMlpga_wN30cklftBMyiWiLI7iaBT-GcC1HOoBAYhC4ewsXZZSuGTwyAUr10/s1600/Chrome+for+Android+Update.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK76AdoJJ5pOoyIfZRwkT5237_Ya_A39R5jeSz4Np97c_eweYrv15mKU7OkWLA0eJZj93xEP5iZMENnDJNMlpga_wN30cklftBMyiWiLI7iaBT-GcC1HOoBAYhC4ewsXZZSuGTwyAUr10/s1600/Chrome+for+Android+Update.png" height="263" width="320" /></a></div>
<blockquote class="tr_bq" style="clear: both; text-align: left;">
Security fixes:<br />[$3000][352083] High CVE-2014-3159: Omnibox URL Spoofing (Android). Credit to Keita Haga.</blockquote>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h2 style="clear: both; text-align: left;">
WEDNESDAY, OCTOBER 8, 2014</h2>
<div>
<a href="http://googlechromereleases.blogspot.jp/2014/10/chrome-for-android-update.html">http://googlechromereleases.blogspot.jp/2014/10/chrome-for-android-update.html</a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpG5Cr9CYt6kaosYqKMz-uNyR06P5vOt8QgqlkhQ_jbpg7Caua_hxIs0ukBuRDGKGqcLjJth7HVoBlHuHo_EuCEPgcd2WWUCglKW8YUXZZ2_JZXynMfcvD3ELq5OFt7QsfycW65vhm3aI/s1600/Screen+Shot+2014-10-23+at+2.48.11+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpG5Cr9CYt6kaosYqKMz-uNyR06P5vOt8QgqlkhQ_jbpg7Caua_hxIs0ukBuRDGKGqcLjJth7HVoBlHuHo_EuCEPgcd2WWUCglKW8YUXZZ2_JZXynMfcvD3ELq5OFt7QsfycW65vhm3aI/s1600/Screen+Shot+2014-10-23+at+2.48.11+PM.png" height="245" width="320" /></a></div>
<blockquote class="tr_bq" style="clear: both; text-align: left;">
This release also contains the following security fix: </blockquote>
<blockquote class="tr_bq" style="clear: both; text-align: left;">
[$1500][406593] Medium CVE-2014-3201: Content spoofing with scrollbar. Credit to Keita Haga.</blockquote>
<div>
<br /></div>
<br />takano32http://www.blogger.com/profile/02746905575832178114[email protected]1tag:blogger.com,1999:blog-8303445039619177705.post-65181322596867290612013-09-19T15:01:00.000+09:002013-09-19T15:01:03.204+09:00@keitahaga 先生が iOS 7 にも貢献<div class="tr_bq">
ハガ先生が指摘された脆弱性の修正が iOS 7 に取り込まれたようです!</div>
<br />
<br />
<blockquote class="tr_bq">
APPLE-SA-2013-09-18-2 iOS 7</blockquote>
<blockquote>
Safari<br />Available for: iPhone 4 and later,<br />iPod touch (5th generation) and later, iPad 2 and later<br />Impact: Visiting a malicious website may allow an arbitrary URL to<br />be displayed<br />Description: A URL bar spoofing issue existed in Mobile Safari. This<br />issue was addressed through improved URL tracking.<br />CVE-ID<br />CVE-2013-5152 : Keita Haga of keitahaga.com, Lukasz Pilorz of RBS</blockquote>
<div style="text-align: right;">
<a href="http://lists.apple.com/archives/security-announce/2013/Sep/msg00006.html">http://lists.apple.com/archives/security-announce/2013/Sep/msg00006.html </a></div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: left;">
私も帰ったらハガ先生のおかげでまたひとつ安全になった iOS 7 にアップデートしてみたいと思います。</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]1tag:blogger.com,1999:blog-8303445039619177705.post-80011307864521671212013-05-27T18:22:00.000+09:002013-05-27T18:22:29.170+09:00@keitahaga 先生の Yahoo!ブラウザー についての脆弱性の指摘が JVN に掲載されました@keitahaga 先生の脆弱性報告が掲載されました!<br />
以前に調整されたら掲載されるものがある、と伺っていた件だと思います。<br />
<br />
<a href="http://jvn.jp/jp/JVN31817913/index.html">JVN#31817913: Yahoo!ブラウザーにおけるアドレスバー偽装の脆弱性</a><br />
<br />
<blockquote class="tr_bq">
<img alt="謝辞" border="0" height="14" src="http://jvn.jp/img/m_shaji.gif" style="border: 0px;" width="28" /><br />この脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方が IPA に報告し、JPCERT/CC が開発者との調整を行いました。<br />報告者: keitahaga.com Keita Haga 氏</blockquote>
次は異なるタイプの脆弱性にも挑戦されるかもしれないコメントをいただきました。<br />
期待は高まります!takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-29736894387882047952013-05-07T11:19:00.000+09:002013-05-07T11:19:22.891+09:00@keitahaga 先生がアドレスバー偽装についての脆弱性を二件報告!<br />
<div>
ハガ先生のなかでいまアツいのは Android のようです!</div>
<ul>
<li><a href="http://jvn.jp/jp/JVN55074201/index.html">JVN#55074201: Yahoo!ブラウザーにおけるアドレスバー偽装の脆弱性</a></li>
<li><a href="https://jvn.jp/jp/JVN01313594/index.html">JVN#01313594: Android 版 jigbrowser+ におけるアドレスバー偽装の脆弱性</a></li>
</ul>
<br />
<blockquote class="tr_bq">
<img alt="謝辞" border="0" height="14" src="http://jvn.jp/img/m_shaji.gif" style="border: 0px;" width="28" /><br />
この脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方が IPA に報告し、JPCERT/CC が開発者との調整を行いました。<br />
報告者: keitahaga.com Keita Haga 氏</blockquote>
Nice report.takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-77927115592846136272013-04-24T20:54:00.003+09:002013-04-24T20:54:40.976+09:00@keitahaga 先生が Sleipnir の脆弱性を報告オレたちのハガ先生。<br />
<br />
<a href="http://jvn.jp/jp/JVN65034198/">Sleipnir for Windows におけるアドレスバー偽装の脆弱性</a><br />
<br />
<a href="http://jvn.jp/jp/JVN02895867/">Sleipnir Mobile for Android において任意のエクステンション API が呼び出される脆弱性</a><br />
<br />
<blockquote class="tr_bq">
この脆弱性情報は、情報セキュリティ早期警戒パートナーシップに基づき下記の方が IPA に報告し、JPCERT/CC が開発者との調整を行いました。<br />報告者: keitahaga.com Keita Haga 氏</blockquote>
いま、 <a href="http://keitahaga.com/">keitahaga.com</a> を訪問して何もコンテンツがないことを確認しようと思ったら、コンテンツが存在して吹いた。<br />
<blockquote class="tr_bq">
Hi, I'm Keita Haga, a hikikomori living in Kanagawa, Japan.</blockquote>
hgkn ...takano32http://www.blogger.com/profile/02746905575832178114[email protected]1tag:blogger.com,1999:blog-8303445039619177705.post-58773618342588832302013-02-15T13:33:00.000+09:002013-02-15T13:35:29.012+09:00Computer History Museum から Adobe PhotoShop のソースコードが公開されました米国のコンピュータ歴史博物館(Computer History Museum)にて Adobe PhotoShop バージョン 1.0.1(開発当時は1990年)のソースコードが公開されました。<br />
<br />
<a data-mce-href="http://computerhistory.org/atchm/adobe-photoshop-source-code/" href="http://computerhistory.org/atchm/adobe-photoshop-source-code/" style="background-color: white; color: #007bff; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;">Computer History Museum | @CHM : Adobe Photoshop Source Code</a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.computerhistory.org/atchm//wp-content/uploads/2013/01/splashscreen.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="176" src="http://www.computerhistory.org/atchm//wp-content/uploads/2013/01/splashscreen.jpg" width="320" /></a></div>
<br />
<a name='more'></a><br />
<br />
要所の抜粋です。<br />
<blockquote class="tr_bq">
<span style="-webkit-text-stroke-color: rgba(0, 0, 0, 0); -webkit-text-stroke-width: 1px; color: #454545; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 26px;">With the permission of Adobe Systems Inc., the Computer History Museum is pleased to make available, for non-commercial use, the source code to the 1990 version 1.0.1 of Photoshop. All the code is here with the exception of the MacApp applications library that was licensed from Apple. There are 179 files in the zipped folder, comprising about 128,000 lines of mostly uncommented but well-structured code. By line count, about 75% of the code is in Pascal, about 15% is in 68000 assembler language, and the rest is data of various sorts. To download the code you must agree to the terms of the license.</span></blockquote>
要所を訳すと以下のように書かれてます。<br />
<blockquote class="tr_bq">
コンピュータ歴史博物館はAdobeシステムから許可を得て、非商用の利用につき、1990年当時のPhotoShopバージョン1.0.1のソースコードを保管することができました。Apple社がライセンスを保持している MacAppアプリケーションのライブラリのコードをのぞき、すべてをここに公開します。ソースコードはファイル数にして179であり、ZIPフォルダに梱包されています。ソースコードの行数は128,000行もあり、ほとんどすべてのコードにはコメント行がありませんが、よく構造化されている(のでコメントがなくても可読な)ソースコードです。行数をベースにして中身についてどのような構成になっているかを述べると、およそ 75% は Pascal による記述であり、 15% は 68000 のアセンブリ言語となっています。また、残りさまざまな種類のソースコードから構成されいます。ソースコードはライセンス規約の条項に同意の元にダウンロードしてください。</blockquote>
<h4>
所感 </h4>
多くの部分が Pascal で書かれているという事実に歴史を感じました。また、コンピュータの歴史に大きなひとつの足あとを残し、現在も現役で活躍しているプロプライエタリなソフトウェア PhotoShop のソースコードがコンピュータ歴史博物館に保管されたことには大きな意味があると思います。<br />
あいにく、いままでこのような事例があったのかはわたしは存じ上げていないのですが、これからも商用の利用としては役目を終えた、さまざまなブラックボックスの過去が公開されていくかもしれないと考えるとワクワクします。<br />
<br />
余談ですが、わたしが好んで使っているプログラミング言語 Ruby はオープンソース・ソフトウェアで歴史についてもさまざまな形でオープンになっています。こちらについて、ソースコードで詳しいく知りたい方は、ぜひ <a data-mce-href="http://qiita.com/items/5eefc6b44c9f1e4d614f" href="http://qiita.com/items/5eefc6b44c9f1e4d614f" style="background-color: white; color: #007bff; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; line-height: 18px;">温故知新</a> という @mrkn さんの書かれた記事もご一緒にどうぞ。takano32http://www.blogger.com/profile/02746905575832178114[email protected]1tag:blogger.com,1999:blog-8303445039619177705.post-14564062906708102952013-01-08T21:12:00.001+09:002013-02-15T13:48:54.118+09:00「OpenFlow 実践入門」を読んで Trema で面白いスイッチを作ろう<a href="https://internetweek.jp/">InternetWeek 2012</a>にて<a href="https://internetweek.jp/program/t11/">OpenFlow チュートリアル&ハンズオン</a>でOpenFlowのプログラミングフレームラーク、Tremaについてのハンズオンに参加し、調子に乗って開発が止まっているバージョンのTremaにpull requestしてしまったりなどしつつ、講師の高宮さん、鈴木さんと名刺交換をさせていただきましたところ、<a href="http://www.amazon.co.jp/gp/product/4774154652?ie=UTF8&tag=32ndsite-22&linkCode=shr&camp=1207&creative=8411&creativeASIN=4774154652&f_rd_m=AN1VRQENFRJN5&pf_rd_s=center-6&pf_rd_r=1G4KTCFBBG95MHFSN6WD&pf_rd_t=101&pf_rd_p=463376716&pf_rd_i=489986">OpenFlow実践入門</a>の献本をいただきました!<br />
<br />
非常に恐縮です・・・<br />
<br />
さて、いただいた<a href="http://www.amazon.co.jp/gp/product/4774154652?ie=UTF8&tag=32ndsite-22&linkCode=shr&camp=1207&creative=8411&creativeASIN=4774154652&f_rd_m=AN1VRQENFRJN5&pf_rd_s=center-6&pf_rd_r=1G4KTCFBBG95MHFSN6WD&pf_rd_t=101&pf_rd_p=463376716&pf_rd_i=489986">OpenFlow実践入門</a>ですが、それについてお話する前に OpenFlow について簡単に説明しますね。<br />
<br />
<br />
<a name='more'></a><br /><br />
<h2>
OpenFlowとは</h2>
<div>
L2スイッチ(ハブとか呼ばれる)とかL3スイッチ(ルータとか呼ばれる)は大きく構成する要素をふたつに分けることができます。</div>
<div>
<br /></div>
<div>
ひとつはデータプレーン。こいつはパケットの転送を扱う部分です。目に見える部分でわかりやすく言うと足の部分ですね。ケーブルが生えててピコピコしてたりする部分らへんとかです。</div>
<div>
<br /></div>
<div>
もうひとつはコントローラプレーン。こいつはデータプレーンの制御を行なっている部分です。イメージが沸かないと思いますし、ぼくもよくは知らないんで、適当に想像すると、よく箱を開けるとワラワラとでてくる黒いムカデみたいなやつなんだと思います。</div>
<br />
OpenFlowというのは、このうち、コントローラプレーンをソフトウェアによって擬似的に作成するために用意されたデータプレーンとのインターフェイスです。<br />
要するにOpenFlowに対応したスイッチを買ったり、作ったりするとTremaなどで書いたコントローラプレーンを使うことができるよ、というわけです。<br />
<br />
これは革新的なことで、いままでは細かいルールを設定してネットワークの実験がしたいな、というときにはハードウェアのスイッチが依存している制御ソフトウェアにそのルールを記述する設定がなければいけない、という状況でした。逆に表現すると、実験に利用したいアルゴリズムを実現するために、どのハードウェアの制御ソフトウェアが実験に必要な処理に対応しているか調べて購入する必要があったんですよね。<br />
<br />
OpenFlowとその対応スイッチを使えばOpenFlowの枠組みの中での処理は自由に記述して動かすことができます。つまり、ハードウェアに付属するソフトウェアの仕様をひとつひとつ調べなくても、自分で処理を記述することで、ハードウェアのコントロールができるのです。画期的!!!<br />
<br />
今回はそのOpenFlowの、たぶん、日本初な書籍であるOpenFlow実践入門という書籍をいただきました、という話なんです。ありがたや〜!<br />
<br />
<h2>
OpenFlow実践入門</h2>
<div>
実はおおよその内容はすでに知っていました。というのも、この本は<a href="https://github.com/trema">GitHubで本文内容のおおよそが公開されている</a>のです。<strike>と思ったら、オープンな場所からは消えてるような気がするので、買え!!!</strike><br />
<strike><br /></strike>
Tue Jan 8 23:02:38 JST 2013 追記。著者の高宮さんからコメントでご指摘頂いたとおり、<a href="https://github.com/yasuhito/trema-book">高宮さんのレポジトリにて、発刊以前よりずっと公開されていました</a>。勘違いしてしまって申し訳ないです。</div>
<div>
<br /></div>
<div>
以下、特に良いと思ったことについて箇条書きっぽくあげてみます。<br />
<br />
<br /></div>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h3>
Rubyで記述することができる</h3>
<div>
これは書籍ではなく、この書籍で紹介されているOpenFlowフレームワークTremaそのものの特徴なのですが、Tremaではコントローラプレーンの内容をRubyで記述することができます。</div>
<div>
あらかじめ必要なクラスなどの定義をロードすることでDSLな記述でパケットのコントロールを記述できます!これはとても分かりやすくて心地良い!!!</div>
<div>
<br /></div>
<h3>
</h3>
<h3>
解説が分かりやすい!</h3>
<div>
解説がとても分かりやすいです。特に、ネットワークとソフトウェアの両方についてそれなりに素養のある技術者というのは限られてきますから、読者層を広げるためにはさまざまな試みが必要だったのだと思います。</div>
<div>
ソフトウェア技術者向けにはサポートセンターをメタファにしたスイッチの内部でのやりとりについての解説があったり、ネットワーク技術者向けにはRubyのワンポイント講座のような解説が設けてあります。</div>
<div>
日頃、よく中身を知らずに使っている機器でもTremaによる記述例があるので「MACアドレス学習型スイッチってこんなアルゴリズムで記述できるのか〜」とか勉強になりそうです。</div>
<div>
<br /></div>
<h3>
</h3>
<h3>
上級者にも対応!</h3>
<div>
この本、完全におかしいです。市販品のスイッチを買ってきてメーカー保証外のファームを焼きこみ、OpenFlowスイッチを作成する方法まで掲載されています!知らなかった!これはうれしい!!!</div>
<div>
なんといっても、自分で書いたOpenFlowの制御をシミュレーションするだけではなく、物理的なOpenFlow対応のデータプレーンを作成し、動かすことができるのですから。</div>
<div>
ほかにも、ケーススタディとしてOpenFlowがどのように応用されているかが記されていますので、OpenFlowがもつ可能性の一部をみることができます。</div>
<div>
<br />
<br /></div>
<h2>
まとめ</h2>
<div>
<a href="http://www.amazon.co.jp/gp/product/4774154652?ie=UTF8&tag=32ndsite-22&linkCode=shr&camp=1207&creative=8411&creativeASIN=4774154652&f_rd_m=AN1VRQENFRJN5&pf_rd_s=center-6&pf_rd_r=1G4KTCFBBG95MHFSN6WD&pf_rd_t=101&pf_rd_p=463376716&pf_rd_i=489986">OpenFlow実践入門</a>(<a href="https://github.com/yasuhito/trema-book">原稿</a>)を読んで、マニアックな挙動をするスイッチをTremaで作ろう!</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]4tag:blogger.com,1999:blog-8303445039619177705.post-42338662669175917832012-11-18T05:25:00.001+09:002012-11-18T06:00:31.151+09:00「ヱヴァンゲリヲン新劇場版:Q」を鑑賞した<br class="Apple-interchange-newline" />
で<a href="http://takano32.blogspot.com/2012/11/eva.html" itemprop="url" rel="bookmark" style="-webkit-transition: color 0.3s; color: #333333; outline: none; text-decoration: initial;">「ヱヴァンゲリヲン新劇場版:Q」を</a>みてきたわけだが。<br />
ネタバレについて書くかもしれないので各位注意で。<br />
<br />
<br />
<a name='more'></a>鑑賞し終わったとき、主人公に感情移入してしまって、普通に泣いてしまっていた。そんなときに次回予告するもんだから、あんまり内容が頭に入ってない、というより最後の次回タイトルですべてが吹っ飛んだ。<br />
<br />
音がでるものに触ったものなら誰しもが意味を知っている記号がついている。<br />
<br />
次回もすっきり終わらないことが予想される。<br />
<h2>
世界観について一言だけ</h2>
<div>
どっかの作品でこの監督はやらかすだろうなぁと思っていたが、これでやりましたか。</div>
<h2>
当たっていた予想</h2>
<div>
14年というタームが重要なものとして扱われている、ということなどを友だちなどと話していて、今回もそれが関係する可能性はあると踏んでいたが、重みつけすぎです。</div>
<div>
<br /></div>
<div>
ロンギヌスの槍、ちゃんと伏線回収しましたね。ああ、あと見事なまでに綾波は三人目っぽくなってますね。</div>
んー、まー。「ネルフ関係者の幽閉」についてゲンドウが大きく関わっていたというのはアタリといっていいのかなぁ、もはやどうでもいいですね、これ。あとは「果たして生きることを望む人々の物語は何処へ続くのか」についてのもう一回あるでしょっていうのは、次回作タイトルにでてる。<br />
<div>
<br /></div>
<div>
外れた予想がとにかく多い。</div>
<div>
マギに至ってはまったくでてこないし、次回に登場することも期待できない!</div>
<h2>
外れていた予想</h2>
<div>
まったくもって、式波アスカ・ラングレーのピンチなし。</div>
<div>
<br /></div>
<div>
世界観で外れた予想がかなり多い。</div>
<div>
使徒に関係する予想はもう世界観が壊してしまったので全部ハズレ。</div>
<div>
本部のバックアップとして松代があるはずなのにまったくもって登場しないのは納得がいかない。説明があってよい。</div>
<div>
<br /></div>
<div>
とにかく外した予想でショックだったのは量産型らしき話がひとつもなかったことですかね。よく考えると破の終盤の時点で量産型がQでは不要というフラグたってた、とも解釈できるので不覚。しかし、ダミープラグのシステムが基盤となって動いているということで、この伏線も回収したことになるのかな。</div>
<h2>
疑問とか不満</h2>
<div>
とりあえず、大きな疑問としては私立第三新東京中学校は特別な存在であったはずなので、あそこらの連中ふくめて今回の作品のとばっちりくらってたらウケる。サザエさんと同じ次元で笑える。</div>
<div>
<br /></div>
<div>
加持リョウジがまったくもって無視されているのも酷い話であった。死んだのはわかるよ。でもさ~、墓参りしてあげるシーンとかあったもよかったんじゃないの・・・入れようと思えば入れられたでしょ・・・</div>
<div>
<br /></div>
<div>
あとは金のはなし。NERVのときはきちんとゼーレがパトロンしてましたっていう筋書きでやってるのに、新しい組織について金の出処をまったく解説していないし、作品として不均一な形と感じざるを得ない。</div>
<h2>
ただ、ひとつだけ次回作について言えること</h2>
<div>
しっかし、次回の話でマギでてきたらやだな~。</div>
<div>
俺だったら死んでも保守したくないレガシーシステムだよ。</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]0tag:blogger.com,1999:blog-8303445039619177705.post-13813294658112085062012-11-17T09:24:00.001+09:002013-01-08T23:21:46.396+09:00「ヱヴァンゲリヲン新劇場版:Q」を予想する<h2>
新世紀エヴァンゲリオン新劇場版: Q をみるにあたって</h2>
先週に序と破をみるなどしたり、電子版のパンフレットを読みふけり、ダラダラと周囲のファンと語りあったりした。<br />
予習したわけですな。<br />
せっかく予習したことだし、ここはオタクらしく劇場に足を運ぶ前に内容の予想でもしてみようかなって思ったので、いまこれを書いてます。<br />
<br />
<a name='more'></a><br /><br />
<h2>
予想</h2>
<h3>
式波アスカ・ラングレーは凹る可能性が高そう</h3>
<div>
これ、超適当な予想っていうか、いままでの劇場版とかの傾向からの予想なんですが。最近、アスカの扱いかなりよくなりすぎなんじゃね。というわけで、そろそろバランスをとるためになんかありそう。</div>
<div>
とくに予告などでの扱いはアスカ中心の展開が多く、アスカ活躍するんだなーって期待するわけですけど、そののまま順当に活躍してはい!おしまい、では面白くないっていうか、ギャップがないわけですよ。</div>
<div>
なのでアスカはなんか噛まれる可能性が高そうな気がする。</div>
<div>
昔からのファンからすると「最後の最後はまた綾波かよ」ってなると思うんだが・・・あそこまでアスカびいきな予告とか作られるとねぇ・・・ちょっとアスカが心配ですよ。</div>
<div>
<h3>
予告から考察する</h3>
</div>
<div>
せっかくありがたいミサトさんのお言葉があるので、これに触れないわけにはいかないよなぁ。</div>
<div>
<blockquote>
レイとシンジを取り込んだまま凍結されるエヴァ初号機<br />
廃棄される要塞都市<br />
幽閉されるネルフ関係者<br />
ドグマへと投下されるエヴァ6号機<br />
胎動するエヴァ8号機とそのパイロット<br />
ついに集う、運命を仕組まれた子供達<br />
果たして生きることを望む人々の物語は何処へ続くのか<br />
次回 ヱヴァンゲリヲン新劇場版Q<br />
Quickening<br />
さぁ~て、この次もサービス、<br />
サービスゥ!</blockquote>
<h3>
レイとシンジを取り込んだまま凍結されるエヴァ初号機</h3>
一行目はそのままの意味だろ。たぶん、アニメでは零号機が侵食型の使徒におついめられたときに解除されているアレのはず。なんか条件があるとしたら、アニメではS2機関の捕食が凍結の条件でレイを救うことが解除の条件であったように思える。<br />
新劇場版ではレイを捕食した使徒を取り込むことで融合してしまっているが、間違いなくS2機関をふくめて捕食されているのだと感じられる。凍結の条件については破の終盤にあるシーンであり、Qの序盤での予告と捉えると事象としては自然ですね。<br />
凍結解除の条件については難しいな。何しろ、アニメではレイを助けるために凍結が解除されているようなシナリオになっているが、そのレイを劇場版ではS2機関とともに捕食ずみとなってる。<br />
そうなると、別にレイの救出が凍結の解除の条件ではなかったんではないか、って筋になりますよね。あのシーンで初号機の凍結が解除されてレイとは別に副次的に守られるもの、それについて考えればわかりそうなもんだが・・・なんかありましたっけ。自然に考えると侵食型の使徒について、侵食を食い止めたことで使徒の進化、ありかたを停止させたことが凍結の解除の条件になるのだろうか。だとすると、劇場版で精神を侵食するタイプの使徒が現れ、人とのコミュニケーションを望むような事態とその状況での凍結解除が予想できる。<br />
なんか一行目について軽く書くつもりがだらだらと長くなった。まとめよう。<br />
<br />
<ul>
<li>レイとシンジは関係なく、S2機関を取り込んだので凍結された</li>
<li>凍結解除の条件はレイとは関係ない</li>
<li>心に入り込もうとする使徒が現れたときに初号機が動く</li>
</ul>
<div>
こんなところかな。</div>
<h3>
廃棄される要塞都市・幽閉されるネルフ関係者</h3>
<div>
まあ、適当な分け方なんだけど、このふたつの予告はひとつの扱いでいいんではないかと思っている。</div>
<div>
アニメではそろそろヒト対ヒトの対決がされる時期なので、幽閉する組織などが動いてもいい頃合いなのでは、というような予想しかできない。</div>
<div>
廃棄される要塞都市は第3新東京市の廃棄ってことだと思うんだけれど、これがイマイチよくわからんのよね。劇場版だと松代の方って使ってないからそっち使うようになるのかなぁ。あれ、松代の方を使うようになった理由ってなんだっけ。マヤがなんだか使いにくい、みたいなことを言ってたことしか思い出せないな・・・<br />
<br />
考えてはみたものの、よくよく考えるとネルフ関係者が幽閉されるんしょ?ってことは松城は今回は出番なしかもな。要塞都市の廃棄についてはゲンドウがいろいろと条件を握っていそうではある。本部やセントラル・ドグマ、サード・インパクトについて詳しく、実権があるのがゲンドウくらいなもんだからなぁ。<br />
<h3>
ドグマへと投下されるエヴァ6号機</h3>
</div>
</div>
<div>
素直に考えるとアニメの2号機に相当するヤツですね。</div>
<div>
カヲルくんと一緒に降りていくんではないですかね。そのとき、アニメでは初号機がいたわけだけど、今回は凍結とある。</div>
<div>
ここらへん、どうなるのかちょっと興味深い。もしかしたら、弐号機と衝突することになるのかな、くらいに考えてる。</div>
<div>
しかし、マミっちゃうシーンはシンジがやるはずなんだよな。そう考えると、この時期には初号機の凍結が解除されていて、再び衝突、という流れにも期待できる。</div>
<div>
なんにせよ、投下と、その空中戦がみれそう。</div>
<h3>
胎動するエヴァ8号機とそのパイロット</h3>
<div>
これはほぼ真希波・マリ・イラストリアスの8号機ってことなんだとは思うんだよな。その理由については次で。</div>
<div>
ただ、胎動するという表現が気になってしょうがない。「胎動」・・・新しいパイロットの登場を予感させるが、そうなると三人目のレイだろうか。しかし、公にレイは量産できまーすってなっちゃう展開になるのでそれはないような気がするんだよなぁ。</div>
<h3>
ついに集う、運命を仕組まれた子供達</h3>
<div>
これ。アニメではトウジがパイロットになっているけれど、新劇場版ではパイロットになっていない。</div>
<div>
かわりに、といって問題ないのかわからないが「真希波・マリ・イラストリアス」がエヴァンゲリオンに搭乗してる。</div>
<div>
あとは、まぁ、カヲルくんいらっしゃい、くらいの意味しかとれないな。</div>
<h3>
果たして生きることを望む人々の物語は何処へ続くのか</h3>
<div>
新劇場版が二週目だとしたら、三週目。ちょっと入るんじゃないかな。</div>
<h2>
アニメとの対応から予想</h2>
<div>
なにしろ出ている情報が上の予告くらいのもので、あとはアニメのストーリーで必要となった条件などが異なるタイミングで満足されているというくらいのもの。これをみていくしかない。</div>
<h3>
量産型の登場</h3>
<div>
量産型エヴァンゲリオンはかなりのインパクトがあったものの、いまだ劇場版では未登場である。そういうわけで、こいつらそろそろでてくるんじゃないの、っていう気がしている。</div>
<div>
破できちんとダミープラグのシステムも完成されつつあることを示している。</div>
<div>
しっかし、やっかいなことに登場するとしたら目的がわからない。アニメのほうでは弐号機と衝突したわけだが、このイベントは新劇場版では参号機の起動実験のときに満足されていると認識してる。</div>
<div>
だとすると、8号機との衝突になるのだろうか。わからない。</div>
<h3>
マギの活躍、あるいはピンチ</h3>
<div>
新劇場版、いままでマギがぜんぜん登場してない!のでくるのではなかろうか。</div>
<div>
オゾンで弱まるような侵食型の使徒に襲われたっていうエピソードも飛ばしたのかなんなのかわからん。物語的にはコアのシステムで、マギを死守するストーリーなんだから、十分に登場さてもよいピースだと思うんだが、まったくそのシーンがない。っていうか、ちょっとくらいリツコさん活躍させてもいいんじゃないの。</div>
<h2>
まとめ</h2>
<div>
登場してない重要物が多すぎてどうなるのかわからん。</div>
<div>
ロンギヌスの槍もいまんところ無視して進んでるし、アダムが登場してカジがちょっとヒヤッとなるようなエピソードはぜんぶすっ飛ばしてる。</div>
<div>
<br /></div>
<div>
とにかく伏線がありすぎるのだが、新劇場版ではケロっとなかったことになるのか、そこらへんキチッと辻褄をあわせてくるのかは気になりますね。</div>
<div>
<br /></div>
<div>
ぼくはもう、これは伏線はりすぎで崩壊パターンだと思ってますね。監督がやりたい放題やっておしまい。ファンはいろいろと考察する、その繰り返しでおしまいなんではないでしょうかね。</div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]1tag:blogger.com,1999:blog-8303445039619177705.post-54776933318752629832012-09-17T00:08:00.001+09:002012-09-17T02:17:23.506+09:00いまだからこそ、もう一度みよう。「ぼくらの七日間戦争」を。<h2>
もう一度みた「ぼくらの七日間戦争」</h2>
<div>
たまたま動画配信コンテンツの一覧から「<a href="http://ja.wikipedia.org/wiki/%E3%81%BC%E3%81%8F%E3%82%89%E3%81%AE%E4%B8%83%E6%97%A5%E9%96%93%E6%88%A6%E4%BA%89">ぼくらの七日間戦争</a>」というタイトルをみかける機会があり、そのまましばらくそのタイトルをみて考えにふけった。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.kadokawa-pictures.jp/photo/sevendayswar/bokurano7kakan.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="155" src="http://www.kadokawa-pictures.jp/photo/sevendayswar/bokurano7kakan.jpg" width="320" /></a></div>
<div>
<a name='more'></a><br /></div>
<div>
ぼくは「ぼくらの七日間戦争」については映画での上映が終わり、地上波で放送した機会にみたことをよく覚えている。しかし、当時は芸能などにまったく興味がなく、帰宅すれば外で遊び、外での遊びから帰宅すればゲームに夢中という小学生だったことを覚えている。</div>
<div>
ぼくが小学生だったころについての話をすると、とにかく芸能にうとく、小学生ということもあってか、女性というものにまったく魅力を感じていなかった。むしろ、周囲が女性という存在、あるいはその恋愛の話について盛り上がっているのを冷静に傍観してしまっていた。そのためか、芸能関係についてもあまり興味はなく、よく困った質問が「タレントで例えると誰が好み?」という質問だったことが鮮明に思い出される。</div>
<div>
要するにまったく芸能については聞かれても困るというレベルで「ぼくらの七日間戦争」のような、当時の話題のキャストによる映画が地上波で放送され、タダで鑑賞できると言われても、姉につきあわされて断片的にみた記憶しかない。</div>
<div>
生まれつきストーリーを記憶する能力が弱く、何かを読んでもすぐ忘れていたというのもあるし、自分に対してインパクトがある事象についての記憶は強いのだが、他人のことについては興味が薄かったのである。「ぼくらの七日間戦争」についても例外ではない。鑑賞した記憶は鮮明にあるが、すべてを通して鑑賞した記憶はない。すぐに飽きてしまい、当時の自身が関心のあることに取り組むために自室に籠もったのではないかと思う。「名作と言われており、普通は喜んでみる作品なんだろうが飽きた」という自身へのインパクトが主となり、鑑賞した記憶は鮮明だが内容はさっぱりわからないという事態になっているのだろう、と今となっては振り返ることができる。</div>
<div>
閑話休題。映画の話をしよう。調べてみたところ映画での放映は1988年であり、当時のぼくは小学生だったらしい。地上波で放送されるころの時期には中学生になっていたかもしれない。<br />
<br />
<br /></div>
<h3>
繰り返す歴史</h3>
なぜ「いま」「もう一度みよう」なのかについて説明したい。それは繰り返す歴史を痛感することができるからである。この物語では社会の矛盾として中学校を舞台にしているが、その取り巻きの発言が恐ろしいほどに日本社会における教育についての議論の方法論に変化がないことを裏付けていると言ってよい。<br />
戦争の早期、つまり籠城の時期に、生徒の保護者は突然の息子や娘の行方不明に不安になる。そして、学校に押し寄せている。ここでの保護者と学校側がやりとりするシーンがまさに「日本社会における教育についての議論の無変化」そのものである。<br />
保護者は「学校側の教育に何か問題があり、このようなことが起こったに違いない。」という旨を主張し、教員側は「学校での教育は完全なものであり、保護者が家庭でのしつけを怠っている」と主張する。これは果たして「当時」と「現在」で何か相違するものがあるのだろうか。<br />
前段で「現在」と「当時」において類似性をみてとったわけだが、考察を少し深めると、「当時」と「当時からの過去」についての類似性をみてとることもできる。<br />
映画での放映時期の後、自分が通った中学校では、受験を意識した教育というものはなされており、劇中にあったような重い体罰などは観測されなかったものの、体罰はやはりあった。「そういう時代だった」 −−− その一言で済まされる問題であるのか、そうでないのかという議論はここではしないが、明確な事実として軽い体罰はあったし、受験を意識した教育、あるいはいじめ社会(首謀者がコミュニティ形成するため、ぼくには観測できても止める勇気はなかった)に鬱屈としたものをもっていたような生徒も散見された。表現に誇張はあったものの、それぞれが抱える心情や時代背景におけるシチュエーションとしてそれほど矛盾は感じられない。<br />
それをふまえて考えてみるとスタッフの年齢層からして学生運動を当時の価値観で「現代化」した作品だと思えてくる。実際、終盤ではまさにそのような闘争めいたものを感じさせるシーンが登場している。これが「当時」と「当時からの過去」についての類似性である。<br />
学べることは、人というものはたいして本質が変わらないということだろうか。とにかくこれに尽きる。鑑賞する機会のある方は再帰的に繰り返されるとも思われる歴史の輪廻を体感してほしい。そして、また忘れたころに再会してみたいと思わずにはいられない作品となった。<br />
<br />
<br />
<h3>
雑感</h3>
<div>
レビューらしいものはここまでであり、以下は雑感となる。</div>
<h4>
宮沢りえ</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://stat.ameba.jp/user_images/20110718/15/meisousha/5c/a1/j/o0480033211357774667.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="http://stat.ameba.jp/user_images/20110718/15/meisousha/5c/a1/j/o0480033211357774667.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
ぼくはポニーテールが好きです。大好きです。そして、主演はポニーテール姿の宮沢りえです。ちょうどこの長さが実にいいんです。女性の方で「あの」ポニーテールと同じ長さの方にお会いする機会もちょくちょくあるんですが「外見は女性らしさを気にとめつつも、自身の中に太い芯が通っていて話していて心地よい。しかも、面倒見が良い。」というポニーテールの長さなんです!</div>
<div>
「現在」の宮沢りえはぼくからすれば、姉という年齢でとても気軽に叱ってくれそうな年齢差のはずが「当時」の宮沢りえはポニーテールの中学生で、上記の性格だといいなぁということを想像してしまい、えも言われぬ幸福感に満たされますね。さらには学級委員という設定がよい。ぼくもこの立場にはよく立ったものなので、各シーンでの感情面におけるシンクロ率がおそろしく高い。全体的に宮沢りえが演じる「中山さん」に神経を移入してしまった。</div>
<div>
ついでなので、<strike>気持ち悪い話</strike>生徒の当時の髪型や服装についてをここにまとめておく。劇中では当時の宮沢りえの体操服姿をみることができ、下は当然旧式のブルマーであり、もはや完全武装である。これで夏を舞台にしていることにつけ込み、水着のシーンでもあればマニアはさらに垂涎したことだろう。他、時代的にポニーテールが流行っている時期であり、モブキャラでも強気ポニーテールというど真ん中ストライクな出演がみられるので、ポニーテールファンはそこらへんについても注目して鑑賞してされたい。</div>
<h4>
スカート丈</h4>
<div>
劇中のシーンでは校則の厳しさを表現するために、定規でスカート丈を測っているシーンがある。このシーンがまた時代を感じさせる。当然のことのように下から30cm ± 2cmという基準で規則を設けており、当時の価値観として品行方正がよろしくない女生徒においてはスカート丈を「長くする」のが普通であったということを懐かしめた。</div>
<div>
参考としては<a href="http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%B1%E3%83%90%E3%83%B3%E5%88%91%E4%BA%8B#.E5.AE.9F.E5.86.99.E5.8C.96.E4.BD.9C.E5.93.81">スケバン刑事</a>の斉藤由貴などの服装を参考にされるとよい。</div>
<h4>
青葉区</h4>
<div>
作者によれば<a href="http://ja.wikipedia.org/wiki/%E3%81%BC%E3%81%8F%E3%82%89%E3%81%AE%E4%B8%83%E6%97%A5%E9%96%93%E6%88%A6%E4%BA%89">モデルとなったのは宮城県仙台市青葉区らしい</a>が、実際には生徒と警察が闘争するシーンで千葉県警のパトカーらしきものが到着している。これは制作の都合、撮影のロケーションが千葉県だったのだろうな、と感じた。<br />
<h4>
不明な処罰</h4>
<div>
散々あれだけのことをして、戦争といってもおかしくない事態になっています。劇中では最後に大勝利のジャンプをして終了ですが、彼ら、彼女らはあのあとどのような罰を与えられ、どれほどの苦しみをともなったのでしょうか。想像すると少し残酷ささえも感じてしまいます。あまり考えないことにしましょう。</div>
<br />
<br /></div>
<h2>
Huluで鑑賞しました</h2>
Hulu というサービスが Apple TV をサポートしはじめてます。<br />
Huluというのは海外で成功している動画配信サービスで、Huluで配信されているコンテンツならば、月極の固定料金で好きな時間に閲覧できるというサービスです。<br />
Apple TV がいよいよ便利になってきたので過去の名作をたまにみようと思っていますが、ここまでのレビューを書くことはないと思います。なにしろ、今回の鑑賞は相当な感動でしたから。takano32http://www.blogger.com/profile/02746905575832178114[email protected]1tag:blogger.com,1999:blog-8303445039619177705.post-65855799066610791192012-08-21T09:34:00.003+09:002012-08-21T09:40:57.939+09:00Factor 0.95がリリース、@keitahaga も個人のコミッターとして掲載されています。<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXDSSMBFZ5xKJUl7Vvk1jK0AuAsadewxqjOA00ckhMaLpshPirS7xNjOfY799Ugcs-hsMCL_ZaKz8c8AI2gtG5c0btoTUemqDO2GRRo4Vvs8o_708RrMPT3CtIsDiwqvfSVhyCSpXAJeQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2012-08-21+9.32.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXDSSMBFZ5xKJUl7Vvk1jK0AuAsadewxqjOA00ckhMaLpshPirS7xNjOfY799Ugcs-hsMCL_ZaKz8c8AI2gtG5c0btoTUemqDO2GRRo4Vvs8o_708RrMPT3CtIsDiwqvfSVhyCSpXAJeQ/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2012-08-21+9.32.23.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: right;">
<a href="http://re-factor.blogspot.jp/2012/08/factor-095-now-available.html">Factor 0.95 now available</a></div>
takano32http://www.blogger.com/profile/02746905575832178114[email protected]1