言語化する朧げな

Baby steps to Giant strides!

TCPのウィンドウ制御とコネクション識別

ウィンドウ制御 TCPは送信と応答確認によってデータ送信の信頼性を高めているが、パケット毎にそれをやっていると効率が悪い。 この問題を解決するために、ウィンドウ制御という概念を取り入れている。 具体的には、応答確認をする単位を1パケットではないく…

initialPropsとstate - React.js

Props in getInitialState Is an Anti-Pattern | React getInitialState内でpropsを用いてstateを生成するやり方は、どのデータが本筋のデータかがわかりづらくなってしまう状況になってしまうことがあるので、注意して使ったほうがいい。 コメントフォーム…

Model周り - helpy code reading

共通部分を切り出す CakePHPでいうBehaviorやComponent, Helper Rails 共通部分を切り出す (View, Controller, Model) メモ - Qiita 関連したモデルのフォームでの扱い Rails ネストした関連先のテーブルもまとめて保存する (accepts_nested_attributes_for…

ログイン後の初期設定 - helpy code reading

github.com 初期ログイン後に表示される初期設定画面周りのコードを見ていく。 流れ ログイン後のリダイレクト admin's root admin/dashboard#index to admin/topics#index def index #@topics = Topic.mine(current_user.id).pending.page params[:page] if…

Decorator Pattern - Design Pattern in Ruby

あるオブジェクトの機能に追加の機能を付け足したい、 さらにいろいろな組み合わせで追加機能を実装したいという時に使えるパターン。 Interface 元の機能を持ったオブジェクト(ConcreteComponent)と追加機能を実装するオブジェクト(Decorator)という登…

redux/examples/real-world を見て学ぶ

GitHub - reactjs/redux: Predictable state container for JavaScript apps Githubのアカウント名を入力すると、 starしているリポジトリと作者の一覧が表示される。 一覧表示のリポジトリ名やアカウント名をクリックすると、それぞれ対応したページに切り…

redux/examples/shopping_cart を見て学ぶ

redux/examples/shopping-cart at master · reactjs/redux · GitHub 仕様 商品リストとカートがあり、商品をカートに入れることができる 商品は在庫があり、在庫がなくなると、sold out と表示される カートでは合計金額を表示する state間の連携について st…

Command pattern - Design Pattern in Ruby

「何かを実行するもの」をオブジェクトとして扱う方法。 これによる恩恵として、実行の記録の保管が容易になり、undo, redoなどの実装もしやすくなる。 よく使用されるケースとしては、GUIのパーツで、パーツのデザインや配置などの処理と、何かしらのアクシ…

ActionController#respond_to - code reading

requestのMIME TYPEに応じたレスポンスを定義する機能 定義は rails/mime_responds.rb at 48f140cf7459c963a54637c897448b959dbbfd26 · rails/rails · GitHub ActionController:: MimeResponds#respond_to def respond_to(*mimes) raise ArgumentError, "res…

Iterator pattern - Design Pattern in Ruby

複数の要素を持つオブジェクトが、それぞれの要素に順繰りにアクセスする方法を提供するパターン。 External iterator has_next, next_item のような順繰りに必要なメソッドを提供することで、外部からの要素へのアクセスを可能にする。 loop処理などを自分…

Composite pattern - Design Pattern in Ruby Chapter 6

共通のオペレーションを行う要素と、その要素の集合体を同じように扱うことで、複雑な構造をシンプルに扱う。 用語 Component 共通のインターフェース Leaf ミニマムの要素 Composite 要素の集合体 注意点 compositeとleaf,異なる属性のものを全く同じように…

Observer Pattern - Design Pattern i Ruby Chapter 5

注意点 更新頻度を考える。 考えなしにすべての変更時にobserverオブジェクトに通知すると、かなりの数の冗長な通知が飛び交ってしまう可能性がある。 どういったタミングで通知を行うかの戦略は考えておくべき。 変更の一貫性 上記の高新頻度にも似ているが…

Strategy Pattern - Design Pattern in Ruby Chapter 5

www.amazon.co.jp まとめ Templateパターンと同じ問題を解決するが、compositionとdelegateの形式で行う分、疎結合で柔軟な設計になる。 似たようなことを行うオブジェクト(family objects)をまとめ同じインターフェースを定義することで、使う側のオブジェ…

extends core Date - Rails code reading

activesupport/lib/active_support/core_ext/date/conversions.rb to_sで指定できるフォーマットを拡張している。 一番上に対応するフォーマットが定義されている。 class Date DATE_FORMATS = { :short => '%d %b', :long => '%B %d, %Y', :db => '%Y-%m-%d…

React.jsで将棋盤を作ってみた

React,Reduxのキャッチアップ - エンジニアの勉強日記 上記記事で基本をキャッチアップしたので、もう少し実践的なプログラムを作ろうということで、将棋盤を作ってみた。 GitHub - kitabatake/react-shogi 構成 webpackでes6, jsxをトランスパイル viewコン…

Chapter9 - Practical Object Oriented in Ruby

Designing Cost Effective Tests まとめ 効果的なテストを書くことの目的は、これまでやってきた設計に関する考えと同じで、コストを減らすこと。 テストはあるオブジェクトに対して、どういった文脈で、どのように扱えばいいかを最小限の形で記述するので、…

Chapter 9 - Practical Object Oriented Design in Ruby

Combining Object with Composition まとめ 1つのオブジェクトを複数のオブジェクトで構成するという話。 自転車オブジェクトがPartsオブジェクト持つという例で、sparesのようなPartsオブジェクトが返答すべきメッセージは内部でPartsオブジェクトへ処理を…

Chapter 7 - Practical Object Oriented in Ruby

Sharing Role Behavior with Modules まとめ dock typeの章で説明したような共通の振る舞いを発見した際に、それをモジュール化することで、コードを1つの箇所に置くことができる。 シーケンス図の各ノードに、具体的なクラス名を書くのではなく、求められて…

Chapter 6 - Practical Object Oriented Design in Ruby

Acquiring Behavior Through Inheritance まとめ 継承とはメッセージを自動的に転送すること。 継承を用いると、クラスの構造が複雑になるので、必要な情報が揃った時に行うのがいい。 具体的には、2つの似たような種類のクラスがあって、1つの親クラスと、2…

Chapter 5 - Object Oriented Design in Ruby

Duck Typing まとめ あるオブジェクトを、どのクラスのオブジェクトか?という視点で見るのではなく、どういったインターフェースを持っているか?という視点で見ること。 あるオブジェクトに対して、kind_of? 等で分岐させて、それぞれ異なるメソッドを呼び…

Chapter4 - Practical Object Orient Design in Ruby

Creating Flexible Interfaces 抜粋 第3章で頻繁に変更が起こるクラスに依存するのは危険という話があったが、この考え方はクラス内の範囲でも同じように適応できる。 クラスの持つパブリックなインターフェースは、そのクラスが持つ責任をドキュメントの役…

Chapter3 - Practical Object Orient Design in Ruby

Managing Dependencies 抜粋 デザインのやるべきことは、それぞれのクラスが仕事をこなすために必要な最低限のことだけを知っているように、依存性を管理すること dependency injection クラスが知っていることを減らすという視点で、クラスの名前と初期化方…

Chapter 2 - Practical Object Oriented Design in Ruby

Designing Classes with a Single Responsibility 抜粋 クラスは一つの責任しか持つべきではない。 そのクラスを一文で簡潔に説明できるかどうかが一つのバロメーター。 andやorが入る場合は、2つ以上の責任を持ってしまっている可能性が高い。 designの決…

Chapter 1 - Practical Object Oriented Design in Ruby

いい本だと紹介されていたのと英語の勉強など。 第1章はオブジェクト指向デザインの基本的な紹介。 概要 ソフトウェア開発に変更は付き物。なぜなら顧客は自分が求めているものが最初の段階で解っていない。 なので、変更を容易にするのがOOD(Object Oriente…

React,Reduxのキャッチアップ

フロントエンド周りの技術が少し落ち着いてきたという風潮があるので、キャッチアップ。 やったこと React Tutorial https://facebook.github.io/react/docs/tutorial.html React自体は結構シンプルでわかりやすく、メリットも感じられた。 state周りが、flu…

ActionDispatch::Http::UploadedFileのコードリーデイング

概要 ActionDispatch::Http moduleに class UploadedFile が定義されている。 サーバーにアップロードされたtime fileを扱うクラス。 pickup initialize以外の処理は@tempfileに対するショートカット。 initializeでは、ファイルの有無チェックとファイル名…

ActionDispatch::Http::URLのコードリーディング

概要 ActionDispatch::Http::URLモジュールに諸々追加している。 pickup class << self でクラスメソッドをまとめて定義している。 hostからドメインを取得する。 Array#last は要素数を指定できる。 def extract_domain_from(host, tld_length) host.split(…

ActionDispatch::Http::Headers のコードリーディング

なぜ? CakePHPを長く使っていて、Railsを趣味でちょいちょい触ってみている状態で、 その差として思いつくのが、 標準のコンポーネント、機能の知識 有用なプラグイン知識 言語自体の経験 この標準機能の知識と言語の慣れを埋めるために、railsのコードを読…

Atcoder Beginner Contest 041

Tasks - AtCoder Beginner Contest 041 | AtCoder AtcoderBeginnerContest/041 at master · kitabatake/AtcoderBeginnerContest · GitHub リアルタイム参加 A - Cは問題なし。 いつもより簡単気味。 D リアルタイム 部分点しか取れなかった。 DFSでパターン…

Atcoder Regular Contest 056

Tasks - AtCoder Regular Contest 056 | AtCoder レギュラーコンテストの方にも挑戦してみたいなと思っていたところ、ちょうど開催されていたのでやってみた。 ABCでも苦戦中なのでだいぶ厳しいのかなと思っていたが、A,B問題はABCのC,D問題のような感じで、…

Atcoder Beginner Contest 40

Tasks - AtCoder Beginner Contest 040 | AtCoder 久々のリアルタイム参加。 A - C は問題なく解けた。 D問題 リアルタイム N個の都市があり、都市間をつなぐ道がM個ある。 それぞれの道には製造年が記録されている。 Q人の国民の所在都市と安全意識(ある年…

Atcoder Beginner Contest 038

AtCoder Beginner Contest 038 - AtCoder Beginner Contest 038 | AtCoder 意識しようとしたこと 問題の疑問点はすべて解消する 自分でミニマムケースを作る エッジケースを考える 解き方を思いついた後、穴がないかしっかりと疑う時間を作る。 ABC問題なし…

ABC復習 033-037

github.com 一度解けた問題がちゃんと理解できているか、解法を定着させるために033 - 037前に解いた問題を再度解いてみた。 心構えとしては、 問題をしっかりと理解する 最終的に必要なものを明確にして、それを実現するために必要なもの。。を再起的に明確…

Atcoder Beginner Contest 032

Tasks - AtCoder Beginner Contest 032 | AtCoder A, Bは問題なく解けた。 C 愚直に解くと、すべての開始点から条件内に収まる限り部分文字列をインクリメントしていく方法([tex:N2])で解けそう。 開始点をインクリメントする際に、部分列の積をまた始めか…

Atcoder Beginner Contest 033

Tasks - AtCoder Beginner Contest 033 | AtCoder A, Bは特に問題なし。 C いろいろな解き方がありそうで若干困惑したけど、以下のやり方で解いた。 掛け算を順に処理していく。 かける値のどちらかが0であれば、文字列から丸ごと削除。 それ以外は、1に置…

jQueryのセレクタ解析のSizzleについて

jQueryのソースコードは jquery-2.1.4.js を見ていきます。 Sizzleとは Stand Alone のCSSセレクタの解析エンジンで、指定したセレクタに対するDOM要素を抽出してくれるものです。 Sizzle JavaScript Selector Library jQueryとSizzleの関係性について 下記…

Atcoder Beginner Contest 034

abc034.contest.atcoder.jp A, Bは問題なく解けた。 C DPを用いた解き方が解らなかった。 経路の問題は苦手意識があって、ミニマムケースでも数えるのが苦手。 (w, h) への経路数は、(w-1, h) + (w, h-1) であると気づければ簡単に解くことができそう。 点の…

Atcoder Beginner Content 035 の問題をc++で解いてみた

Atcoder Beginner Contest 035 - 成長志向エンジニアの勉強日記 以前rubyで解いてみてD問題がTLEになってしまったので、C++を学んでチャレンジ。 競技プログラミング以外でもc++を勉強してみたかったので、英語の勉強もかねて、 The C++ Programming Languag…

Atcoder Beginner Contest 035

2016/3/26 に行われた過去コンテストの問題にチャレンジ abc035.contest.atcoder.jp A テレビ 特に問題なく解けた。 B ドローン 特に問題なく解けた。 C オセロ 初回 問題自体はシンプルなので、N個の要素を持つ配列に駒への操作数を保持して、奇数の場合「…

AtCoder Beginner Contest 037 参加しました

アルゴリズムの勉強ということで、5/7 21:00 から行われた AtCoder Beginner Contest 037 に参加してみました。 Welcome to AtCoder Beginner Contest 037 - AtCoder Beginner Contest 037 | AtCoder スキルについて 1年ほど前にpaizaに登録してAランク取得 …

Dropzone.jsの仕組み

依存API ドラッグ&ドロップ - DragDrop | MDN ドラッグ&ドロップ イベント DataTransfer - DragDrop | MDN ドラッグ&ドロップでイベントが発生した際に、ドロップされたファイル情報eventオブジェクトのdataTransferプロパティに格納される Dropzone.protot…

CakephpのLazyModelの仕組み

Cakephp 1.2, 1.3 のModelのロードを最適化するプラグイン LazyModel. GitHub - Phally/lazy_model: Lazy model loading for CakePHP 1.2 & 1.3. Cakephp 2.0 以降では標準化されているようです。 概要 モデルに紐づく関連するモデルを実際に使用する際に初…

codekata04: Data Munging

Kata04: Data Munging - CodeKatacodekata.com 概要 下記の3つの作業をそれぞれ個別に行う. (後に行う作業を考慮して、前の作業を行わない) 天気のデータを読み込んで、整形して出力する. サッカーリーグのデータを読み込んで、整形して出力する. 上記の2つ…

モデリング練習 Kata01: Supermarket Pricing

Kata01: Supermarket Pricing - CodeKatacodekata.com スーパーマッケートの価格設定、購入周りのモデリングの練習。 要件 下記のような複雑な価格設定をどう実現させるか? 3つで1000円 100g 200円 2つ買ったら1つ無料 会計時の処理、在庫管理はどうやって…

JQueryのイベント実行の仕組みを調べてみた

JQueryでのイベントリスナーの設定、実行までがどんな仕組みになっているのかが気になったので調べてみました。今回参考にしたのはjquery-1.7.1.jsです。 まずJQuery自体の定義ですが、無名関数スコープ内で定義されていて、それをwindowオブジェクトに追加…

cakephpの概要

こんな感じになっているようです。 cakephpを設置したディレクトリにhttpリクエストがあると、rewriteモジュールによって「設置Dir/app/webroot/index.php?url=設置Dir以下のパス」の形式のURLに変換され、app/webroot/index.phpが呼び出されます。 http://h…