日記

日本語の勉強のためのブログ

Ruby on Railsについて自分なりに整理

Ruby on Railsの学習を始めたので、学んだ内容を書きながら整理しようと思う。初学者のため内容におかしな点が見られるかもしれないがご容赦願いたい。

Ruby on Rails とは?

フレームワークとは?

  • ソフトウェア作成に使う枠組みのようなもの[1]
  • 例えばWebアプリケーションフレームワークなら、ログイン機能などが最初から用意されており、自分で一から実装する手間が省ける

gemとは?

  • Rubyのライブラリの総称[2]
  • Railsもgemの一種? (sudo gem install railsでインストールできるので)

RubyGemsとは?

  • gemを管理するパッケージ管理システム[2]
  • しかし、gemの管理としては、後述するBundlerの方がよく使われている

Bundlerとは?

  • gemを管理するgem(わかりづらいが)
  • bundle installとすることで、Gemfileというファイルに書かれたgemを一括ダウンロードできる[3]
  • Gemfileにはgemのバージョンも記述できるため、複数人で開発する際に、バージョン違いによるバグを防ぐことができる[3]

参考文献

[1] 大場寧子 他. たのしい開発 スタートアップRuby. 技術評論社, 2012年. pp. 100-103.
[2] ウィキペディアの執筆者. “RubyGems”. ウィキペディア日本語版. 2021-03-27. https://ja.wikipedia.org/w/index.php?title=RubyGems&oldid=82677376, (参照 2021-08-12).
[3] "結局bundlerって何?bundlerの仕組みを図解形式で徹底解説". Pikawaka. 2019-12-01. https://pikawaka.com/rails/bundler, (参照 2021-08-12).
[4] "参考文献の役割と書き方". 科学技術振興機構. https://jipsti.jst.go.jp/sist/pdf/SIST_booklet2011.pdf, (参照 2021-08-12).

【Ruby】eachメソッドを使うときの|n|←この棒って何の意味があるの?

ちょっと説明が難しいので例を挙げると、

list = [1, 1, 2, 3, 5, 8]
list.each do |n|
  puts n
end

5.times to |n|
  puts n
end

といったコードにおける|n|の部分が何を表しているのか知りたい。

解決

|で囲まれた変数のことをブロックパラメータと呼び、メソッドによって、何が格納されるかは異なる。

  • eachメソッドでは配列の中身が順に格納される。つまり1つ目のコード例では、listの中身[1, 1, 2, 3, 5, 8]が、順にブロックパラメータnに格納されることになる。
  • timesメソッドでは現在の繰り返し回数が格納される。C言語などでよく見るfor (int n = 0; n < 10; ++n)の変数nと同じようなものである。つまり2つ目のコード例では、ブロックパラメータnに繰り返し回数0, 1, 2, 3, 4が順に格納されることになる。

参考資料

www.buildinsider.net

【Arduino】ドア開閉時にファミマの入店音を鳴らす

散々使われてきたネタだと思うが、せっかく作ったので投下。

使用したもの&環境

  • ELEGOO UNO R3
  • 超音波センサ HC-SR04
  • パッシブブザー [1]
  • 220Ω抵抗 [2]
  • Arduino IDE 2.0.0-beta.10

[1] パッシブブザーは与える信号によって音程を変更できるブザーであり、よく圧電スピーカーと呼ばれているものと同一のようだ。
[2] 以下のページによると、ブザーには保護のために抵抗をかますことが多いとの事なので、それに従うことにした。 synapse.kyoto

回路図

f:id:kalax:20210809132148p:plain
図1. 回路図

作成したプログラム

// everykalax.hateblo.jp
// 2021.08.09

// ライブラリをinclude
#include "pitches.h" 
#include "SR04.h"

// 使用するピンの定義
#define SOUND_PIN 8
#define TRIG_PIN 12
#define ECHO_PIN 11

// 超音波センサの設定らしい
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;

// 音符の長さ(四分音符など)の定義
#define L1 2000   // [ms]
#define L2 (L1/2)
#define L4 (L1/4)
#define L8 (L1/8)

// メロディと音の長さを定義
int melody[] = {
  NOTE_FS4, NOTE_D4, NOTE_FS3, NOTE_D4, NOTE_E4, NOTE_A4, NOTE_E3,
  NOTE_E4, NOTE_FS4, NOTE_E4, NOTE_FS3, NOTE_D4
};
int duration[] = {
  L8, L8, L8, L8, L8, L4, L8,
  L8, L8, L8, L8, L4
};
 
// ===================================
void setup() {
  Serial.begin(9600);
  a = sr04.Distance(); // これいらないかも
}
 
// 距離の閾値 これより近くに接近したら音を鳴らす
long threshold_length = 5L;

void loop() {
  // 接近するまで待つ(ビジーウェイトなのでできれば改善したい)
  do {
    a = sr04.Distance();
    delay(50);
  } while(a > threshold_length);

  // センサとの距離をシリアルポートに出力
  Serial.print(a);
  Serial.println("cm");

  // ファミマのチャイムを鳴らす
  for (int thisNote = 0; thisNote < 12; thisNote++) {
    tone(SOUND_PIN, melody[thisNote], duration[thisNote]);
    delay(duration[thisNote]);
  }
   
  // 一応数秒間待つ
  delay(2000);
}
使用ライブラリ&参考にしたプログラム

買ったキットに入っていた"pitches.h" *1 と"SR04.h" *2 の2つのライブラリを使用した。
また、以下のページにあるzipファイル内の、

  • ELEGOO The Super Starter Kit for UNO V2.0.2021.03.31\English\Part 2 Module Learning\2.9 Ultrasonic Sensor Module\SR04_Example にある"SR04_Example.ino"
  • ELEGOO The Super Starter Kit for UNO V2.0.2021.03.31\English\Part 2 Module Learning\2.6 Passive Buzzer\passive_buzzer にある"passive_buzzer.ino"

を参考にした。 www.elegoo.com

今後の課題

  • 和音を鳴らせるようにしたい。
  • ジーウェイトを使わないで済む方法を模索したい。

補足

ファミマのチャイムの楽譜

この記事の中盤あたりに掲載されている楽譜を読み、メロディを作成した。いくつかの音には♯がついているため気を付ける。 dailyportalz.jp

*1:たぶんArduino公式ページにあるpitches.hと同一

*2:ELEGOOのサイトからDLできる

Arduino環境の構築

電子回路の超初心者だが、今回Arduinoの互換ボードを購入したため、環境構築について記していく。

購入したボード

調べてみておすすめされていたものを適当に選んだ。ちなみに、上のAmazonリンクを踏んでも私には一銭も入らないので安心してほしい。

Arduino IDEのインストール

公式ページで手に入る。 www.arduino.cc

最初はArduino IDE 1.8.15を導入したのだが、コード補完機能がないことが予想以上に辛かったため、Arduino IDE 2.0 betaを使うことにした。

なお、補完機能を使いたいだけならVSCode拡張機能を用いる手もあるが、バグがありボードとの通信ができないようなのでやめた(実際試してみたもののできなかった)。 qiita.com

Gboardが入力を受け付けなくなったので初期化+設定復元についてメモ

問題

キーボード自体は表示され、日本語キーボードと英語キーボードの切り替え等はできるが、文字入力ができない。
Line、ColorNote、Chromeで症状が確認できたため、Gboardに問題がありそうである。

環境

  • Gboard (version10.8.05.382062350)
  • Huawei P30 Lite
  • Android10(EMUI10.0.0)

解決

キャッシュ削除では直らず、データ初期化でやっと直った。
(2021/09/04追記)再起動しても直るようだ。
定期的に起こるバグのため、以下に設定復元の手順についてメモした。

初期化前の注意

必ず辞書データをExportすること!(自分は忘れていたため復元に時間がかかった)
また自作テーマを使用している場合は作り直す必要があるため、使っていた画像データなど準備しておく。

設定復元について

自分が使っている設定を晒す。

Languages

・use half-width spaceをON
・use tri-state keyboardをOFF

Preferences

・Number rowをON
・One-handed modeをON(Light-handedとRight-handedのどちらでもよい)
→その後位置を調整する
・Keyboard heightをMid-tallに

Theme

・テーマを追加
→透明度は40%程度で、Key bordersをOFF

Advanced

・Share usage statisticsやImprove voice and typing for everyoneをOFF(人による)

その他

クリップボードに移動すると、初回使用時はONにするか聞かれるので、忘れずにONにしておく。