はてなキーワード: mvcとは
半裸の巨漢柔道男児である大門が躍動するKOF XIVのグランドファイナル。台湾のE.T.選手が安いコンボ(総合火力が低い)を連発するので、日本語解説の二人がひたすら突っ込みを入れる実況が見所。コンボを覚えたら世界最強ですよ、とまで言われたE.T.選手がけっきょく優勝して綺麗にオチがつく。
鉄パイプ市長のハガー(ファイナルファイト)が大好きなPARADIGMさんの試合が面白すぎた。
解説「ハガーを中心としたチームです。バランスもクソもないですね」
ベスト8に入るだけあって、操作もうまいのだけど、とにかく半裸のガチムチおっさんが鉄パイプを振り回してフライングボディプレス、すべてを解決するダブルラリアット、怒りの腹パンを披露しながら並み居る壊れキャラをボコボコにしていくところが痛快きわまりない。
あと空をくるくる舞うRYANLYの春麗も、ストリートファイターシリーズとのギャップがでかすぎて笑うしかなかった。
MVCはカジュアルに永久パターンとか、壊れすぎキャラとか、棚ぼたのハッピーバースデーがあるからゲームをプレイしたことがなくても見ていて楽しい。
りゅうせい選手カルルのハメ殺しに対するふぇんりっち選手ジンの脅威のガードぢからがものすごかった。グランドファイナルのリベンジ成功からの、2ゲーム取られて背水の陣からの怒涛の追い上げでフルセットにもつれ込む展開が熱すぎた。
ただ、ピリピリした試合というには、お互いにこやかにEVO壇上で声を掛け合っていて、あまり頂上決戦という感じはなかった。今日、4Gamerのインタビューを読んで、リアルピンポン状態だったんだと驚いた。
りゅうせい選手:
そういうわけじゃないんですけど,ふぇんりっち選手との試合だけは別で,戦っていてめちゃくちゃ楽しかったですね。大会ではいつも優勝と準優勝を交互に取り合っているようなライバルで,彼とは大会の前にもホテルの部屋で対戦していたんですが,そのノリをEVOの壇上にも持っていけました。2人で楽しみながら対戦しているような気分だったんですよ。
ただ勝ちにいくという戦いじゃなくて,「プレイの内容がいいほうが勝ちにしようよ」みたいな感じで。もちろん,お互いに真剣だったんですけど,楽しんでプレイできました。
「EVO2017]決勝は2人で楽しみながら対戦できた――「BLAZBLUE CENTRALFICTION」部門の優勝者,りゅうせい選手にインタビュー」(http://www.4gamer.net/games/378/G037875/20170719048)
勉強が不得意な職業プログラマですが、WindowsアプリをSPAに作り替えることになりそう。
プロジェクトメンバーに積極的に技術を習得するような人はいないので、簡単なフレームワークを探しています。
↑に近いようなフレームワークありませんか?
DOMというのは、そもそもDocumentObjectModelでオブジェクト指向。
Reactは、これらすべてを一旦ご破産にした。
MVCのVだ、と公式サイトに説明されているが、これは半ば皮肉であって、本当はVは存在しない。Cももちろん存在しない。M、モデル=ロジックしか存在しない。モデル一元論、それがReact。
VであるDOMは消滅し、JavaScriptの `x` や `a` などその他の変数と同列のファーストクラスの仮想DOMとしてしか存在していない。
つまり、仮想Vは、M(モデル)内で関数型の文脈で自由自在に演算できるわけ。
コードの最後でマウントしておけば、仮想Vは自動的に、実VのDOMとして描画される。
M=ロジックの外に、あらかじめわざわざ決め打ちしたVを用意するよりも、M=ロジックに一元化するほうが賢い。それがReactであり、JSX。
そろいもそろってクズ
能力が低いくせに自信だけは一人前で自分の言い分が通るまでは喧嘩腰。
たとえば「私はプログラムのソースコードは読まないよ!だから全行にコメントいれて!コメント入れるのは当たり前の事だよ。私はソースコードを読むときにコメントを英文よ読むように読んで理解から全行にコメントいれて!」
みたいなよくわからん要求を押し通してくる。(ソース読めない人がプログラマか?あほかと)
これやらないとそれを言い訳に文句をいってそもそも仕事してくれない。
SingletonもしらないMVCもしらないJenkinsもしらないコマンドラインもろくに使えない、そんな状態で私はソフトウェア工学を学んだプロみたいな言い方をしてくる。
その自信のせいか人の意見は聞かない。
仕事は終わらせないで帰る、昼飯は二時間戻ってこない、そもそも会社でYoutubeばっかり、ミーティングはずっとスマホいじってて話を聞けと言っても「きいてるよー。私はマルチタスクだから両方できる」などといってミーティングが終わったらさっきは何の話だったの?と聞いてくる始末。
そして浮気!仕事には関係ないからどうでもいいけど、結婚してるのに出会い系サイトで出会った女の子に片っ端からあって遊んでる。そして写真にとってそれをいつも自慢してくる
私はチームにいる誰よりも女の子を抱いた事あるよ!なんて自慢してくる
しるか、しね
二人目、
企画者がもってきた仕事にめっちゃ切れて文句いって仕事しない。
ミーティングしても「いつまでこんなミーティングつづけるんですか!!!!」みたいに
ソースコードの問題をみんなで指摘しても「これはこうじゃないとダメなんです!!!」みたいに
基本自分が正義で自分の意見に反論してくる奴はみとめないのがフランス人
しね
三人目、
四人目、
社員旅行にいったのに飽きたのか途中で誰も言わずに一人で帰ってくる
みんないなくなって大慌て
旅行が終わっていきなり新幹線の切符もってきて開口一番「先に帰ってきたからこれ清算して!」
しね
五人目、
昼頃会社に出社してくる、PCをたちあげるなりおもむろにゲームを開く
夕方までそのまま
そして帰る
あとのフランス人はしらない
ただでさえ働かないのに本当赤ちゃんをあやすかのごとく機嫌を取ってあげないとダメ
フランスはこんな奴らばかりでどうやって経済なりたたせてるんだ?
クズすぎだろ
まぁそんなやつらを見抜けず採用してるうちの会社がダメなだけか。フランス人以外は外れ少ないんだけどなー
言いたい事はやまほどあるが面倒になってきたのでこれくらいで
の方が良い。
追記 :
プログラミング技術はある程度自分で調べればわかるから設計のベストプラクティス教えて欲しいな。さすがにTOPページでjson取ってくんのはあんま良くねーと思っちゃった。俺が作ったんだけど。
追記 : 2015/08/12
社内勉強会を定期的にやってる。今日は分析系の話。傾向を分析するのではなく何を分析するかが重要らしい。っ俺の考えと違うかも知れないがすごく意識が変わった。
てか思った。そもそも、傾向分析する必要あんの?減少傾向であれば回復するのは厳しくねっかほぼ無理じゃね?以下の例がうちの会社がやってること。
会員数が減った → 退会した会員の様々な傾向を分析しよう!
具体的な原因を突き止めてそれらの傾向を分析する的な感じ。
でもそんなのめんどくさくね?
俺の考えは以下。
会員数が減った → SEOを強化(減った数以上に増やす)。そんなチマチマした改善の工数かけんなら新しい機能、新規事業を行う。
つーか、そんなに改善点があるアプリじゃないですよ、って言ってあげたかった。mixiみてよ、足跡消したりクソゲー増やしたのが原因じゃないでしょ。飽きられただけ。あとお客を動かす施策の意味の無さ。メルマガ、お得系。そんなん変わんねーよアホかよ。
っかこんなん考えること自体が嫌だわ。ちゃんと考えてる同世代は偉いし優秀だわ。ホントはちゃんと考えなきゃいけないね。
追記 : 2015/08/14
それなりに偉くなると会議が増える。僕らみたいな下っ端は「いろいろ抱えてて大変だなー」って思う。ように言い聞かせる。そもそも会議ってなんのためにやるんだろう?僕が考えた結果
「モノを実現するための話し合い」
何時間も掛けた結果ってのが不透明なまま。不透明って言い方は違うかな?要はないも得ていない安定の不毛会議。これに気付いてるのは僕ら20代の連中だけ。 上記の定義だと会議は夢物語を語る場だから会社が楽しいかもね。そこは勘違いしちゃいけない、憂鬱でなければ仕事じゃない
追記 : 2015/08/19
会議。議事録の重要さ。簡単で良い。ある程度の発言をまとめておけばそれ見て答えが出るので物事がスムーズにいく。延びる会社ってのはホワイトボードが多いしなー。
ほとんどライブラリ使えるの?とか知らねーよ、だいたい使えるわ。UIの共通化は?出来ねーって言ったでしょ。細かいバグはありそうだけど、相当実用的。でも多分これは導入されねぇな!みんなモチベ低い!
ほかプロジェクトが詰んでたやつ、stackoverflowに載ってたっぽい。もっとGoogle翻訳使えよ!!周知しよ、難癖つけられそう笑
追記 : 2015/08/22
でもプログラミングが出来る環境は維持されるみたいなんで良かった。SIerときは全員技術者だったから良かったな。っか楽。
よく技術者と営業の対立があるけど、極端な話、全員営業やる。全員技術者やる。どっちが良い方向になるかわかんねーよな。
営業はキツイよなー、成果出なきゃやり甲斐が生まれないでしょ。
追記 : 2015/08/24
この状況を覚悟してたけど、まさか想定してるなかで最悪な状況に出くわすとか笑。
「一生面倒みる覚悟がないなら助けるな」
大学教授に言われた言葉が身に染みる。多分あの人は地獄をみるだろう。
追記 : 2015/08/26
面談。褒められた。評価評価うるせぇ。評価=給料だからあんま興味ねーよそこには。給料で転職したんじゃねーよ、前の会社の方がよっぽど給料いいわ。技術者出身の経営者がいる会社に入りたかったなほんとに。
っかangularjsすごいいいなと。双方向データバインディングとHTML拡張。フロントと完全分離出来るのがあつい。
追記:2015/09/07
夏休み終了。海外はいいなーやっぱ。いろんな人間見てるだけで楽しーわ、ってことで憂鬱な会社始まり。
僕が設計実装した機能を他プロジェクトに移行する案件で同期に任せてたんだけど、いろいろ未完成すぎて仕事増えた。詰みそうなとこ教えて「問題ないっすよ」って言ってたのに問題ありあり詰んだわ。nugetエグい(近々、エグいの書く)。まぁ、回避したから問題ないけどさ。
追記:2015/09/16
ちょー出世した。事業責任者的な感じ。給料もめっちゃあがる。転職して半年、プログラムが楽しくてひたすら組んでただけ。前の職場でも無理矢理リーダーさせられたし、無駄な運は持ってるなーと感じる。ひたすら組んでると開発効率だったり、何が出来るか、未来があるかってのを想像するのが好きなんで、それをキャッキャ言いながら楽しそうに話すことと、詰んだときにゴリ押し回避の方法を生み出すのが得意なんで、出来る奴だなーと思われてるっぽい。
これからはひたすらプログラム組むことは難しくなりそうだなー。あと結果と周りの目、いきなり入ってきた奴が急に出世するから嫌な感じだよね。まだ20代半ばよ、気が重すぎる。まぁ、半年後に急降下する可能性があるから気が楽になったわ。
追記:2015/09/30
今日、いろいろ発表された。なんか抜擢されたからおかしいなーって思ってて、抜擢された奴らを見たらびびった。全員、世渡り上手(俺も)。ちょっとガッカリ。自分でもちょっとコード書ける方だなーと思ってたけど、それが理由ではなかったのね。まぁ、同世代はスーパーエリートばかりなのになんかおかしいと思った。
もうasp mvc飽きたなー。angular楽しいからまだいいけど。
最近はrailsが楽しい!ちょっとしたキュレーションサイトを構築中だけど、コード量がaspと比べるとビビるわ。複数モデル使えるとかビックリマークすげーとか。gemもコレねぇかなーとか思ったらだいたいありそう、何より日本語情報多すぎ!但し、サイトいつ出来るかなー。
追記:2015/10/15
やっぱ感情的な人はあんまり好きじゃないなー。柔軟じゃなさ過ぎ。極端だけど、討論番組とか見てても感情的な人っておかしいからなー。俺も感情だけで転職したけど大失敗だったし。ただ、久しぶりに会いたいって思う人は感情的な人が多い。不思議。
っか雇われの身だったらなにかをやってやるって気持ちで臨むと終わるないろいろと。っかなにもしないでも金貰えることは常に頭に入れておかんと人間的におかしくなるね。
追記:2015/10/19
いやーやっぱ俺のこと好かねー人多いなー。予想通りっすね。つーか底辺突っ走ってきて就活時期にアルバイトしなきゃいけねーなって思ってた俺が降格なんてビビるはずねぇだろボケ。調子乗ってたら激安家賃の家にすまねーだろぅがよぅ!
って感じで愚痴はこれまで。
つーか、整合性は細かい部分じゃなくて決定した時にガツっと決めた方がいいな。まじでいちいち考慮したプログラムかいてられんよ、クソめちゃくちゃなコードになるし。そういう点ではjsはすげー勉強になった。ただ、結構プログラムの本質を突いていてjsも馬鹿に出来んなーと身を持って感じました。常に整合性を保つってのはその場しのぎのコードになりますね。
追記:2015/12/07
好きなことでお金を稼ぐって非常に難しいことがわかった。俺が転職したのもスキルアップじゃなくて好きなことやりたいって気持ちだったのね。すげー勘違いしてた。後悔してもしょうがないから資格を取ろう。
追記:2016/02/11
の方が良い。
追記 :
プログラミング技術はある程度自分で調べればわかるから設計のベストプラクティス教えて欲しいな。さすがにTOPページでjson取ってくんのはあんま良くねーと思っちゃった。俺が作ったんだけど。
追記 : 2015/08/12
社内勉強会を定期的にやってる。今日は分析系の話。傾向を分析するのではなく何を分析するかが重要らしい。っ俺の考えと違うかも知れないがすごく意識が変わった。
てか思った。そもそも、傾向分析する必要あんの?減少傾向であれば回復するのは厳しくねっかほぼ無理じゃね?以下の例がうちの会社がやってること。
会員数が減った → 退会した会員の様々な傾向を分析しよう!
具体的な原因を突き止めてそれらの傾向を分析する的な感じ。
でもそんなのめんどくさくね?
俺の考えは以下。
会員数が減った → SEOを強化(減った数以上に増やす)。そんなチマチマした改善の工数かけんなら新しい機能、新規事業を行う。
つーか、そんなに改善点があるアプリじゃないですよ、って言ってあげたかった。mixiみてよ、足跡消したりクソゲー増やしたのが原因じゃないでしょ。飽きられただけ。あとお客を動かす施策の意味の無さ。メルマガ、お得系。そんなん変わんねーよアホかよ。
っかこんなん考えること自体が嫌だわ。ちゃんと考えてる同世代は偉いし優秀だわ。ホントはちゃんと考えなきゃいけないね。
追記 : 2015/08/14
それなりに偉くなると会議が増える。僕らみたいな下っ端は「いろいろ抱えてて大変だなー」って思う。ように言い聞かせる。そもそも会議ってなんのためにやるんだろう?僕が考えた結果
「モノを実現するための話し合い」
何時間も掛けた結果ってのが不透明なまま。不透明って言い方は違うかな?要はないも得ていない安定の不毛会議。これに気付いてるのは僕ら20代の連中だけ。 上記の定義だと会議は夢物語を語る場だから会社が楽しいかもね。そこは勘違いしちゃいけない、憂鬱でなければ仕事じゃない
追記 : 2015/08/19
会議。議事録の重要さ。簡単で良い。ある程度の発言をまとめておけばそれ見て答えが出るので物事がスムーズにいく。延びる会社ってのはホワイトボードが多いしなー。
ほとんどライブラリ使えるの?とか知らねーよ、だいたい使えるわ。UIの共通化は?出来ねーって言ったでしょ。細かいバグはありそうだけど、相当実用的。でも多分これは導入されねぇな!みんなモチベ低い!
ほかプロジェクトが詰んでたやつ、stackoverflowに載ってたっぽい。もっとGoogle翻訳使えよ!!周知しよ、難癖つけられそう笑
追記 : 2015/08/22
でもプログラミングが出来る環境は維持されるみたいなんで良かった。SIerときは全員技術者だったから良かったな。っか楽。
よく技術者と営業の対立があるけど、極端な話、全員営業やる。全員技術者やる。どっちが良い方向になるかわかんねーよな。
営業はキツイよなー、成果出なきゃやり甲斐が生まれないでしょ。
追記 : 2015/08/24
この状況を覚悟してたけど、まさか想定してるなかで最悪な状況に出くわすとか笑。
「一生面倒みる覚悟がないなら助けるな」
大学教授に言われた言葉が身に染みる。多分あの人は地獄をみるだろう。
追記 : 2015/08/26
面談。褒められた。評価評価うるせぇ。評価=給料だからあんま興味ねーよそこには。給料で転職したんじゃねーよ、前の会社の方がよっぽど給料いいわ。技術者出身の経営者がいる会社に入りたかったなほんとに。
っかangularjsすごいいいなと。双方向データバインディングとHTML拡張。フロントと完全分離出来るのがあつい。
追記:2015/09/07
夏休み終了。海外はいいなーやっぱ。いろんな人間見てるだけで楽しーわ、ってことで憂鬱な会社始まり。
僕が設計実装した機能を他プロジェクトに移行する案件で同期に任せてたんだけど、いろいろ未完成すぎて仕事増えた。詰みそうなとこ教えて「問題ないっすよ」って言ってたのに問題ありあり詰んだわ。nugetエグい(近々、エグいの書く)。まぁ、回避したから問題ないけどさ。
追記:2015/09/16
ちょー出世した。事業責任者的な感じ。給料もめっちゃあがる。転職して半年、プログラムが楽しくてひたすら組んでただけ。前の職場でも無理矢理リーダーさせられたし、無駄な運は持ってるなーと感じる。ひたすら組んでると開発効率だったり、何が出来るか、未来があるかってのを想像するのが好きなんで、それをキャッキャ言いながら楽しそうに話すことと、詰んだときにゴリ押し回避の方法を生み出すのが得意なんで、出来る奴だなーと思われてるっぽい。
これからはひたすらプログラム組むことは難しくなりそうだなー。あと結果と周りの目、いきなり入ってきた奴が急に出世するから嫌な感じだよね。まだ20代半ばよ、気が重すぎる。まぁ、半年後に急降下する可能性があるから気が楽になったわ。
追記:2015/09/30
今日、いろいろ発表された。なんか抜擢されたからおかしいなーって思ってて、抜擢された奴らを見たらびびった。全員、世渡り上手(俺も)。ちょっとガッカリ。自分でもちょっとコード書ける方だなーと思ってたけど、それが理由ではなかったのね。まぁ、同世代はスーパーエリートばかりなのになんかおかしいと思った。
もうasp mvc飽きたなー。angular楽しいからまだいいけど。
最近はrailsが楽しい!ちょっとしたキュレーションサイトを構築中だけど、コード量がaspと比べるとビビるわ。複数モデル使えるとかビックリマークすげーとか。gemもコレねぇかなーとか思ったらだいたいありそう、何より日本語情報多すぎ!但し、サイトいつ出来るかなー。
追記:2015/10/15
やっぱ感情的な人はあんまり好きじゃないなー。柔軟じゃなさ過ぎ。極端だけど、討論番組とか見てても感情的な人っておかしいからなー。俺も感情だけで転職したけど大失敗だったし。ただ、久しぶりに会いたいって思う人は感情的な人が多い。不思議。
っか雇われの身だったらなにかをやってやるって気持ちで臨むと終わるないろいろと。っかなにもしないでも金貰えることは常に頭に入れておかんと人間的におかしくなるね。
追記:2015/10/19
いやーやっぱ俺のこと好かねー人多いなー。予想通りっすね。つーか底辺突っ走ってきて就活時期にアルバイトしなきゃいけねーなって思ってた俺が降格なんてビビるはずねぇだろボケ。調子乗ってたら激安家賃の家にすまねーだろぅがよぅ!
って感じで愚痴はこれまで。
つーか、整合性は細かい部分じゃなくて決定した時にガツっと決めた方がいいな。まじでいちいち考慮したプログラムかいてられんよ、クソめちゃくちゃなコードになるし。そういう点ではjsはすげー勉強になった。ただ、結構プログラムの本質を突いていてjsも馬鹿に出来んなーと身を持って感じました。常に整合性を保つってのはその場しのぎのコードになりますね。
追記:2015/12/07
好きなことでお金を稼ぐって非常に難しいことがわかった。俺が転職したのもスキルアップじゃなくて好きなことやりたいって気持ちだったのね。すげー勘違いしてた。後悔してもしょうがないから資格を取ろう。
追記:2016/02/11
今作ってる典型的なJavaのMVCモデルのWebシステムでの話。
結論から言うと、プログラムやクエリを和訳したレベルまで細かく書くのは無駄だと思ってる。
特に一番嫌いなのが、クエリを和訳した文をそのまま詳細設計書内に書けって言ってくるレビュアー。今のチームのレビュアー様である。
テーブルと列、検索条件、ソート順、結合あるなら結合条件も書けと言ってくる。
まあ単純な主キー検索等しかないシステムなら別にいい。書くよ。
だがそんな単純なクエリだけでそこらのシステムが成り立ってるならこんなこと言わない。
大体今日びORMも導入せず処理の途中にクエリをベタ書きするような糞システムもそうそう無い(とはいいつつ去年見た)っていうのに。
クエリを和訳したような設計書を書くくらいなら、いっそ設計書からクエリを自動生成できるようにすればいいじゃないかっていうことで、余所の部署で作られたマクロ付きの設計書を拝借してきて今回DB関連は全部そっちで定義してある。
にも関わらず、「ここにもさらっと書いておいてよ」とレビュアー様はのたまう。いやいやさらっと書けないから別のドキュメントにしてるんですが。
んでレビュアー様のご指摘どおりに直していくと、結局別出しにしていたクエリ設計書と全く同じことを詳細設計書にも書くハメになる。
そこそこ大きなプロジェクトで、基本設計、詳細設計、さらにプログラム設計書を作ることになったのだが、このレビュアー様がレビューしまくってして書き直させまくった結果、詳細設計書とプログラム設計書はフォーマットが異なるだけで記載内容がほぼ一緒になってしまったのだ。
当時設計書の修正だけでかなりの工数を使った結果上からも下からも総ツッコミを喰らってかなり痛い目見てるはずなのに、また同じことを繰り返しているから救いようが無い。
プログラムが書けない典型的な文系SE様に今更Javaでプログラム書ける様になれとは言わない。
ただ詳細設計のレビュアーを任されるような立場ならば、せめてそのシステムで使われてる言語やフレームワークの特性ぐらいは把握しておくべきだ。
それも嫌ならせめてフロー図くらい読めるようになってほしい。フロー図作れって言っておいていざ作ったら「このひし形って何?」って聞かないでお願いします。
Qiitaに書こうかと思ったけど、言いたいことも言えない、こんな世の中じゃ。
モバイルファースト、APIファーストな文脈でハイブリッドWebをやってきた目からすると、サーバーサイドでHTMLを生成してページ遷移させるなどという90年代調のクラシカルな発想を基本に据えるフレームワークはとても斬新に思えました。HTMLをゴリゴリ生成するなんてよほど特殊な最適化をしようとするのでなければそもそも発想として出てこないです。それでいてDSLやメタプログラミング等のテクニカルな技法が宝石のように鏤められている様はまるでエジプト時代の骨董品を見るかのような趣がありました。turbolinkなどは、かつて表計算ソフトに出しゃばっていたイルカを思い起こさせる味があります。かつて慣れ親しんできたSPAが星のように遠い存在になりました。
Web界隈の人々がモデルだとかアクティブレコードだとか"MVC"だとかを非常に具象的に話す様を見るにつけ、お前らどんだけPofEAA読み込んでるんだよと畏怖していた時期が僕にもありましたが、どうやら彼等はRailsのクラスやディレクトリという特定の実装について話していただけだったようです。Modelという概念もこれだけ肥大化してしまったら、オリジナルな概念で彼等と会話するのは諦めるべきかなと思いましたし、Railsの"MVC"をアンクォートして語るのはもはや害悪であるとすら感じました。
Rails界隈の人がよく「Railsの流儀」や「正しい"MVC"」というのを口角泡を飛ばして議論しているのを目にするのですが、おそらく外に広がる不条理で火傷を負って快適なRailsの世界に引き篭もった結果としての一種のストックホルム症候群なのだなと思いました。いまやAjaxとかWebsocketとかWebRTCとかを組み込もうとする至極真っ当な方法論がとてつもない高難度に見えてきます。設定よりも規約、というのも一つの方向性だと思いますが、ドメインやサービスレイヤの名前空間を構築しようとしたりコードジェネレーションしようとしたりしただけで地獄のようなCircular Dependency罰を受けてしまったので、自分がとても間違った事をしているような気がしてしまいました。とはいえConcernsに特別な名前や役割を与えられても正直しんどいので、皆が皆libにゴミを放り込んでいく様子にも納得がいきました。
RailsをAPIサーバーとして使おうとするとまずビューが無くなってMとCだけになりますが、いわゆる"MVC"の文脈で育ったエンジニアがなぜ息を吸うようにFat ControllerやFat Modelを作ってしまうのかという事が良く分かりました。多くのRailsのリファクタ手法と称されているものはクラスを書くファイルを分割する事以上のものでは無いように思えたので、Rails使いを大きめなAPIサーバー案件に回すときはセットポジションでDDDの青本を投げつける必要が有るなと思いました。
ビューとコントローラを結合させた場合、結合テストはCapybaraとかのBDDでマークアップサイドとの干渉を恐れながら強い気持ちでメンテしていくしか無いのかなと思いました。おそらく脳に電極を埋め込んでいるか、緑色のランプを見るだけでハイになれる特殊な人にしか生き抜けない闇が垣間見えました。コントローラを薄くしてサービスレイヤを挟めばその辺りもうまくいけそうな気がしましたが、ビューからヘルパーやモデルがいくらでも透けて見えてしまうという状況では裏側の完全性に自信を持つ事は難しそうでした。
ビューがRubyを叩いて永続化レイヤと直接コミュニケーション出来るというのはとても生産性が高いのだろうとは思いましたが、こうして出来たパーシャルやら何やらをデザイナーとどうやって共有するかを考えると頭痛が痛くなりました。おそらく適当に切り出して綺麗な空間をassets以下に構築した上でpublicにRPCのような窓口を備えたゴミを量産していくのかなと思いましたが、もっと綺麗な方法はあるのかもしれません。でもきっとRails案件に関われるデザイナーはRubyもバリバリ書けるに違いないはずなので、ここが問題になる事は無いのだろうなと思いました。
RESTはとても美しいパラダイムではありますが、そもそもHTTPがさほど美しくないので歪んだ空間には目を背けるか勝手解釈を与える事で人は初めてRESTfulを名乗る事が出来るのだと思います。GETがbodyを(公式には)持たないという事について美しい説明を与える事は出来ないでしょう。サーチAPIはどうしますか。ステータスコード足りなくないですか。401エラーはどうしますか。そしてRESTはあくまでリソースを抽象化する美しい概念なので、アクションや副作用については貧弱です。動詞が足りないですし、一般動詞に狭義の意味を与えてドキュメントするのは二度手間にしか見えません。PUTには冪等性があるべきみたいなこだわりは家の猫にでも説教してればいいと思います。というわけで、REST的な設計を拝借することはよしとしても、「○○はRESTでは無い故云々~」みたいな注文はやめて頂きたいものです。
とか言わないで欲しいです。こういう時にセットでPHPをディスって悦に浸るのは知る限りRubiestとPythonistaと中学生だけです。それにこれはあくまでサーバーサイド初心者の感想なので、想像するにこれ系のFWは多かれ少なかれ似たような不満を抱えるものなのかなと思います。というわけで、おそらくこれから選択肢がある限りはRailsを使い続けると思います。
元増田です。ありがとうございます。
ここの所は、今回の例ではいまいち見えづらい気がする。
たしかに、そうですね…
攻撃を支持した時点で刀をふりあげて、そのあいだに毒でモンスターが死んだら、納刀する、のような場合では、モデル・ビューの関連が密になる例になるでしょうか。
これは知りませんでした。基本クラスのレベルでObserverパターンがサポートされる!しかもタイプセーフ…
Mac OS X のCocoaフレームワークにも KVO という同様の仕組みがありますが、型のチェックは自分でする必要があります。
MOVEは望まれなかった子 - the sea of fertility
一理あるご意見をいただきました。ありがとうございます。
モンスター.attackedBy(勇者.attackPower)
誤解を招いてしまったようですいません。先の理由1では、"能動態のほうが受動態より解りやすい"、ということを主張したかったのです。
あとづけで申し訳ないのですが、その順序で書くのにはもう一つ、MVC的な理由があります。
RPGの戦闘シーンの入力Controllerは、ユーザーのメニュー選択等によって、勇者の攻撃方法を攻撃対象モンスターを決定し、攻撃を実行する。
つまり、この入力Controllerがコントロールする対象は、勇者と彼の攻撃対象だ。
勇者.attack(モンスター)
と書くと、勇者に命令していることが明示されるので、その設計意図がはっきりする。
なるほど、その設計は思いつきませんでした。〈モンスターへの攻撃と勇者への攻撃を対称に捉える〉という視点に目からウロコです。
ひとつめの質問は、攻撃方法型は、具体的にはどんなメソッドやフィールドが並ぶのか、です。
考えてみたのですが、どうしても"通常攻撃","ディレイ攻撃","attackPowerの値","すばやさ", などが並ぶ、ディクショナリ(連想配列)的なものが思い浮かんでしまいます。そうすると、結局モンスターのattackedByメソッドにif分岐を並べることになってしまうので、増田さまお考えの設計とは違うのでしょう。
モンスター.attackedBy(攻撃方法型: ジャンプ攻撃)
の方が良い利点はなんでしょうか。私は"時間的な処理の流れがわかりやすい"設計になりやすいことを主張しました(理由2参照)・
増田さまが考えるほかの利点があればぜひ教えてください。
ここの所は、今回の例ではいまいち見えづらい気がする。今回の例で複雑になっているのはモデルだけである。ビューがやる事は、「納刀する」「変色した血が飛び散る」イベントをlistenして画面に描画するだけのはず。MVCのイベント機構は、モデル→ビューとコントロール→モデルのメッセージ通知を行うためのもので、モデル同士の通信についてはノータッチ。モデル内での相互作用に、単なるメソッド呼び出しを超えたあれこれが必要なら、DSLを作るなり自前でイベント機構を作るなり好きにして下さい、というスタンスかなあと思われ。
といってもQtのsignal/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の実装を自分が考えるなら、オブジェクト指向設計としては攻撃方法型や特殊作用型(毒とか呪いとか)同士の相互作用を主眼に置いた感じになって、モンスターや勇者は単なるデータに近付いていくだろうなあ、と予想してみる。組んでみないと分からない事もあるだろうけれども。
勇者.attack(モンスター);という設計だったとする。
オブジェクト指向ならさ、
影響を受けるモノ.影響を与える方法(影響を与える外部パラメータ)
ってなるじゃん。
list.append(elem)
でしょ。
ならさ、
で、
モンスター.attack(勇者.attackPower)
になるんでない?
例えばスーファミのFFみたいな、古典的なRPGの戦闘シーンを作っていて、「勇者がモンスターを攻撃する」。
勇者.attack(モンスター);
という設計だったとする。
これに「モンスターが毒を受けて、自死する」という挙動を追加するケースを考える。
毒.attack(モンスター);
やや複雑な変更になりそうだが、勇者の攻撃とのタイミングの差で、
のようになるとしよう。
まず、インターフェイス"攻撃者"をつくって、「勇者」、「毒」をその実装とする。加えて...
斬撃後に死んでいた場合(*) 、納刀する
攻撃前に既に死んでいた場合、攻撃できないようにする
この設計変更によって、
が、
の4パターンに増えた(※ただし最後のパターンに関しては今回特に修正の必要はなかった)
攻撃者がひとつ増えるごとに、これらの分岐は倍、倍に増えていく怖れがある。
あらたに攻撃者を追加すると、既存の攻撃者を変更しなければならない。
この変更によって、全体の時間的な流れがよくわからなくなった。
等々の分岐が並ぶことになる。この分かりにくさは単にStateパターンを導入しただけでは本質的には改善しないだろう。
MVCにおけるモデル、は振る舞いを持ったデータだ。モデルが状態変化したとき、イベントが発生する。
しかしその状態変化が別のモデルの状態変化のタイミングに影響をうけるとき、モデルの設計はとても複雑になり、読みにくくなってしまう。
モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。
このような複雑さをプログラマが支配するのは、とても大変だ。
みなさんも体験したことがないだろうか、GUIで「ホニャララしているときにホゲホゲするとバグる」みたいな挙動を。
すると、上部に表示される「更新時刻」の表示位置がおかしくなる。
RPGの設計は、たとえば下記のように記述できるDSLを導入すると、劇的に改善する。
タイミング:毒 ⇒ 死ぬ ⇒ 斬撃 の順なら、納刀する タイミング:毒 ⇒ 斬撃 ⇒ 死ぬ の順なら、変色した血が飛び散る
オブジェクト指向ではこれはStateパターンとStrategyパターンを組み合わせることで実現できる。
でも、このような設計にすると、勇者やモンスターのモデルオブジェクトの責任は極端に少なくなってしまう。
加えてオブジェクト間のやりとりの複雑さがDSLに押し込められるので、オブジェクトの主体性も殆ど無くなってしまい、
うん、ただのデータでいいや。
---------------------------
(*) 攻撃時に相手の状態を問い合わせるのが醜い。これを避けるには、モンスターが毒で死んだ時に勇者にイベントを通知して、勇者を”戦意喪失”状態に変化させる手がある。
下見て思った。
http://mizchi.hatenablog.com/entry/2013/09/25/190313
知識が離散して蓄積されてない気がする。
シングルページスタイルのJavaScriptWebアプリケーションのアーキテクチャ
JavaScriptMVCライブラリを利用するよ!
とりあえず今回は、乱立する名称候補たちを紹介
HTML5って言いたいだけのJavaScrtipt使ったスマホのアプリフレームワークとかも呼ばれたり。
HTML5とか言われる前にJavaScriptアプリケーションやるとこれになってた。
アーキテクチャとしては、もっとも正解の名前なのだが、NET系界隈でしかきかん。
ASP.NET MVC Single Page Applicationは、キー要素がかなり詰まってて、参考になる。
このあたりのやろうとしてる奴は一度触っておくが吉
JavaScriptMVCライブラリ、AMD等の依存モジュール管理とか
英語ソースだと結構ポピュラーな感じの名前だが、指針的な匂いでアプリケーションとは言わない感も。
日本でも一時期、大規模Javascript開発とか言われてたが、Bakcbone.jsって名前に変わった。
Node.jsと被るために、このアーキテクチャの説明にはあんまり使われない。
動物本の、
「ステートフルJavaScript MVCアーキテクチャに基づくWebアプリケーションの状態管理 」
原題は、「JavaScript Web Applications」
これだけで、どのぐらい困ったか分かる感じ。
ちなみに、JavascriptMVCアーキテクチャの解説本としてはありなので読むが吉
といっても、10年ぐらい前からXHRとHTMLとDOMでほげるのは
実はあんまり変わってない。
Java界隈から出したかっただけ。oracleが呼んでた気がする。
Struts死んだけど、JSFでやるの?JSF無理筋だから違うフレームワーク作るの。
JSFみたいな抽象化使い始めると、コボルみたいにJava世界に閉じそうだけど大丈夫なの?
このあたりのライブラリ使えば、簡単にこのスタイルのアプリ作れると思ってるでしょ?
ライブラリの名称なのだが、背負ってるものは、大体この界隈全て
だけど、使えば、この界隈のアプリが簡単に作れるかというと、そうでもない。
ここ10年のBtoBの成果は、共通の技術基盤という妄想のために用意された
複雑大規模で、完全に閉じてて、他には誰も使えないEclipseで動く謎のゴミ。
自分達でも持て余して、パッケージ導入とか、結局Strutsスクラッチ開発だったね。
まあ、商売ネタとしては成立してたけど。
Struts1のサポートが切れる蓋を開けた時の状況は、笑いどころか失笑でした。
だからってBtoCも凄かったわけじゃない。
そこで事件が起きる。Railsの登場。
ビジネス的には、あんまりインパクトはなかったこれだが、歴史の転換を説明するのには便利。
Railsのアーキテクチャは、エンタープライズのアーキテクチャパターンを程よい感じに取りこんでいる。
Perlパクりから始まって、Javaのクラスパクッて、Railsも速攻パクった。
最近は、所謂関数系言語と分類されるパラダイムも最速でパクてる。
そんな感じで、RailsからパクッたフルスタックのMVCフレームワークが一気に広まる。
そしてこれらのフレームワークは、金魚のフンSierにとって銀の銃弾だったStrutsを、
鼻で笑えるもので、Strutsでドヤ顔してた彼らは、この時点からPHPerからも見下される存在になった。
エース開発リーダーさん。そろそろDIコンテナあたりは使えるようになった?
Javaの方が良いとか言うなら、せめてそのぐらいはフォローしたら良いんじゃないですかね。。。
ただ、これは結果から見たもので、本来の本当の流れは、ネットの普及にある。
BtoCの市場が巨大化し、パイが増えて、それだけ技術者も集まった。
優秀な人材がプロダクトを作れば、優秀なプロダクトが生まれる確率もあがる。
みんなで作れば凄いものが作れるという勘違いは、決してしないように。
これはアーキテクチャにも影響して、その方向性を決めるようになった。
SOAPは、優れていなかったわけじゃない。ただ単に閉じた世界すぎた。
RESTは、実用的なアーキテクチャなんてほとんど無い。ただみんなが適当にやってたのに名前付けただけだ。
だいたい今はそんな感じで
今後はアーキテクチャはBtoCが主導するだろう。
そこの社内SEさん。技術キーワードが凄いからって発注しちゃだめよ。
まともなもんが返ってくると期待しちゃいけない。
BtoBは、この鈍行の間、何もしなかったわけじゃない。
たった数パーセントの稼働率を上げるために、何十倍の時間や金をかけてきた。
彼らは、そういった品質に命をかけてきた。
Pixearch(ピクサーチ)
node.jsとMongoDBの勉強がてらpixivの画像のタグ検索のサービスを作りました。
はてブのタグ検索のようにpixivに投稿された最近の画像をpixiv内でのブックマーク数でフィルタをかけて検索できるのが特徴です。
検索したり、タグをたどって、ダラダラと良い絵を眺めるのを目的としています。
普段はブログを書いたりしてないので、今回学んだことのメモがてらの投稿です。
MongoDBを試そうと思ったのがサービスを作り始めた発端です。
Web部分はmongoDBと相性が良さそうなnode.jsを採用。
MVCのフレームワークで何か適当なものはないかとググってSails.jsが良さそうだったので今回採用しました。
今回はせっかくnode.jsを採用したので、噂のnode.jsのPaaSのnodejitsuを試しに使っています。
500MB分の容量のMongoDBを最初から使えるのも大きかったです。
とりあえず最小のプランにしてるのでどのくらい捌けるのか気になるところ。
Web開発用のモジュールを自分で用意するのがめんどいなー、という人向けな印象。
このくらいの規模のものだったらサクッと作れました。
ただある程度の規模のちゃんとしたサービスを作るのには色々足りてないので、自分でカスタマイズしたりできる人じゃないと使うのは辛そうです。
後、ドキュメントも公式のものだけだと説明されてない機能が結構あったりします。
デフォルトだとDBはMySQLに対応していて、MongoDBを使うにはsails-mongoを入れる必要がありました。
開発中に困ったことは、nodejitsuで動かそうとしてsails-mongoでエラーが出て、調べてみたらauthenticationに対応していないというバグがあったことでした。
手元で直したのでpull requestを送ろうかと思ったら既に他の人が送っていて、3日前ぐらいに取り込まれているので今は大丈夫なはず。
https://github.com/balderdashy/sails-mongo/pull/36
現在進行形で色々Issueが上がって修正がされているのでそのうちこなれてくるのに期待。
細かいところで設計や考慮がちゃんとされてるなーと感じたところも多かったので、node.jsで開発してる人は一回試してみると勉強になりそうです。
最初にコレクションの操作に戸惑ったのですが、結局JSの連想配列なので思ったより早く馴染みました。
$setとか$gteとか特殊な意味を持つキーがいくつかあるので、その辺を把握できてから色々と捗りました。
MySQLに比べて特に更新系で複雑なクエリが発行できるので、ORMで使うと十全に機能を発揮できないのではないかな、と思ったり。
ご存知スキーマレスなので、何も考えずにデータを突っ込んでるとIntegerで保存したい値がStringになっててソートのときに困ったりするので要注意。
指定した容量を超えたら自動で消してくれるCapped Collectionがあると知ったので、今回みたいな容量が限られてる場合に便利かなと試してみたのですが、このオプションを有効にしたコレクションだとデータのアップデートや削除ができなくなりました。
おそらく、追加しかしないログのようなデータの保存に使うもののようです。
まだ微妙な部分も多かったですが、デプロイとかコマンド一発でできて、設定管理がpackage.jsonでできたりして面白かったです。
今回は、特に問題が起きたときに環境にsshで入ったりできないので、表示されてるログだけで問題を調査するのに苦労しました。
MongoLabとMongoHQというMongoDBの外部ホスティングサービスが上述したように使えるのですが、無料の容量を超えて使うにはそこそこお金が掛かるのでモリモリ容量を使うものを考えている場合は注意がいります。(もちろん値段に見合ったプロダクトを提供してくれると思いますが)
ということで、せっかく作ったので是非試してみてください。