【図解入門 TCP/IP】を読む - その6
1.3.2 データリンク層で動作する機器
データリンク層は、物理層の信頼性を確保し、同じネットワークにいる端末と接続できるようにする階層です。 データリンク層で動作する機器は、フレームのヘッダーに含まれるMACアドレスの情報をもとにフレーム転送を行います。MACアドレスはデータリンク層における住所、つまり識別子です。
ブリッジ
ポートとポートと間の橋のような役割です。端末から受け取ったMACアドレスをMACアドレステーブルという表で管理し、転送処理を行います。この転送処理のことをブリッジングといいます。※ ブリッジは、最近はL2スイッチに置き換えられ、単体機器として見ることはありません。
L2スイッチ
たくさんポートを持ってるブリッジです。
端末から受け取ったフレームのMACアドレスをブリッジ内のMACアドレステーブルで管理し転送処理を行います。
私たちなりに例えると
ブリッジは配送会社で言えば、倉庫(MACアドレステーブル)です。送信端末から荷物(MACアドレス)をトラック1号車1番ポート(1番ポート)で倉庫まで行き、倉庫から転送しトラック2号車(2番ポート)で受信端末まで届けます。
💻 → 🚛 → 🏬 → 🚛 → 🖥
MACアドレス1 アドレスの転送 MACアドレス2
ひとこと
運送の例えがハマりすぎて運送は通信業界なのかもしれない(迷走)
参照
【パーフェクト Ruby on Rails】を読む - その10
2-5 ビュープレートについて
2-5-1 ヘルパーメソッドの利用
- ヘルパーメソッド ViewをよりシンプルにDRYに書くための、Railsで用意されたモジュール。基本的にはviewをhelpしてくれるもの。自分で作ることもできる。
$ rails routes
コマンドを打つと表示されるPrefix
とVerb
以下に記載されている部分(例えばuserやprofileなど)に_path
や_url
などをviewファイルで付け足す事で、その行きたいviewページまでのurlを簡単に指定することが出来ます。
※ただしコンソール上で試したい時は先頭にapp.profile_url
というようにします。
一部抜粋
- url_for
- link_to
- form_with
- stylesheet_link_tag
- javascript_pack_tag
- time_ago_in_words
- number_with_delimiter
trメソッド
p106 独自ヘルパーメソッドの定義の項目のコード
# app/helpers/application_helper.rb module ApplicationHelper def to_hankaku(str) str.tr("A-Za-z", "A-Za-z") end end
全角英文字を半角に変換するヘルパーメソッドでtrメソッド
について学びました。
今回の場合はtr("A-Za-z", "A-Za-z")
でハイフンの左辺から-
の右辺までを指定しています。A-Zで大文字の範囲指定を行い、a-zで小文字の範囲指定を行なっています。大文字と小文字の間に区切りがなかった事で、初見では戸惑いました。
エスケープ処理
フォーム画面にscriptタグなどを書いても基本的には処理されません。これはRails側で守ってくれているのでやらなくても良い事ですが、意図的にエスケープ処理をしないようにする事もできます。
rawヘルパーメソッド
<%= raw "<script>alert('sample');</script>" %>
MVCについてのまとめ
参照
ヘルパーメソッド
https://qiita.com/Yukaaaah/items/19e524fd0c0e4a3451f1
Ruby 3.0.0 リファレンスマニュアル instance method String#tr
https://docs.ruby-lang.org/ja/latest/method/String/i/tr.html
【パーフェクト Ruby on Rails】を読む - その9
2-3-5 StrongPrameters
想定通りのパラメータかどうかをホワイトリスト方式でチェックする機能です。
- マスアサイメント
データベースに保存されるカラムを一括で指定できる機能 - コントローラーのprivateに記載する
検証ツールなどで想定外の項目を追加して送信された際に、ホワイトリスト以外の人を入店拒否するための機能がストロングパラメータです。
検証ツールを開いて
👨🏻💻< admin: true追加したろ!
🖥< えーと…ホワイトリストに:adminはないよ?そんなパラメータは許可してないで!
👨🏻💻<なんだってー!
2-4 コントローラーとビューの協調とビューテンプレートの基本
2-4-1 レンダリングまでの流れ
app/views/コントローラー名/アクション名.html.erb
class SurfsController < ApplicationController def board end # render記載の省略ができる さらに省略すると def board; end で1行でイケる!
renderとredirect_toの違い
- render 表示させるviewを指定し表示(controllerに遷移する前の値を保持したい場合はrender)
- redirect_to URLをもとにviewを表示。(値を保持しない)
redirect_to @user
というのが出てきた場合 Railsでは()を省略してくれてる+省略に省略を重ねて上のようになっている 本来は↓なので注意redirect_to user_url(@user.id)
ひとこと
ホワイトリストってワードは技術書でよく出てくるから知っておいてね
参照
attr_accessor
https://pikawaka.com/ruby/attr_accessor
ホワイトリスト方式セキュリティの仕組みと効果
https://www.hitachi-solutions-create.co.jp/column/security/white-list-security.html
【Rails】renderとredirect_toの違いと使い分け
https://qiita.com/morikuma709/items/e9146465df2d8a094d78
redirect_to @userが何を省略しているかわかりますか?〜挫折しないRailsチュートリアル7章〜
https://qiita.com/Kawanji01/items/96fff507ed2f75403ecb
りあクト!輪読会 - その3
プリミティブ値のリテラルとラッパーオブジェクト
JavaScriptではプリミティブ値を定義するときにリテラルを用います。
リテラルとは、英語で「文字通り」を意味し、コードに書いた値がそのまま実行時にもその値のまま意味をもちます。(型定義せずに値の意味を持つ??)
各プリミティブ型に用意されているリテラル
- Boolean型
真偽値リテラル(true、false)
- Number型
数値リテラル
浮動小数点リテラル(2.1e8 = 2.1 × 10の8乗
)
- BigInt型
数値リテラル(100n
は小数点以下を四捨五入する)
- String型
シングルクォオートなどで囲む文字列リテラル
バッククォートで囲むと改行や式展開(${}
)ができるテンプレートリテラル
- Null型
nullリテラル(nullを返す)
JavaScriptではプリミティブ値にアクセスする時に、対応するラッパーオブジェクトに自動的に変換される。
'Serval lives in savanna'.replace('savanna', 'jungle'); 'Serval lives in jungle'
内部でオブジェクトに変換されることにより、プリミティブ型で記述してもメソッドが使用できる。 今回で言えば、'Serval lives in savanna'がプリミティブ型のString型であることを自動判定し、対応するラッパーオブジェクト(rubyのオブジェクトと一緒?)のstringに変換している。
'Serval lives in savanna'.replace('savanna', 'jungle'); // 内部で下記に変換されている。 (new String('Serval lives in savanna')).replace('savanna', 'jungle');
インスタンスメソッドはオブジェクト型でしか使用できない。しかし、ラッパーオブジェクトにより、プリミティブ型をオブジェクト型に変換しているので、インスタンスメソッドが使用できるようになっている。
この変換はJavaScriptが毎回自動的にやってくれるので、普段私たちは意識せずに使用することができる。
ラッパーオブジェクト | プリミティブ型 | 例 |
---|---|---|
Boolean | 真偽値 | true やfalse |
Number | 数値 | 1や2 |
String | 文字列 | "文字列" |
Symbol | シンボル | Symbol("説明") |
🤔🤔🤔🤔🤔🤔?????😧😧😧😧😧😧😧😧😧😧😧😧
オブジェクト型とそのリテラル
リテラルを持つオブジェクト型 - 配列リテラル - オブジェクトリテラル - 正規表現リテラル
リテラルとは
変数に代入される値のことをリテラルと言います。 そのリテラルの型によって配列リテラルなのか、オブジェクトリテラルなのか、正規表現リテラルなのかが判断されます。
const hoge = "fuga" // ↑変数か関数 ↑文字列と認識してるから文字列リテラル const arr = [1, 2, 3] // ↑配列のリテラル
JavaScriptでは、限定的な場面で用いる「オブジェクト」と、広い範囲の意味で用いる「オブジェクト」2種類ある。
①限定的な場面での「オブジェクト」は、キーと値の組み合わせを持つプロパティの集合のことを指す。Rubyでいうハッシュなどもこれに該当する。
プロパティの集合(オブジェクト)は一般的にJSON形式で表したり、用いることが多い。そもそもJSONとはJavaScriptObjectNotation(JavaScriptオブジェクト表記法)の略なので、プロパティの集合がオブジェクトということにも納得がいく。 ↓ JSONさんは「JavaScriptオブジェクト表記法」の略
②広義のオブジェクトはプリミティブ値以外の全ての値を指す。 もっと細くいうと、最終的な標準組み込みオブジェクト(継承元)としてObjectをもっている値。
コンストラクターって何? オブジェクトを生成する関数 newを呼び出す関数がコンストラクタ関数 コンストラクターは、インスタンス化された特定のクラスオブジェクトに属しています。コンストラクターは、そのオブジェクトを初期化し、オブジェクトの非公開の情報にアクセスできるようにします。コンストラクターの概念は、ほとんどのオブジェクト指向プログラミング言語にあります。本質的に、JavaScript のコンストラクターはクラスのインスタンスで宣言します。
文脈で察しろ 🥶
こういう配列の書き方をしたらこういうリテラルになる
""で囲えば文字列だよね ↑ 文字列を文字列として使えることをリテラル
リテラルとは、プログラミングにおいてソースコード中で使用される、数値や文字列等の直に示したデータのことです。
より厳密に説明すると、プログラム中で常に同じ値をとる定数というものがありますが、定数が指す値のことをリテラルと呼びます。定数は変数のように識別子にデータ、値を代入したものです。例えば、以下のように定義したとします。
const int A=10;
この場合、Aは定数であり、それだけ 指す値10がリテラルです。
ひとこと
むずい
参照
【JavaScript】 コンストラクターとは?関数とは違うのか?
https://note.affi-sapo-sv.com/js-constructor.php
【図解入門 TCP/IP】を読む - その5
定番プロトコル
各階層に「ほぼこれを使用する」という定番プロトコルが存在しています。
- 有線環境 イーサネット
- 無線環境 IEEE802.11
- ネットワーク層 IP 一択
- トランスポート層 通信の信頼性重視ならTCP リアルタイム性重視ならUDP
- アプリケーション層 HTTP HTTPS QUIC DNS の4択
ネットワークを構成する機器
・前提として
存在するネットワーク機器が全ての階層のプロトコルを見て処理できるわけではない
物理層で動作する機器
物理層は、ケーブルやコネクタの形状、そのピンアサイン(ピン配列)など、物理的な仕様について、全て定義されている階層です。 物理層で動作する機器は、パケットを光/電気信号に変換したり、電波に変調したりする機能を持っています。
NIC
PCやサーバーなどのコンピューターをネットワークに接続するために必要なハードウェア。全てのネットワーク端末は、アプリケーションとOSが処理したパケットをNICを通してLANケーブルや電波に流します。
リピーター
LANケーブルを流れる電気信号は、伝送する距離が長くなるほど減退し、100m近くなると波形が壊れます。リピーターは、それをもう一度増幅して、波形を整えて、もう片方に転送します。これで伝送距離を延ばして、より遠くへパケットを届けられるようにします。(光ファイバーケーブルの普及もあってあまり使われなくなってきています。)
リピーターハブ
受け取ったパケット(ビット)のコピーを、他の全ポートに転送する機器です。
メディアコンバーター
メディアコンバーターは電気信号と光信号を相互に変換する機器です。
メディアコンバーターを私たちなりに例えると
データ(ボール)を届けたくて、ターザンロープ(LANケーブル)でいけるところまで行ったが、着地地点までいけなかったので、その途中を光信号(ぶん投げる)にして遠くまで飛ばして、着地地点に届ける手法。
⛰🚡🤽=✨=>
🥎🤲🚡⛰
アクセスポイント
パケットを電波に変調・復調する変換器です。
無線と有線の架け橋になっているので、身近なところではWi-Fiルーターをアクセスポイントとしています。
ひとこと
例え をがんばりました。
参照
本書のみ
【パーフェクト Ruby on Rails】を読む - その8
2-2-4
ルーティングとリソース
resources
resourcesメソッドとは、railsで定義されている7つのアクションのルーティングを自動で作成するメソッドです。 resourcesメソッドを使うことにより、簡単にルーティングを作成することができます。
id
を持つルートに限り
それぞれがid
を持った個人のページを持ち、URLに表記されるid
からページの場所を探してきます。
resource
みんな一意のルーティングでページの場所は一緒になります。表示させる内容はそれぞれviewで変更しているだけです。
memberとcollectionの違い
どちらもルーティングをネストさせる時に用いますが、memberにはURLにid
が含まれます。例えば、特定の投稿に対して、ブックマークする時などに使用します。
collectionはURLにid
を含みません。
- memberは特定のデータに利用する
- collectionは全体のデータに利用する
例)
collectionは昼会でmemberは特定の誰かを指す。
2-3-4例外処理
何かしらのエラーが起きた時は基本的にRails側でよしなにやってくれているものですが、特定の動きをした時に行なって欲しい例外処理を自分で作ることができます。
そういった場合にはコントローラーにrescue_form
を使い記述します。
CSRF対策として、データの変更などのリクエスト時にセキュリティトークンも同時に発行し、それを検証することで自身のアプリケーションからのリクエストであることを証明する手法がとられています。
参照
2021年8月19日 現場Rails Chapterr6 (routes.rbについて)
https://morning-6.hatenablog.com/entry/2021/08/20/093820
【図解入門 TCP/IP】を読む - その4
1.2.4 標準化団体がプロトコルを決める
・ IEEE
比較的ハードウェア寄りのネットワーク技術の標準化は IEEE802委員会 で研究及び議論されています。
※IEEE802の802は、1980年2月に発足したことから付けられた名称です。
・ IETF
比較的ソフトウェア寄りのプロトコルのほとんどが策定されている。
それぞれがお互いの領域に侵食せず、参照するような形で標準化を進めるようになっているため、うまく共存できています。
1.2.5 各階層が連携して動作する仕組み
カプセル化と非カプセル化
送信端末は、アプリケーション層から順に、それぞれの階層でペイロードにヘッダーをくっつけて、PDUにしてから、ひとつ下の階層に渡します。
私たちなりに例えると
送信側でアプリケーション層でPDU(ダンボール)にデータ(ペイロード)を入れてヘッダー(伝票)を貼り、次の層へ違う名前を持たせながら渡していく工程をカプセル化と呼び、受信側では逆に伝票を剥がしながら上の階層へ渡していきます。これを非カプセル化と呼びます。
コネクション型とコネクションレス型
全部自動でやってくれてるのでユーザーは意識することはありません(すごい!🙌)
・コネクション型
最初に相手に対して 「送っても良いですか?」 と伺って
相手が 「良いですよ」 と確認してからデータを送る(3ウェイハンドシェイク)
しっかりとした手順を踏むため、転送に若干時間がかかりますが、確実にデータを転送する事ができます。
- メリット
確実にデータを転送する
- デメリット
少し遅い
・コネクションレス型
いきなり相手にデータを送りつけ、勝手に終了する。
- メリット
速い
- デメリット
必ず届くとは限らない
郵便配達をイメージするとわかりやすい。🏣🛵💨
参考
ハードウェアとソフトウェアについて
https://tech-camp.in/note/technology/86966/