基数変換
2進数、8進数、10進数、16進数
2進数:0と1で表現
8進数:0から7までの8個で表現 7の次が10
10進数:0から9までの10個で表現 9の次が10
16進数:0から9、AからFの16個で表現 Fの次が10
基数と重み
10進数の基数は、10
51.55 = 5 x 10¹+1 x 10⁰+5 x 10⁻¹+5 x 10⁻²
2進数は2、8進数は8というイメージ
小数点を基準に 左にN⁰、N ¹...と続き、右にN⁻¹、N⁻²...と続く
基数変換
2進数101.10を、10進数にすると、5.5になる
2² 2⁰ ←基準→ 2⁻¹
1 0 1 . 1 0 → 4+1+0.5=5.5
N進数から10進数は、各けたにN進数の重みを掛けて足す。
10進数5.5から、2進数へ変換
2³=8 2²=4 2¹=2 2⁰=1 2⁻¹=0.5 2⁻²=0.25
4+1+0.5で5.5になるので、
↓ ↓ ↓
000.000 に1を当てはめる
2進数から、16進数へ変換
4桁ずつに区切って、8、4、2、1、0.5、0.25、0.125、0.0625で計算する
4桁で区切れない時は、0で補う
1110 1010 . 01 → 24.25
ITパスポート取得 ハードウェア編
1. 情報の表現
情報量の単位
1と0で表現され、bit(ビット)という
8bit集まると、1byte(バイト)になる。
1bitで表現できる情報量は、0と1の2通り。2¹
2bitだと、00、01、10、11の4通り。2²
n bitだと、2ⁿ通り。
情報量の計算に役立つ指数の公式
aᵐ x aⁿ = aᵐ ⁺ ⁿ
aᵐ ÷ aⁿ = aᵐ ⁻ ⁿ
(aᵐ)ⁿ = aᵐ ˣ ⁿ
a⁰ = 1
a⁻ⁿ = 1 / aⁿ
2. コンピュータの5大装置
制御装置、演算装置、記憶装置、入力装置、出力装置
制御装置と演算装置をまとめて、中央処理装置
略してCPU(Central Processing Unit)
CPU:制御と演算をする装置。人でいう頭脳。
一度に処理できるビット数で、32と64ビットなどがあり、ビット数が大きければ高性能。
CPUクロック周波数1GHzとあれば、1秒間に10億周期の信号をCPUが動作している。
周波数が高くなるほど、命令実行速度が上がる。
記憶装置:データを一時的に記憶する主記憶装置(メインメモリ)と、長期的に記憶する補助記憶装置(ハードディスク、SSDなど)がある。
主記憶装置
メモリには、電源が切れると記憶内容が消える揮発性の特徴を持つ、ラム RAM(Random Access Memory)と、
電源が消えても記憶内容が消えない不揮発性の特徴を持つ、ロム ROM(Read Only Memory)がある。
RAM:DRAM(Dynamic RAM)とSRAM(Static RAM)に大別される。
DRAM→安価、リフレッシュ必要、メモリに使う
リフレッシュ:一定時間ごとに再書き込みすること。
キャッシュメモリ:記憶容量な少ないが、転送速度を速くできる。
CPU← →メモリ 処理が速くなっても、転送速度が遅いと、CPUが十分に能力発揮できない。
CPU← →キャッシュメモリ← メモリ 必要な分だけキャッシュメモリに記憶することで、転送速度が速くなる。
ROM:マスクROMとPROM(Programmable ROM)に大別される。
マスクROM→製造時にデータを書き込むと、ユーザーは書き換えできない。
PROM→ユーザーの書き換えができる。
PROMには、紫外線でデータを削除して書き換えができるEPROM、電気的にデータを削除して書き換えできるEEPROMがある。
フラッシュメモリ:電気的に全部または一部を削除して書き換えができる。
補助記憶装置
磁気ディスク:ディスクに磁気を使ってデータを読み書きする(ハードディスク)
ハードディスク→補助記憶装置の中でも大容量で、アクセス速度も比較的速い。
金属のディスクが回転し、磁気ヘッドを動かしてデータを読み書きしている。
データの書き込み、削除を繰り返していくうちに、バラバラに断片化された状態になる(フラグメンテーション)。
バラバラになったデータを一つにまとめる作業を、最適化(デフラメンテーション)。
仮想記憶(仮想メモリ):ハードディスクの一部をメモリとみなし、見かけ上、メモリの容量を拡大する技術。
1. 実行に必要ないメモリ上の記憶内容を一時的にハードディスクへ。(スワップアウト)
2. 記憶内容が必要になった時にハードディスクからメモリへ。(スワップイン)
1と2の一連の流れをスワッピング
レイド RAID(Redundant Arrays of Intexpensive Disks)
複数のハードディスクを使って処理速度や信頼性を向上させる技術
RAID0→データを複数のハードディスクに分散する(ストライピング)
RAID1→同一データを複数のハードディスクに書き込む(ミラーリング)
RAID5→データとバリティ情報を複数のハードディスクに分散する
光ディスク:レーザ光を使ってデータを読み書きする(CD-ROM, CD-R, CD-RW, DVD, BD)
フラッシュメモリ:半導体メモリを埋め込んでいる(SSD, USB, SDカード)
入力装置:データなどを外部から読み込む。(マウス、キーボード)
出力装置:処理されたデータを外部に書き出す、表示する。(ディスプレイ、プリンタ)
NFC:RFIDの国際規格。ICタグやSuicaなどのICカードに実装されている。近距離でのデータ送受信ができる。
バス:コンピュータ内部で、CPU、メモリ、周辺装置などでデータをやり取りするための伝送路。
CPU内部の伝送路を、内部バス。
CPU、主記憶装置や周辺装置間の伝送路を外部バス。
ハードウェアとソフトウェアの違い
ハードウェア:機械として実体があり、手で触ることができる。
ソフトウェア:プログラムやアプリのこと。手で触れないが、記憶装置に書かれた信号として存在している。
GPU(Graphics Processing Unit):画像データ処理に特化した演算装置。
マイグレーションファイルの "NO FILE" 解決法
NO FILE解決の備忘録
チーム開発で、pullして
rails db:migrate:status実行したら、NO FILE が出た。
Status Migration ID Migration Name
--------------------------------------------------
up 20200724104133 Devise create users
up 20200724113342 Create addresses
up 20200724122248 Create profiles
up 20200805042059 Create brands
down 20200805084757 Create items
down 20200805104151 Create images
up 20200806042032 ********** NO FILE **********
up 20200806042046 ********** NO FILE **********
1. NO FILEを適当なファイルに置き換える
touch db/migrate/20200806042032_hoge.rbで置き換えて、
rails db:migrate:statusで確認。
Status Migration ID Migration Name
--------------------------------------------------
up 20200724104133 Devise create users
up 20200724113342 Create addresses
up 20200724122248 Create profiles
up 20200805042059 Create brands
down 20200805084757 Create items
down 20200805104151 Create images
up 20200806042032 Hoge ← 変わってる
up 20200806042046 ********** NO FILE **********
2. 作成されたマイグレーションファイルに記述する。
class Hoge < ActiveRecord::Migration[6.0] def change end end
3. rails db:migrate:down VERSION=20200806042032
現在、upになってるので、上記のコマンドでdownに変える。
Status Migration ID Migration Name
--------------------------------------------------
up 20200724104133 Devise create users
up 20200724113342 Create addresses
up 20200724122248 Create profiles
up 20200805042059 Create brands
down 20200805084757 Create items
down 20200805104151 Create images
down 20200806042032 Hoge ← downに変わった
up 20200806042046 ********** NO FILE **********
4. 同様にもう一つの NO FILE も置き換える。
Status Migration ID Migration Name
--------------------------------------------------
up 20200724104133 Devise create users
up 20200724113342 Create addresses
up 20200724122248 Create profiles
up 20200805042059 Create brands
down 20200805084757 Create items
down 20200805104151 Create images
down 20200806042032 Hoge
down 20200806042046 Hoge2
5. 置き換えたファイルは必要ないので削除
補足:削除しなくても動作には影響しない。
6. rails db:migrateして終了
正規表現について
1.正規表現とは
文字列に特定の文字は入っているか、不要な文字を取り除くといった操作を行うための技術。
2.正規表現の特徴
- 文字列の一部を変換できる → 電話番号登録時のハイフン(-)を空白に置き換えたり
- 文字列が制約を満たしているか調べる → パスワード登録で8文字以上を満たしてるか
- 文字列の一部を抽出 → メアドからドメインを抽出したり
3.正規表現の仕方
-
使用メソッド
sub, match
sub → 指定した部分を別の文字列に置き換える
str = "アイスを食べる" => "アイスを食べる" str.sub(/アイス/,"プリン") => "プリンを食べる"
/ /で囲んだ文字列が変わる。
match → 指定した文字列が含まれてるか見る。
str = "Hello, World" => "Hello, World" str.match(/Hello/) => #<MatchData "Hello"> str.match(/Hell/) => nil
含まれてる場合は、MatchDataオブジェクトで返される。
含まれない場合は、nilで返される。
-
メソッドを使ってみる
1. ハイフンを取り除いてみる
irb(main):001:0> tel = '090-1234-5678' => "090-1234-5678" irb(main):002:0> tel.sub(/-/,'') => "0901234-5678" irb(main):003:0> tel.gsub(/-/,'') => "09012345678"
sub → 最初のハイフンだけ置き換える
gsub → 全てのハイフンを置き換える
2. パスワードに英数字8文字以上の制約
irb(main):001:0> pass = 'Hoge1234' => "Hoge1234" irb(main):002:0> pass.match(/[a-z\d]{8,}/i) => #<MatchData "Hoge1234">
/[a-z\d]{8,}/i
大文字小文字問わず、aからzまでの英数字が8回マッチする
[a - z] → 角括弧で囲まれた文字のうち1個にマッチ
アルファベットaからzまでのいずれかにマッチ
\d → 数字にマッチ
{n, m} → 一番少なくてn文字、多くてm文字出てくるものにマッチ
i → 大文字、小文字問わずマッチ
3. メアドからドメインのみ抽出
irb(main):001:0> mail = 'hoge@aaa-bbb.com' => "hoge@aaa-bbb.com" irb(main):002:0> mail.match(/@.+/) => #<MatchData "@aaa-bbb.com">
/@.+/
@マークから始まり、何かしらの文字が1回以上繰り返すものにマッチする
. → 何かしらの文字にマッチ
+ → 前の文字が1回以上繰り返すとマッチ
感想
楽に条件をつけることができるので便利!
短いのはまだわかるが、長くなると全然わからなくなる。
.match(/\d{3}-\d{4}/g)
また、何かパターン表記があれば追加する
GitHub Desktopのブランチ移動が出来ない
GitHub Desktopの移動ができなくなった時の備忘録
GitHub Desktopでブランチが移動出来なくなった
current BranchがDetached HEADになっている
Detached HEADはブランチではなく、コミットを参照しているらしい。
なぜDetached HEADに変わった?
ターミナルで、git reset --hard HEAD^コマンドで直前のコミットを取り消してた。
Detached HEADから、current Branchに戻したい
ターミナルにて操作
1. cat .git/HEADで何のファイルなのか確認した。→6b4e56627e86063a9345d7f5cab58e4d7164738d であることが分かった。
2. git name-rev 6b4e56627e86063a9345d7f5cab58e4d7164738dを実行
→ 6b4e56627e86063a9345d7f5cab58e4d7164738d
remotes/upstream/master
と出た。
6b4e56627e86063a9345d7f5cab58e4d7164738dは、remotes/upstream/masterのことを指してる。
3. git checkout remotes/upstream/masterを実行
→ 移動することが出来た
Detached HEADもcurrent Branchに変わった。
Ruby if文の演算子について
今わかる演算子を書いておく。
新しく知ったものは随時更新する。
代数演算子(+, -, *, /, %)
+ → 足し算
- → 引き算
* → 掛け算
/ → 割り算
% → 剰余(割った余りを求める)
自己代入演算子
num += 1 → num = num + 1と同じ意味
numに1足した値をnumに代入
num -= 2 → num = num - 2と同じ意味
numから2引いた値をnumに代入
num *= 3 → num = num * 3と同じ意味
numに3かけた値をnumに代入
num /= 4 → num = num / 4と同じ意味
numに4で割った値をnumに代入
比較演算子(<, <=, >, >=, ==, !=)
A<B, A>B → AはBより小さいか、AはBより大きいか
A<=B, A>=B → AはB以下か、AはB以上か
A==B → AとBは等しいか
A!=B → AはBと等しくはないか
論理演算子(!, &&, ||)
!A → Aがfalseであれば実行
A && B → AかつBがtrueであれば実行
A || B → AまたはBがtrueであれば実行