cloned.log https://cloned.hatenablog.com/ Wed, 08 Jan 2020 00:26:16 +0900 http://blogs.law.harvard.edu/tech/rss Hatena::Blog DEATH STRANDINGをクリアした感想 https://cloned.hatenablog.com/entry/2020/01/08/002616 <p>DEATH STRANDINGをクリアした。The Witcher 3以来の心に残るゲームだったので感想を書く。</p> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/B07ZD1XDKJ/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51UFfUEyW3L._SL160_.jpg" class="hatena-asin-detail-image" alt="【PS4】DEATH STRANDING" title="【PS4】DEATH STRANDING"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/B07ZD1XDKJ/clonedlog-22/">【PS4】DEATH STRANDING</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/" class="keyword"></a></li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A5%CB%A1%BC%A1%A6%A5%A4%A5%F3%A5%BF%A5%E9%A5%AF%A5%C6%A5%A3%A5%D6%A5%A8%A5%F3%A5%BF%A5%C6%A5%A4%A5%F3%A5%E1%A5%F3%A5%C8">ソニー・インタラクティブエンタテインメント</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2019/11/08</li><li><span class="hatena-asin-detail-label">メディア:</span> Video Game</li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>ゲームプレイを始めた当初はクリアまで到達しなさそうに思えた。元々告知されていた有名俳優が全て何かしらの形で早々に登場してしまい世界観の狭さを感じてしまったのと、ゲームプレイのコアが「物を配達すること」の繰り返しだと感じたから。僕はいわゆる「お使いク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ト」がとても嫌いなのでやや失望した。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%AE%C5%E7%B4%C6%C6%C4">小島監督</a>の作品でなければ早々に辞めていたかもしれないけれど、そんな単調で面白くないゲームであるはずがないと思ってプレイを進めた。そしたら全然違った。</p> <h2>繋がり</h2> <p>最初にこのゲームの見え方が変わったのは建設ができるようになったとき。オンラインの繋がりを明確に感じるようになった。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%AE%C5%E7%B4%C6%C6%C4">小島監督</a>自身が <a href="https://twitter.com/hashtag/%E3%83%87%E3%82%B9%E3%82%B9%E3%83%88%E3%81%A7%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8C">#デスストでつながれ</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%B7%A5%E5%A5%BF%A5%B0">ハッシュタグ</a>をつけてよくツイートしているけれど、まさに繋がった。他人が置いたものを活用し、自分が置いたものは活用される。一切のデメリットがなく完全な協力関係にあるオンライン。自分のゲームプレイのためなのに「誰かが使うかも」と考えるようになる。無意識に繋がりを意識する。</p> <h2>配達の意義</h2> <p>お使いク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トと心配していた配達はプレイを進めていくとその意義が明確になり、これこそが自分の仕事だと認識するようになった。もはや配達ク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トではなくストーリーを支える根幹作業。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%D9%A5%EB%A5%C7%A5%B6%A5%A4%A5%F3">レベルデザイン</a>が素晴らしいこともあり、まんまと配達員になってしまった。</p> <h2>SF?ミステリー?あるいは詩?</h2> <p>一見するとSFなストーリーだけど体感としてはミステリー小説に近かった。大量の謎が徐々に解明され、解明されたと思ったら実は違って、もっと本質的な真相があり、といった展開が魅力的だった。でも振り返ってみると詩に感じる。全ての言葉に意味が込められて作られた世界だったことに気付く。クリア前とクリア後でここまで印象が変わるストーリーも珍しいと思う。</p> <h2>ちょっと辛いと思ったこと</h2> <p>ノーマンの疲れ顔が辛いし配達体験がリアルすぎるので「なんでゲームで仕事してるんだろ」って本気で思った。BTに襲われるのが辛すぎた。なんとか工夫してやろう、とは思えずひたすら苦痛だった。辛かったので難易度をeasyに落とした。操作が難しかった。クリア寸前でやっと慣れた感じ。</p> <h2>クリア後</h2> <p>クリアは達成感よりも、自分がプレイしていたあれはなんだったのか、と思いふけることになった。ストーリーの序盤から記憶を辿ってあれはこうだったのかと頭の中でパーツを埋めていく。心に残る不思議なゲーム。</p> Wed, 08 Jan 2020 00:26:16 +0900 hatenablog://entry/26006613494647396 「正義の教室」を読んだ https://cloned.hatenablog.com/entry/2019/07/11/235212 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4478102570/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/513RcGx%2BTLL._SL160_.jpg" class="hatena-asin-detail-image" alt="正義の教室 善く生きるための哲学入門" title="正義の教室 善く生きるための哲学入門"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4478102570/clonedlog-22/">正義の教室 善く生きるための哲学入門</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 飲茶</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C0%A5%A4%A5%E4%A5%E2%A5%F3%A5%C9%BC%D2">ダイヤモンド社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2019/06/20</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4478102570/clonedlog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>飲茶著の本を連続で4冊読んだ後にちょうど新刊が発表されていた。もちろん買って読んだ。この本はアマゾンのランキングにも入っているし売れているみたい。</p> <p>小説なんだけど登場人物は数人で舞台のほとんどが学校の教室というとても小さな世界。でもそこで語られる話は人類が数千年かけても結論を出せずに悩み続けていること。</p> <p>SAWというスリラー?映画があるけれどあれの第1作目は1つの部屋だけで話が終始して登場人物も非常に少ない低予算映画だったにも関わらず、話の展開や演出が完璧で観終わった後はしばらく呆然とした。この本も読み終えた後は同じような感覚になった。</p> <p>善悪に関する価値観を提示するストーリーはよくあるけれど、天才的な哲学者たちが考え抜いた話を土台に展開する本書は一線を画する超良書。大変おすすめの一冊。</p> Thu, 11 Jul 2019 23:52:12 +0900 hatenablog://entry/17680117127216906081 「史上最強の哲学入門」を読んだ https://cloned.hatenablog.com/entry/2019/05/18/223627 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4309414133/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51VA53ClV%2BL._SL160_.jpg" class="hatena-asin-detail-image" alt="史上最強の哲学入門 (河出文庫)" title="史上最強の哲学入門 (河出文庫)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4309414133/clonedlog-22/">史上最強の哲学入門 (河出文庫)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 飲茶</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%CF%BD%D0%BD%F1%CB%BC%BF%B7%BC%D2">河出書房新社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2015/11/05</li><li><span class="hatena-asin-detail-label">メディア:</span> 文庫</li><li><a href="http://d.hatena.ne.jp/asin/4309414133/clonedlog-22" target="_blank">この商品を含むブログ (2件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div> <div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4309414818/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51POm1k3WHL._SL160_.jpg" class="hatena-asin-detail-image" alt="史上最強の哲学入門 東洋の哲人たち (河出文庫 や 33-2)" title="史上最強の哲学入門 東洋の哲人たち (河出文庫 や 33-2)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4309414818/clonedlog-22/">史上最強の哲学入門 東洋の哲人たち (河出文庫 や 33-2)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 飲茶</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%CF%BD%D0%BD%F1%CB%BC%BF%B7%BC%D2">河出書房新社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2016/10/05</li><li><span class="hatena-asin-detail-label">メディア:</span> 文庫</li><li><a href="http://d.hatena.ne.jp/asin/4309414818/clonedlog-22" target="_blank">この商品を含むブログ (2件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>先日読んだ「<a href="http://d.hatena.ne.jp/asin/4576170465/clonedlog-22">哲学的な何か、あと科学とか (二見文庫)</a>」と「<a href="http://d.hatena.ne.jp/asin/4576180150/clonedlog-22">哲学的な何か、あと数学とか (二見文庫)</a>」と同じ著者。赤い表紙が西洋哲学者で、青は東洋哲学者。</p> <p>作風はどちらも同じで、ある時代で超偉大な哲学者の論を時代背景を交えて解説した後、次世代の哲学者がダメ出しして新しい論を打ち出し、そしてさらなる次世代の哲学者が…という流れ。</p> <p>時系列ではあるけれど突然数百年飛ぶこともあるし歴史としてみると大雑把だけど、うまく前世代と次世代の論を比較しているのですごく面白い。</p> <p>2冊とも作風は同じだけど読み応えはだいぶ違う。西洋哲学は論理構築の歴史といった感じでひたすらどうすれば真実と言えるか探求が続く感じだけど、東洋哲学は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%E6%B9%F1%C5%AF%B3%D8">中国哲学</a>(思想?)と仏教が主な内容で、深く内容を追いかける感じだった。</p> <p>全体を通して最も良かったのは仏教の部分。ちゃんと釈迦の時代、というより釈迦以前のインドから始まっているし、悟りは体験によってしか起き得ないということをびっくりするくらい丁寧にあの手この手で説明している。知識だけでは悟りにならないこと自体は知っていたのだけど、なるほどこう説明するのかわかりやすい!と頷きながら読んでいた。</p> <p>哲学、というとポエムっぽいというか浮世離れというか思想的というかそいういうイメージも世間一般にはありそうだけど、哲学がいかにガチ論理であるかをわかりやすく伝えていると思う。最高。特に西洋哲学は勉強不足で知らないことも多かったのでまた読み返すと思う。</p> Sat, 18 May 2019 22:36:27 +0900 hatenablog://entry/17680117127143731369 「哲学的な何か、あと科学とか」を読んだ https://cloned.hatenablog.com/entry/2019/05/03/220142 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07K8FHVBX/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/41KTsDErHrL._SL160_.jpg" class="hatena-asin-detail-image" alt="哲学的な何か、あと科学とか (二見文庫)" title="哲学的な何か、あと科学とか (二見文庫)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07K8FHVBX/clonedlog-22/">哲学的な何か、あと科学とか (二見文庫)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 飲茶</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> 二見書房</li><li><span class="hatena-asin-detail-label">発売日:</span> 2018/12/01</li><li><span class="hatena-asin-detail-label">メディア:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle">Kindle</a>版</li><li><a href="http://d.hatena.ne.jp/asin/B07K8FHVBX/clonedlog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p><a href="https://cloned.hatenablog.com/entry/2019/04/30/233146">&#x300C;&#x54F2;&#x5B66;&#x7684;&#x306A;&#x4F55;&#x304B;&#x3001;&#x3042;&#x3068;&#x6570;&#x5B66;&#x3068;&#x304B;&#x300D;&#x3092;&#x8AAD;&#x3093;&#x3060; - cloned.log</a> に続いて読んだ。この「哲学的な何か、あと科学とか」の方が哲学と科学のバランスが良くタイトルによく馴染む感じになっている。前回読んだ「哲学的な何か、あと数学とか」は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A7%A5%EB%A5%DE%A1%BC%A4%CE%BA%C7%BD%AA%C4%EA%CD%FD">フェルマーの最終定理</a>にまつわる数学と数学者に交えて哲学、という感じで、やや哲学がサブな感じになっている。書籍の時系列としても「科学とか」が先で「数学とか」が後みたい。</p> <p>どちらの書籍にも言えるけれど、とにかく文章が読みやすいしわかりやすい。実際の哲学や科学の話なのに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%F3%A5%BF%A5%B8%A1%BC%BE%AE%C0%E2">ファンタジー小説</a>の一部であるかのような面白さがあった。</p> <p>特に良かったのは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%CC%BB%D2%CE%CF%B3%D8">量子力学</a>の章。2重スリット実験を十二分に解説した上で(その理解を助ける波動と粒子の話が前段にある)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DA%A5%F3%A5%CF%A1%BC%A5%B2%A5%F3%B2%F2%BC%E1">コペンハーゲン解釈</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%E5%A5%EC%A5%C7%A5%A3%A5%F3%A5%AC%A1%BC%A4%CE%C7%AD">シュレディンガーの猫</a>を繋げていく説明はお見事。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%E5%A5%EC%A5%C7%A5%A3%A5%F3%A5%AC%A1%BC%A4%CE%C7%AD">シュレディンガーの猫</a>はその話自体は超有名だけど、どうしてこれが解決困難な思考実験であるかということがよくわかる説明になっていた。</p> <p>2冊とも良かったけれど特にこの「哲学的な何か、あと科学とか」は良かった。</p> Fri, 03 May 2019 22:01:42 +0900 hatenablog://entry/17680117127107978788 「哲学的な何か、あと数学とか」を読んだ https://cloned.hatenablog.com/entry/2019/04/30/233146 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576180150/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51uAKOHGv6L._SL160_.jpg" class="hatena-asin-detail-image" alt="哲学的な何か、あと数学とか (二見文庫)" title="哲学的な何か、あと数学とか (二見文庫)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576180150/clonedlog-22/">哲学的な何か、あと数学とか (二見文庫)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 飲茶</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> 二見書房</li><li><span class="hatena-asin-detail-label">発売日:</span> 2018/02/01</li><li><span class="hatena-asin-detail-label">メディア:</span> 文庫</li><li><a href="http://d.hatena.ne.jp/asin/4576180150/clonedlog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A7%A5%EB%A5%DE%A1%BC%A4%CE%BA%C7%BD%AA%C4%EA%CD%FD">フェルマーの最終定理</a>をテーマに歴代の数学者による情熱的な戦いを描いた本。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A7%A5%EB%A5%DE%A1%BC%A4%CE%BA%C7%BD%AA%C4%EA%CD%FD">フェルマーの最終定理</a>については<a href="https://cloned.hatenablog.com/entry/20070311">12年前にサイモン・シンの本を読んでおり</a>大体の知識があったけれど、忘れていることも多かったし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%A4%A5%E2%A5%F3%A1%A6%A5%B7%A5%F3">サイモン・シン</a>の本とは文体や視点がかなり異なるので新鮮に楽しむことができた。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A1%BC%A5%B2%A1%BC%A5%E0%A1%A6%A5%CE%A1%BC%A5%E9%A5%A4%A5%D5">ノーゲーム・ノーライフ</a>の著者 榎宮先生の絶賛を見て買ったら当然の大当たり。</p> <p><blockquote class="twitter-tweet" data-lang="HASH(0xed3fbe8)"><p lang="ja" dir="ltr">まあ、このラインナップはね……榎宮史上トップやしね( <a href="https://t.co/AzIYeBYLhv">https://t.co/AzIYeBYLhv</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%DD%B5%DC%CD%B4">榎宮祐</a>🎮帰国📖🍿 (@yuukamiya68) <a href="https://twitter.com/yuukamiya68/status/1119691858521804800?ref_src=twsrc%5Etfw">April 20, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p>僕たちは(特に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%E9%C5%F9%B6%B5%B0%E9">初等教育</a>で)数学を計算ツールとして教わるけれど、解を求めるのは数学の一部でしかなくて、むしろ式が成り立つことを考えるのが数学だろうし、そういう視点を持ったこの本は数学嫌いをマシにする一歩に感じる。</p> Tue, 30 Apr 2019 23:31:46 +0900 hatenablog://entry/17680117127096692722 「データの見えざる手」を読んだ https://cloned.hatenablog.com/entry/2019/02/09/115105 <p>結構前に買って第1章までは読んでいたのだけど、その後そのままになっていた。最近<a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle">Kindle</a>を<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>のスピーチに読ませることで本を読む(聞く)時間が取れるようになったので第2章から最後まで一気に読んだ。</p> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4794220685/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51zDXADCZIL._SL160_.jpg" class="hatena-asin-detail-image" alt="データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則" title="データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4794220685/clonedlog-22/">データの見えざる手: ウエアラブルセンサが明かす人間・組織・社会の法則</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 矢野和男</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%F0%BB%D7%BC%D2">草思社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/07/17</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4794220685/clonedlog-22" target="_blank">この商品を含むブログ (24件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>本のタイトルだけ見ても何の本かわかりにくいけれど、センサで人間を細かく測定したデータから人間の心や行動を判定し、どのような行動が業績に影響を与えるか、さらにはどのような施策を打つべきかAIに示させるといった内容になっている。</p> <h3>具体的で応用的な内容が素晴らしい</h3> <p>ただの仮説や理論の提示ではなく、著者らが実験してきた内容が具体的に記されているので読み応えがある。考察も十分あり単なる事例紹介にとどまらない。</p> <p>前半は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A7%A5%A2%A5%E9%A5%D6%A5%EB">ウェアラブル</a>センサでどのような測定ができて何がわかるのか解説されている。どの人と会話したかといった粒度のものから会話中に(物理的に)よく動いているかといった細かな人間行動まで、粒の大きさが異なる様々なデータから人間の行動を解き明かしていくのが面白かったし、最終的にAIにより導かれた施策で効果を出すところにも未来を感じる(実際には現在起きていることだけれど)。</p> <p>コンピューター将棋のように人間だとまず考えつかないような施策で普通に考えると全く効果が期待できなさそうなのにきっちり効果があったところもいかにもAIらしい。どういう施策だったのかはぜひ本を読んでもらえればと思う。</p> <h3>文章として読みづらいところもあった</h3> <p>一方で読みづらいと感じるところもいくつかあった。一つは説明の重複が多いこと。言葉を変えてわかりやすく説明しているのだと思うけれど、何度も似通った説明を聞いている感じになり話が進まないと感じることが度々あった。</p> <p>次に細かい脱線が多かった。著名な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%D0%B1%C4%B3%D8">経営学</a>、経済学者、物理学者などの主張がデータからも正しいと考えられるという説明がたくさん入るけれど、これが分脈を切ってしまい読みにくかった。また日本の現状はこれが原因ではないかといったかなりスケールの大きい推測が断定に近い口調で入ったりするのもやや読むのに障壁だった。著者にとっては確信があるのかもしれないけれど本書の説明内容だけでは言い過ぎに感じる。</p> <p>著者が考える過去と未来については章を分けて書いてある方が良かったように思う。</p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C3%A5%B0%A5%C7%A1%BC%A5%BF">ビッグデータ</a>の応用事例として欠かせない一冊</h3> <p>とはいえ、やはり内容は良かった。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C3%A5%B0%A5%C7%A1%BC%A5%BF">ビッグデータ</a>があって<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A1%BC%A5%D7%A5%E9%A1%BC%A5%CB%A5%F3%A5%B0">ディープラーニング</a>のような手法があってもそれを使って解析するのは結局データサイエンティストによる人力、という状況を変える試みについて良い学びを得たと思う。</p> Sat, 09 Feb 2019 11:51:05 +0900 hatenablog://entry/98012380862396540 FACTFULNESSを読んだ https://cloned.hatenablog.com/entry/2019/02/03/222310 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822289605/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51o95aW415L._SL160_.jpg" class="hatena-asin-detail-image" alt="FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣" title="FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822289605/clonedlog-22/">FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> ハンス・ロスリング,オーラ・ロスリング,アンナ・ロスリング・ロンランド,上杉周作,関美和</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%B7%D0BP">日経BP</a>社</li><li><span class="hatena-asin-detail-label">発売日:</span> 2019/01/11</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4822289605/clonedlog-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle">Kindle</a>でページがNo.5237までと表示されていたのにNo.3974に「おわりに」が登場して不意打ちを受けたように読み終えてしまった。最後に付録がたくさんあるからだけど、No.5237まで文章が続いていたとしてもすぐに読み切ったと思う。</p> <p>読み終えたら感想を書こうと思っていたけれど、読み終えてみるとどこかの文章をつまみ出して感想を書く気はなってしまった。自分なりに要約したり良かったところを紹介したりはできると思うけれど、この本には必要ないと思う。将来の自分がこの本はどんな内容だったかなと思ったらまた最初から読み直せばいいと思う。</p> <p>よく編集されており読みやすく重複もないスッキリした本だった。日本語訳も良かった。読み終えた後にハンスのTEDの映像を観てみたけど、日本語訳はハンスの人柄を捉えた語調をうまく選んでいると思うし、英語の原著を無料で読める数ページ見てみたけど違和感はなかった。</p> <p>世界で起きていることを偏見なく認識するために。素晴らしい一冊。</p> Sun, 03 Feb 2019 22:23:10 +0900 hatenablog://entry/98012380856838747 他人がすぐに気付く問題を先に自分で気付くための方法 https://cloned.hatenablog.com/entry/2019/01/06/222917 <p>よく考えたコードや設計であっても他人が見るとすぐに問題が見つかることがある。知識差が原因のこともあるけれど他人だからこそ気付けたという場合も多い。</p> <p>これは客観的に見ると気付く、というよりも視点を変えると見え方が変わる(よって問題に気付く)ということだと思う。他人は自分と少なからず違う視点(思考)になるので手っ取り早いというだけ。自分の視点を変えられれば問題に気付きやすくなる。</p> <p>僕が普段無自覚にやっている方法を整理すると次の2つをやっているみたいだった。</p> <h3>ロール(役割・役職)を変えて考える</h3> <p>プログラムの設計やコーディングは基本的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE%A1%BC">プログラマー</a>として作業してしまう。例えばDBAになりきるとプログラム上は楽でもパフォーマンスなどで問題のある部分が見えてくるし、仕様を考えた人になりきるとプログラムの都合で元の仕様設計の意図を歪曲したり複雑化していないかが見えてくる。インフラエンジニアになりきると本番デプロイ時に問題になることなどが見えてくる。</p> <p>こうやって違うロールになりきって考えると結構色々問題が見えてくる。ただ経験したこともないロールになりきるのは無理があり(単に机上の空論となる)経験に左右されるから、色々なことをやってみるのは大切だと改めて思う。</p> <h3>脳内の一時メモリをリセットする</h3> <p>これは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%A4%A5%D5%A5%CF%A5%C3%A5%AF">ライフハック</a>的に言われてることだと思うけど、今やっている作業状態を一旦忘れてから再度考えることで強制的に違う視点にする方法がある。お風呂に入る、散歩する、一晩寝かすなど。僕の場合、だいたい数回自転車に乗ると「あー、そうじゃないや、こうだな」と違う視点のア<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C7%A5%A2">イデア</a>が出てきたりすることが多い(子供の送り迎えや買い物で毎日何回か自転車に乗る)。</p> <h3></h3> <p>奥の手として潔く信頼できる人に見てもらうというのがある。ブログタイトルと明らかに矛盾するけれどコードレビューやテストなどの決まったサイクルを待たずに自主的に第<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BB%B0%BC%D4">三者</a>視点を求めるのは良いと思う。自分で気付ける方法を書いてみたもののどうしてもカバーできない部分はあると思うので。</p> Sun, 06 Jan 2019 22:29:17 +0900 hatenablog://entry/10257846132699225625 SymfonyはなぜTwigを採用したのか ~ Jinjaとの関係 https://cloned.hatenablog.com/entry/2018/12/10/000000 <p><i><a href="https://qiita.com/advent-calendar/2018/symfony">Symfony Advent Calendar 2018</a> 10日目の記事です。</i></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>はテンプレートエンジンにTwigを採用しています。Twigは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>製のJinjaに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%BF%A5%C3%A5%AF%A5%B9">シンタックス</a>が似ていることで知られています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>がなぜTwigを採用したのか、なぜJinjaと似ているのかについて日本語の情報が少なそうなので書いてみようと思います。</p> <p>ただ、内容としてはほとんど<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>の作者であるFabien Potencierのブログ記事で触れられているものです。</p> <p><a href="http://fabien.potencier.org/templating-engines-in-php.html">Templating Engines in PHP | Articles - Fabien Potencier</a></p> <p>この記事は2009年10月にポストされたものです。この時の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>(当時は<a class="keyword" href="http://d.hatena.ne.jp/keyword/symfony">symfony</a>)のバージョンは1.3で11月に1系最後である1.4がリリースされています。彼がこの時期にどのようなテンプレートが望ましいか考え悩んだ結果が吐露されています。</p> <p>記事の最初に「私と意見が合わなくて殺したい人がいるかも」という注意が書いてあることから当時のテンプレートエンジンに対する議論の白熱?具合が伺えます。</p> <h3>記事に書かれていること</h3> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>自体が良いテンプレートとは思えない</h4> <p>この記事の前半では<a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>のウェブ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>)のテンプレートと比較して次のようなことが書かれています。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>自体がテンプレートだという主張があるが… <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>は(言語としては進化してるが)テンプレートとして進化していない <ul> <li>短く書けない</li> <li>ありがちな処理をサポートしていない(例えばfor-else)</li> <li>再利用性がない(継承など) <ul> <li>注: クラス継承ではなくテンプレート継承の意です</li> </ul> </li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープが大変(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>は自動<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープなのに)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A5%C9%A5%DC%A5%C3%A5%AF%A5%B9">サンドボックス</a>化できない</li> </ul> </li> </ul> </li> </ul> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>の既存テンプレートに良いものがない</h4> <p>中盤では既存の<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>製テンプレートエンジンを探してみたけどいいのがない、ということが書かれています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Smarty">Smarty</a>、PHPTAL、eZ Components Templates、Dwoo、Calypsoを取り上げています。</p> <h4>Twigとの出会い</h4> <p>後半ではTwigにたどり着いた経緯が書かれています。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>のテンプレートっぽいものを探したところTwigを見つけた</li> <li>TwigはJinja作者であるArmin Ronacherによって書かれたもの <ul> <li>注: Jinjaは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>製のテンプレートエンジンで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>のテンプレートと似ているけど別もの</li> </ul> </li> <li>2008年にとあるサービス向けにTwigが作られたがArminは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>で仕事してる</li> <li>彼にTwigを発展させてもいいか聞いたら乗り気になってくれた</li> </ul> <h3>その後</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> 2がリリースされたのは約2年後の2011年7月です。この時にデフォルトのテンプレートエンジンとしてTwigが採用されています。</p> <p>Twigの最初のgitコミットを確認すると2009年10月7日となっています。そして先に紹介したFabienの記事の日付は同じく2009年10月7日です。この日のコミットは開発ではなくgit-<a class="keyword" href="http://d.hatena.ne.jp/keyword/svn">svn</a>を使った<a class="keyword" href="http://d.hatena.ne.jp/keyword/SVN">SVN</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>(おそらくArminが使っていたものと思われます)からのポーティングですが、これからやっていくぞという意気込みを感じるコミットです。</p> <p>現在のTwigはSensioLabs(FabienがCEOの会社)や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>開発者によってメンテされ、9年間経った今でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>を支える重要なパーツとして生き続けています。</p> Mon, 10 Dec 2018 00:00:00 +0900 hatenablog://entry/10257846132682696497 Symfony 4をDeployerでデプロイしてSlackに通知する https://cloned.hatenablog.com/entry/2018/12/09/000000 <p><i><a href="https://qiita.com/advent-calendar/2018/symfony">Symfony Advent Calendar 2018</a> 9日目の記事です。</i></p> <h3>概要</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>製デプロイツールの<a href="https://deployer.org">Deployer</a>を使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>をデプロイする方法について書きます。おまけでSlackにデプロイ結果を通知する方法についても書きます。</p> <h3>環境など</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>で作業しました。Deployerのバージョンは 6.3.0 です。gitにある<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>プロジェクトをデプロイする想定なので<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>に次のような準備を行いました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ composer create-project symfony/website-skeleton symfony4-deployer $ <span class="synStatement">cd</span> symfony4-deployer $ git add . $ git commit <span class="synSpecial">-m</span> <span class="synStatement">&quot;</span><span class="synConstant">first commit</span><span class="synStatement">&quot;</span> $ git remote add origin git@github.com:cloned/symfony4-deployer.git $ git push <span class="synSpecial">-u</span> origin master </pre> <h3>Deployerのインストール</h3> <p>Deployerは <code>dep</code> というコマンドを使って操作します。インストール方法は <a href="https://deployer.org/docs/installation">Deployer — Installation</a> を参照してください。pharをダウンロードして配置する方法でもcomposerでインストールする方法でも <code>dep</code> というコマンドが利用できればOKです。</p> <h3>設定ファイル deploy.<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a> を配置</h3> <p><code>dep</code> コマンドが使えるようになったら、今度はデプロイするための設定ファイル <code>deploy.php</code> が必要です。このファイルは次のコマンドで雛形を作成することができます。</p> <pre class="code" data-lang="" data-unlink>$ dep init</pre> <p>Laravelや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>など色々な選択肢が用意されており便利そうなのですが、この選択肢の <code>Symfony</code> は <a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> 2 を想定しているのと、この手の設定はまず動く最小限を用意してから必要に応じて増やす方が理解しやすいので、ここでは最小設定の <code>deploy.php</code> を用意しました。</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> <span class="synType">namespace</span> Deployer; <span class="synPreProc">require</span> '<span class="synConstant">recipe/symfony4.php</span>'; set<span class="synSpecial">(</span>'<span class="synConstant">application</span>', '<span class="synConstant">symfony4-deployer</span>'<span class="synSpecial">)</span>; set<span class="synSpecial">(</span>'<span class="synConstant">repository</span>', '<span class="synConstant">git@github.com:cloned/symfony4-deployer.git</span>'<span class="synSpecial">)</span>; set<span class="synSpecial">(</span>'<span class="synConstant">env</span>', <span class="synSpecial">[</span> '<span class="synConstant">APP_ENV</span>' <span class="synStatement">=&gt;</span> '<span class="synConstant">prod</span>', <span class="synSpecial">])</span>; host<span class="synSpecial">(</span>'<span class="synConstant">localhost</span>'<span class="synSpecial">)</span> <span class="synType">-&gt;</span>set<span class="synSpecial">(</span>'<span class="synConstant">deploy_path</span>', '<span class="synConstant">~/deploy-path/{{application}}</span>'<span class="synSpecial">)</span>; </pre> <p>要点としては次のようになります。</p> <ul> <li>既に定義済みのレシピ <code>symfony4.php</code> を <code>require</code> する</li> <li><code>application</code>(アプリ名)と<code>repository</code>(git<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>)を設定する</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>のenvがprodになるように <code>APP_ENV</code> を設定する</li> <li>デプロイ対象のホストとパスを設定する</li> </ul> <p>それぞれ少し解説します。</p> <h4>レシピに <code>symfony4.php</code> を利用する</h4> <p>Deployerにはレシピ(recipe)というものが用意されています。と書くとそのような仕組みがあるかのようですが実際のところ「良くあるタスクをあらかじめ定義しておいた<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>」というだけで、利用するにあたっては <code>require</code> するだけです。</p> <p>ここで利用している <code>recipe/symfony4.php</code> はDeployer公式のものなのでcomposerなどで追加する必要はなくそのまま参照して利用できます。内容は直接コードを見た方がわかりやすいです。</p> <p><a href="https://github.com/deployphp/deployer/blob/master/recipe/symfony4.php">deployer/symfony4.php at master · deployphp/deployer</a></p> <p>設定を変更していく際に <code>symfony4.php</code> の定義をみて既にある定義を使うのか、上書きするのか、追加するのか、など考えますので元のレシピ(設定)を把握しておくことは重要です。といっても <code>symfony4.php</code> に関していえば数十行しかなく簡単に把握できると思います。</p> <h4>envをprodにする</h4> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> set<span class="synSpecial">(</span>'<span class="synConstant">env</span>', <span class="synSpecial">[</span> '<span class="synConstant">APP_ENV</span>' <span class="synStatement">=&gt;</span> '<span class="synConstant">prod</span>', <span class="synSpecial">])</span>; </pre> <p>このように設定するとDeployerはコマンドを実行する際に先頭に <code>export APP_ENV='prod';</code> と付け加えます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>のenvをprodにするためこのような設定を入れてあります。</p> <p>この設定をせずにデプロイすると次のようなエラーになってしまいます。</p> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> Fatal error: Uncaught <a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "WebProfilerBundle" from namespace "<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>\Bundle\WebProfilerBundle".</p></blockquote> <p>これは <code>composer install</code> を <code>--no-dev</code> で実行している(つまり<code>require-dev</code>のものはインストールされない)にもかかわらず、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>のenvはdevのため<code>WebProfilerBundle</code>クラスを読み込めずエラーになっています。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>のenvをprodにするには <code>APP_ENV=prod</code> と記述した <code>.env</code> ファイルを配置する方法もありますが、ここでは実行時の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>で設定を行いました。 APP_ENVについては<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>の公式ドキュメントに記載がありますのでそちらも参照してください。</p> <p><a href="https://symfony.com/doc/current/deployment.html#c-install-update-your-vendors">How to Deploy a Symfony Application C) Install/Update your Vendors</a></p> <h3>デプロイを実行する</h3> <p>これで準備が整ったのでデプロイを実行します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ dep deploy </pre> <p>うまくいけば次のように実行されたタスクが表示されます。</p> <p><figure class="figure-image figure-image-fotolife figure-image-left" title="deploy symfony4 with Deployer"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20181201/20181201212303.png" alt="f:id:cloned:20181201212303p:plain:w290" title="f:id:cloned:20181201212303p:plain:w290" class="hatena-fotolife" style="width:290px" itemprop="image"></span></figure></p> <p>デプロイ先は次のように設定していますので <code>localhost</code> に<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSH">SSH</a>接続して <code>deploy_path</code> のパスに対してデプロイが行われます。</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> host<span class="synSpecial">(</span>'<span class="synConstant">localhost</span>'<span class="synSpecial">)</span> <span class="synType">-&gt;</span>set<span class="synSpecial">(</span>'<span class="synConstant">deploy_path</span>', '<span class="synConstant">~/deploy-path/{{application}}</span>'<span class="synSpecial">)</span>; </pre> <p>この例でのデプロイ後のアプリケーションパスは <code>~/deploy-path/symfony4-deployer/current</code> になります。<code>current</code>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%DC%A5%EA%A5%C3%A5%AF%A5%EA%A5%F3%A5%AF">シンボリックリンク</a>で実体は<code>~/deploy-path/symfony4-deployer/releases/</code>以下に存在します。<code>releases/</code>に配備したコードへの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%DC%A5%EA%A5%C3%A5%AF%A5%EA%A5%F3%A5%AF">シンボリックリンク</a>を張り替えるという方法になっています。この辺りはDeployerのコピー元である<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>製デプロイツールの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Capistrano">Capistrano</a>と同じです。</p> <h4>デプロイを戻す</h4> <pre class="code lang-sh" data-lang="sh" data-unlink>$ dep rollback </pre> <p>とすると直前のリリースに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%DC%A5%EA%A5%C3%A5%AF%A5%EA%A5%F3%A5%AF">シンボリックリンク</a>を張り替えます。これによりデプロイ前のコード(前回デプロイしたコード)に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A1%BC%A5%EB%A5%D0%A5%C3%A5%AF">ロールバック</a>することができます。<code>ls -l current</code> 等で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%DC%A5%EA%A5%C3%A5%AF%A5%EA%A5%F3%A5%AF">シンボリックリンク</a>先が変わっていることを確認すると理解しやすいと思います。</p> <h3>デプロイ設定を変更する</h3> <p>これで基本的なデプロイは完了です。ただ用途によって設定を変更したいことがあるかもしれません。例えば <code>var/log</code> と <code>var/sessions</code> はもともとデプロイごとに別ファイルになってしまわないように<code>current</code>と同じ場所にある<code>shared</code><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リへの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%DC%A5%EA%A5%C3%A5%AF%A5%EA%A5%F3%A5%AF">シンボリックリンク</a>になるようになっていますが、<code>var/files</code> も同様にしたいとしましょう(<code>var/files</code>は単にここでの例で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>にはもともとありません)。</p> <p>その場合は <code>deploy.php</code> に次の記述を追加します。</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> set<span class="synSpecial">(</span>'<span class="synConstant">shared_dirs</span>', <span class="synSpecial">[</span>'<span class="synConstant">var/log</span>', '<span class="synConstant">var/sessions</span>', '<span class="synConstant">var/files</span>'<span class="synSpecial">])</span>; </pre> <p>元のレシピの <code>symfony4.php</code> に既に <code>shared_dirs</code> が定義されていますが <code>var/files</code> を追加して上書きしています。このように元のレシピを確認しながら必要に応じて設定を変更することができます。</p> <p>他にも例えば <code>symfony4.php</code> には <code>database:migrate</code> タスクが定義されているので、デプロイ完了前に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A4%A5%B0%A5%EC%A1%BC%A5%B7%A5%E7%A5%F3">マイグレーション</a>を実行するような設定を行うこともできます。</p> <h3>Slackに通知する</h3> <p>おまけですがデプロイが完了したらSlackに通知する設定も追加します。Slackに通知する実装はDeployer本体には含まれていませんが、別の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>で色々なレシピが公開されておりそこにSlackのレシピが存在します。公式サイトにドキュメントも存在します。</p> <p><a href="https://deployer.org/recipes/slack">Deployer &mdash; Slack recipe</a></p> <p>まずはcomposerで各種レシピを追加します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ composer require deployer/recipes <span class="synSpecial">--dev</span> </pre> <p>次に <code>deploy.php</code> にSlackに関する設定を追加します。成功時に通知したいだけであれば次の3行を追加するだけです。</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> <span class="synPreProc">require</span> '<span class="synConstant">vendor/deployer/recipes/recipe/slack.php</span>'; set<span class="synSpecial">(</span>'<span class="synConstant">slack_webhook</span>', '<span class="synConstant">https://hooks.slack.com/xxxxxxxx</span>'<span class="synSpecial">)</span>; after<span class="synSpecial">(</span>'<span class="synConstant">success</span>', '<span class="synConstant">slack:notify:success</span>'<span class="synSpecial">)</span>; </pre> <p><code>slack_webhook</code> のURLはSlack側で作成しておく必要があります。うまくいくと次のような通知が来るようになります。</p> <p><figure class="figure-image figure-image-fotolife figure-image-left" title="slack webhook with Deployer"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20181201/20181201222525.png" alt="f:id:cloned:20181201222525p:plain:w325" title="f:id:cloned:20181201222525p:plain:w325" class="hatena-fotolife" style="width:325px" itemprop="image"></span></figure></p> <h3>まとめ</h3> <p>Deployerを使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> 4をデプロイする方法を解説しました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>製<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>のデプロイ設定があらかじめ用意されているのですぐに使い始められます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> 4に限らず公式レシピをうまく使ってデプロイする際の参考になればと思います。</p> Sun, 09 Dec 2018 00:00:00 +0900 hatenablog://entry/10257846132678199236 ドラゴンクエストXを支える技術を読んだ ~ 中の人しか知り得ない貴重な記録 https://cloned.hatenablog.com/entry/2018/11/24/234329 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4297101742/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51OQmosyL7L._SL160_.jpg" class="hatena-asin-detail-image" alt="ドラゴンクエストXを支える技術 ── 大規模オンラインRPGの舞台裏 (WEB+DB PRESSプラスシリーズ)" title="ドラゴンクエストXを支える技術 ── 大規模オンラインRPGの舞台裏 (WEB+DB PRESSプラスシリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4297101742/clonedlog-22/">ドラゴンクエストXを支える技術 ── 大規模オンラインRPGの舞台裏 (WEB+DB PRESSプラスシリーズ)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 青山公士</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2018/11/14</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4297101742/clonedlog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>発売されることを知って予約注文していた本。読み終えたので感想文。先に一言で結論を書くと素晴らしい本だった。</p> <h3>この本の良いところ</h3> <p>この本が素晴らしいのはゲーム開発の実録になっていること。一般的な技術解説本の場合、著者が経験してきたことの集大成になることが多い。つまり色々なプロジェクトを経験した上でこれが最も良かったと思う内容がピックアップされる。効率よく学習したい読者にとっても普通はそのほうが良い。</p> <p>しかし、この本では「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E9%A5%B4%A5%F3%A5%AF%A5%A8%A5%B9%A5%C8X">ドラゴンクエストX</a>で何をしたのか」しか書いていない。もちろんお手本になるものが中心ではあるけれど、失敗したこと、そしてそれがどのような大規模障害に繋がったのかが解説されている。</p> <p>これはすごいことで、著者は自分(達)の失敗を明らかにするような本を書きたくないし、失敗する方法よりも成功する方法を伝えたいものだから。でも、この本には失敗談がたくさん盛り込まれている。失敗談をたくさん記述してくださった著者に敬意を表して失敗談の有用性について少しだけ書きたい。</p> <h4>失敗経験がないと良い方法を蔑ろにする</h4> <p>本(に限らないけれど)に書いてあった良い方法を学んで実践する。通常はこれで良い。けれども、悪いものを知らないとそれがどれだけ良いのかわからない。良さの程度がわからないと良い方法を蔑ろにする。</p> <p>「こうした方が良いのだろうけど今回はその場凌ぎの対応をしておこう」というのは現場で頻繁にある。時間が限られているので仕方がないところもあるけれど、悪いものを知らないと「その場凌ぎであっても選択してはならない重大な欠陥がある方法」をあっさりやってしまったりする。</p> <p>悪い方法について知らないからというのもあるけれど、何より失敗経験がないとその悪さを重大なものとして認識しにくい。</p> <p>実際に失敗した人は違う。この悪い方法を選択したばかりに開発/運営チームは数日対応に追われお客様から大量の叱咤を受けたという経験から、時間がなくてもその方法を選択してはいけない、時間がないならリリースを延期してでも違う方法にしないとダメ、と言えるようになる。</p> <p>こういった判断力を培うには普通は自分で失敗するしかないのだけど、この本はなんとその失敗経験をたったの2680円+税で提供しているのだから値千金ということ。しかも実際に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E9%A5%B4%A5%F3%A5%AF%A5%A8%A5%B9%A5%C8X">ドラゴンクエストX</a>にどのような影響を与えたのかが常に記載されており社外の人間が読んでも臨場感のある内容になっている。</p> <h3>広範囲な内容</h3> <p>目次を見るとものすごい広範囲な内容になっていて、これだけ読めばオンラインゲームの全貌が掴めそうな感じ。とはいえ実際のところは次の点が中心だったように感じる。</p> <ul> <li>ゲームサーバーのプロセス設計やDBの使い方</li> <li>制約に対するアプローチ(メモリが足りない、アクセスが多くて高負荷など)</li> </ul> <p>ページ数だけでみると他の章も結構紙面を割いているのだけど、開発体制や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC">プログラミング言語</a>に関するところ、グラフィックに関するところは基本的な内容が多いように感じた。</p> <p>あまり公開されないチート対策についても記述されているので必見。</p> <h1>読み手を選ばない配慮の行き届いた文章</h1> <p>この本は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E9%A5%B4%A5%F3%A5%AF%A5%A8%A5%B9%A5%C8X">ドラゴンクエストX</a>についてしか書いていないので当然ゲームとしての<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E9%A5%B4%A5%F3%A5%AF%A5%A8%A5%B9%A5%C8X">ドラゴンクエストX</a>を知らないと理解しにくい部分があるのだけど心配無用でゲーム仕様どころか次のような解説からスタートしている。</p> <blockquote><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/RPG">RPG</a>は、役割(Role)を演じる(Playing)ゲーム(Game)のことです。</p> <p>p3より</p></blockquote> <p>また専門用語は使われているものの専門用語の使い始めに説明を記していることが多い。「フラグ」のような開発者でなくても知っていそうな言葉でも解説が入っている。</p> <h3>期待外れにならないように</h3> <p>この本では大体のことが方法論までしか触れておらず実装説明はあまりないので各部門の専門の人が読んだ際には物足りない感じはあるかもしれない。企業秘密的な側面もあるだろうし幅広い読者層を意識してのことだと思う。</p> <p>プログラミング視点だと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%EB%A5%C6%A5%A3%A5%DE">ウルティマ</a>開発者のこの本が具体的でかつ実践的だった。</p> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797358432/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51p9u7CPTzL._SL160_.jpg" class="hatena-asin-detail-image" alt="ゲームコーディング・コンプリート 一流になるためのゲームプログラミング (Professional game programming)" title="ゲームコーディング・コンプリート 一流になるためのゲームプログラミング (Professional game programming)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797358432/clonedlog-22/">ゲームコーディング・コンプリート 一流になるためのゲームプログラミング (Professional game programming)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> Mike Mcshaffry,手島孝人,山下恵美子,依田光江,大貫宏美,廉典子,田中幸,宮本寿代</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A5%D5%A5%C8%A5%D0%A5%F3%A5%AF%A5%AF%A5%EA%A5%A8%A5%A4%A5%C6%A5%A3%A5%D6">ソフトバンククリエイティブ</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2010/03/31</li><li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li><li><span class="hatena-asin-detail-label">購入</span>: 21人 <span class="hatena-asin-detail-label">クリック</span>: 265回</li><li><a href="http://d.hatena.ne.jp/asin/4797358432/clonedlog-22" target="_blank">この商品を含むブログ (29件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>オンラインゲーム設計視点だとやはりこの本を外せない(「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E9%A5%B4%A5%F3%A5%AF%A5%A8%A5%B9%A5%C8X">ドラゴンクエストX</a>を支える技術」の中でも言及がある)。</p> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774145807/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51%2Bt2R6KPIL._SL160_.jpg" class="hatena-asin-detail-image" alt="オンラインゲームを支える技術  ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)" title="オンラインゲームを支える技術  ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774145807/clonedlog-22/">オンラインゲームを支える技術  ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 中嶋謙互</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2011/03/24</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><span class="hatena-asin-detail-label">購入</span>: 33人 <span class="hatena-asin-detail-label">クリック</span>: 1,696回</li><li><a href="http://d.hatena.ne.jp/asin/4774145807/clonedlog-22" target="_blank">この商品を含むブログ (57件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>とはいっても各専門の人が読んでも期待外れに思うことはないと思う。なぜならこの著者ほどオンラインゲームの全体を把握し責任を持つ立場になっている人は日本にそれほどいないだろうから。</p> <h2>読み終えて思ったこと</h2> <p>買いましょう。読みましょう。良い本です。好きな呪文は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D9%A5%DB%A5%DE%A5%E9%A1%BC">ベホマラー</a>です。嫌いな呪文は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%DB%A5%C8%A5%E9">マホトラ</a>です。</p> Sat, 24 Nov 2018 23:43:29 +0900 hatenablog://entry/10257846132675235873 はてなブログに移行したついでに振り返りや近況など https://cloned.hatenablog.com/entry/2018/11/23/094657 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%C0%A5%A4%A5%A2%A5%EA%A1%BC">はてなダイアリー</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>に移行した。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%C0%A5%A4%A5%A2%A5%EA%A1%BC">はてなダイアリー</a>の最初の投稿は2005年11月22日のようなので昨日で13周年だったみたい。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>について書くところから始めて、インターネット全般、読んだ本、写真のこと、いろいろ書いた。今では年に数回しか書いてない。</p> <p>ブログを書かなくなったのは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>でパッと書きたいことを書けるようになったからというのもあるし、以前よりもインターネットに情報が充実していて自分が書くまでもないと感じて書かないことも多かった。</p> <h3>最近のこと</h3> <p>今でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE">プログラマ</a>を続けているし作るものもインターネット関係だから仕事は昔と変わっていない。内容が同じということはないけれど今までの延長線。</p> <p>でも、生活は大きく変わった。子供が二人いるので自分だけのために使う時間はほとんどなくなった。こうしてブログ書いている時間なんてほとんどなくて、実際、今現在も下の子を朝寝させている隙に書いている。</p> <p>ただ、この時間がない、というのは自分のための時間がない設定で良いという自分の判断なので、子供のせいで人生が辛いという意味ではない。優先順位の問題。</p> <h3>インターネットに思うこと</h3> <p>最近は穏やかではないこともよく目にするけれど、自分が思ったことを検閲されずに広く公開できる場所は今でもやはりインターネットしかないと思う。検閲は国によるし日本でも最近話題に新しいけれど、なんの背景も持たない小さな個人が平等に扱われる場所としてインターネットはあり続けて欲しいと思う。</p> <h3>子供に思うこと</h3> <p>子供ができて感じるのはとにかく子供の能力を甘く見ていたなということ。5歳というとまだ幼児、つまり言葉は話せるけどまだまだ幼いというイメージだったけれど、本当に謝罪の上で撤回。論理的な思考ができるし社会性もある。身体能力も跳び箱9段跳べるとかびっくり。</p> <h3>今日のこと</h3> <p>下の子を朝寝から起こしてしばらくしたら離乳食をあげる。その頃には奥さんが起きてくるので(奥さんは夜中対応してくれているので午前中長めに寝る方針)、そしたら上の娘を連れてスケートに行ってくる。またスケートができるシーズンになって喜ばしい。</p> <p>冬は大好きなので寒さも乾燥も大目に見るけれど静電気だけは消滅して欲しい。痛いの嫌い。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DA%A4%F3%A4%C6%A4%EB">ぺんてる</a>の静電気除去グッズが手放せない毎日。</p> Fri, 23 Nov 2018 09:46:57 +0900 hatenablog://entry/10257846132674397729 目的のために「手段」認定すると楽しくない https://cloned.hatenablog.com/entry/20180804 <p>手段であって目的ではない、とよく言われる。現代の格言と言っても良い。英語を使って何をするかが重要なのだから英語を覚えることは手段でしかない。いかにももっともらしい。</p><p>ここでいう手段は目的を達成するための方法という意味だから、目的を何にするかによって何が手段になるのか異なる。目的によって変動する定義なのだから一般論として「○○は手段だ」と断じるとおかしい。宇宙全体の幸せが目的の人にとってはそれ以外の行為全てが手段でしょう。</p><p>一人の人間に対して目的が1つ、という決まりもない。同じ人間でも目的はいくつもある。ゲーム開発者がゲームプレイすると遊んで楽しい(プレイヤーとしての目的そのもの)と知見が増えた(開発者としての手段)と両方共存する。</p><p>手段であって目的ではない論法を目にした時、近視眼的で今まで見えていなかった目的が見えてよかったと思うなら良いけれど、自分のやっていることは手段でしかないのかと卑下するなら良くない。結局のところ、何をしたいの?どうしたいの?というのを自覚しましょうということでしかない。</p><p>これは経験的にだけど「手段」認定するとその行為が楽しくなくなるので基本的には目的であり手段でもある方が良い。よくプログラミングも手段であって目的ではないと言われる。確かにアプリケーションを作るためのプログラミングは手段だけど、より美しく保守性の高いプログラミングを考えてるときはそれ自体が達成したい目的だったりする。そう感じて頭を使う方が楽しいし創造的になる。もちろんそれを客観的に俯瞰してみれば「手段」認定できるけれど、そんなに手段手段言わなくても良いのではと思う。</p> Sat, 04 Aug 2018 00:00:00 +0900 hatenablog://entry/10257846132646979211 noteでプログラミング超超超入門を書いてみる https://cloned.hatenablog.com/entry/20180426 <p><a href="https://note.mu/cloned/m/m734975c66b47">&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304C;&#x9B54;&#x6CD5;&#x3067;&#x306A;&#x3044;&#x3053;&#x3068;&#x3092;&#x77E5;&#x308C;&#x3070;&#x3042;&#x306A;&#x305F;&#x3082;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DE;&#x306B;&#x306A;&#x308C;&#x308B;</a></p><p>noteデビューしてみた。プログラミングの入門書って入門の割に初心者ブレ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%AB">イカ</a>ーなことが多いとずっと思っていて、今日ふと思って書き始めてみた。プログラミング超超超入門として時間を見つけて書いてみたい。</p> Thu, 26 Apr 2018 00:00:00 +0900 hatenablog://entry/10257846132646979231 家事分担における不平等感の解決 https://cloned.hatenablog.com/entry/20180223 <p>家事を分担すると、不平等に感じることがよくある。この不平等感の原因に「隣の芝生は青い」問題と「隣の芝生は本当に青い」問題を挙げたい。</p> <div class="section"> <h4>「隣の芝生は青い」問題</h4> <p>Aはお風呂掃除を担当し、Bはトイレ掃除を担当するような場合。Aはトイレの方が掃除する面積が狭いから自分より楽だろうと思い、Bはお風呂は汚くないから良いなと思う。</p><p>このように自分が担当していないものの方が楽だと思ってしまいがち。とはいえ、気をつけて直せるようなものでもない(そう思ってしまうのは仕方がない)。</p> </div> <div class="section"> <h4>「隣の芝生は本当に青い」問題</h4> <p>Aは育児を担当し、Bはお風呂掃除とトイレ掃除と他にもたくさんの掃除を担当するような場合。仮にBが時間的に育児に匹敵するほど掃除をしていたとしても、実際のところ、精神的な負荷は圧倒的にAの方が大きい。そのため作業時間が同じでも不平等。Bは(時間的に)自分もたくさんやっていると感じているので、すれ違いになりやすい。仕事担当と育児担当で相殺しようとするとこれになりやすい。</p><p>※育児の方が圧倒的に大変かどうかは個人差があるので決め付けられないけれど、わかりやすそうな例として。</p> </div> <div class="section"> <h4>解決方法</h4> <p>私はXをするので、あなたはYをする、といった異なる作業で分担するのをやめる。私はXを1日10回する、あなたは仕事があるので回数は少なくて良いけれど同じXを1日2回する、のように時間や回数の比率で分担をすると良い。</p><p>時間/回数が異なっても作業内容が同じなので、隣の芝生にならず自分の芝生になる。自分の方が大変だ、という見解になりにくい。何より相手の大変さが理解できるようになるので誤解が少なくなり、必然と不平等感も少なくなる。</p> </div> Fri, 23 Feb 2018 00:00:00 +0900 hatenablog://entry/10257846132646979240 会社のブログを書いた https://cloned.hatenablog.com/entry/20171211 <p>テストコードを簡単に書くための方法(<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHPUnit">PHPUnit</a>)<br /> <a href="http://developer.suzna.com/entry/2017/12/11/104228">http://developer.suzna.com/entry/2017/12/11/104228</a></p><p>前回書いたのがなんと2016-12-05なので1年ぶりになってしまった(一年間ずっと忙しかった)。</p> Mon, 11 Dec 2017 00:00:00 +0900 hatenablog://entry/10257846132646979255 VRオフィスを使う10年後のリモートワーク https://cloned.hatenablog.com/entry/20171015 <p>主にIT分野を中心にリモートワークが普及してきているように思う。もちろんメリットはあるけれど、デメリットもあるので、リモートワークの方が良いと断言できるようなケースはむしろ希であるように思う。</p><p>リモートワークのメリットとしては、遠隔の人を採用できる、家に一定時間居なければならない人でも働ける、通勤時間がなくなる、などがあり、デメリットとしては、コミュニケーションが難しい、作業管理が難しい(本当に働いているのかどうか)、などがある。</p><p>僕は将来リモートワークは採用する、しないではなくて当然になると思っているけれど、デメリットをどうやって克服するのかが問題。</p><p>オフィスに出勤している(リモートではなく)による恩恵は次のようなものがある。</p> <ul> <li>その場所にいる(確実に仕事をしていることの証拠(ネットサーフィンしてるかはさておき))</li> <li>状況が読み取れる(忙しそう、休憩中、話しかけても良いか)</li> <li>会話に使えるツールが豊富(表情や動作を見ての会話、ホワイトボード、紙、その他多数)</li> </ul><p>つまり、空間を共有しているということが大きい。</p><p>ビデオ会議でも表情や簡単な身振りは読み取ることはできる。ただ、同じ空間で感じられる情報に比べればかなり欠落している。例えば、向こうで何か音がなったから少し振り向いた、といったことがあっても、立体的な音を共有していないので伝わらない。</p><p>この「空間」を全部<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Virtual%20reality">Virtual reality</a>)に持っていけたら、物理的オフィスの意義がほとんどなくなる。</p><p>ただ、持っていけたら、というがもちろん現時点では難しい。実現にあたっては次のような点が必須だと思う。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>に入ることが非常に簡単なこと</li> <li>リアル空間と同等のツールが使え、同じ情報量が存在していること</li> </ul><p>10年後、どうやってこれを実現しているだろうかと考えると、きっと部屋ごと<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>だと思う。</p><p>オフィスと個人の部屋や<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>専用スペース(カフェ?)などを全て連結して一つの空間を作り、その映像を壁全体に投影して、共有空間を作る。音も方向に応じて鳴る。</p><p>スーパーの商品棚の端が鏡になっているのと似ていて、鏡の先が反射した商品ではなく本当に別の空間になっている感じ。</p><p>壁に向けてプロジェクタを設置するだけだと臨場感が低すぎるので、壁一面ディスプレイや非常に高解像度な投影など設備が必要になるし、音も環境音と主音をうまく制御できないと聞き取りが難しい。</p><p>だから、全員在宅勤務というよりは、専用の場所を使ったり、数人だけの小さなオフィスだったりが多いのではないかと思う。もちろん個人向けのツールも普及すると思う。</p><p>主に社内(勤務)を想定してここまで書いたけれど、これが実現すると営業活動、取引先との会議など社外での利用も当たり前になると思う。</p><p>現在はゲームを中心に第一人称カメラによる臨場感(没入感)が重要視されているけれど、今後、環境的なリアリティも重要になってくると思う。</p><p>こういうのは<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>ではなくMRではないかと言われそうだけど、おそらく単なるR(リアルが繋がってるだけ)か、やはり<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>(みんなでバーチャル)か、という感じがする。</p><p>将来、賃貸の情報に「<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>対応」とか書かれている日が来るかもしれない。</p> Sun, 15 Oct 2017 00:00:00 +0900 hatenablog://entry/10257846132646979270 弦をDRに変えたらコシのあるサウンドで満足 https://cloned.hatenablog.com/entry/20170918 <p>最近のアーニーボールは以前ほど寿命が短くないと言う話をネットで見かけて、それならあのギラギラをと思って張り替えてみたのだけど、記憶のギラギラはなく(記憶なので不正確)少しまったりした感じの音だった。</p><p>それ自体は単なる記憶との差なので、まぁこんなものかなと思っていたら、弾いている最中に1弦を切ってしまった。</p><p>もう何年もギターを弾いている最中に弦を切っていないので、アーニーボールの印象が大分悪くなってしまった。</p><p>ダダリオやディーンマークレーに戻るのも面白くないので、改めてネットで評判の良い弦がないか探したところ、最終的に DR にしてみた。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/cloned/20170906193400" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20170906/20170906193400.jpg" alt="f:id:cloned:20170906193400j:image" title="f:id:cloned:20170906193400j:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>なかなか良い。金属感はほどほどで高音の煌びやかさはそこまで強くないけれど、中音がしっかり鳴る。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A1%BC%A5%B7%A5%E7%A5%F3">ディストーション</a>との相性もよく存在感のある音がする。手触りも良い。</p><p>張り替えてから十日ほど経っているけれど、あまり劣化していない。</p><p>知らなかったけれど、<a href="https://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%83%A0%E3%83%90%E3%83%83%E3%82%B0%E3%83%BB%E3%83%80%E3%83%AC%E3%83%AB#.E3.82.A8.E3.83.95.E3.82.A7.E3.82.AF.E3.82.BF.E3.83.BC.E3.83.BB.E5.BC.A6">&#x30C0;&#x30A4;&#x30E0;&#x30D0;&#x30C3;&#x30B0;&#x30FB;&#x30C0;&#x30EC;&#x30EB;&#x304C;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x305F;</a>みたい。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000BHCUNM/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51%2BUg2N64rL._SL160_.jpg" class="hatena-asin-detail-image" alt="DR エレキギター弦 TITE-FIT ニッケルメッキ .010-.046 MT-10" title="DR エレキギター弦 TITE-FIT ニッケルメッキ .010-.046 MT-10"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000BHCUNM/clonedlog-22/">DR エレキギター弦 TITE-FIT ニッケルメッキ .010-.046 MT-10</a></p><ul><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> DR</li><li><span class="hatena-asin-detail-label">メディア:</span> エレクトロニクス</li><li><a href="http://d.hatena.ne.jp/asin/B000BHCUNM/clonedlog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>しばらく DR を使ってみようと思う。</p> Mon, 18 Sep 2017 00:00:00 +0900 hatenablog://entry/10257846132646979300 子供にレッテルを貼らない https://cloned.hatenablog.com/entry/20170821 <p>「魔の2歳児」という言葉がある。「悪魔の3歳児」「天使の4歳児」というのもあるみたい。魔の2歳児はイヤイヤ期とも言われている。</p><p>子供が0歳〜1歳くらいの時に先輩パパ・ママたちに「今が一番可愛いいですよ。2歳になったら大変よ」とたくさん脅された。</p><p>子供はその時々でそれぞれ可愛いだろうし成長による充実もあるだろうから、先輩方のお話は話半分に、いや本当のところは話一厘くらいにしか聞いてなかった。</p><p>そして、2、3歳が過ぎて感じるのは、やっぱりそんなことはない、だ。</p><p>子供は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%D4%BF%F1%C8%BF%BC%CD">脊髄反射</a>でイヤイヤ言っているわけではなくて、もっと遊びたい、などのやりたいことの裏返し表現であることが多いように思う。そして、それは多くの大人たちと同じだと思う。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E9%A5%AF%A5%A8">ドラクエ</a>をもっとやりたいのに皿洗いしろだの早く寝ろだの言われた時の気分を考えて欲しい。子供の嫌がる気持ちはほとんどの場合で共感できた。</p><p>もちろん、子供のやりたいことを全て叶え続けることはできず、子供の嫌を押し切って進める結果、泣かれることもあるし、それ自体は親にとってストレスである。ただ、だからと言って、子供の主張が理不尽というわけではない。</p><p>僕は「魔の2歳児」という表現は良くないと思う。このようにレッテルを貼ってしまうと、子供が嫌と言う理由が「2歳だから」になってしまう。子供を「どうせ子供だから」と決めつけずに、大人と同じと考えれば、不思議な行動なんてないし「魔の」(や、悪魔の)などと揶揄されるような邪悪なものでは決してないと思う。</p><p>親が推測しきれなくてわからないことはたくさんあるけれど、それも単にわからなかっただけ。大人同士でもよくあること。というか日常的なこと。</p><p>未だに「今が一番可愛いですよ!」と言われることがあるけれど、今も将来も可愛いでしょ?と心の中でつぶやいている。</p> Mon, 21 Aug 2017 00:00:00 +0900 hatenablog://entry/10257846132646979317 phpunitのUndefined class constant ’PARSE_CUSTOM_TAGS’の対処 https://cloned.hatenablog.com/entry/20170717 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%C0%A5%A4%A5%A2%A5%EA%A1%BC">はてなダイアリー</a>のタイトル文字数の制限で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>と入れられなかったけれど<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>の話。</p><p><a href="https://symfony.com/doc/current/components/phpunit_bridge.html">The PHPUnit Bridge (The Symfony Components)</a> を使う。</p><p>もしくは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHPUnit">PHPUnit</a>を6.2.3にアップグレードしたら解決した。</p><p>■個人的に発生した環境<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHPUnit">PHPUnit</a> 5.7.2(phar)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> v3.3.4</p><p>■参考<br /> <a href="https://github.com/symfony/symfony/issues/19532">https://github.com/symfony/symfony/issues/19532</a></p> Mon, 17 Jul 2017 00:00:00 +0900 hatenablog://entry/10257846132646979332 iPhone 7 Plusを買った https://cloned.hatenablog.com/entry/20161118 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%207%20Plus">iPhone 7 Plus</a>を買った。10/8に注文して11/13に届いた。色はローズゴール。ジェットブラックは店舗で見てみたけど指紋が目立ちすぎで僕には無理だった。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple%20Store">Apple Store</a>で購入して(<a class="keyword" href="http://d.hatena.ne.jp/keyword/SIM%A5%D5%A5%EA%A1%BC">SIMフリー</a>)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/LINE%A5%E2%A5%D0%A5%A4%A5%EB">LINEモバイル</a>を契約した。色々速度比較サイトを見て通信環境が良さそうなのと、フリーカウント大きいなというところ。速度に関しては、通信環境の不満が大きくなった時に会社的に対応が早いだろうという憶測もして(ビジネスに直結だろうから)<a class="keyword" href="http://d.hatena.ne.jp/keyword/LINE%A5%E2%A5%D0%A5%A4%A5%EB">LINEモバイル</a>に決めた。</p><p>届いたらまずは買ってあったガラスフィルムを貼った。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01LX51HZK/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/41cltEQwcML._SL160_.jpg" class="hatena-asin-detail-image" alt="Farfalla iPhone7plus ブルーライト92%カット 強化ガラス液晶保護フィルム 0.3mm" title="Farfalla iPhone7plus ブルーライト92%カット 強化ガラス液晶保護フィルム 0.3mm"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01LX51HZK/clonedlog-22/">Farfalla iPhone7plus ブルーライト92%カット 強化ガラス液晶保護フィルム 0.3mm</a></p><ul><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> Farfalla</li><li><span class="hatena-asin-detail-label">メディア:</span> エレクトロニクス</li><li><a href="http://d.hatena.ne.jp/asin/B01LX51HZK/clonedlog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>子供が触ることもあるので<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%EB%A1%BC%A5%E9%A5%A4%A5%C8">ブルーライト</a>カット。この商品、なかなかよくて、変色した感じがほとんどしない。触り心地は程よく抵抗感がありつつもちゃんとスベスベしているし、汚れも簡単に拭き取れる。貼る時に入る気泡も簡単に追い出せたしとても気に入った。</p><p><a href="http://photozou.jp/photo/show/141581/243230394"><img src="http://art33.photozou.jp/pub/581/141581/photo/243230394.v1479474521.jpg" alt="iPhone 7 Plus" width="450" height="299"></a><br><a href="http://photozou.jp/photo/show/141581/243230394">iPhone 7 Plus</a> posted by <a href="http://photozou.jp/user/top/141581">(C)cloned</a></p><p>この大きさだと落とさない方が奇跡だと思って、ケースも買った。ケースは11/11に注文して11/18に届いた。とても長く待った気分。きっと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a>慣れのせい。買った商品はこれ。 <a href="http://propeller-design.jp/item/1750.html">http://propeller-design.jp/item/1750.html</a> かわいい。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DD%A1%BC%A5%C8%A5%EC%A1%BC%A5%C8">ポートレート</a>モード、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%B8%A5%A4%A5%C1">デジイチ</a>で撮るのに比べると被写体深度が浅すぎる(近いはずなのにボケる)、輪郭がやや不自然、というのがあるけれど、それでもエフェクトでぼかすのに比べたら格段に良いし、何よりカメラそのものの写りが綺麗だから楽しい。</p><p>容量は256GBにしたので、やっとそれなりに好きな音楽を適当に入れられるようになった。1TBくらいあれば全部入るので、そういう時代になりますように。</p><p>あとはなんだろう。前が<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%206">iPhone 6</a>だったので動作が速くなったのは嬉しい。あとバッテリーが長く持つようになったのも嬉しい(<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%206">iPhone 6</a>の劣化が激しかった)。</p> Fri, 18 Nov 2016 00:00:00 +0900 hatenablog://entry/10257846132646979348 PSVRを買った https://cloned.hatenablog.com/entry/20161023 <p>予約しようとしたら予約開始早々にどこも売り切れになってしまったので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon.co.uk">Amazon.co.uk</a>(イギリス)で予約した。</p><p>到着は10/20予定となっていたけれど、発売日(10/13)に発送され10/17に届いたので、割とすぐに手元に来た感じ。</p><p>価格は42,240円(290.83ユーロ)で買えたので、定価48,578円に比べると結構安く買えた。</p><p><a href="http://photozou.jp/photo/show/141581/242317297"><img src="http://art25.photozou.jp/pub/581/141581/photo/242317297.v1477225334.jpg" alt="PSVR" width="450" height="299"></a><br><a href="http://photozou.jp/photo/show/141581/242317297">PSVR</a> posted by <a href="http://photozou.jp/user/top/141581">(C)cloned</a></p><p><a href="http://photozou.jp/photo/show/141581/242317333"><img src="http://art33.photozou.jp/pub/581/141581/photo/242317333.v1477225334.jpg" alt="PSVR" width="450" height="299"></a><br><a href="http://photozou.jp/photo/show/141581/242317333">PSVR</a> posted by <a href="http://photozou.jp/user/top/141581">(C)cloned</a></p><p>梱包が大きい。開けてみたら<a class="keyword" href="http://d.hatena.ne.jp/keyword/PSVR">PSVR</a>本体が結構大きかった。</p><p><a href="http://photozou.jp/photo/show/141581/242317315"><img src="http://art25.photozou.jp/pub/581/141581/photo/242317315.v1477225334.jpg" alt="PSVR" width="450" height="299"></a><br><a href="http://photozou.jp/photo/show/141581/242317315">PSVR</a> posted by <a href="http://photozou.jp/user/top/141581">(C)cloned</a></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%B8%BB%A5%B1%A1%BC%A5%D6%A5%EB">電源ケーブル</a>の形状が海外仕様だったので、家にある別のケーブルを付け替えた。それ以外は説明書が英語なくらいで、問題なく動作した。</p><p>付属のdemoをやってみて、あとは評判の良い<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rez">Rez</a> Infiniteを購入してやってみてる。まだArea Xをちゃんとプレイできていないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rez">Rez</a> Infiniteの感想はまた今度。</p><p>ディスプレイの解像度はドットが視認できるので気になるといえば気になる。シネマティックモードで映画を観ると大画面の迫力は素敵である反面、たまにドットが気になって没入感が薄れることがある。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%E3%A5%A4%A5%ED%A5%BB%A5%F3%A5%B5%A1%BC">ジャイロセンサー</a>、加速度センサーやリフレッシュレートなどは今の所気になるところはなく、自分の動きにしっかり追従してくれていると感じる。音もちゃんと自分の位置、向きに対応していて臨場感がある。</p><p>接続ケーブルや端末が多くて辛いけれど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PSVR">PSVR</a>に対応した大御所ゲームの発売が待ち遠しい。</p> Sun, 23 Oct 2016 00:00:00 +0900 hatenablog://entry/10257846132646979388 音楽のレコメンド機能を作るには音源の解析が必要に思う https://cloned.hatenablog.com/entry/20160916 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a> Musicなどのアプリでレコメンドされる音楽はなかなか好きに出会えない。</p><p>人によるだろうけれど、音楽は好き/嫌いと感じるポイントが非常に細かくあり、ちょっと違うとあまり好きではないものになる。</p><p>例えば、僕は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Dream%20Theater">Dream Theater</a>が好きだけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%EC">プログレ</a>ッシブ・メタルというジャンルだけで好きに出会うことはほとんどない。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Dream%20Theater">Dream Theater</a>が好きな理由を列挙すると</p> <ul> <li>音色/和音/旋律/展開/テンポなどが基本的に好み</li> <li>歌にメロディーがある方が好き</li> <li>綺麗に歌うボーカルが好き</li> <li>和音が感じられる楽曲が好き(必然とキーボードの音がある楽曲の方が好き)</li> <li>一塊のメロディーがたまたま<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%D1%C7%EF%BB%D2">変拍子</a>であった、と感じられるような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%D1%C7%EF%BB%D2">変拍子</a>が好き(ランダムに切り取られたような激しすぎる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%D1%C7%EF%BB%D2">変拍子</a>は嫌い)</li> <li>速い奏法を生かしたソロフレーズが好きだが、緩急がなくずっと速いだけであったり、メロディー性が薄いソロは嫌い</li> <li>ドラムやベースに繰り返しパターンが少なく聴き飽きないリズムが好き(特にポートノイ時代)</li> <li>楽曲としても繰り返しが少なく展開するものが好きだが、旋律が頭に残らないほど展開しすぎると嫌い</li> <li>ヘビーな<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9">サウンド</a>が好きだが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%F3%A5%B7%A5%E3%A5%EA">ドンシャリ</a>だったり低音を強調しすぎていると嫌い</li> </ul><p>キリがないけれども、こういう細かいポイントがいろいろあって好きなのであって、とあるジャンルが好き、というのでは全然ない。</p><p>また、上は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Dream%20Theater">Dream Theater</a>が好きな理由であって、例えば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%BF%A4%AB%A4%B8%A4%F3">たかじん</a>の歌が好きな理由は全く異なる。</p><p>こうしたことを考えると、好きな(好きそうな)音楽を提案するプログラムを作るのであれば、音源を解析し一つ一つの音楽がどういう情報を持っているのかを把握できないと難しいだろうなと思った。</p> Fri, 16 Sep 2016 00:00:00 +0900 hatenablog://entry/10257846132646979410 Symfonyから手早くYAMLのFixtureを読み込めるAliceFixturesBundle https://cloned.hatenablog.com/entry/20151203 <p>この記事は <a href="http://qiita.com/advent-calendar/2015/symfony">Symfony Advent Calendar 2015</a> の4日目の記事です。</p><p>開発環境向けのテストデータ(Fixture)作成は <a href="https://github.com/hautelook/AliceBundle">hautelook/AliceBundle</a> を使えば便利だけど、テストコードからFixtureを読み込もうとすると一手間かかるので、何かないものかと探したところ <a href="https://github.com/h4cc/AliceFixturesBundle">h4cc/AliceFixturesBundle</a> に出会った話。</p><p>データベースを利用したテストコードを書く場合、テストデータの準備が必要になることが多い。 「テストコードを書く労力を減らす」「テストコードの見通しを良くする」という観点から、テストコードのためのデータ準備は極力簡単にしたいところ。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> + Doctrineを利用している場合に真っ先に選択肢に上がるものとして <a href="http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html">DoctrineFixturesBundle</a> があるけれど、見ての通りFixture自体が<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>コードであり、テストデータの準備に苦労が絶えない。</p><p>そこで登場するのが <a href="https://github.com/nelmio/alice">nelmio/alice</a> を利用できる <a href="https://github.com/hautelook/AliceBundle">hautelook/AliceBundle</a> で、これについては去年の <a href="http://qiita.com/advent-calendar/2014/symfony">Symfony Advent Calendar 2014</a> の記事である <a href="http://www.karakaram.com/symfony2-alice-bundle">[Symfony] AliceBundle&#x3067;&#x81EA;&#x52D5;&#x30C6;&#x30B9;&#x30C8;&#x306E;fixture&#x3092;yml&#x5316;&#x3057;&#x3088;&#x3046;</a> が詳しい。すごくわかりやすいのでご一読を。</p><p>どういう<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAML">YAML</a>になるかというとこういう感じ。</p> <pre class="code lang-yaml" data-lang="yaml" data-unlink><span class="synIdentifier">AppBundle\Entity\User</span><span class="synSpecial">:</span> <span class="synIdentifier">user{1..10}</span><span class="synSpecial">:</span> <span class="synIdentifier">username</span><span class="synSpecial">:</span> &lt;username()&gt; <span class="synIdentifier">fullname</span><span class="synSpecial">:</span> &lt;firstName()&gt; &lt;lastName()&gt; <span class="synIdentifier">birthDate</span><span class="synSpecial">:</span> &lt;date()&gt; <span class="synIdentifier">email</span><span class="synSpecial">:</span> &lt;email()&gt; <span class="synIdentifier">favoriteNumber</span><span class="synSpecial">:</span> 50%? &lt;numberBetween(1, 200)&gt; </pre><p>これで10件のuserが作成され、それぞれにFakerを利用したランダムな名前や誕生日、メールアドレスなどが設定される。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>コードでテストデータを用意する苦労からは解放されたものの、まだ面倒な点があり、先に紹介した <a href="http://www.karakaram.com/symfony2-alice-bundle">[Symfony] AliceBundle&#x3067;&#x81EA;&#x52D5;&#x30C6;&#x30B9;&#x30C8;&#x306E;fixture&#x3092;yml&#x5316;&#x3057;&#x3088;&#x3046;</a> から引用させていただくと、</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&gt;</span>loadFixtures<span class="synSpecial">(</span> <span class="synType">array</span><span class="synSpecial">(</span> <span class="synPreProc">new</span> UserFixtureLoader<span class="synSpecial">()</span>, <span class="synSpecial">)</span> <span class="synSpecial">)</span>; </pre><p>このように一つのFixtureごとに<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>のクラス(ここではUserFixtureLoaderのこと)を作らなければならない。これは結構面倒だ。</p><p>それで色々と探していたところ <a href="https://github.com/h4cc/AliceFixturesBundle">h4cc/AliceFixturesBundle</a> を発見した。DoctrineFixturesBundle に依存しないため、より簡潔なFixtureの読み込みを実現している。</p><p>具体的な実装はデモのテストコード、<a href="https://github.com/h4cc/AliceDemo/blob/master/src/h4cc/AliceDemoBundle/Tests/Controller/UserControllerTest.php">AliceDemo/src/h4cc/AliceDemoBundle/Tests/Controller/UserControllerTest.php</a> を見るとわかりやすい。</p><p>抜粋すると、</p> <pre class="code lang-php" data-lang="php" data-unlink><span class="synSpecial">&lt;?php</span> <span class="synType">public</span> <span class="synType">static</span> <span class="synPreProc">function</span> setUpBeforeClass<span class="synSpecial">()</span> <span class="synSpecial">{</span> <span class="synStatement">$</span><span class="synIdentifier">client</span> <span class="synStatement">=</span> <span class="synType">static</span><span class="synStatement">::</span>createClient<span class="synSpecial">()</span>; <span class="synStatement">$</span><span class="synIdentifier">manager</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">client</span><span class="synType">-&gt;</span>getContainer<span class="synSpecial">()</span><span class="synType">-&gt;</span>get<span class="synSpecial">(</span>'<span class="synConstant">h4cc_alice_fixtures.manager</span>'<span class="synSpecial">)</span>; <span class="synType">static</span><span class="synStatement">::$</span><span class="synIdentifier">fixtures</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">manager</span><span class="synType">-&gt;</span>loadFiles<span class="synSpecial">(</span><span class="synType">array</span><span class="synSpecial">(</span><span class="synConstant">__DIR__</span> <span class="synStatement">.</span> '<span class="synConstant">/DataFixtures/Alice/alice.yml</span>'<span class="synSpecial">))</span>; <span class="synStatement">$</span><span class="synIdentifier">manager</span><span class="synType">-&gt;</span>persist<span class="synSpecial">(</span><span class="synType">static</span><span class="synStatement">::$</span><span class="synIdentifier">fixtures</span><span class="synSpecial">)</span>; <span class="synSpecial">}</span> </pre><p>こういう感じで直接Aliceの<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAML">YAML</a>を指定するだけとなっており、Loaderクラスを作成する必要がなく大変便利。</p><p>ということで、 <a href="https://github.com/h4cc/AliceFixturesBundle">h4cc/AliceFixturesBundle</a> の紹介でした。なんと <a href="http://qiita.com/advent-calendar/2015/symfony">Symfony Advent Calendar 2015</a> の次の日、12/5はまだ空いているので、どなたかよろしくお願いします!</p> Thu, 03 Dec 2015 00:00:00 +0900 hatenablog://entry/10257846132646979444 「フラットデザインで考える 新しいUIデザインのセオリー」を読んだ https://cloned.hatenablog.com/entry/20150117 <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774169544/clonedlog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51sj6ygHjdL._SL160_.jpg" class="hatena-asin-detail-image" alt="フラットデザインで考える 新しいUIデザインのセオリー" title="フラットデザインで考える 新しいUIデザインのセオリー"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774169544/clonedlog-22/">フラットデザインで考える 新しいUIデザインのセオリー</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 宇野雄</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/11/21</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4774169544/clonedlog-22" target="_blank">この商品を含むブログ (2件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>Modern UI 、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Material%20Design">Material Design</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>など、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%C7%A5%B6%A5%A4%A5%F3">フラットデザイン</a>を冠するUIの違いを比較しながら、みんながざっくり呼んでいる「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%C7%A5%B6%A5%A4%A5%F3">フラットデザイン</a>」の正体を概観しつつ、それを踏まえてこれからのUIデザインを考えるための基本的な考察を提供するような感じになっている。</p><p>概観している部分の一例としては</p> <blockquote cite="http://www.amazon.co.jp/exec/obidos/ASIN/4774169544/clonedlog-22/"> <p>つまり人が触るパーツを丸く、それ以外の要素をすべて 角のある矩形で構成するのです。これは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>が非常にうまく実現している手法です。</p> <cite><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774169544/clonedlog-22/">&#x30D5;&#x30E9;&#x30C3;&#x30C8;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3067;&#x8003;&#x3048;&#x308B; &#x65B0;&#x3057;&#x3044;UI&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x306E;&#x30BB;&#x30AA;&#x30EA;&#x30FC; P84</a></cite> </blockquote> <blockquote cite="http://www.amazon.co.jp/exec/obidos/ASIN/4774169544/clonedlog-22/"> <p>例えば<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> 7以降の<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>では、基本のキーカラーを水色と定めて、水色になっている部分はすべて押せるパーツというルールを作り、その他の色を基本的に排除しました。</p> <cite><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774169544/clonedlog-22/">&#x30D5;&#x30E9;&#x30C3;&#x30C8;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3067;&#x8003;&#x3048;&#x308B; &#x65B0;&#x3057;&#x3044;UI&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x306E;&#x30BB;&#x30AA;&#x30EA;&#x30FC; P109</a></cite> </blockquote> <p>こういう感じで、それぞれどのようなアプローチで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%C7%A5%B6%A5%A4%A5%F3">フラットデザイン</a>を実現しているのかを具に解説している。世の中的にはどうしても<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>にフォーカスしがちなところを、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%C7%A5%B6%A5%A4%A5%F3">フラットデザイン</a>的なウェブサイトなど、幅広く扱っているところが良い。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%C7%A5%B6%A5%A4%A5%F3">フラットデザイン</a>の特徴を踏まえつつ、これからのUIデザインを考えるための考察として、配色、余白、フォント、各種UIパーツ(ボタンや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%A7%A5%C3%A5%AF%A5%DC%A5%C3%A5%AF%A5%B9">チェックボックス</a>など)の表現手法など、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%E9%A5%C3%A5%C8%A5%C7%A5%B6%A5%A4%A5%F3">フラットデザイン</a>に触れつつ解説されている。</p><p>最近、我々がよく見るソフトウェア上のUIデザインを改めて解説されてみる、というテーマとして良書だと思う。案外気付けていなかった部分や、普段自分が使っていないOSのデザイン手法など、なるほどなーと思うところが多かった。</p> Sat, 17 Jan 2015 00:00:00 +0900 hatenablog://entry/10257846132646979487 iPhone 6を買った https://cloned.hatenablog.com/entry/20141029 <p><a href="http://photozou.jp/photo/show/141581/213410657"><img src="http://art37.photozou.jp/pub/581/141581/photo/213410657.v1414593960.jpg" alt="iPhone 6" width="450" height="299"></a><br><a href="http://photozou.jp/photo/show/141581/213410657">iPhone 6</a> posted by <a href="http://photozou.jp/user/top/141581">(C)cloned</a></p><p>手元の<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%204s">iPhone 4s</a>が下取りされる運命にあると知ったので、購入日からずっと貼っていたフィルムを剥がして新品同様の美しい<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%204s">iPhone 4s</a>を使っていたら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%206">iPhone 6</a>の在庫があっさり見つかった。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%206">iPhone 6</a>は吹き付け仕上げな感じで、今までの金属感がなく安っぽい。Touch IDは便利だし、画面が広いのも左上が届かない以外は見やすいし良いのだけれど、良いものを手にした感は薄れたかなぁ。</p> Wed, 29 Oct 2014 00:00:00 +0900 hatenablog://entry/10257846132646979501 UnityのWWW、WWWFormのハマりどころ https://cloned.hatenablog.com/entry/20140609 <p>UnityにバンドルされているWWWクラスを使うと簡単にHTTP通信を行うことができて便利なのだけど、色々やろうとするといくつか判り難い挙動があったので、その辺りをメモ。</p><p>Unityのバージョンは4.5。</p><p>WWWのコンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タには下記の4つ(最後のものは非推奨)がある。ドキュメントは<a href="http://docs.unity3d.com/ScriptReference/WWW-ctor.html">Unity - Scripting API: WWW.WWW</a>。</p> <ul> <li>WWW(string url);</li> <li>WWW(string url, WWWForm form);</li> <li>WWW(string url, byte[] postData);</li> <li>WWW(string url, byte[] postData, Dictionary<string, string> headers);</li> <li>WWW(string url, byte[] postData, Hashtable headers); // deprecated</li> </ul><p>ここでまず気をつける必要があるのが、WWWFormクラスをそのまま渡す場合は、第三引数にHTTPヘッダを渡すことができない点。下記、ここから引き起こされるハマりどころ。</p><p><span class="deco" style="font-weight:bold;">ファイル添付したらヘッダを追加できない?</span></p><p>WWWForm.AddBinaryData() を使うとファイルアップロードが可能だけど、HTTPヘッダも同時に変更したい場合に困ったことになる。</p> <pre class="code lang-cs" data-lang="cs" data-unlink>Dictionary&lt;<span class="synType">string</span>, <span class="synType">string</span>&gt; headers = <span class="synStatement">new</span> Dictionary&lt;<span class="synType">string</span>, <span class="synType">string</span>&gt;(); headers.Add(<span class="synConstant">&quot;Cookie&quot;</span>, <span class="synConstant">&quot;a=b&quot;</span>); WWForm form = <span class="synStatement">new</span> WWWForm(); form.AddBinaryData(<span class="synConstant">&quot;foo&quot;</span>, binary, <span class="synConstant">&quot;foo.png&quot;</span>, <span class="synConstant">&quot;image/png&quot;</span>); WWW www = <span class="synStatement">new</span> WWW(<span class="synConstant">&quot;http://example.com/&quot;</span>, form.data, headers); </pre><p>このようにすると正しくファイルアプロードができない。ここでHTTPヘッダを変更せずに WWW(string url, WWWForm form); コンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タを利用すると正しく動作するようになる。</p> <pre class="code lang-cs" data-lang="cs" data-unlink>WWForm form = <span class="synStatement">new</span> WWWForm(); form.AddBinaryData(<span class="synConstant">&quot;foo&quot;</span>, binary, <span class="synConstant">&quot;foo.png&quot;</span>, <span class="synConstant">&quot;image/png&quot;</span>); WWW www = <span class="synStatement">new</span> WWW(<span class="synConstant">&quot;http://example.com/&quot;</span>, form); </pre><p>ということは、コンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タの第二引数がformそのものではなくform.dataなのが駄目で、WWWForm<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>だから動作するのか、と結論付けてしまうとヘッダの変更ができなくなってしまう。</p><p>実際にはそうではなくて下記の挙動が考慮できていないことが原因。</p> <ul> <li>WWW(string url, WWWForm form); コンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タを利用するとヘッダは内部でWWWForm.headersの値が利用される。</li> <li>WWWForm.AddBinaryData() を呼び出すとWWWForm.headersにContent-Typeが自動的に追加される。 <ul> <li>実際の値は multipart/form-data; boundary="xxxx"' という感じ</li> </ul></li> </ul><p>つまり、WWWForm.AddBinaryData() 後に追加されているContent-Typeヘッダの存在を無視して自前のヘッダのみを追加したことが原因なので、下記のようにWWWForm.headersを値を最後に設定するようにすれば動作するようになる。</p> <pre class="code lang-cs" data-lang="cs" data-unlink>Dictionary&lt;<span class="synType">string</span>, <span class="synType">string</span>&gt; headers = <span class="synStatement">new</span> Dictionary&lt;<span class="synType">string</span>, <span class="synType">string</span>&gt;(); headers.Add(<span class="synConstant">&quot;Cookie&quot;</span>, <span class="synConstant">&quot;a=b&quot;</span>); WWForm form = <span class="synStatement">new</span> WWWForm(); form.AddBinaryData(<span class="synConstant">&quot;foo&quot;</span>, binary, <span class="synConstant">&quot;foo.png&quot;</span>, <span class="synConstant">&quot;image/png&quot;</span>); <span class="synStatement">foreach</span> (DictionaryEntry entry <span class="synStatement">in</span> form.headers) { headers[System.Convert.ToString(entry.Key)] = System.Convert.ToString(entry.Value); } WWW www = <span class="synStatement">new</span> WWW(<span class="synConstant">&quot;http://example.com/&quot;</span>, form.data, headers); </pre><p><span class="deco" style="font-weight:bold;">GETだとHTTPヘッダを追加できない?</span></p><p>WWWクラスはコンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タ呼び出し時にWWWForm、もしくはpostDataが存在するとPOSTと解釈するようになっている。POSTの場合は単に第三引数にヘッダのDictionaryを渡せば良いが、GETの場合は適切なコンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タがない、ように見えるけれど、nullを渡せばGETでもヘッダを追加できる。</p> <pre class="code lang-cs" data-lang="cs" data-unlink>WWW www = <span class="synStatement">new</span> WWW(<span class="synConstant">&quot;http://example.com/&quot;</span>, <span class="synConstant">null</span>, headers); </pre><p><span class="deco" style="font-weight:bold;">POSTでpostDataがない場合はHTTPヘッダを追加できない?</span></p><p>応用編。POSTにも関わらず、POSTするデータはない。けれどもHTTPヘッダを追加したい。みたいな場合はどうしようもないので</p> <pre class="code lang-cs" data-lang="cs" data-unlink>form.AddField(<span class="synConstant">&quot;dummy&quot;</span>, <span class="synConstant">&quot;dummy&quot;</span>); </pre><p>とでもするしかないと思われる。postDataが空の場合は下記エラーになる。</p> <pre class="code" data-lang="" data-unlink>Error when creating request. POST request with a zero-sized post buffer is not supported.</pre><p><span class="deco" style="font-weight:bold;">GET、POSTだけではなくPUT、DELETEも使いたい</span></p><p>使えない。上述のように、GETとPOSTが自動判定されるような機構で、PUT、DELETEはサポートされていない。</p><p><span class="deco" style="font-weight:bold;">そういうわけでWWW用の便利なクラスを書いた</span></p><p>こういったハマりポイントを解決しつつ、もう少し楽にWWWとWWWFormを使いたいと思って、一つクラスを書いたのでGistに貼っておいた。</p> <ul> <li><a href="https://gist.github.com/cloned/fe255b4f7d6feacee319">WWWClient.cs</a></li> </ul><p>特徴としては</p> <ul> <li>コルーチンを使わないでコールバック(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>)で終了後の処理を書ける(内部ではコルーチンを使っている)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%A4%A5%E0%A5%A2%A5%A6%A5%C8">タイムアウト</a>をサポート(地味に必要ですよね)</li> <li>上述の複雑なコンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タのハマりどころをできるだけ解決</li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%A4%A5%E0%A5%A2%A5%A6%A5%C8">タイムアウト</a>に関しては<a href="http://debuglog.tumblr.com/post/48691774277/www">DEBUG.LOG (WWW&#x30AF;&#x30E9;&#x30B9;&#x306E;&#x30BF;&#x30A4;&#x30E0;&#x30A2;&#x30A6;&#x30C8;&#x51E6;&#x7406;)</a>を参考にさせてもらいました。</p><p>使い方は下記な感じ。</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> WWWKit; <span class="synType">public</span> <span class="synType">class</span> WWWClientExample : MonoBehaviour { <span class="synType">void</span> Start() { <span class="synComment">// 単純なGETリクエスト。終了処理はOnDoneプロパティにDelegateを代入。</span> <span class="synComment">// DelegateにはおなじみのWWWクラスが渡されるのでレスポンスに関する</span> <span class="synComment">// 処理は今まで通りWWWクラスのノウハウが利用可能。</span> WWWClient client = <span class="synStatement">new</span> WWWClient(<span class="synStatement">this</span>, <span class="synConstant">&quot;http://example.com/&quot;</span>); client.OnDone = (WWW www) =&gt; { Debug.Log(www.text); }; client.Request(); <span class="synComment">// POSTリクエストの場合は、WWWクラスの思想を継承して、下記のように</span> <span class="synComment">// postDataを設定したらPOSTになる、という仕様。</span> WWWClient http = <span class="synStatement">new</span> WWWClient(<span class="synStatement">this</span>, <span class="synConstant">&quot;http://example.com/&quot;</span>); client.AddData(<span class="synConstant">&quot;foo&quot;</span>, <span class="synConstant">&quot;bar&quot;</span>); client.OnDone = (WWW www) =&gt; { Debug.Log(www.text); }; client.Request(); <span class="synComment">// ファイル添付したい場合。下記はstringをbyte[]にしてるけど画像など</span> <span class="synComment">// 何でも可能。</span> <span class="synType">byte</span>[] binary = System.Text.Encoding.Unicode.GetBytes(<span class="synConstant">&quot;bar&quot;</span>); WWWClient http = <span class="synStatement">new</span> WWWClient(<span class="synStatement">this</span>, <span class="synConstant">&quot;http://example.com/&quot;</span>); client.AddBinaryData(<span class="synConstant">&quot;foo&quot;</span>, binary, <span class="synConstant">&quot;test.txt&quot;</span>, <span class="synConstant">&quot;application/octet-stream&quot;</span>); client.OnDone = (WWW www) =&gt; { Debug.Log(www.text); }; client.Request(); <span class="synComment">// エラーハンドリングをする場合は、OnFailプロパティにDelegateを代入。</span> <span class="synComment">// 正常終了のハンドリングと同じくWWWクラスが渡されるのでごにょごにょする。</span> client.OnFail = (WWW www) =&gt; { Debug.Log(www.error); }; <span class="synComment">// タイムアウトの場合はWWWクラスがDispose()された後で利用できなくなって</span> <span class="synComment">// いるので、引数なしのDelegateをOnDisposedプロパティに代入する。</span> client.OnDisposed = () =&gt; { Debug.Log(<span class="synConstant">&quot;Timed out&quot;</span>); }; <span class="synComment">// タイムアウトを設定する場合はTimeoutプロパティに値を代入(float)。</span> <span class="synComment">// デフォルトはタイムアウト設定なし(無制限)。</span> client.Timeout = <span class="synConstant">10f</span>; <span class="synComment">// ヘッダを追加する。</span> client.AddHeader(<span class="synConstant">&quot;Cookie&quot;</span>, <span class="synConstant">&quot;cookiename=cookievalue&quot;</span>); } } </pre> Mon, 09 Jun 2014 00:00:00 +0900 hatenablog://entry/10257846132646979514 WebKitは欧文フォントによって和文フォントを切り替えている https://cloned.hatenablog.com/entry/20140324 <p>知らなかった。<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C2%CA%B8">和文</a>フォントが指定されていない場合、ブラウザのデフォルト指定フォントで表示されるものだと思っていたけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/WebKit">WebKit</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Safari">Safari</a>)や<a class="keyword" href="http://d.hatena.ne.jp/keyword/WebKit">WebKit</a>からフォークしたBlink(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>)では、欧文フォントによって<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C2%CA%B8">和文</a>フォントが切り替わるようになっているみたい。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Safari">Safari</a>は7.0.2、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>は33.0.1750.152で確認。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/cloned/20140324224036" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20140324/20140324224036.png" alt="f:id:cloned:20140324224036p:image" title="f:id:cloned:20140324224036p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>それぞれ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C2%CA%B8">和文</a>フォントを指定していないのに欧文フォントの空気を読んで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C2%CA%B8">和文</a>フォントまで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%C0%C4%AB%C2%CE">明朝体</a>、ゴシック体、ボールドに切り替わっている。ここに表示しているのは画像で実際のHTMLサンプルは<a href="http://cloned.jp/blog/20140324/">&#x3053;&#x3061;&#x3089;</a>。</p><p>ただ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>だと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>でもこうならない。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>は未確認。</p><p>日本人が日本語のウェブサイトを作るときは日本語フォントを指定すると思うので気にするまでもないけど、最近<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>のニュースフィードのシェアに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%C0%C4%AB%C2%CE">明朝体</a>が表示されるようになって、そういう趣味になったのかと思ってフォント指定を調べたら、欧文フォントしか指定されていなかったので、もしかしてと思ったらそうだった。</p> Mon, 24 Mar 2014 00:00:00 +0900 hatenablog://entry/10257846132646979570 SLAの稼働率がどのくらいのダウンタイムなのか計算するツール作った https://cloned.hatenablog.com/entry/20140213 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%D4%C6%AF%CE%A8">稼働率</a> => 月間ダウンタイム計算ツール<br /> <a href="http://cloned.jp/sla-calc/">http://cloned.jp/sla-calc/</a></p><p>ついでなので、有名どころの<a class="keyword" href="http://d.hatena.ne.jp/keyword/SLA">SLA</a>を調べて載せたんだけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20App%20Engine">Google App Engine</a>の95.0%未満で50%返金や、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%20EC2">Amazon EC2</a>の 99.0%未満で30%返金みたいな返金レートは国産だと見つけられなかった。みんな10%で統一されていて15%というのが1件見つかったくらい。</p><p>そんなにたくさん調べていないのでざっと見た感じだけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IDC">IDC</a>フロンティアの稼働保証が 99.999% と高かった。</p> Thu, 13 Feb 2014 00:00:00 +0900 hatenablog://entry/10257846132646979583 topよりグラフィカルで操作性の良いhtopを使ってみた https://cloned.hatenablog.com/entry/20131222 <p><a href="http://htop.sourceforge.net">htop - an interactive process-viewer for Linux</a></p><p>topに色を付けたいと思っていたらhtopというのがあったので使ってみた。<a class="keyword" href="http://d.hatena.ne.jp/keyword/SourceForge">SourceForge</a>に<a href="http://sourceforge.net/p/htop/code/1/tree/">&#x521D;&#x3081;&#x3066;&#x30B3;&#x30DF;&#x30C3;&#x30C8;&#x3055;&#x308C;&#x305F;</a>のが2006年3月4日となっていてそんなに新しいプロジェクトではないけれど、<a href="http://sourceforge.net/p/htop/code/310/">4&#x65E5;&#x524D;&#x306B;&#x3082;&#x30B3;&#x30DF;&#x30C3;&#x30C8;&#x3055;&#x308C;&#x3066;</a>いて、ちゃんとメンテされている模様。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>だと<a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>に入っているので下記だけでインストールできる。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo yum install htop </pre><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/cloned/20131222214536" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20131222/20131222214536.png" alt="f:id:cloned:20131222214536p:image" title="f:id:cloned:20131222214536p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>色が付いた以上に、CPUやメモリのグラフィカルな表示が可愛い!!</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/cloned/20131222214913" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20131222/20131222214913.png" alt="f:id:cloned:20131222214913p:image" title="f:id:cloned:20131222214913p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>表示中のプロセスをスペースキーで選択状態にできて(画像だと黄色の行)、その場で<a class="keyword" href="http://d.hatena.ne.jp/keyword/F9">F9</a>を送信すると選択中のプロセスをkillできる強者。とはいえ、(プロセス番号ではなく)かなりカジュアルにkillできてしまうので本番で使うには恐いなーと思った。</p><p><span itemscope itemtype="http://schema.org/Photograph"><a href="http://f.hatena.ne.jp/cloned/20131222214912" class="hatena-fotolife" itemprop="url"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/cloned/20131222/20131222214912.png" alt="f:id:cloned:20131222214912p:image" title="f:id:cloned:20131222214912p:image" class="hatena-fotolife" itemprop="image"></a></span></p><p>操作性が良くて、表示されていない箇所は下にも上にもスクロールできて、プロセスの選択はマウスでポチっとできるし、各操作も<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AD%A1%BC%A5%D0%A5%A4%A5%F3%A5%C9">キーバインド</a>を覚える事無く明記されているファンクションキーから各操作ができる。上の画像はF6 SortByを選択したときのもの。topの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AD%A1%BC%A5%D0%A5%A4%A5%F3%A5%C9">キーバインド</a>は全く覚えられなくて困る(hでヘルプ出せばわかるっちゃわかるけど)。</p><p>開発環境でしばらく使ってみよう。</p> Sun, 22 Dec 2013 00:00:00 +0900 hatenablog://entry/10257846132646979592