勉強

gomのトレース

https://github.com/mattn/gom パッケージマネージメントツール プロジェクトの依存するpackage(revisionを含む)を管理できる。 go標準のパッケージマネージメントツールがない時からあって、結構な利用者がいそう。 概要 データとしては、プロジェクト毎の…

gopwtのトレース

概要 power assertのgolang版のgopwtのトレース github.com どうやったか 使い方と全体ディレクトリ構造とコードをざっくり見た後に、インクリメンタルに動作させつつコードを書き写していった。 gopwtの使い方 main_test.go func TestMain(m *testing.M) { …

デザインパターン入門【マルチスレッド編】備忘録

android開発を少しすることになってマルチスレッド周りの知識が残念な感じだったので、良い本だと噂の Amazon CAPTCHA を読んだので備忘録。 メモ synchronizedがあったら何か守るべきものがあると考える InterruptedException throws InterruptedException…

vuexでのデータの扱いについて少し困ったので整理

目的 vuexを使っているある程度複雑なvueコンポーネント上で、定数的なものをどう扱っていいか解らなかったので、一旦考えを整理しておきたい。 現状の整理 なぜvuex? コンポーネントの階層が4つまであって、propsだけで実現しようとすると、rootコンポーネ…

CleanArchitecture備忘録(前編)

Amazon CAPTCHA いい本だと噂になっている気がしたので読んでみた備忘録。 日本語版もあるけど、英語の勉強も兼ねて英語版を読んでみた。 一旦PART 1 Introduction から PART3 Design Principle まで。

ノンブロッキングI/Oがよく解っていなかったので作りながら調べてみた

モチベーション WEBエンジニアとして活動してきてますが、技術的な棚卸しとして、普段良く使っているツールがどういったものかを少し深掘りしてみようという活動の一環。 nginx軽くて早くてお世話になっていますが、どうして軽くて早いのかよく解っておらず…

ログイン後の初期設定 - 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前に解いた問題を再度解いてみた。 心構えとしては、 問題をしっかりと理解する 最終的に必要なものを明確にして、それを実現するために必要なもの。。を再起的に明確…