読者です 読者をやめる 読者になる 読者になる

WEB系エンジニアの勉強日記

Baby steps to Giant strides!

ログイン後の初期設定 - 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…

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のパーツで、パーツのデザインや配置などの処理と、何かしらのアクシ…

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…

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…

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 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に置…

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ランク取得 …