1/18 学習記録 (カレンダープログラム/gem/bundler/debug/ボーリングスコア計算)

<目標>

  • カレンダープログラム終了する
  • 丁寧に作業する ペースを守る
  • モチベーションをキープする
  • 12ポモドーロ
  • 日報の時間を測る
  • privateに関する技術書を読む
  • 他の方の日報を読む

<メモ>

🔶カレンダープログラム作成(今日で終わりにしたい)

月によってカレンダーの行数が変わる。 行数を固定すると空行ができてしまうので対応してみる。

< 1 > color-echo?

色をつける. colorechoというgemを使ってみると反転はできるみたい。。。

< 2 > ASNIの世界 (20分)

print "\e[31mhello\e[0m"

これによりターミナル上に赤文字で「hello」と出力されます。この”\e[31m” “\e[0m”の部分がエスケープシーケンスです。”\e[31m”はそれ以降を赤文字で出力する制御命令、”\e[0m”はそれ以降を初期状態へリセットする制御命令です。 シーケンス中の数字において、30~37は文字色、40~47は背景色、0~9は文字装飾に割り振られています。

40-47は背景色か、、、47が白。

print "\e[30m\e[47mhello\e[0m"

これで背景白、文字黒になった。文字がややこし感じる人間の頭。。。

< 3 > 文字の置換

  • .subはstringに使われるので、置換される文字もstringである。 とにかく文字の認識 //や""や’’は厳密に。。。 見当たらない場合は空を返す。。。

35分経過

a=102

array = [101,102,103]
array2 = array.join
puts array2
puts array2.sub!(/#{a}/,"\e[30m\e[47m#{a}\e[0m")
taku-no-MacBook-Pro:02.calendar takunaka$ ruby test.rb
101102103
101102103#(実際は102の色が反転している)

ここまでできた。置換は一致しないと空が帰ってくる。 それに時間がかかる。。。

< 4 > subについて 5min

一致しない場合は空の文字列を返す、、、

< 5 > 配列の要素の変換 35m

配列の中の要素を置換することはできるか。

(余談) 途中でチェックしたい時には binding.pryを入れる。 irbと同じようなことができる。

array = ["foo","bar","baz"]

# arrayから"bar"を検索して"hoge"で置換します。
array.map!{|x| x=="bar" ? "hoge" : x}

puts array
#=> ["foo","hoge","baz"]
array = ["foo","bar","baz"]

# arrayから"bar"を検索して"hoge"で置換します。
array[array.index("bar")] = "hoge"

puts array
#=> ["foo","hoge","baz"]

晴れて色の反転できました。

コードの書き換え完了

ここまで。

文字列で扱えればもっとスマートだったんだけれど。。。 課題文字列を幅を決めて改行したい。 subの空行はまだ勉強必要。 色の反転までできてよかった!

< 6 > GITで提出 (25min)

  • branchを指定してpush。branchによって保存されているファイルが異なることがわかった。

< 7 > 課題のレビュー (20min)

binding.irb (15min) binding.irbを使わなかったので、後で学習。 確かにこれは使わないといけない。使ってたらもっと早く終わってた。 次回のコーディングからしっかり使おう。 15分の手間。。。

Rubyドキュメント (30min)

Enumerator

参考資料のおさらい、他の方のコード (10min) RUBYドキュメント。読み方がまだはっきりわからない。 超入門の理解が不徹底だからだと思う。 他の方のコードはまだ見れません。。。

🔶 RUBYGEMの基本を理解する

What is A Gem 20分

公式ページ、丁寧に描かれている。15分、また来ます。 libにコードが入っていて、binに実行コマンドが入っている。 gemspecにgemの内容が書いてある。

よく使うGEMのコマンドオプション

gem search -r

^ と $ を用いることで完全一致検索ができます.

gem search -r ^rails$ REMOTE GEMS rails (3.2.12)

インストール済みの GEMを表示

gem list

インストール済みのGEMのパスをか確認

gem which rails

-dは詳細の表示

RUBYライブラリ(5min)

公式ページ

The Ruby Toolbox は、オープンソースRuby プロジェクトを探索しやすくするプロジェクトです。

るびま (15min)

パッケージマネジメント環境の標準の話

Byebugチュートリアル (120min)

デバッガ - c(continue)行数で指定の行へ - step(s)で実行の止まっている行へ -> finish(fin)で最後までスキップして止まる、数値を入れるとその回数実行 - restartで最初に戻る - nestで次の行へ、リターンで再入力 - break (行数)でブレークポイントを設定(cで止まる) - 他のファイルにもブレークポイントを設定できる break ./lib/fizz_buzz.rb:2 - ブレークポイントの管理i binfo breakpoints - ブレークポイントのon/offen b/dis bdisable/enable breakpoints <ID> infoの Enbが y/nで切り替わる - delete (ID)でブレークポイントの消去 - if n == 4 引数nに4が渡された時に止まる行にブレークポイントを追加 - listで周辺コードを表示 - quit``q!で終了 - コマンドラインからbyebugを実行できない場合はプログラムの中に require 'byebug'; byebug書き込むことで実行できる。 - -rbyebugオプションでrequire 'byebug'; byebugbyebugに省略できる - $ ruby -rbyebug ./test/fizz_buzz_test.rb

pry-byebug

  • help Byebugでコマンドの確認
  • !!!で強制終了

byebugコマンド

コマンド 短縮形 説明 continue c または cont プログラムの実行を再開する help h コマンドのヘルプを表示する step s ステップ実行する(ステップイン) finish fin ステップアウトする restart プログラムを最初からやり直す next n ステップ実行する(ステップオーバー) (リターン) 直前のコマンドを繰り返す break b ブレークポイントの追加 info breakpoints i b ブレークポイントの一覧表示 enable breakpoints en b ブレークポイントの有効化 disable breakpoints dis b ブレークポイントの無効化 delete del ブレークポイントの削除 eval 変数やメソッドの値を確認する list l 停止中の周辺コードを表示する quit q Byebugの終了(確認あり) quit unconditionally q! Byebugの終了(確認なし)

次回からbyebug導入

後もうちょっと。 デバッグ解説動画. 先輩の肉声解説!とても勉強になりました。 better-errors GEM コードのファイルをリアルタイムプレビューできる、デバッグもできる RubyMineでデバッグをする テストコードを作る。 質問ができるのは stackoverflow/tratrail/QA@IT

このプラクティス終わりで、休みいれます。15分。

🔶 RUBYGEMの基本を理解する(30min)

🔶 bundlerの基本を理解する(15min)

ACTIVE SUPPORTは便利 .

今までbundlerでGEMのインストールをしてきたので理解できた。 Gemfileの中身の解説があって勉強になった。

🔶 rubocop の使い方を知る(40min)

  • コーディング規則というものがある。rubocopでチェック
  • rubocop-fjordはrubocopのfijord向け設定
  • インストールできず焦る。。。

🔶 ボウリングスコア計算プログラム

考え方

それぞれのフレームのスコアを[1投目+2投目,ストライク/スペアの際の追加点,ストライクの際の追加点] で考えて、10フレーム分合算する。 入力はカンマ区切りの文字列、出力は数値(integer/string)

  1. shellの文字列入力(optparse)
  2. 文字列を10フレームの配列に変換(Xは10に変換)
  3. (スペア)フレームの合計 == 10 の場合次要素の0番目の数値を取得し合計
  4. (ストライク)一投目が10の場合は次要素の合計を取得

調べる必要があるメソッド:配列の要素を合計するメソッド 注意点:1フレーム目が0番目の要素

0. shellの文字列入力(optparse)

1. 文字列を10フレームの配列に変換(Xは10に変換)

str = "123456"
array = str.split("34")
p array

=>["12", "56"]

これでカンマ区切りで要素に分ける

今日はここまで