基数変換

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→安価、リフレッシュ必要、メモリに使う

SRAM→高価、リフレッシュ不要、キャッシュメモリに使う

 

リフレッシュ:一定時間ごとに再書き込みすること。

 

キャッシュメモリ:記憶容量な少ないが、転送速度を速くできる。

 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カード)

 

 

入力装置:データなどを外部から読み込む。(マウス、キーボード)

 

出力装置:処理されたデータを外部に書き出す、表示する。(ディスプレイ、プリンタ)

 

NFCRFIDの国際規格。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になっている f:id:hiro_79:20200730120431p:plain


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に変わった。

 

 

参照先 https://qiita.com/Kuniwak/items/4e5d55d6888e5f6411fe

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であれば実行