Rubyシルバーについて個人的に抑えておきたいところ
- 破壊的メソッドかどうか覚える。(例: compact, uniq, replace, chop, chomp)
- %記法の%wや正規表現の//miといった。アルファベットの意味を覚えていない。
- ソート順を記号で判定するとき、昇順になるのか降順になるのか覚えられない。
- ->はラムダ。=>はHashか例外で使う。
- ファイルオープン時のモードはaなら追記。+が書いてあれば読み書きができる。
- 定数に代入すると警告が出るが、破壊的メソッドでは生じない。
- ||と|の引っかけ問題に注意する。
- 書式の%Yと%y、%mと%Mを間違える。
- 再定義できない演算子を覚える。
- メソッドの定義の中から外のローカル変数は参照できない。
LPIC Lv1
GRUB2の設定ファイルについての疑問
パーティションの番号はどう指定すればいいのかが分からなかった。
参考にした情報によると「(GRUB2の場合は)パーティション番号は(以前のバージョンのやり方である)ゼロから、ではなく1から数え始めます。」
とのことらしい。
プロを目指す人のためのRuby入門
演算子の中にも再定義できるものとできないものがある。
再定義できるかどうかはドキュメントを参考にする。
ここでは例としてProductクラス同士を下記のように比較できるように再定義する。
a = Product.new('A-0001')
b = Product.new('B-0002')
c = Product.new('A-0001')
a != b #=> true
a == c #=> true
a != 1 #=> true
class Product
def ==(other)
if other.is_a?(Product)
code == other.code
end
end
end
==はメソッドなので先頭に.をつけて呼ぶことができる。
a.==(c) #=> true
また、==が呼び出されるのは左辺のオブジェクトなので、
右辺に書いた場合はProduct#==は呼ばれない。
等値を判定するメソッドには4種類ある。
- equal?
- ==
- eql?
- ===
このうちequal?以外は再定義が可能。
プロを目指す人のためのRuby入門
DVDクラスがProductクラスを継承すると、そこにスーパークラスとサブクラスの関係が生まれる。
継承でよくある誤解として「クラスの機能を全部引き継ぐ」という考えがある。
この考えだと非常に扱いづらいクラスが出来上がるので、「性質や概念の共通点」に着目する必要がある。
こう考えるための概念として「is-aの関係」がある。
例えば、販売管理システムにおける「DVDは商品の1種である(DVD is a product)」の関係は違和感がないはず。
OOPの参考書として「オプジェクト指向設計ガイド」がある。
Rubyの継承は単一継承。(ミックスインという多重継承に似た機能は8章で説明)
継承関係の頂点にはBasicObjectクラスがあるが、特殊な用途でない限りObjectクラスが頂点と考えて良い。
(Ruby1.9以前はObjectクラスが継承関係の頂点にいた。)
PHPで
stringをarrayに変える際、区切り文字がある場合はexplodeメソッド、ない場合はstr_splitメソッドを使う。
プロを目指す人のためのRuby入門
標準ライブラリやgemを利用する場合、require構文を使う。
requireとの比較
- 何度でも読み込める。
- 拡張子を省略できない。
実行ディレクトリの外に読み込む対象のファイルがある場合に使う。
下記のライブラリを読み込む。
require 'minitest/autorun'
クラス名とファイル名は対応しており、ファイル名はスネークケースで書く。
minitestは「test_」で始まるメソッド名を探して実行する。
ここで扱う検証メソッドは3つのみ。
- assert_equal # 引数2つが等しければパス
- assert # 真であればパス
- refute # 偽であればパス
プロを目指す人のためのRuby入門
特徴が2つある。
t1 = true
f1 = false
!f1 || t1 #=> true
not f1 || t1 #=> false
t1 = true
t2 = true
f1 = false
t1 || t2 && f1 #=> true
t1 or t2 and f1 #=> false
Railsチュートリアルでの使用例
redirect_to root_url and return unless FILL_IN
def greeting(country)
country or return '入力してください'
elsifに相当するものはない。
疑問: unless文の使いどころがわからない。
プロを目指す人のためのRuby入門
sprintf('%0.3f', 1.2)
または下記のようにも書ける。
'%0.3f' % 1.2
複数のオブジェクトを表示したい場合、下記のように書く。
sprintf('%0.3f %0.3f', 1.2, 0.4)
または下記のようにも書ける。
'%0.3f %0.3f' % [1.2, 0.4]
10.class #=> Integer(過去のバージョンではBignumやFixnumクラスがあったが、2.4からはIntegerクラスにまとめられた。)
1.5.class #=> Float
複素数や有理数
irb(main):006:0> 2r.class
=> Rational
irb(main):007:0> 2i.class
=> Complex
「1.superclass」で「Numeric」が得られることを期待したが、「undefined method `superclass'」が返ってくる。
Ruby: How to find superclass of an object?
> 1.class.superclass
=> Numeric
> 1.class.ancestors
=> [Integer, Numeric, Comparable, Object, Kernel, BasicObject]
プロを目指す人のためのRuby入門
Ruby1.9以前の場合、デフォルトエンコーディングはUS-ASCIIだった。
なので日本語をUTF-8で扱う時、下記のマジックコメントが必要になった。
# encoding: shift_jis
マジックコメントはプラグマとも呼ばれる。
nilや正規表現などの値は全てオブジェクトでto_sなどのメソッドを呼ぶことができる。
メソッドの括弧は省略できる。
文の区切りは改行かセミコロン、バックスラッシュ、( で表す。
=begin と =endで囲んでコメントを書ける。
ソースコードの123や””と言った記述はリテラルという。
変数名はスネークケースで書く。
多重代入の使用を避ける。
c, d = 10
d #=> nil
=を複数回使うことも避ける。
a = b = 100
ダブルの場合、エスケープシーケンスを改行文字などのように解釈する。
黒田 努. Ruby on Rails 6 実践ガイド
3.5.5節
ブラウザで「http://example.com:3000/」を確認したところ、エラーで"add the following to your environment configuration"が表示された。
blocked_hosts.rbファイルの置き場所が間違っており、/app/configでなく/app/assets/configに配置していた。
phpを対話形式で動かしていたところ、「echo false」は何も表示されないことに気づいた。
$ php -a
> echo true;
1
> echo false;
Coursera Week4 machine-learning
all_theta(c, :)と書くべきところ、all_theta(c)と書いてしまった。
c行の列を全て取得する。
a=[1 2 3;4 5 6]
a =
1 2 3
4 5 6
octave:11> a(1)
ans = 1
octave:12> a(2)
ans = 4
octave:13> a(3)
ans = 2
octave:14> a(4)
ans = 5
PHP
- password_hash()、 password_verify() というパスワード用の関数がある。
- 任意精度数値での除算はbcdivを使う。無ければ、floorやnumber_formatなど他の関数を使う。https://stackoverflow.com/questions/9944001/delete-digits-after-two-decimal-points-without-rounding-the-value/9944052
あずき本
DNSサーバの役割はホストとIPアドレスを相互に変換すること。
これを名前解決という。
ホスト名からIPを求めることを正引き、その逆を逆引きという。
参照先のDNSサーバを設定する。
問い合わせる順番を設定する。files(/etc/hostsファイル)、dns、ldapのように書く。
ホスト名の一覧を取得。
systemdを採用したディストリビューションでは名前解決をsystemd-resolvedサービスで行う。
サービスを有効にするコマンド
$ systemctl restart systemd-resolved.service
参照先のDNSサーバを記述する。
名前解決の問い合わせをする。
DNSへ問い合わせ、登録されている情報を詳細に表示する。