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)
公式ページ
るびま (15min)
パッケージマネジメント環境の標準の話
Byebugチュートリアル (120min)
デバッガ
- c(continue)
行数で指定の行へ
- step(s)
で実行の止まっている行へ -> finish(fin)で最後までスキップして止まる、数値を入れるとその回数実行
- restart
で最初に戻る
- nest
で次の行へ、リターンで再入力
- break
(行数)でブレークポイントを設定(cで止まる)
- 他のファイルにもブレークポイントを設定できる
break ./lib/fizz_buzz.rb:2
- ブレークポイントの管理i b
、info breakpoints
- ブレークポイントのon/offen b/dis b
、disable/enable breakpoints <ID>
infoの Enbが y/nで切り替わる
- delete (ID)でブレークポイントの消去
- if n == 4
引数nに4が渡された時に止まる行にブレークポイントを追加
- list
で周辺コードを表示
- quit``q!
で終了
- コマンドラインからbyebugを実行できない場合はプログラムの中に
require 'byebug'; byebug
書き込むことで実行できる。
- -rbyebug
オプションでrequire 'byebug'; byebug
をbyebug
に省略できる
- $ 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)
- shellの文字列入力(optparse)
- 文字列を10フレームの配列に変換(Xは10に変換)
- (スペア)フレームの合計 == 10 の場合次要素の0番目の数値を取得し合計
- (ストライク)一投目が10の場合は次要素の合計を取得
調べる必要があるメソッド:配列の要素を合計するメソッド 注意点:1フレーム目が0番目の要素
0. shellの文字列入力(optparse)
1. 文字列を10フレームの配列に変換(Xは10に変換)
str = "123456" array = str.split("34") p array =>["12", "56"]
これでカンマ区切りで要素に分ける