Subscribed unsubscribe Subscribe Subscribe

PBP(Possession, Behaviour, Presence) for Coaching

I read 'The Basics of Coaching' to learn about Coaching. I got the viewpoints of PBP(Possession, Behaviour, Presence) by reading. They are important viewpoints that a Coach should have for understanding clients. What should my client get? …

How to spend the period from 6th until 10th years for learning?

I've read Learning from Experience, and summarize how to spend the period from 6th until 10th years for learning based on what's written in this book. What is the period from 6th until 10th years for learning? It's said that I have to have…

FX Retrospective (6/22 - 6/26)

Keep the points of profit taking was set higher than those of loss cutting. learned each economic indicators. learned how to stop and limit order to close deal. Problem cross traded without attention to US dollar rate. Try forecast market …

FX Retrospective (6/15 - 6/19)

Keep followed some uptrends and downtrends with market order. leaned how to IFDOCO with smartphone. cut loss within expectations. Problem tried to follow some temporary fluctuation of the market prices. ordered without any information for …

無線LANでインターネットに接続してみた[CentOS6]

ネットワークの勉強を兼ねて、CentOS6.6で無線LANの各種設定をして、インターネットに接続してみました。以下に手順をまとめます。なお、暗号化方式は、WPA2-PSK(AES)方式を採用します。 1. パッケージをインストールする 2. ルーターのSSIDとKEYを設定ファ…

WindowsとCentOSのデュアルブート構成にしてみた

インフラの勉強を兼ねて、Windows7搭載のPCにCentOS6.6(以下、CentOS)をインストールし、デュアルブート構成にしてみました。 以下に手順をまとめます。 0. 事前準備 1. CentOSイメージを外部記憶媒体に書き込む 2. 1.で作成した外部記憶媒体からPCを再起…

SICP(1.1 プログラムの要素)の問題を解いてみた

計算機プログラムの構造と解釈(SICP)の「1.1 プログラムの要素」を読んで、問題を一部解いてみました。 sicp/chapter_1 at master · matk2/sicp · GitHub 以下に、一部の回答について説明を行おうと思います。 問題1.3 三つの数を引数としてとり、大きい二…

Rubyワーストプラクティスの問題点と解決策

Rubyベストプラクティスを読みました。 「Rubyワーストプラクティスの問題点と解決策」という観点から学んだことをまとめようと思います。 サブクラス化を許すクラスに、クラス変数を使う 問題点 想定していない定義や変更が起きる class Car @@instances = …

動的な機能を使ったコードを解説してみる

Rubyベストプラクティスの第1章〜第3章を読みました。 特に印象的だった第3章から学んだことを活かして、「動的な機能を使ったコード」を解説してみようと思います。 コード ※ 本著 p.107より引用 module NaiveCampingRoutes extend self def R(url) rout…

RubyによるScheme処理系の実装

つくって学ぶプログラミング言語 RubyによるScheme処理系の実装を読みました。 RubyによるScheme処理系の実装内容をまとめようと思います。 実装内容 組み込み関数 計算式の評価 無名関数 λ式の評価 局所変数 let式の評価 letrec式の評価 名前つきlet式の評…

RubyでUnixプロセスを活用する

なるほどUnixプロセスを読みました。 「RubyでUnixプロセスを活用する」という観点から、学んだ事をまとめようと思います。 子プロセスを生成する Kernel.fork 実行中のプロセスから新しいプロセスを生成できる。 子プロセスは親プロセスで使われているすべ…

良いデザインができるようになるために実践したいこと

ハッカーと画家を読みました。 「良いデザインができるようになるために実践したいこと」をまとめたいと思います。 良いデザインの原則 当著では、良いデザインの原則として以下14種類の原則が紹介されていました。 良いデザインは単純である 良いデザイン…

正規化とB-treeインデックスの設計方針

達人に学ぶDB設計-徹底指南書を読みました。 「正規化とB-treeインデックスの設計方針」という観点から学んだことをまとめようと思います。 正規化 【正規化を行う目的】 データの冗長性を排除し、データの登録・更新時の不都合を防ぐため。 例えば、下記の…

Webアプリケーションの各種脆弱性の影響・原因・対策【処理に起因する脆弱性】

体系的に学ぶ 安全なWebアプリケーションの作り方を読みました。「Webアプリケーションの各種脆弱性の影響・原因・対策」という観点から、学んだことをまとめようと思います。 「重要な処理(取り消しできない処理)」の実行 【クロスサイト・リクエストフォ…

Webアプリケーションの各種脆弱性の影響・原因・対策【出力に起因する脆弱性】

体系的に学ぶ 安全なWebアプリケーションの作り方を読みました。「Webアプリケーションの各種脆弱性の影響・原因・対策」という観点から、学んだことをまとめようと思います。 表示処理 【クロスサイト・スクリプティング(XSS)】 影響 サイト利用者のブラ…

Webを支える各種技術の設計作法

Webを支える技術を読みました。 「Webを支える各種技術(URI、HTTP、ハイパーメディアフォーマット)の設計作法」という観点から学んだことをまとめようと思います。 URIの設計作法 シンプルなURIにする シンプルなURIにすると、変わりにくいURIとなる。本著…

Replace Subclass with Fields(サブクラスからフィールドへ)

コードの臭い 定数を返すメソッド以外に違いのないサブクラスがある。 リファクタリングコード refactor (replace subclass with fields) テストコード # rspec describe Female do let(:bree) { Female.new } describe 'female?' do subject { bree.female?…

Replace Type Code with State/Strategy(タイプコードからState/Strategyへ)

コードの臭い クラスのふるまいに影響を与えるタイプコードが使われており、タイプコードは実行時に変更される。 リファクタリングコード refactor (replace type code with state/strategy) テストコード #rspec describe MountainBike do let(:rigid_param…

Replace Type Code with Module Extension(タイプコードからモジュールのextendへ)

コードの臭い クラスのふるまいに影響を与えるタイプコードが使われている。 リファクタリングコード refactor (replace type code with module extension) テストコード # rspec describe MountainBike do let(:instance_params) { { :type_code => :rigid,…

Replace Type Code with Polymorphism(タイプコードからポリモーフィズムへ)

コードの臭い クラスのふるまいに影響を与えるタイプコードが使われている。 リファクタリングコード refactor (replace type code with polymorphism) テストコード # rspec describe MountainBike do let(:instance_params_of_rigid) { { :type_code => :r…

Encapsulate Collection(コレクションのカプセル化)

コードの臭い メソッドがコレクションを返している。 リファクタリングコード refactor (encapsulate collection) テストコード # rspec describe Person do let(:kent) { Person.new } describe 'courses=' do before do courses = [] courses << Course.ne…

Change Unidirectional Association to Bidirectional(片方向リンクから双方向リンクへ)

コードの臭い 互いのメンバを使わなければならない2つのクラスがあるが、片方向のリンクしかない。 リファクタリングコード refactor (change unidirectional association to bidirectional) テストコード # rspec describe Order do let(:order) { Order.n…

Replace Hash with Object(ハッシュからオブジェクトへ)

コードの臭い 異なる種類のオブジェクトを格納し、複数の目的のために渡され、使われているHashがある。 リファクタリングコード refactor (replace hash with object) テストコード # rspec describe Client do let(:new_network) { { :nodes => [], :old_n…

RspecでRails.envを変更する方法

例えば本番環境のみで実行したいメソッドをrspecでテストしたい時に、環境を一時的に変更する必要が出てくる。その方法をメモ。 # beforeで実行 Rails.stub(:env).and_return(ActiveSupport::StringInquirer.new("production"))

社会人3年間のふりかえり

今月から、社会人4年目に入りました。 現在の会社には24歳で新卒1期生として入社し、本日まで本当にさまざまなことがありました。最初に入る会社には少なくとも3年間はいようと思いながら入社し、実際に3年が過ぎた現在、1つの節目としてその3年間を…

配列からオブジェクトへ(Replace Array with Object)

コードの臭い 一部の要素が別の意味を持つようなArrayがある。 リファクタリングコード refactor (replace array with object) テストコード # rspec describe Client do let(:row) { [] } let(:client) { Client.new(row) } describe 'name' do before do r…

参照から値へ(Change Reference to Value)

コードの臭い イミュータブル(書き換え不能)で小さく、管理しにくい参照オブジェクトを持っている。 リファクタリングコード refactor (change reference to value) テストコード # rspec describe Currency do let(:currency_1_new) { Currency.new("USD"…

値から参照へ(Change Value to Reference)

コードの臭い 同じインスタンスをいくつも生成するクラスがある。 リファクタリングコード refactor (change value to reference) テストコード # rspec describe Client do describe 'self.number_of_orders_for(orders, customer)' do let(:order_1) { Ord…

データ値からオブジェクトへ(Replace Data Value with Object)

コードの臭い データやふるまいの追加を必要とするデータ項目がある。 リファクタリングコード refactor(replace data value with object) テストコード # rspec describe Client do describe 'self.number_of_orders_for(orders, customer)' do let(:orde…

自己カプセル化フィールド(Self Encapsulate Field)

◯ コードの臭い フィールドに直接アクセスしているが、フィールドとの密結合が不都合になってきている。 ◯ リファクタリングする理由 サブクラスが情報の取得方法をメソッドでオーバーライドできるため、データの管理方法に柔軟性が生まれる。 ◯ リファクタ…

横流しブローカーの除去(Remove Middle Man)

◯ リファクタリングすべき時 クラスが単純な委譲をやり過ぎている。 ◯ リファクタリングした方がいい理由 委譲オブジェクトに追加するメンバが増えてきた際、サーバーに委譲メソッドを追加する負担を抑えるため。 ◯ リファクタリングコード refactor(remove…

委譲の隠蔽(Hide Delegate)

◯ リファクタリングすべき時 クライアントがオブジェクト内の委譲クラスを呼び出している。 ◯ リファクタリングする理由 変更の影響が及ぶのがサーバーまでに限られ、クライアントには影響が及ばなくなる。 ◯ リファクタリングコード refactor(hide delegat…

クラスのインライン化(Inline Class)

◯ リファクタリングした方がいい状況 クラスが大した仕事をしていない。 ◯ リファクタリングコード refactor(inline class) ◯ テストコード # rspec describe Person do let(:person){ Person.new } describe 'telephone_number' do before do person.offi…

クラスの抽出(Extract Class)

◯ 適用すべき時 2つのクラスで行うべき仕事をしている1個のクラスがある。 ◯ リファクタリングした方がいい理由 クラスが大きすぎると、簡単に理解できない ◯ リファクタリングコード refactor(extract class) ◯ テストコード # rspec describe Person do …

フィールドの移動(Move Field)

適用すべき時 フィールドが、自分のクラスよりも他クラスからよく使われている。 リファクタリングコード(1) refactor(move field) リファクタリングコード(2) refactor(move field)<自己カプセル化フィールドの使用> テストコード describe Account…

メソッドの移動(Move Method)

◯ 適用すべき時 メソッドが、自分のクラスよりも他クラスの機能を使ったり、他クラスから利用されたりする。 ◯ リファクタリングした方がいい理由 メソッドを移動すると、クラスは、関連する機能を簡潔に実装した単純なものになる。 ◯ リファクタリングコー…

evalを実行時からパース時へ(Move Eval from Runtime to Parse Time)

◯ 適用すべき時 evalを使わなければならないが、evalの実行回数を減らしたい。 ◯ リファクタリングコード refactor(move eval from runtime to parse time) ◯ テストコード # rspec describe Person do before do class EmployeeNumberGenerator; end end …

動的レセプタの分離(Isolate Dynamic Receptor)

◯ 適用すべき時 method_missingを使っているクラスが容易に書き換えられなくなってきている。 ◯ リファクタリングコード 動的レセプタの分離(Isolate Dynamic Receptor) ◯ テストコード #rspec describe Recorder do let(:recorder){ Recorder.new } descr…

Replace Dynamic Receptor with Dynamic Method Definition

適用すべき時 デバッグが大変なmethod_missingを使わずに、動的に定義したいメソッドがある。 リファクタリングコード(1) method_missingを使わない動的な委譲 テストコード(1) #rspec describe Decorator do let(:post){ Post.new } let(:decorator){…

Dynamic Method Definition

◯ 適用すべき時 動的に定義すれば、もっと簡潔に定義できるメソッドがある。 ◯ ポイント コードの重複が出てきた場合は、動的定義に切り替える 動的定義にすると、メソッド定義での誤りが減る 「動的メソッド定義」の最大の目的は、読みやすくメンテナンスし…

Remove Unused Default Parameter

◯ 適用すべき時 引数がデフォルト値を持っているが、その引数を指定せずにメソッドが呼び出されることはない。 ◯ ポイント ソフトウェアでは、使われていない柔軟性は悪である。 (使われていない)柔軟性は、メンテナンスのために時間を食い、バグが入る余…

Introduce Named Parameter

◯ 適用すべき時 呼び出しているメソッドの名前からは、使われている引数の意味が簡単に推測できない。 ◯ ポイント 引数リストをハッシュに変換し、ハッシュキーを引数の名前として使う 処理が委譲されているオブジェクトの公開インターフェースを明快にする…

Introduce Class Annotation

◯ ポイント 宣言的な構文でコードの目的が明確につかめる場合に適用すると、コードの意図を明確にできる ◯ リファクタリングコード refactor<introduce class annotation(クラスアノテーションの導入)> ◯ テストコード search_criteria_spec.rb※参考資料…

Extract Surrounding Method

◯ ポイント ユニークなコードが中央にあるメソッドを抽出する時に適用する インフラストラクチャコード(ex. コレクションを反復するためのコード)を隠して、ビジネスロジックを前面に押し出すことができる ◯ リファクタリングコード refactor(Extract Sur…

Replace Loop with Collection Closure Method

ポイント ループを取り除いてコレクションクロージャメソッドを使うと、コードをたどりやすくなる。 コレクションクロージャメソッドは、コレクションの中を行き来したり、派生コレクションを作ったりするためのインフラストラクチャコードを隠してくれる 複…

アルゴリズム変更

ポイント 複雑なアルゴリズムから単純なアルゴリズムに変更する 大きくて複雑なアルゴリズムを取り替えるのは難しい アルゴリズムを変更しやすくするために、出来る限りメソッドを分解しておく必要がある リファクタリングdiff refactor(substitute algorith…

メソッドからメソッドオブジェクトへ

ポイント ローカル変数がじゃまをして、「メソッドの抽出」を行いにくい場合に適用する ローカル変数は、メソッドオブジェクトの属性になる メソッドオブジェクトにすると、引数渡しの心配をせずに「メソッドの抽出」を行えるようになる コード 6.9-after · …

引数への代入の除去

ポイント 引数への代入を安易に行うと、引数自体が変更されているのかどうかを気にする必要が出てくる →rubyの場合、値渡しなので引数自体は変更されない プロダクトコード(ruby) before class Order def discount(input_val, quantity, year_to_date) inp…

リファクタリングしてみた(ハギスの移動距離)

適用したリファクタリング名 一時変数から問い合わせメソッドへ(Replace Temp with Query) 条件文の分解(Decompose Conditional) プロダクトコード(ruby) before class Haggis def initialize(primary_force, secondary_force, mass, delay) @primary_…

Extract Method(メソッドの抽出)

所感 プロダクトコード Introduce Explaining Variable(説明用変数の導入)と同様に、プロダクトコードが読みやすくなった。また、「base_price」のロジックを再利用できるようになった。 テストコード Introduce Explaining Variable(説明用変数の導入)…