「Model」を含む日記 RSS

はてなキーワード: Modelとは

2016-10-17

http://anond.hatelabo.jp/20161017165607

ありがとうございます。読んでみます

Railsの時は黒魔術師コード理解できなかったけど、

何をやっているかは把握できたし、そこに書く理由もそれなりに分かっていたのです。

まさにレールに乗ってる感じ。

特定されないか気になるけど気にしないで書く。

今の案件、Controllerに英数字の画面IDを定数で渡してView指定し、

画面IDと同名のファイル名のviewviewsフォルダに作り、

ロジックはServiceに書いている。

DBアクセスmodelフォルダ内にdaoってフォルダ作ってそこにソース置いてる。

JSのincludeはもうどこでやっているのかわ分からない。

他をまねて書いたら勝手にheader部にincludeされてる。普通にviewに書いちゃダメなのか。

こんなん初見理解できるものなんでしょうか。

理解というのは、使い方というか、なぜこういう構成にしたのかという思想について。

http://anond.hatelabo.jp/20161017164515

ビジネスロジックModelに、とかサービス層に、とか言われて、困る感じか

1画面1機能ならViewとControllerで十分なんだよね

同じ機能複数画面で提供しようとすると、Controllerに処理書くスタイルだとコードが重複だらけになるんだよね

それを共通化しようってしたときに、ソフトウェアアーキテクチャとかが出てくるんだよね

教科書としては「エンタープライズ アプリケーションアーキテクチャパターン」とかあるけど、難しいし、理解してない人のほうが多いし、人によって言ってること変わるんだよね

2016-07-25

gitにおけるコミットログ/メッセージ例文集100

私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくま単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。

要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのであるググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか

仕方なく自分でまとめたので、増田に垂れ流しておく。

はじめに

ここで挙げているコミットログは全て実際のコミットログから転載である。当然ながら各コミットログ著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユース範囲なら許してくれるだろうと考え名前プロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。

抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリGitHubSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。

結果として対象としたリポジトリは以下の通り。

atomのみ5400件抽出していたため、計25400件のコミットログベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。

こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である個人的に「うーんこの」と思った表現も、散見される場合は載せた。

ということで、以下用例を羅列していく。

用例集

オプションフラグメニューを追加した
ファイルを追加した
メソッド機能を追加した
実装を別のものへ切り替えた
  • Use args.resourcePath instead of args.devResourcePath
  • Use arrays instead of while loops
  • Use auto instead of repeating explicit class names
  • Use weak pointer instead of manual bookkeeping
  • Change all uses of 'CInt' to 'Int32' in the SDK overlay
  • Change Integer#year to return a Fixnum instead of a Float to improve consistency
新しく何かに対応した/機能上の制約を取り払った
何かを使うようにした
より好ましい実装に改良した
何かを出来ない/しないようにした
  • Don't bail reading a metadata instance if swift_isaMask isn't available
  • Don't exit until the parent asks for an instance
  • Don't include Parent pointer in Nominal/BoundGeneric TypeRef uniquing
  • Don't use MatchesExtension for matching filters
  • Don't use ES6 class for AutoUpdater windows class
  • Don't use MatchesExtension for matching filters
  • Avoid `distinct` if a subquery has already materialized
  • Avoid infinite recursion when bad values are passed to tz aware fields
オブジェクトの内容や挙動確認やすくした
Assertを追加した
不要コードを除去した
コードを移動した
名前修正した
さなバグタイポ修正した, 警告を潰した
バグや好ましくない挙動修正した
テストコメントドキュメントを追加した
テストを削除した
テストコメント修正した
ドキュメント修正した

表現傾向とまとめ

以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。

Add1149
Fix1014
Update584
Remove566
Use382
Don't260
Make228
Move178
Change103
Rename85
Improve76
Avoid68
Allow65
Implement60
Handle58

コミットログの基本形はもちろん動詞 + 名詞である名詞固有名詞複数形、不可算名詞が多いが、単数形場合冠詞は a が使われるか、あるいは省略される。the はまず使われない。

何かを追加した、という表現では非常に広く Add が使われる。メソッドからテストドキュメントに至るまで大概これでまかなえる。

一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typocrash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である

Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。

また、Fixtypo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメントコメントテストに使われ、本体コード修正に対しては使われない。本体コード修正にあわせてテスト更新したなら Update が使われる。ただ、テスト機構それ自体バグ修正したなら Fix である

無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)からのもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合Don't use を使うことが多い。

何かをしないようにしたなら Don't を、内部実装効率化なら Make A + 比較級/形容詞Improve が使われる。

中身の変更を伴わない単なる名前の変更なら Rename A to B、コード機能論理上の場所を移動させたなら Move A to B である

この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。

余談

コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である

一方で、シンプル単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。

おわりに

8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体効率のいい学習になるという話と同じだと思う。

このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。

2016-05-17

http://anond.hatelabo.jp/20160516152330

それをユーザから見て命令変数への破壊的代入ではなく

参照透明な関数インターフェースで実現するのが

いわゆるモナドや(誰かの独自解釈ではない本来の)FRP

http://elm-lang.org/examples/time

view : Model -> Html Msg
view model =
  let
    angle =
      turns (Time.inMinutes model)

    handX =
      toString (50 + 40 * cos angle)

    handY =
      toString (50 + 40 * sin angle)
  in
    svg [ viewBox "0 0 100 100", width "300px" ]
      [ circle [ cx "50", cy "50", r "45", fill "#0B79CE" ] []
      , line [ x1 "50", y1 "50", x2 handX, y2 handY, stroke "#023963" ] []
      ]

HaskellライブラリもElmのような言語も、サンプルもJavaScript実装

ググればWikipediaで出てくるレベル

https://en.wikipedia.org/wiki/Functional_reactive_programming#Implementations

2015-11-29

4Pマーケティングミックスの要素

企業は以下の4Pを適切に操作して顧客にモノを売る。

いや、おかしいでしょ。なんでPlaceが流通になるの。なんとか頭文字を合わせようとしただけじゃないの。

で、さら顧客志向マーケティングミックスとして後に生まれたのが4C。

Consumer万能すぎでしょ。もっと狭い言葉を使おうよ。

サービスマーケティングミックスでは4Pに3つのPが加えられ、7Pになる。

Physical Evidenceが分かりにくすぎる。2単語になってるし。

さら共生マーケティングにおける4Cは上記の4Cとは違うとか、共生マーケティングの分野には7Cs COMPASS MODELなるものもあるとか。

https://ja.wikipedia.org/wiki/%E5%85%B1%E7%94%9F%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0

7Cs COMPASS MODELが何を言ってるか分かる人います

無理やりかっこよく頭文字を合わせてなんの得があるというのか。

こんなことしているから、ビジネス寄りの学問うさんくさい金稼ぎの手段だという偏見が抜けないんだ。

2015-10-15

ニュートリノ振動は役に立つのか?

はてなブックマーク - ノーベル賞受賞の梶田隆章教授、NEWS小山慶一郎に「意味が分からない」 - ライブドアニュース

において「ニュートリノ振動は役に立つのか?」が話題になっていました。

以下に個人的な考えを述べます。できる限り誠実に書いてみます

ノーベル賞受賞の理由

まずはニュートリノ振動ノーベル賞を受賞した理由を振り返ってみましょう。

研究者達は世界の全てを記述する究極理論を目指しています。その理論においては自然界における4つの力、重力電磁気力(電場磁場)、強い力、弱い力を統一されているはずだと考えられています

1970年代電磁気力と弱い相互作用統一まで完成し、現在では強い相互作用記述する量子色力学とあわせて標準理論と呼ばれています。そしてこの後、人類は長い停滞期を迎えました。標準理論実験と合いすぎたのです。

人類はこれまで実験により理論の破れを見つけ、それをヒントにして次の理論を作り上げてきました。マイケルンモーリーの実験相対論に、光電効果実験量子力学へと繋がりました。標準理論を超えて大統一理論に進むには理論の破れを見つける事が不可欠なのですが、長い間それを見つける事ができませんでした。こんな中で唯一見つかった標準理論の破れ目がニュートリノ振動だったのです。現在私たちの手にする数少ない、 beyond the standard model へ繋がる鍵と呼べるでしょう。

ニュートリノ振動は役に立つのか?

以上より「ニュートリノ振動は何の役に立つのか」は「大統一理論は何の役に立つのか」に言い換える事が出来るでしょう。

しかし残念ながら大統一理論は(候補は日々研究されているものの)まだ完成もしていません。これはちょっと早すぎる質問でしょう。その前にまずは現在素粒子理論——標準理論は役に立つのか? を考えてみることにしましょう。

素粒子理論は役に立つのか?

実をいうと僕は素粒子理論は実社会には全く役に立たないのではないかと思っていました。

ところが癌医療への応用火山研究への応用加速器副産物といえる放射光を利用した品種改良材料開発といった産業利用が次々と成されるのを見て心の中でジャンピング土下座しました。

いや、僕が「素粒子は役に立たない」と考えたのは単に僕に才能がなかっただけであって、世の中には僕の思いもよらない利用法を考えつくすごい人達がたくさんいるのだと思い知らされました。

それでニュートリノ振動は役に立つのか?

ここでようやく表題に戻るのですが、「ニュートリノ振動は役に立つのか?」「大統一理論が完成したとしてそれは役に立つのか?」といった質問に僕なりに誠実に答えてみると以下のようになります

「正直に言うと僕には役に立つようには思えないし、どう使われるかも全く想像つきません。そして役に立たないと言い切る自信もありません。」

「ただ、これまでの歴史を振り返ると誰かが利用法を考えるかもしれません。世の中には凄い人たちがたくさんいるのですから

追記

これだけだと誠実じゃないと思ったので追記します。

仮に大統一理論が完成したとしてもお金にはなりません。理論定理を使う上で特許料は発生しないからです。研究成果は世界に公開されます

素粒子研究人類の貢献にはなるかもしれませんが、国益にはならないでしょう。

2014-12-19

http://anond.hatelabo.jp/20141219020034

I was rejected by my best girl

My girlfriend left me

What plays a invaluable role for our study

What plays an invaluable role in our study

a simple model that explain

a simple model that explains

a large number of the descriptions

numerous descriptions

me and her

her and me

the way how

how

アブストを1 wordも書けてないけど彼女と別れたことをアブストっぽく書く

卒業研究がまるでうまく言ってなくて来週提出の卒論アブストが全く書けない現実逃避に。

English

I was rejected by my best girl nine months ago. It has been unclear the reason why they broke up despite the each other's intense love. In this thesis, we provide a clear explanation about the event.

What plays a invaluable role for our study is descriptions gathered from me about each incident that had happened along them. We were able to obtain a large number of the descriptions, since a winter chill in the air reminded me the divine memories of the days with her. We carefully examined each of them and arranged the incidents into some categories. By combing chronological order and categories of the incidents, we analyzed the emotional changes of me and her.

We propose a simple model that explain the breakup between them, based on the above mentioned analysis. From discussions about the model with some people, the model is considered to be capturing major matters. We also present our attempt to match the model to the existing collection of patterns of the way how once loved people would break up. Even though this attempt is not much succeeded, at least it reveals that what I experienced was quite ordinal breakup.

日本語

私は九ヶ月前に恋人から別れを告げられた.互いに強く想いあっていたにも関わらず彼らが別れることとなった理由は,不明瞭であった.本論文において,我々はこの出来事についての明瞭な解釈提示する.

我々の研究にとって非常に重要役割を果たしたのは,彼らに起こった事象に関する多くの私から収集された叙述である.冬の寒さが私に彼女と過ごしたかけがえのない日々を思い出させたおかげで,我々は多くの叙述を得ることができた.我々はそれらの一つ一つを注意深く調べて,幾つかの分類へと整理した.各事象についての時系列順と分類を組み合わせることで,我々は私と彼女感情的な移り変わりを分析した.

この分析に基いて,我々は彼らの別れを解釈する単純なモデルを提案する.本モデルについて幾人かと行った議論から,本モデル重要問題を捉えていると考えられる.さらに,かつて愛し合った人々がどのようにして別れるかのパターンを集めた既存研究と,本モデルを照らし合わせる試みを示す.この試みは十分に成功してはいないものの,少なくとも私が経験したことがありきたりな別れであったことを明らかにしている.

2014-10-11

アプリ屋がRailsを初めて触ってみて感じた事

Qiitaに書こうかと思ったけど、言いたいことも言えない、こんな世の中じゃ。

発想が古臭い

モバイルファーストAPIファースト文脈ハイブリッドWebをやってきた目からすると、サーバーサイドでHTMLを生成してページ遷移させるなどという90年代調のクラシカルな発想を基本に据えるフレームワークはとても斬新に思えました。HTMLゴリゴリ生成するなんてよほど特殊最適化をしようとするのでなければそもそも発想として出てこないです。それでいてDSLメタプログラミング等のテクニカル技法宝石のように鏤められている様はまるでエジプト時代骨董品を見るかのような趣がありました。turbolinkなどは、かつて表計算ソフトに出しゃばっていたイルカを思い起こさせる味があります。かつて慣れ親しんできたSPAが星のように遠い存在になりました。

モデルMVC

Web界隈の人々がモデルだとかアクティブレコードだとか"MVC"だとかを非常に具象的に話す様を見るにつけ、お前らどんだけPofEAA読み込んでるんだよと畏怖していた時期が僕にもありましたが、どうやら彼等はRailsクラスディレクトリという特定実装について話していただけだったようです。Modelという概念もこれだけ肥大化してしまったら、オリジナル概念で彼等と会話するのは諦めるべきかなと思いましたし、Railsの"MVC"をアンクォートして語るのはもはや害悪であるとすら感じました。

レールから外れる辛さ

Rails界隈の人がよく「Rails流儀」や「正しい"MVC"」というのを口角泡を飛ばし議論しているのを目にするのですが、おそらく外に広がる不条理で火傷を負って快適なRails世界に引き篭もった結果としての一種のストックホルム症候群なのだなと思いました。いまやAjaxとかWebsocketとかWebRTCとかを組み込もうとする至極真っ当な方法論がとてつもない高難度に見えてきます。設定よりも規約、というのも一つの方向性だと思いますが、ドメインサービスレイヤ名前空間を構築しようとしたりコードジェネレーションしようとしたりしただけで地獄のようなCircular Dependency罰を受けてしまったので、自分がとても間違った事をしているような気がしてしまいました。とはいえConcernsに特別名前役割を与えられても正直しんどいので、皆が皆libゴミを放り込んでいく様子にも納得がいきました。

レイヤ?何それおいしいの

RailsAPIサーバーとして使おうとするとまずビューが無くなってMとCだけになりますが、いわゆる"MVC"の文脈で育ったエンジニアがなぜ息を吸うようにFat ControllerやFat Modelを作ってしまうのかという事が良く分かりました。多くのRailsリファクタ手法と称されているものクラスを書くファイルを分割する事以上のものでは無いように思えたので、Rails使いを大きめなAPIサーバー案件に回すときセットポジションDDD青本を投げつける必要が有るなと思いました。

TDDやれんのか

ビューとコントローラを結合させた場合結合テストはCapybaraとかのBDDマークアップサイドとの干渉を恐れながら強い気持ちでメンテしていくしか無いのかなと思いました。おそらく脳に電極を埋め込んでいるか緑色のランプを見るだけでハイになれる特殊な人にしか生き抜けない闇が垣間見えました。コントローラを薄くしてサービスレイヤを挟めばその辺りもうまくいけそうな気がしましたが、ビューからヘルパーモデルがいくらでも透けて見えてしまうという状況では裏側の完全性に自信を持つ事は難しそうでした。

分業とか出来るんだろうか

ビューがRubyを叩いて永続化レイヤと直接コミュニケーション出来るというのはとても生産性が高いのだろうとは思いましたが、こうして出来たパーシャルやら何やらをデザイナーとどうやって共有するかを考えると頭痛が痛くなりました。おそらく適当に切り出して綺麗な空間をassets以下に構築した上でpublicにRPCのような窓口を備えたゴミを量産していくのかなと思いましたが、もっと綺麗な方法はあるのかもしれません。でもきっとRails案件に関われるデザイナーRubyバリバリ書けるに違いないはずなので、ここが問題になる事は無いのだろうなと思いました。

RESTとかきついです

RESTはとても美しいパラダイムではありますが、そもそもHTTPがさほど美しくないので歪んだ空間には目を背けるか勝手解釈を与える事で人は初めてRESTfulを名乗る事が出来るのだと思いますGETbodyを(公式には)持たないという事について美しい説明を与える事は出来ないでしょう。サーチAPIはどうしますか。ステータスコード足りなくないですか。401エラーはどうしますか。そしてRESTあくまリソース抽象化する美しい概念なので、アクション副作用については貧弱です。動詞が足りないですし、一般動詞に狭義の意味を与えてドキュメントするのは二度手間しか見えません。PUTには冪等性があるべきみたいなこだわりは家の猫にでも説教してればいいと思います。というわけで、REST的な設計拝借することはよしとしても、「○○はRESTでは無い故云々~」みたいな注文はやめて頂きたいものです。

そんなに嫌なら他に行けば

とか言わないで欲しいです。こういう時にセットでPHPをディスって悦に浸るのは知る限りRubiestとPythonistaと中学生だけです。それにこれはあくまサーバーサイド初心者感想なので、想像するにこれ系のFWは多かれ少なかれ似たような不満を抱えるものなのかなと思います。というわけで、おそらくこれから選択肢がある限りはRailsを使い続けると思います

だってRuby楽しいんだもの

2014-09-03

過剰なアニメ規制議論が巻き起こる原因に関する一考察

なぜか”良識派”と呼ばれる人々はアニメ規制したがる。

犯罪助長うんぬんと。

表現の自由をどうこう言って反発するのもいいが、

私の意見としては子供が見てトラウマになるような映像教育に”良い”影響があると思うから規制には反対だ。

悪夢にうなされたり、エロすぎて目に焼き付いて取れなくなる経験は大人になるために絶対必要である

殴られもぜずに大人になった奴がどこにいるのか!

さて、なぜこのような暴論が幅を利かせているのか。

しかしたら、この問題を扱う新しい切り口を見つけたかもしれないので報告する。

アニメなどの表現にはある程度の規制必要だが、今のままで十分である

にも関わらず、なぜ暴力的とも言える過剰な表現規制を唱える人が出るのか。

それは、人間の心理の持つ”慣れ”という性質から来るのではないか。

人間は同じ刺激を受け続けると、徐々に慣れて何も感じなくなる。

これを心理学用語では馴化と言う。

より詳しくは以下の文献を参考にされたし。

Thompson, Richard; Spencer, William (1966). "Habituation: a model phenomenon for the study of neuronal substrates of behavior". Psychological Review. No.1 73: 16–43.

http://www.cns.nyu.edu/~david/courses/perceptionGrad/Readings/ThompsonSpencer-PsychRev1966.pdf

アニメ表現規制を唱える人々は、馴化によって現状でも十分表現規制されているという認識を持てないでいるのではないか?

おそらく、昨今のアニメ表現規制を推進したい人々は、過去にも同じように何らかの表現規制運動に参加していたはずである

そして規制強化という成果を勝ち取ってきたはずである

自分たち運動が実を結んで社会を動かしたというのは、言いようのない快感であっただろう。

おそらくは非情に強いエクスタシーを感じたはずである

さら活動を続け、さらなる規制を獲得したことだろう。

そうやって日本表現はつまらないものになり続けてきた。

だがそれも、2度、3度と繰り返す度に馴化によって何も感じなくなってしまったのではないか?

彼らは表現規制中毒となっている可能性がある。

一度オナニーを覚えたら、定期的にせずにはいられなくなるようなものだ。

努力問題を克服した時の快感は何にも代えがたい。

ダイエットという問題を克服した快感が忘れられず、ダイエット中毒になって骨と皮だけになる女子高生だっている。

同じことではないか?

彼らが理性的表現規制不要論に耳を貸さず、なんら科学的、統計的な根拠のないアニメ犯罪因果に固執する原因となってはいないだろうか?

私には彼らこそ、十分な休養を取りながら広い社会と交わり、自らの偏狭的な関心と生産性のない快楽主義を克服すべき存在に見える。

2014-08-30

違う、太陽系は渦巻きではない [BAD ASTRONOMY翻訳記事]【勝手修正版】

Twitter を見てると、太陽系天体螺旋運動するこのデマ動画が、いまだにRTされたりして拡散しているのでうんざりしてきた。

太陽系 公転」「太陽系 運動」「太陽系 移動」「太陽系 回転」などで検索すると、この動画を真に受けて紹介しているブログなどが検索上位にヒットしてきて、さらに誤解を広める一因となっている。

あまつさえニコニコ動画にも転載され、字幕までつけられている。

結論から言うと、これはトンデモ信者思い込みだけで作った信憑性ゼロ動画である映像の出来だけはよいからか、昨年の3月からかなり広まっており、天文学者フィリッププレイト氏がブログでその間違いを指摘した記事を出している。プレイト氏は『イケナイ宇宙学 間違いだらけの天文常識』の著者で、世にはびこる間違った天文宇宙ネタを斬って解説するブログ Bad Astronomy で知られている人。

この記事和訳版が以下にあり、大変ありがたいのだが(動画話題になってすぐのタイミング和訳まで出たのは本当に感謝している)、残念なことに誤訳が目立つという指摘があり、いまもって修正されていない。

翻訳が不自然な箇所を以下にテキストで逐一指摘してくれている方がいたが、行きつ戻りつ確認しながら読むのが大変なので、勝手ながら指摘箇所を中心に翻訳修正して以下にまとめ直した。いまだに信じて動画を広めてしまっている人に「それ間違いですよ」と指摘しようにも、記事誤訳が多かったりするとちょっとなぁ、となるので。

なお、もし元の翻訳記事が適切に修正されれば本記事は消すつもりだが、和訳した方は当時Twitter で指摘されてこの校正テキストを読んだはずなのに、もう1年半ほど放置されているのであまり期待していない。

間違いを打ち消すために、まともな太陽系の公転運動を描いた動画があれば知りたいものである


違う、太陽系は渦巻きではない [BAD ASTRONOMY翻訳記事]

なめらかな動きでコンピューターアニメーション太陽の周りを周る惑星の動きを、天の川銀河を周る太陽軌道のように解説する動画について、ツイートメールがたくさん来ている。とてもきれいな動画に、説得力のある音楽、ていねいな作りの画像

しかし、問題ひとつある。間違っているのだ。間違いは表面的なものではなく、間違った前提からきた根本的なものだ。中にはいくつかの有益視覚情報があるが、私は(銀河サイズの)話題のタネだと思っておくよう警告する。

なぜか? 彼の主張の基礎は、「惑星太陽中心の軌道を描いているのではなく、銀河の周りを渦巻き状に移動している」というものだ。

私は普段、こうした話題の間違いを暴くような面倒なことはしない。奇抜な主張はいつでもあるし、たいていは自滅していくからだ。しかし、この件についてはたくさんの人が私に知らせてきたし、明らかにかなり人気を博している――たぶん表面上は正しく見えるし、画像も大変きれいだからだろう。また、科学を知りつつもそこから離れて久しい人たちによって広まっているのではないかと見ている。このような話題を扱うときには、いつも少し深く掘り下げる手間がかかる。

そこで、シャベルを取り出してみよう。

制御不能のらせん

まずは動画を見てみよう。数分程度のものだ。

動画の作者DJ Sadhuは明らかにコンピュータグラフィックスの才能がある。しか科学は……まあ。私にはすぐさまこの動画が何を目指しているのかわかった。彼は率直に、太陽系太陽中心モデルは間違っている、と述べている。しかしながら、この Sadhuの主張ははなはだしく間違っている。重力存在しないと言っているようなものだ。

地動説とは、太陽太陽系の中心にあるという考え方で、惑星はその周りを周っている(他にもいくつか大事なことがあり、たとえば惑星軌道は楕円であるとか、軌道は同一平面上にあるのではなくて互いに傾いているとか)。この考え方は、地球太陽系の中心だという古い天動説にとってかわった。天動説は、それをちゃんとした物理モデルだと考えると、あらゆる種類の奇妙な仮定をしてやらないとちゃんと機能しない、とてつもなく複雑で考えすぎの物理モデルになってしまう(タイレノールなどの頭痛薬があるなら、epicyclesの項を見てみよう)。地動説はそれよりもずっと物理的に正しいし、ずっとうまく機能している。

私は、どちらのモデルにもそれぞれの使い道があると言いたいのだ。もし特定惑星が天のどこにあるのか知りたいなら、天動説の座標を使うことになる。われわれは地球に住んでいて、地球は動かずに天の車輪が頭上を回転して動いているように見える、それは理にかなっている。しかし、もし惑星宇宙探査機を送りたいなら、太陽中心のシステム必要なのだ地球惑星も両方とも動いていると考える方が、はるか計算は簡単になる。

Sadhuは、地動説が間違っていて、実は惑星は渦を描きながら太陽を周る動きをしているのだと主張している。彼が実際に言わんとしているものは、渦ではなくらせんである。この2つは名前が違うだけでなく、物理的な動きもその特徴も全く異なる。らせん軌道を描く粒子は、太陽系のようにお互いには干渉していなくてもよいが、渦を描く粒子は抗力と摩擦を通じて互いに干渉している。

しかし、意味論的な論争はよそう。もう一度動画を見てみよう。Sadhuは太陽惑星を先導しているかのように、太陽惑星よりも前方に出て銀河を回っているかのように描いている(2番目のビデオだともっとそれは明白だ)。これは単に誤解を招くだけでなく、完全に間違っている。惑星は、われわれが銀河系の中を巡るときときどき確かに太陽の前に出たり、ときどきその後ろをついてゆく(太陽を周回する軌道上のどこにいるかによる)。実際に夜空の惑星を見たことのある人にとっては明白な真実である。なぜなら夜空の一部は、地球太陽銀河系を周るときの進行方向にあたるわけだが、惑星はその部分にだって観測されるのだ。

ここでも、細かいことをあれこれ議論するのはやめよう。後述するように(「こうした考え方はどこからもたらされたのか?」の項)、惑星銀河系内を動くとき太陽の後ろをついていくという考え方は、Sadhuがらせんについて述べるとき思考基盤となっている。しかしまずは、もうちょっと見てみよう。

テイク2

太陽銀河の中を移動していく様子を示している、彼が二番目に公表した動画では、もっとひどい状況だ。

公平のために言うと、今回彼は惑星の動きについて「らせん状」だと正しく記述している。しかし、まだ惑星太陽の後ろをついていくように描いていて、これは間違っている。また特に動画の冒頭では、太陽中心モデルと、らせん運動についての彼の説明を具体的に比較しており、誤った「太陽主導」の考え方を補強している。

彼の動画における太陽中心モデルの動きを注意深く見てみよう。銀河を周る太陽が動く方向は、惑星軌道平面と同じに描かれている。しかし、こうではないのだ。太陽系の平面は、車の前方への動きに対してフロントガラスが作る角度のように、銀河系に対して約60度で傾いている。

これは本当に重要な点だ。らせんモデルでは、銀河を周る太陽の動きにあわせて、太陽を垂直に周回するような惑星が描かれている。お好みなら「正面向き」といってもいい。これが間違っている。なぜなら、惑星軌道は60度で傾いていて、90度ではない。惑星とき太陽の前に、ときに後ろになる。これだけで、らせん描写が正しくないことがわかる。地動説という現実モデルにおいても、順行-逆行運動というもの存在し、現実の空できちんと観測できる〔訳注:詳しくはこちら参照〕。

しかしそれだけではない。動画では、太陽銀河を周ることを見せていて、らせんに沿って上昇、下降している。最初動画のように、一部正しいところもあるが、大方は事実からかけ離れている。

われわれの銀河は、中心部が膨らんでいる平たい円盤で、端から端まで約10光年距離がある。この円盤は無数の星を内包し、その重力が合わさって、銀河中心を周る軌道太陽を留めている。ちょうど、太陽重力惑星軌道に留めているのと同じだ。

太陽銀河系を一周する軌道の長さは、およそ2.4億光年ではない。銀河を周回するときには、だいたい動画にあるように、太陽は実際ぴょこぴょこアップダウンを繰り返している(とはいえ大体1周につき4回ぐらいなのに、Sadhuは動画内で数十回もアップダウンするように描いている)。〔訳注:太陽系が銀河系内を周回する軌道の図参照(垂直方向は強調されている)〕

このような運動が起きるのは、銀河円盤での重力の働き方のせいだ。ここが非常にクールなところだ。円盤よりほんのわずか上にあるものは、円盤に向かって全体的に下へと引っ張られる。円盤が巨大な物質の板である想像してみて、太陽がその円盤よりも上にあるとする。円盤重力太陽を下へと引っ張る。星と星の間は遠く離れているので、太陽円盤の間を通り抜けて下へ降りていく。そうすると今度は、下に来てしまった太陽円盤がまた引っ張り上げる。このとき太陽の動きはだんだん遅くなり、そして止まり、向きを逆にしてまた円盤へと急激に突入する。太陽は、銀河円盤の中心から上下にそれぞれ200光年ぐらいの浮き沈みをするが、円盤1000光年の厚みをもっているので、結局私たち銀河円盤の中にしっかり留まっている。しかしこうした摂動永遠に続き、太陽大海コルクのように浮き沈みを続ける。

太陽銀河を周回しているので、合わさった動きはすてきな波のパターンになり、浮きつ沈みつ回転木馬のようにまわり続ける。ゆえに、Sadhuはこの部分に関しては(多かれ少なかれ)正しい。

だいたいはね。しかしここに3つ目の要素が加えられている。ひねったらせんを描く太陽道筋を、彼は歳差運動性質だとしている。この部分は間違っている。非常に間違っている。

歳差運動物体が回転するときてっぺんをぐらぐらさせる動きで、回転の中心軸からずれた向きの力をてっぺんに加えたときに起きるものだ。コマてっぺんを突くとぐらつく、それが歳差運動だ。地球自身も太陽と月の重力に引っ張られて歳差運動をしており、その軸の1回の揺れ周期は2万6000年だ。

明らかにSadhuは、動画の中でこれを表現している。しかし、ぐらつきは太陽にまったくなんの影響も与えていない。それはただ、地球が何かしているだけだ。しかし、Sadhuは銀河を周る太陽の動きに付け加えていて、それは意味をなさない。動画では銀河を周るコークスクリュー(コルク栓抜きのような螺旋運動)を描いているが、ときには銀河の中心に寄り、ときには遠くへ離れる動きを何度も何度も繰り返している。回転木馬のたとえでいえば、馬が真ん中で回って、上下に、また左右に動いているようなものだ。しかし、それは太陽の本当の動きではない。左右の運動なんてない(軌道ごと何度も銀河の中心に向かったり離れたりするなんて)。Sadhuの示すコークスクリューパターンは、間違っているのだ。

動画解説文において、Sadhuはかなり頻繁に、座標系と力と運動を混乱させている。

彼はなぜこんな正しくない運動を描くのだろうか。それを掴むため、彼が元にした文献をあたってみた。

こうした考え方はどこからもたらされたのか?

動画彼のサイトによると、SadhuはPallathadka Keshava Bhatという人から学んだそうだ。Bhatによる「らせんの渦巻き:太陽系の動的プロセス」(“Helical Helix: Solar System a Dynamic Process”〔リンク切れのためこちら参照〕)と題された文章にこの考え方はすべて説明してあり、細かすぎる点は指摘しないが、ちんぷんかんぷんものだった。まじめな話、どれもまったく意味をなさない。Bhatは地動説は間違っていると主張しているのだが、その主張を補強するために、虚偽のアイディアを次から次へと用いているのだ。彼の主張の間違いを暴くためにページを割くこともできるが、ここは短くまとめてみよう。

私はBhatの主張を何度も読んで、可能な限り好意的に考えようとした。私がかき集めたところでは、彼が言っているのは、太陽の動きによって、太陽を先頭にして惑星が後をついていくという形で、惑星銀河系内でコルク栓抜き状のらせん運動をする、よって地動説は間違っているというものだ。Sadhuの動画解説文によると、こうした動きをうまく描いているという。しかし、どれも完全に間違っている。もしそれが正しいのなら、外惑星(太陽から地球よりも遠くにある、火星木星など)は太陽の反対側に遠く離れて見えないだろう。しかしいつだって私たちには見えている。

それに、私たちは何度もほかの惑星宇宙探査機を送っていて、どれもいまだその軌道上にある。もしBhatがいうように地動説が間違っているのなら、探査機はいつになっても目的惑星に到達できない。探査機を送るための軌道計算が間違っていることになるからだ。探査機道筋計算するとき銀河を周る太陽の動きを考慮する必要なんて全くないから、Bhat氏のいうことは正しくない。

太陽太陽系の先頭で、惑星はその後ろをついていくという主張も、明らかに間違っている。太陽は、Bhatが主張し(Sadhuが動画で示して)いるように、銀河系を突き進む弾頭のように太陽系を主導したりしていない。惑星太陽の周囲を周り、全体が一つのユニットとして銀河系を60度の傾きで移動している。これは、銀河軌道に沿って惑星とき太陽の前になり、ときに後ろに続くということだ。

これはそう、道を歩くあなたの頭の周りを、端にボールの付いた紐がぐるぐる周っているようなものだ(この円は60度傾いている)。ボールときに頭の前になり、ときに後ろになる。道を歩くときには常にあなたと一緒だが、歩く速さには関係なく、相対的にはあなたと同じ速さでいつも移動している。あなた自分の動きを線で表すとすると、ボールは傾いたらせんを描くだろう。これこそBhatとSadhuが説明しようとしたことなのだが、しかし間違った説明になってしまった。

Bhatは、その文章の中でいくつもの間違いと論理的誤ちを犯している。たとえば、Sadhuの地球歳差運動誤用についてBhatが何と言っているか読み取ろうとした。しかし、とても不明瞭で(それに単純なミスもあり、彼は歳差運動の周期を22万5000年としているが、実際には2万6000年)ゴルディアスの結び目を解いているみたいだった。まだほかにも。彼は、もし地動説が正しいなら、日食は1カ月に1回起きなければならないと考えている(46ページと134ページを参照。ちなみに日蝕が一ヶ月に1回起きないのは、月の軌道が傾いているため)。また、彼は「太陽中心軌道不可能である意味しなければならない」と結論付けた部分で、地球太陽の周りを周る回転について根本的な勘違いをしているようだ(文書の30ページを参照のこと)。実質、私が読んだ文章の1ページごとに基本的根本的な間違いがあった。

そしてこれが、Sadhuの(間違っているにしてもステキな)動画が基礎としているものなのだ、いいかい? いっておくが、もしSadhuのサイトをのぞいてみたら、あらゆる種類の……んー、おかし陰謀論……9.11陰謀説からケムトレイルから、デイヴィッド・アイク(本気で爬虫類型異星人がデンバー空港の地下に住んでいて世界を支配していると主張している)が怒り狂いそうなのから名前しかない程度のものまで見つかるだろう。私は、彼のほかの考え方を念頭に置くことにした。

続きと、進行中のこと

DJ Sadhuの動画は、とてもステキで、そのうちいくつかは真実を元にしたものだ。しかし、私の意見ではBhatのゆがんだ宇宙に対する見方のせいで、その核心が失われてしまっている。

彼の動画は正しいように見える。クールであるように見える。ものごとはこうでなくっちゃ、というセンスに訴えかけるものがある。しかし、物事がどうあるべきかと、実際にどうなのかということはいつも重なり合うわけではない。宇宙は本当にクール場所で、とてもよく出来た一連の法則に基づいて動いている。私たちはこうした法則を「物理」と呼んでいて、それは数学記述されている。そしてそういうこと全部を理解しようとする試みが、科学である

クールものがすべて科学ではない。しか科学の全てはクールだ。これは普遍的法則ではないかもしれない。けれども、私の見てきた限り、これは真実なのだ

2014-08-01

一発当てた個人開発者をまとめるWebサービス作った

http://individualist.link/ (←ドメインかっこいいでしょ)

居酒屋にて 〜

A「やっぱり若者が稼ぐにはアプリ作るしかないと思うんですよ」

B「あー分かる」

B「スマートフォンアプリWebアプリでもいいの?」

C「ゲームは当たると大きくていいよね」

A「Webアプリでもいいです」

B「当ててそれで暮らしてる人見ますね。羨ましい。」

A「いいですよね」

A「そういう人の話聞いてみたいんですけどなかなか出てこないですね」

B「当てた人が人前で自慢するメリットないからねえ…」

B「どういう人がどういうサービスで当てたのかまとめたい」

A「いいですねえ。Wiki 的な」

B「Google Docs とかでやってみる?」

A「おお、やりましょう」

B「Webサービスにしてもいいかも」

帰宅 & 1時間後 〜

B「できた」

B「ドメイン取ろう」

B「http://individualist.link/

アルコール入ってるから話のディティールうろ覚えだけどこんな流れで作りました

やっぱり若者が稼ぐにはアプリ作るしかないと思う。

当てたいなら先例を見るのが一番参考になるはずだし、僕は個人で作ったもの流行っているのを見るのが好きだし、そういうのとても興味ある。

このサイトを見ていると、どういう人がこのサービス作ったんだとか、これ個人で作ってたんだという発見があっておもしろいと思います

時間で出来た

時間で出来たというのはほとんど誇張ではなくて、デザインに拘る時間サーバーに設置する時間を抜かせば本当に1時間でできます

せっかくなのでちょっと開発について書きます

このサイトコーディングに使う大まかな作業をまとめると

データベース接続

Twitterアカウントユーザー登録

画像保存

タグ付け

JavaScriptで動き付ける

CSS整える

HTMLマークアップ

デザイン

というような感じになる。これらを実直にいちいち実装してたら1日で終わるか分かりません。

本を読む一番はやい方法は、文字を読まないことです。

コーディングせずにライブラリを使いましょう。

ちょっとコードが書けると実装する道筋が思いついちゃうからライブラリを探す考えに及ばず実装しちゃう事があると思います

そういう事は避けて、アプリを書くならアプリ本体を最小に済ませるか、ライブラリ自体を作ることに力を入れましょう。

こちらのサイトではRailsのレールに乗っかって開発しました。

以下の例はRailsを使った方法ですが、モダンフレームワークを使っているのであればだいたい似たような話になると思う。

ライブラリで組み立てよう

Rails

手に馴染んだフレームワークがあるならなんでもいい。

クソ小さなロジックと数ページしかないならPHPでもいいけど、

とにかくはやく作ることがしたいなら何かしらフレームワーク使ったほうがいい。

秘伝の Rails Application Template を用意しておくのも良い。

データベース接続

モダンフレームワークなら何も考えずにデータベース接続できるはず。

Rails なら config/database.yml に接続情報書いて rake db:create && rails g model User name:string です。

scaffold 使うと更に早くできます

Twitterアカウントユーザー登録

OmniAuth gem を使います

ソーシャルアカウントログインする要件が出たら、何も考えずに「あ、OmniAuth」となりましょう。

Device gem を使うと更に早くできます

画像保存

Paperclip gem を使います

画像保存が必要になったら反射的に「Paperclip か CarrierWave どっにしよう」となりましょう。

ファイル保存とか変換をいちいち実装してたら朝が来ます

タグ付け

ActsAsTaggableOn を使います

has_many :through のめんどくさいタグの実装ですが

これ入れて rake acts_as_taggable_on_engine:install:migrations && rake db:migrate を打てば一発で完成します。

JavaScript で動き付ける

早くつくりたいんなら JavaScript は捨てましょう。

少なくとも生の JavaScript 書く時代ではないので CoffeeScript 使うと良いです。

CSS 整える

とりあえず Bootstrap 入れましょう。

クラスの付け方を覚えちゃうCSS 弄って HTML リロードして確認なんてことしなくても形は整います

Bourbon gem 使って mixin ライブラリ組み込んじゃうのもいいですね。

HTML マークアップ

HTML 書くのやめましょう。

Haml や Slim のようなテンプレートエンジンを使います

Slim が一番タイプ量少なくておすすめ

Zen Coding でもいいけど、結局出力されるのが HTML じゃ見通し悪くて辛いと思う。

Web Components の時代になったらもっと簡単になるんだろうな。

デザイン

こればかりプロっぽいものつくる自信はない…

ただ、Webページやアプリというのはだいたい決まったパターンがあるので、いろいろな事例を見るとよいでしょう。

正直レイアウト自体は他のサイト真似るのは悪くない判断だと思います

しろその方がユーザーにとって慣れ親しんだ分かりやすサイトでもあります

http://individualist.link/場合http://www.producthunt.com/ を異常なほど参考にしました。

まあここまで書いてなんだけど、前提知識として Rails が使えるようになってないといけないのは敷居高くて悪かったと思う。

僕も最初アプリ作るのに途方も無い時間かかってた。

慣れればはやくなるから、たくさんアプリ作って一発当てよう。

思いついたときにすぐ作れるようになれるといろいろ捗るぞ。

なお、今回つくったこのサイト、ぜひともみなさんにも投稿していただきたいのですが現在投稿者承認制としております

質を保ちたいので、捨て垢に荒らされても困りますからね。

私本当に個人が作って運営しているというアプリサイトというのが好きでして、

こちらのサイトリストアップする行為に儲けやがってといった悪意は一切ありません。

私にとっては好きな人達をまとめるサイトなので質はしっかりしておきたいのです。

2014-07-27

http://anond.hatelabo.jp/20140727223317

http://www.mini-log.jp/gh/calera/

calera カレラ

さなお庭にナイスフォット!組立て簡単、おしゃれなデザイン

洗練されたデザイン一坪タイプのお手軽パネルハウス。木肌が美しい北欧ホワイトパイン材を使用。 屋根材・釘・ビス・棟部板金もキット内に入っています画期的パネル式(床パネル・壁パネル屋根パネル) の校正で組立て簡単。 日本語組立てマニュアルも完備。

MODEL DATA

カレラ

•高さ 2.14m

建築面積 3.24

延床面積 3.24

セルフビルド平均所用日数

2人で2日

※基礎(簡易独立基礎)、木工事塗装工事の参考日数

販売価格 \198,000

2014-01-17

http://anond.hatelabo.jp/20140117000313

元増田です。ありがとうございます

モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。

ここの所は、今回の例ではいまいち見えづらい気がする。

しかに、そうですね… 

攻撃を支持した時点で刀をふりあげて、そのあいだに毒でモンスターが死んだら、納刀する、のような場合では、モデル・ビューの関連が密になる例になるでしょうか。

いや、そのときModel「刀」をつくればいいのか…

Qtsignal/slotなんかはモデル同士の通信にも使える

これは知りませんでした。基本クラスレベルObserverパターンサポートされる!しかタイプセーフ…

Mac OS XCocoaフレームワークにも KVO という同様の仕組みがありますが、型のチェックは自分でする必要があります

MOVEの考え方からいえば、モデルの責務が吸い出されて単なるデータになってしま

MOVEは望まれなかった子 - the sea of fertility

を読んで、MVCを理解した(つもりになった)ので、MOVE設計方針自体スルーしていました。

Modelから責務が吸いだされて、なくなるのが予定調和なら、OVEでよいのでは

http://anond.hatelabo.jp/20140116013407

モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。

ここの所は、今回の例ではいまいち見えづらい気がする。今回の例で複雑になっているのはモデルだけである。ビューがやる事は、「納刀する」「変色した血が飛び散る」イベントをlistenして画面に描画するだけのはず。MVCイベント機構は、モデル→ビューとコントロールモデルメッセージ通知を行うためのもので、モデル同士の通信についてはノータッチモデル内での相互作用に、単なるメソッド呼び出しを超えたあれこれが必要なら、DSLを作るなり自前でイベント機構を作るなり好きにして下さい、というスタンスかなあと思われ。

といってもQtsignal/slotなんかはモデル同士の通信にも使えるわけで、そういう意味最近GUIエンジンMVCの範囲を超えつつある。具体的に「Controllerから入力Modelの自発的な状態遷移も、同じイベント機構で扱いましょう」というのはMOVEの考え方に非常に近い。

http://blog.neo.jp/dnblog/index.php?module=Blog&action=Entry&blog=pg&entry=3442&rand=9193a

MOVEの考え方からいえば、モデルの責務が吸い出されて単なるデータになってしまうのは、むしろコンセプト通りであるとも言える。

なお、単純な例を超えてRPGの実装を自分が考えるなら、オブジェクト指向設計としては攻撃方法型や特殊作用型(毒とか呪いとか)同士の相互作用を主眼に置いた感じになって、モンスター勇者は単なるデータに近付いていくだろうなあ、と予想してみる。組んでみないと分からない事もあるだろうけれども。

2014-01-16

http://anond.hatelabo.jp/20140116080422

意見くださって、ありがとうございます

例にあげたRPGモデル設計http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1178047006を参考にしました。

ですが自分で書くとしても、十中八九そのような設計にするでしょう。

X
モンスター.attack(勇者.attackPower)
O
勇者.attack(モンスター)

だと主張します。その根拠を説明します。

理由1: 読みやす

主語.動詞(目的語)

英語の文のようで読みやすい。

理由2: 変更が分散しにくい

モデルに対する命令は、ふつう入力Controllerのイベントハンドラに書かれる。attackに関する命令はどちらの設計をとったとしても"攻撃が選択された"イベントハンドラに書かれるだろう。

モンスター.attack(勇者.attackPower)

だと、たとえばモンスターダメージを与える要素として、他に「すばやさ」などを加えようとしたら、モンスターのattackメソッドを変更する必要が生じる。

また、FF5には"竜騎士ジャンプ"という攻撃方法があった。ジャンプを選択すると、竜騎士空高く飛び、一定時間が経ったのちに落ちてきて、空中からモンスターを攻撃する、というもの。これを実装しようとすると、入力Controllerのイベントハンドラの直前の部分で別スレッドに投げるなり、タイマーを起こすなりして処理したくなる。

味方同士の”連携攻撃”を実装しようとするとやはり、入力Controllerのイベントハンドラを修正したくなるだろう。

まり、悪い方の設計ではModel勇者」への設計変更の都合で、Modelモンスター」や入力Controllerを修正する必要が出てきてしまう。

勇者.attack(モンスター)

では、どの設計変更の例でも、勇者側を変更するだけで良い。この設計には、クラス間の責任の分担がはっきりするという利点がある。

あれ?それならリストは??

リストライブラリは、

list.append(elem)

でしょ。

リスト実質的にはオブジェクトというより、ただのデータ構造

リストやディクショナリ(連想配列)は便利な道具だが、これを前面に押し出し設計は複雑さを招く場合がある。

たとえば、"複数のモンスターの集まり"や"ソートされたリスト"を、リスト継承して実装しようとすると、とたんにドツボにハマる。

Onスライムが仲間を呼んだ(){

    スライムの集まり.append(スライム)
    スライムの個数ラベル.更新(スライムの集まり.length)
    if(スライムの集まり.length == 1 and スライムの集まり.get(0).name == "キングスライム"){
        スライム名前ベル.更新("キングスライム")
    }

}

スライムは8匹集まるとキングスライムになるので、最初の一行でスライムの集まりを変更して以降、スライムの個数を気にする必要があることに注意して欲しい。

上記のコードを洗練させるために、Modelスライムの集まり」で個数が変わった時にイベント"OnLengthChange"を発行するようにしても良いが、そのようにすると、lengthメソッド安全に呼べるのはそのイベントハンドラのみ、ということになる。プログラマに注意を促すために、lengthメソッドコメントにその旨を注意書きしておく必要がある。

"スライムの集まり"リストクラスは、プログラマが期待するだろうリストクラスの振る舞い《append後の個数はappend前+1》を破壊している。

"ソートされたリスト"は、appendメソッドオーバーライドして、追加時に勝手に順番を並び替えてくれるようなものだが、これも《リストに要素を追加した時には、その要素は末尾に置かれる》というリストクラスの振る舞いを破壊する。スライムの例と同じように、イベントの発行とメソッドの注意書きが必要になる。プログラマはそれらのクラスを使うときに、より注意深くならなくてはいけない。

このように、クラスの振る舞いを壊してしまうようなクラス設計は、プログラマ地雷原におくりこむことになる。

時間的な流れの分かりやすさ v.s. 責任分担

はいえ、リストのようなデータ構造を便利に使えるシーンもある。

はじめからおわりまで100行程度のスクリプトで、とくにイベントリブンにするほどの複雑さがない場合。順序を追って読めるので、時間的な流れがわかりやすい。

一方、RPGの例で示したような設計は、オブジェクト指向をフルに使って、コード責任に応じて役割分担しやすくなる利点がある。

前者は"トランザクションスクリプト"的設計と呼ばれ、後者は"ドメインモデル"設計と呼ばれる。

よく利点・欠点比較され、それぞれを推進する派閥があったりする。

google:トランザクションスクリプト ドメインモデル

実はMVCってしっくりこないんです

例えばスーファミFFみたいな、古典的RPG戦闘シーンを作っていて、「勇者モンスターを攻撃する」。

勇者.attack(モンスター);

という設計だったとする。

これに「モンスターが毒を受けて、自死する」という挙動を追加するケースを考える。

毒.attack(モンスター);

やや複雑な変更になりそうだが、勇者の攻撃とのタイミングの差で、

のようになるとしよう。

さて、変更する箇所は...

まず、インターフェイス"攻撃者"をつくって、「勇者」、「毒」をその実装とする。加えて...

Model勇者への変更:

斬撃後に死んでいた場合(*) 、納刀する

入力Controllerへの変更:

攻撃前に既に死んでいた場合、攻撃できないようにする

Modelモンスターへの変更:

しかしこの変更は非常に複雑だ...

困ったこと1

この設計変更によって、

が、

の4パターンに増えた(※ただし最後パターンに関しては今回特に修正の必要はなかった)

攻撃者がひとつ増えるごとに、これらの分岐は倍、倍に増えていく怖れがある。

困ったこと2

あらたに攻撃者を追加すると、既存の攻撃者を変更しなければならない。

困ったこと3

この変更によって、全体の時間的な流れがよくわからなくなった。

例えばさらに攻撃者「呪い」を追加したとする。

するとModelモンスターには

  • 既に毒を受けているとき呪いを受けたら
  • 呪いを受けたあとに斬撃で死んだら

等々の分岐が並ぶことになる。この分かりにくさは単にStateパターンを導入しただけでは本質的には改善しないだろう。

考察

MVCにおけるモデル、は振る舞いを持ったデータだ。モデルが状態変化したときイベントが発生する。

しかしその状態変化が別のモデルの状態変化のタイミングに影響をうけるときモデル設計はとても複雑になり、読みにくくなってしまう。

モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。

このような複雑さをプログラマが支配するのは、とても大変だ。

みなさんも体験したことがないだろうか、GUIで「ホニャララしているときにホゲホゲするとバグる」みたいな挙動を。

例えば私が愛用しているiOSはてなブックマークアプリは、

  1. 「人気」タブを選択して
  2. 記事のリストを(更新するために)下にドラッグしながら
  3. ドラッグしている指を離さないで、(空いてる別の手で)「新着」タブを選択する
  4. そのあと指を離して、再び記事のリストを下にドラッグ

すると、上部に表示される「更新時刻」の表示位置がおかしくなる。

RPG設計は、たとえば下記のように記述できるDSLを導入すると、劇的に改善する。

タイミング:毒 ⇒ 死ぬ ⇒ 斬撃 の順なら、納刀する
タイミング:毒 ⇒ 斬撃 ⇒ 死ぬ の順なら、変色した血が飛び散る

オブジェクト指向ではこれはStateパターンStrategyパターンを組み合わせることで実現できる。

でも、このような設計にすると、勇者モンスターモデルオブジェクト責任は極端に少なくなってしまう。

加えてオブジェクト間のやりとりの複雑さがDSLに押し込められるので、オブジェクト主体性殆ど無くなってしまい、

結果、モデルオブジェクト存在意義が怪しくなるだろう。

うん、ただのデータでいいや。

---------------------------

(*) 攻撃時に相手の状態を問い合わせるのが醜い。これを避けるには、モンスターが毒で死んだ時に勇者イベントを通知して、勇者を”戦意喪失”状態に変化させる手がある。

2013-12-18

http://anond.hatelabo.jp/20131218174628

できないね

M: ページデータの返却

V: 画面表示

C: HTTPパラメータ受け取り、Model呼び出し、View指定

2013-08-24

超音速のMS少女から20

月刊"Model Graphix"誌上で、もっとエクスキューズの少ない(というか皆無の)ページは明貴美加の『MS少女である

ミリタリーやオート・モデリングはいわゆる"大人のホビー"としての正当性を主張し、

キャラクターモデリングは"メディアミックスがどうたら……"と詭弁をたれることが可能(僕のことだ)でも、

MS少女』だけは説明が難しい。

「キャッ♡♡」の前には、どんな言い訳も成り立たない。一網打尽。万事窮す。


ということはすなわち、『MS少女』が、模型雑誌といういわゆる"病気"の世界の、

そして僕らの欲望の、もっとも"生"な部分であるということだ。

MS少女にの生理的拒否反応を示す"良識的な"ミリタリー・ファン(じゃあ自衛隊にでも入ればいいのに…)が多いのも、

明貴美加の『MS少女』がその部分を、無邪気に暴露してしまうからに違いない。

(そして明貴美加の『MS少女』の存在の真の凶暴性とは、

社会派でもある宮崎駿御大と同じ雑誌に連載されているという事実なのである。)


この8年の間に、もともとの『ガンダム』というブランドも、あの手この手で消費され続け、

TVアニメーションとその周辺のトレンド自体も二転三転している。

それどころか、ビデオアニメゲームソフトメディア自体が拡散しつつある。


しかし、メディアバリエーションは数々あれども、

その内容はつまるところは"メカコスチュームつけたキレーなネーちゃん"に尽きてしまうのである

とくに最近は、後者さえあれば、前者は"魔法"や"スポーツ"でも代用できる。

前述したとおり、明貴美加方法はあまりに"生"なので、

世代にかかわらず「ファンである」と口にするのが気恥ずかしい。

だが、一見大人向け…とかシリアステーマ(もし、あれば…だが)の作品も、

それを抜いてしまえば、つまるところ残るのは、『MS少女』と同じなのだ

いや、それどころか、ヤマトと森雪、ガンタンク死語)とセイラさん、

ガンシップナウシカナイト・オブ・ゴールドラキシス…、

過去の名作/ヒット作も実はこの鉄則を守り続けているのであった。

まり、『MS少女』の存在は、一見TVアニメ副産物のように見えて、

明貴美加自身が知ると知らずとにかかわらず、

この8年間のアニメーションというジャンクカルチャーの、

実はかなり正確な批評として機能していたことに気がつかなくてはならない。

MS少女』を貧しいと批判する者は、

実は(量的にはともかく精神的に)かなり貧しい我々のアニメ文化を、

知らず知らずのうちに語っているのである

そして、その文化の本当の名は"特筆することのなさ"という文化であり、

そこに童話の『裸の王様』の中の聡明な少年のように君臨しているのが

明貴美加と『MS少女』だという印象なのである

最終的に笑われているのは僕のような

"特筆することのなさ"にまぎれもなく属しながら、

"特筆することのなさ"すなわちストレートさの意味と力を

理解出来ない者なのかもしれない。



村雨ケンジ「"特筆することのなさ"の普遍性

超音速のMS少女 明貴美加ファーストイラストレーションズ』(大日本絵画、1994)より

http://www.amazon.co.jp/dp/449922635X

(ただし、ブラウザ上での可読性を考え、引用者が適宜改行を加え、

段落間にスペースを挿入した)


ストパン」「ガルパン」「艦これ」とミリタリー美少女ものが大流行で、

ラノベでも「IS」分校が毎月のように刊行され、

あるいは宮崎御大妄想だだもれな「風立ちぬ」が絶賛公開中の現在に、

この文章を読むと、なんかいろいろ感慨深く思えたので引用

2013-06-06

アラサーニートがはじめてのweb serviceを作ってみた

概要

http://hakohako.me/

hakohakoは、バンド好きのためのライブ日程共有サービスです。ツイッターフォローしている人のライブ日程をカレンダー形式でお届けします。ちょっとでも気になるバンドを見にいきましょう!

すみませんgoogle chromeしか検証していません。

動機

3つあります

一つ目は、一人でスクラッチで作りたいからです。プログラムを書くことは楽しいです(たいしたものはかけませんが)。しかし、デザイン運用のことは苦手で経験不足でした。これを期にやってみようと思いました。

二つ目は、少しでも気になるバンドを見逃したくないからです。不精なこともありますが、すべてのバンドをチェックできません。いつのまにか来てたりとか、来る前に解散してました。バンドの魅力は、小野ほりでい先生も認めてます

三つは、就職したいから!

構成

一人で小さくwebserviceを作るためにはどうしているかを他の人にも書いてほしいため、自分から書いてみます


言語pythonで、web aplication frameworkはflaskを使いました。rubyphpよりpythonが楽だと思いました。flaskはmicroframeworkで、rubySinatraと似ていて、小さいアプリ作成するのに適していました。

永続化のところは、redisを使いました。結果、redisを使った何かになってしまいました。。。mysqlでもpostgresでも、rdbを使った方がよかったです。ただ、sessionの管理message queueを実装できるので、そちらで功を奏しました。

amazon ec2microで、nginxもuwsgiのreidsもworkerも動かしてます。dot cloudも試していたんですが、無料枠は4月末で終了してました。

デザインが苦手なので、bootstrap、bootswach、font awesomeを使いました。しかし、基礎ができてないためイケてない感があります。ノンデナイザーズブックを読んで出直してきます

javascriptも苦手なので、coffeescriptを利用しました。pythonを使っているせいか、書きやすいし読みやすいです。mvcframeworkは利用していませんが、modelview意識して書きました。

githubgitの代わりに、bitbuckethgを使いました。私にはgithubgitの敷居は高かったようです。bitbucket日本語で利用できるので、楽ですね。hggitよりも複雑なことを感じないです。ただ、gitの方が日本語ドキュメントは多いです。

gruntは、lessとcoffeescriptコンパイルで使いました。リアルタイムで変更を通知するlivereloadも併用しました。

感想

楽しいです!

聞きたいこと
最近オススメバンド

2013-03-03

RailsとTwitterBootstrapでエロ動画ソーシャルブックマークWebサービス作った

Rails + Twitter bootstrapでエロ動画ソーシャルブックマークWebサービスソーシャルオナニー=ソシャニーを作りました


こちらです http://www.socianie.com


【なにこれ?】

かっこつけた言い方をすると、

「いっぱいエロ動画あるけど結局みんなどんなお宝動画で抜いてるの?という日常的な疑問への答え」

とかでしょうか。

実際どんな事が出来るサービスかというと、基本的には、はてなブックマークのようにエロいページをブックマークする(その時に、コメントを付記することができる)というものです。

サイト内の他のユーザーフォローすることができ、TwitterのようにTimelineのようなものがあってそこにフォローしている人がブックマークしたページが表示されます(そのページが、xvideos,fc2などの有名サイトならば埋め込みプレーヤーですぐ再生出来ます。)

まりフォローしてる人の最新お気に入りエロ動画がチェックできます

ブックマークされたページはそれぞれが固有のページを持っており、タグを付ける事ができます

ユーザーブックマークしたもの動画一覧で横断的に見ることができ、並び替え・検索などが出来ます

ブックマーク数で今日ランキング今週のランキングなどが見れます

あと、累計ブックマーク数によってユーザーランクが上がったりします。

TwitterOAuth認証ログインが出来ますTwitterツイート投稿などはしません。また、サイト内の名前アイコンTwitterのものを流用するかどうかも自分で決められます。)



他のエロサイトとの違いは、3つあると思っています

ソーシャル機能。他にも世の中に色々素晴らしいエロサイトがありますがそれらはソーシャル機能を持つものが少ない。

②上記の話とちょっと被ってますが、他のサイトは基本コンテンツ自体を自動クローリングするけれどソシャニーはそこをユーザー自身に委譲しているため、集まってくる動画の質はそれに比べて上がるんじゃないかというのと、

エロサイトありがちな出来るだけごちゃっと感を無く広告も無しでTwitter bootstrap使って小綺麗な感じ


作成後記】

Webサービス作るならRailsかな楽で便利らしいしというざっくりとしたイメージからRailsで作り始めましたが、

ネット情報入門書に取り組んでもサンプルと同じモノは作れても実際自分が作りたいモノになると、で、どうやるの?となりなかなか進みませんでした。

Railsは色々と勝手によろしくやってくれる機能が多すぎて実際何が起きてんの?というのがわかりづらいというのが第一印象でした。

色々試行錯誤した結果、一番参考になったのはRails tutorial( http://ruby.railstutorial.org/ruby-on-rails-tutorial-book )でした。

英語ですがバージョンは新しいしBootstrapの使い方もわかるしサンプルがTwitterクローンサービスを作ろうというなかなかおもしろものなので途中で飽きること無く取り組めました。

何かを学ぶ時は、モチベーションが続く形の学び方が一番いいと思いました。

僕はエロ動画が大好きなので、エロサイトというのもモチベーションの1つです(ただ、作業中に脱線して気づいたらキーボードではなく下半身に手が伸びているという事もありました。)

また、上記のチュートリアルテスト駆動開発なのでSpecテストをモリモリ書いているのですが、とりあえずはテストに関しては何をやってるのかざっと眺める程度で精読しませんでした。

まずは全体像を把握して何が必要か把握したかたからです。結果的に最後までやりきれたので良かったと思います



あとは、Rails固有の知識ではなくWebサービス全般の知識で足りないな、と思ったときネット上や本屋立ち読みで済ましました。

ネットで細切れにお勉強している場合本屋で体系的にまとまっている本をざっと読むと意外に抜けてる知識が保管されたり脳内インデックスが作れるのでいいと思いました。


バージョン管理gitを使いました。

理由はみんなが良い良いというので乗っておくかという安易なものです。

実際のところgitの良い所を使い倒せているのかというと全くそんな事ないですね。

せいぜいstash位でしょうか。あとbisectとか。


リポジトリ最初DropBoxに作ってたのですが、途中からBitbucketを使いました。

GitHubを使わなかった理由はBitbucketプライベートリポジトリ無料で持てるからです。

また、恥ずかしがり屋なのでGithubで公開は敷居が高いと感じたからです。

初のRailsプロジェクトというのもありソースがイケてないので恥ずかしいのです。

いつかイケメンコードGithubで公開してオレツエーしたいものです。


サーバーエロOKのところを探すのがなかなか難しく結局海外VPSを使いました。

Linodeというところですが、他との違いを挙げるとiPhoneアプリ経由で再起動などが出来たりします。あまりこの機能使ってないですが。

OSベタCentOSです。

構成はpassenger+apacheで、DBSQLite特にLBなどはないです。

諸々構築後に人気が出た時困らないように負荷分散のお勉強なんぞもやりかけましたがまずは不要かなということで辞めました。

ちなみにサーバーがUS西海岸なのでSSHで作業するとエディタちょっともっさりすることがありました。


プロジェクト管理は、会社でも使ってるのでRedmineかなと思ったのですがどうせ一人だしRedmineのUIきじゃないのでTrello( https://trello.com/ )を使いました。

TODO,Doing,Done,Bug,Suspendのリストを作ってやること忘れないように管理しました。

ふと出先で思いついた機能とかをiPhoneでスイっと追加など出来て便利でした。


正月に公開してお友達界隈で見てもらったんですが、よかれと思って作ったChrome拡張CSRFの対策が不備あり結局ブックマークレットにしたり、

ソースを見てもらったら設計RestfulじゃないとかControllerがfat過ぎるModelに押しこめなどアドバイスをもらえたり無知な僕には色々とお勉強になりました。

出来たものはしょぼいものですが、「Webサービス作ったことないコンプ」は少し解消出来た気がします。


以上、月19ドルも払ってるのにお友達だけで使われてるのも寂しいので増田でまとめついでに宣伝してみました。

叩かれるんでしょうか。怖いです。いじめないで。

2012-07-05

http://anond.hatelabo.jp/20120705170740

よくわからないんだけど

http://ja.wikipedia.org/wiki/Model_View_Controller

※右図の写真ModelからControllerへの戻りはないよ?

別に ModelViewが通信しちゃいけないわけじゃないし

ModelからViewおよびContollerへ飛ばすのは EventとCallbackであって、処理依頼ではないので・・・

何が言いたいかというと、MとCを勘違いしてない?

もしくは、イベントドリブンとファンクションモデルを誤解してない?

 

たとえば、ListView の ListModelとListViewがあったときに Modelデーターが更新されたらControllerに通知しないでViewに通知してデーターを更新すればいい。

Controllerというのは ユーザから入力を受ける装置 であって、Model操作する装置ではないのだが・・・ ControllerをModel操作装置として定義してないかなぁと思って。

http://anond.hatelabo.jp/20120705143656

Controllerが何かというのは、ここでは単にRailsとかCakePHPとかのウェブアプリケーションフレームワークのControllerのつもりです。

ウェブアプリケーション場合処理の結果に応じて画面にいろいろ表示しないといけないわけですが、その画面表示の部分(表示するViewの選択とか、表示するメッセージの設定とか)はControllerに書かないといけないわけですよね。

そうすると、Modelで何か起こったときにControllerにそのことを通知して、それに応じたViewへの仲介をControllerに書かないといけないのですが、これがめんどくさいわけです。

正常系だけならいいですけど、途中で異常が起こって処理が中断されるなんてところを考えると、その部分を全部Model→Controller→Viewの2段階で書くのが大変に感じてしまって。

処理をControllerにベタ書きしていれば、そこで直接Viewに処理を渡せるわけですからね。

http://anond.hatelabo.jp/20120705123402

よかったら、教えて欲しいのですが Controller の定義を 教えて欲しいのですが

Controller って コレのことですよね?

http://pur.store.sony.jp/Qnavi/Product/CECH-ZC2J/

冗談ではなく。 PS3を例にとって説明すると

Controller = 入力装置 (View以外の出力装置) (パッド)

View    = 出力装置 (モニター

Model = 処理 (PS3

Arrow = Event/Call back (電気信号

 

という認識で良いですか?   

いえ、たいていの処理はModelに書かれてしまうので、Controller が厚くなる時って どんな時かな?と思ったので。

PS3のパッドが モニターの電源ON/OFFなどを見ることはないですよね。 という感じで。

PS3のパッド内にも当然CPUもどきは入っていて、そこでも処理しますが、 PS3のパッド内部に相当でかい処理を入れる とか でかくなるといわれても、想像がつかない感じです。

モニターの中にもCPUは入ってて、あとは同じです。 

Fat Controllerを作ってしまいがちな訳

http://ugaya40.net/architecture/dis_mov.html

Fat Controllerはダメというのは昔から言われている話で、自分も昔読んだときになるほどと思ったので「なるべくControllerを薄く」を頭に置いているのだけど、どうもうまくいった感じがしなくて挫折感があった。その理由だけど、自分経験から言うと、「View変数を渡すのがめんどくさい」「途中で処理を中断するのがめんどくさい」の2点だと思う。

View変数を渡すのがめんどくさい」

たとえばRailsだとController内でインスタンス変数に代入することによってView変数を渡すことができる。処理をModelに移すとModelからControllerに変数を返して、ControllerでView変数を渡すという二段階が必要になるのでこれがめんどくさい。(正確には、ControllerからModelの状態を取れるように作るのが正しいのだろうけど、View必要となるあらゆる状況を想定してModelの状態を取れるようにするのはなかなか大変。それだったらControllerで処理しちゃって……としてしまいがち)

「途中で処理を中断するのがめんどくさい」

たとえばRails場合、Controllerからreturnすればその時点で処理が中断されるし、レスポンスもそこでrenderしておけばよい。しかし処理をControllerに移した場合Model内で起こったことに応じて適切なレスポンスを返すコードをControllerに書かなくてはいけないが、これがめんどくさいように思う。Modelから直接レスポンスViewを指定したくなってしまう。(もちろんそれはできないし、Modelの分離の観点からするべきでもない)

O/RマッパーのModelに一切処理を追加しないなんてことはなくて、Modelで処理できることは極力Modelに移しているつもりではいるのだが、どうしてもすっきり書けた感じがしない。

もちろんわかっている人ならこんなところでひっかからず、自分がわかってないだけの可能性が高いのだが、自分が上のような理由で挫折してしまったのは事実なので、何とかしたいとは思っている。

自分としては、理屈はわかるけど実際のコードはどうなんだという感じなので、「これは手本にすべきMVCウェブアプリケーションだ」というのがあれば読んでぜひ参考にしたいのだけど、何かないものだろうか。

ログイン ユーザー登録
ようこそ ゲスト さん