リーダブルコード
名前が「ほかの意味と間違えられることはないだろうか?」と何度も自問自答する。
- 積極的に「誤解」を探していく → クリエイティブになる
filter()
- results = Database.all_objects.filter("yaer <= 2011")
resultには2011より年が小さいすべてのデータが入っていると思うが、人によっては「year<=2011 ”ではない” オブジェクト」と読む人もいる。フィルターは何かを抽出するという意味だから。
選択するのであれば、select()にした方がよい。
除外するのであれば、exclude()の方がよい。
Clip(text, length)
段落の内容を切り抜く関数があったとする。
この関数名を見ただけでは、最初から数文字切り抜くのか、最後から数文字切り抜くのかが分からない。
#textの最後を切り落として、「...」をつける
上記のようなコメントがあったとする。
自分なら、最後からlength分だけなくなった後の文字列か何かが返されると考える。(remove)
でも人によっては、「最大length文字まで切り詰める(truncate)」と考える人もいる。
(ちなみに、truncateの意味は、「切り詰める」
truncateなら、Truncate(text, length)とすべき。
lengthも、文字数ならchar、バイト数ならbite、単語数ならwordにする。また、最大ならmax_を付けた方が分かりやすい。
max_charsとすると、Truncate(text, max_chars)
限界値を含めるときは min と max を使う
CART_TOO_BIG_LIMIT = 10
上記は、限界値を含めているのかわからない。限界値を明確にするときは、以下のようにすると良い。
MAX_ITEMS_IN_CART
範囲を指定するときはfirstとlastを使う
rubyでは範囲オブジェクトを作るときは、Range.new(1, 5)と書くが、これは1以上5以下を表現している。また、1..5も1以上5以下を表す。
対して、1...5は1以上5未満を表す。rubyに慣れていないとちょっとわかりにくい、これは。
リファレンス上で使用例は確認できなかったが、使えるならこっちの方が分かりやすいのでは。
Range.new( first = 1, last = 5 )
また、firstをminに、lastをmaxに変えてもわかりやすい。
Webを支える技術
Webを実現するコンピュータネットワーク
- クライアントとサーバー
- インターネット:インターネットサービスプロバイダーがいる
- インターネットサービスプロバイダー:ISPやプロバイダーと略されることが多い。
インターネットの標準プロトコル
- プロトコル:ネットワークに接続された機器同士が通信するときの、あらかじめ決められた共通ルールや手順。HTTPはWebコンテンツを送受信するためのプロトコル。
- TCP/IP:インターネットにおける様様なサービスを実現するためのプロトコルの集まりのこと。HTTPもTCP/IPの一部。
- HTTP:データ送受信用のプロトコル
- FTP:ファイル送受信用のプロトコル
- SMTP:電子メール "送信用" のプロトコル。Simple Mail Transfer Protocol
- POP:メール "受信用" のプロトコル。Post Office Protocol
TCP/IP
TCP/IPは役割ごとに4階層に分かれる。
- アプリケーション層:アプリケーションごとのやり取りを規定している。また、ネットワーク利用に適したデータ変換の役割も担う。HTTP,SMTP,FTP
- トランスポート層:データの分割や品質保証を規定している。TCP,UDP
- インターネット層:ネットワーク間の通信を規定している。IP,ICMP
- ネットワークインターフェース層:コネクタ形状や周波数といったハードウェアに関する規定をしている。イーサネット、Wi-Fi
- TCP/UDP:アプリケーション層のやり取りに応じて実際にデータの転送処理をしている。トランスポート層に位置する。データ送信は分割して行われる。TCPはデータ順序と欠落をチェックするが、UDPはチェックしない。UDPは通信の手続きが簡略化されており、効率よく通信が必要な動画ストリーミングなどで利用されている。TCPはコネクション型、UDPはコネクションレス型。
IPアドレスとポート番号
- IPアドレス:住所のようなもの
- ポート番号:IPアドレスは接続したいコンピュータを指定できるが、そのコンピュータが提供するサービスまでは指定できない。そこで、ポート番号でサービスを指定する。マンションでいうところの部屋番号。
- Webサーバー(HTTP)は一般的にポート番号が80番と決まっている。
URLとドメイン
- URL:スキーム名、サーバー指定、取得するファイルの指定
- ドメイン:サーバー指定するときに、example.comのような文字列をドメインという。IPアドレスを人間が分かるように変換したものがドメイン。
- http:80番、https:443番、ftp:20番(データ転送用)・21番(制御用)
DNS
- ドメインとIPアドレスの変換:DNS(Domain Name System)、DNSサーバー。
- IPアドレスの問い合わせ:URLにドメインが利用されている場合は、かならずDNSサーバーへIPアドレスの問い合わせを行っている。
HTTP
- クライアントとサーバー間のやりとり:
- URL入力
- URLに基づいてWebサーバーに対してリクエスト送信(HTTP)
- Webサーバーはリクエストを解析(HTTP)
- Webブラウザはレスポンスを受け取る(HTTP)
- Webブラウザはレスポンスを解析し、Webページとして表示する
WebブラウザからWebサーバーへのリクエストでは、HTTP,TCP,IP,イーサネットプロトコルが利用される。
おまけ①:off-by-oneエラーについて
勉強中に、「off-by-oneエラー」という初見のエラーに遭遇した。古典的な、境界条件の判定に関するエラーのよう。
内容は、ループ処理で正しい回数より1回多い、もしくは1回少ない実行が実施された場合などに発生するもの。
原因は、プログラマーがカウントのスタートを1からにしてしまったり、数値の比較において未満と以下を混同してしまったりなどらしい。
詳細は下記をご参照。
https://ja.wikipedia.org/wiki/Off-by-one%E3%82%A8%E3%83%A9%E3%83%BC