チェリー本読破!

チェリー本を読み終えて。

内容の感想としては、なるほど!あそこの記述ってそういうことなのね!っということがたくさんあり学びがたくさん多かったです。
マトリョーシカのように何かの中に何かが入ってる、という感覚が全体を通して共通してる事だなーと感じました。

読む上でのポイント

・手を動かしてirbなりテキストエディタなりに打ち込んで処理を体験する。
・頭が回らなくなったらすぐ休憩。
・あれこの記号なんだったけ?このメソッドどういう意味?はすぐググって手元にメモする(メモは別に保管しなくても良い)これを根気よく繰り返すだけで良い・
・別に覚えなくてもああこんな動きねと理解できれば十分。使いこなすのは使ってるうちに覚えるし使いたいシーンにならないとそもそも覚えづらい。
・使う意味ある??って言う仕組みとかは使わないときのパターンを考えるとあぁなるほど、だから楽できるとかが実感できる。

読破期間について

4日ぐらい?
前に進みたいからかなり自分に負荷をかけて爆速で終わらせました。
最初から色々な知識は頭に入ってたのでスムーズに読み進めれる部分はありましたがしんどかった。

だいたい一度目を通せたのでまた、しっかりと疑問があったり思い出したいことがあった場合に読み直すとします。

 

自分の能力、向き不向き。

他の方の日報やブログを見ていると綺麗にまとまってたり、おもしろかったり、、
自分は改めてアウトプットが苦手だなーと感じます。

何事にも向き不向きもあるでしょうが、毎日継続してアウトプットして良いところは真似する!しかないでしょう。伸びしろしかない!
だめなところと、良いところをメモ書きして自分の弱点を見つけてアウトプットできれば一番いいんでしょうが、そこにタスクパワーを入れるとなかなか体力が持たないのであくまでも自分のペースで。
気がついたら無意識に他人と比較してしまうので常に振り返り自分を省みてバランスをとる事が大事。

面白くてわかりやすい文をかけるようになりたいなぁ

VSCの予測変換が鬱陶しいけど便利 両立させたい!!

VSCodeの予測変換は便利だけどenterで速攻改行したい時は

command + enter

これを習慣づけましょう。

 

設定で予測変換をenterで決定しないようにも出来るそうなんですが、自分はenterで決定したい派なので

command + enter

をおぼえます。

 

 

細かいコマンドやショートカットは楽するために覚えたほうが後々便利です。

学習するための言い聞かせ

知らない事を知ってるにする。

 

僕が人に物事を教えるときによく相談を受ける事が、

「どこまでやればいいですか?」「覚えれないことが不安なんですが、、」

といった事です。

 

その時にいつもお伝えするのは、

未知から既知に、既知から理解、理解から定着につながります。

とりあえず理解できれば最初は忘れていいので最初から覚えるつもりでなくあぁそんなことがあるんだなという認識で気負わず学習してみてはいかがでしょうか?と

お伝えしています。


いざ自分で学習をしてみるとやっぱり不安になったりするので、いつも人に伝えたことを自分に言い聞かせてます。

 

今日はrubyの学習チェリー本をせっせと取り組んでいます。

shebang

Rubyプログラム

shebang

今回始めて知ったshebang

スクリプトを単体で実行するためのおまじないだそうです。これを実行ファイルの頭に#!/usr/bin/env rubyと記述ればrubyで単体実行してくれるそうです。


今までrubyのファイルは拡張子に.rbをつけてるからrubyファイルとして実行できているものだと思っていましたが、それはどうやら違うようです。

% ruby ファイル名.rb

で実行するときのrubyコマンドによってインタプリタ言語を指定してファイルの実行をしていると理解しました。

試しにshebangを外して

% ruby ファイル名

拡張子を外したところ実行

% ファイル名

rubyコマンドを抜くことで、他の言語として読み込んでる?せいか
syntax errorなど諸々が発生。

じゃあ一体何の言語で読み取ろうとしているのでしょうか??
また時間のあるときに調べよう。

shebangのパスが各コマンドの入っているパスを記入するのであれば

which rubyによって表示されたパスを

#!~/.rbenv/shims/ruby

こんな感じに書けば実行されるのかなと思ったりしたんですがどうも違うようで、
envはユーティリティソフトウェアであるため、今回のshebangインタプリタ言語で利用する際にはこちらを指定しなければいけないと判明。

餅屋は餅屋へってことですね。

ゼロからわかる Ruby超入門

ゼロからわかる Ruby超入門

基礎を丁寧に振り返るとやっぱり知らなかったこととか、曖昧になっていたとこがはっきりと分かり今日も学び。
ブロックはいっつもdo~endでくくる癖がついていたので{}でかけるところは意識して書いていこう。
ソースコードを読み解くときも自分で使ってない{}のブロックが出てくるととたんに読む速度が遅くなるので自分で使っていくことが良き。

練習問題 chapter6

6-2の上級問題でめちゃくちゃめんどくさいコードにしてしまった。。

string = "caffe_latte".delete("_")
change = string.chars
s_sort = change.uniq

hash = {}
s_sort.each do |s|
  num = 0 
  change.each {|x| num += 1 if s == x }
  hash[s.to_sym] = num 
end

puts hash

答えを見て、自分の頭の硬さに絶望😭
次はもっとシンプルに考えるぞ!!

クラスもオブジェクト

クラスもオブジェクトである事は感覚的にはわかっていましたが、改めてclassメソッドを使用して確認すると親子構造が非常にわかりやすい。

また、その構造上内包と外延の概念が捉えられるとクラスとインスタンス、プログラミング、はては仕事全体が理解しやすくなる。
内包と外延 - Wikipedia
アリストテレスの形相と質量の考えもそうだし、具体と抽象も大きく見ると似たようなはかりがとれる。

基礎の基礎の概念の学習をしているとついつい脱線しがちになります😅

#クラスメソッド  ::クラスメソッド .インスタンスメソッド

メソッドの記法として、クラスメソッドの前には# ,::
インスタンスメソッドの前には.
が使用される。
これもまた知ってるのと知ってないのじゃリファレンスの読みやすさが違ってきますね!

GitあれこれとM1におけるRuby環境あれこれ

Github desktopでやってきたことをgitコマンドで

pull

git fetch // 先にリモートの状態をリモート追跡ブランチにコピー
git merge origin/master // リモートのコピーからマージ

を一括で行ってくれる!
リモート追跡ブランチという概念が頭になかったのでしっかりと認識!!

rebase

作業ブランチにあるコミットを一時的に保存、作業 ブランチをリベース先のブランチに git reset --hard してリベース先のブランチと同じ状態にする。その後リセット後の 作業ブランチの上に一時保存していたコミットを乗せます。

git pull ---rebase

mergeの履歴を残さずにpullする
履歴をきれいな状態で作業記録を残したい場合にする。

gitに関するあれこれ

git clone時の2段階認証

過去git clone時に2段階認証が引っかかってcloneできね!!って嘆いてた時がありました。はい自分の調べ不足ですね。
今回の学習でもう嘆くことはありません。

.zshrcとかに環境変数で設定したほうが良いのかだけが不明です。

gitになれるには

github desktopのときもそうでしたが、わざとコンフリクト起こしてとかgitをおもちゃ感覚でいじれるうちにいじりたおす!!

github desktopも最初は何やってるかさっぱりでしたが、使ってるうちに全体像が見えるので、その全体像を見て今自分はどこで何をしているのかと言うのを認識するのが大事!!

rbenv 権限周りで素直に起動せず。

権限

会社で使っていたpcからアカウントごとデータを移行したせいか、権限がそのまま移行されていてrbenvからrubyを入れる際に、homebrew関係の権限が前のpcアカウントのものになっていたため変更。

M1でのhomebrew

M1でhomebrewをインストールする際に認識して置かなければいけないこと。

  1. Rosettaを使用してインストールしてるかしてないか。
    これはfinderから開くターミナルの情報を見るより設定できるのですが、ここにチェックを入れた状態でインストールするかしないかで今後の開発環境準備に大きな影響がある。

  2. アーキテクチャに対する認識
    M1はarmライセンスを受けたアーキテクチャを使っていること。
    そのためか、homebrewを普通にインストールすると/opt/homebrewにインストールされる。
    Rosettaを使用するといつもどおり/usr/local/homebrewにインストールされ

  3. Rosettaについて
    Rosettaロゼッタ)は、特定のアーキテクチャのプログラムコードを持つバイナリを、別のアーキテクチャ適宜変換 (en:Dynamic recompilation) することでバイナリの互換性を維持するAppleの技術 。
    これによってインテルチップのx86_64系でインストールして使えていたものを動かすそうな。

keg-only

Cellar だけにインストールされ、/usr/local にはリンクされていない formula のこと。 これは、ほとんどのツールが当該の formula を見つけることができないことを意味する。
brew link 〇〇 --forceで keg-onlyなbrewにインストールしたいツールのシンボリックリンクを作って解決。

なんとなくで解決してきた事をしっかり調べてみましたが、やっぱりまだよくわからない!!

いつも言ってるけどとりあえず使って徐々に覚える!!!

Github desktopしか使ってなかった人間のgit学習

github desktopに頼らないgitコマンドたち

今までgithub desktopばかり使っていたため改めて学習。
・git init
リポジトリを作るときの最初のコマンド。
・git add
github desktopでは自動でchangeとしてaddされていたということで改めて便利さを感じる。
・git log
historyを見るようなもの。見慣れるまで時間がかかりそう。
・git commit
-mをいつもつけ忘れるので気をつける。
・git push origin [ローカルブランチ名]
これも流れでやってたのでコンソールで行うと忘れそう。
・git stash
github desktopではrevertと一緒に使うことが多くコミット済みをrevertしてブランチを切り替えてbring してた。コンソールでのbringはどのコマンドになる???
・git checkout
GUIでブランチの切り替え簡単かつ他の操作も一緒にできてたので、まだ慣れない。
・git reset
全部取り消すから危険なコマンドって勝手に認識してたんですがそうでもなさそう。

モード名 HEADの位置 インデックス ワークツリー
soft 変更する 変更しない 変更しない
mixed 変更する 変更する 変更しない
hard 変更する 変更する 変更する

の種類がある。
git reset --hard ORIG_HEADで取り消せる。
ORIG_HEADに保管場所が存在している。

HEADとは

今作業している場所を表す。<<これが今まで全然意識してなかった。

インデックスとは

git addして追加した保管場所

ワークツリーとは

実際にコードをいじっている場所

github desktopでやっているとここらへんの認識が曖昧になりがちです。

・git commit --amend
直前のコミットメッセージを修正。
github desktopではundoしてからコミット名変えてました。。
・git revert hash値
revertはよく触ってましたが、hash値が馴染みがない。
gitをコンソールで使うとhash値をよく使うようになるのでこれは特別覚えなくても良さそう。
・git cherry-pick [移動元のブランチでのハッシュ値]
反映させたい移動先のブランチでコマンドを入力してコミットを移動させる。
コンフリクトに注意!!

***・git rebase -i [ハッシュ値 or HEAD^]
squashを使ってコミットを統合したり、
コミットの順番を入れ替えたりと、コミットに関して色々できる。
コンフリクトに注意!!

git rebase [取り込みたいブランチ名]
コミットIDを変えて履歴を取り込む
git merge [取り込みたいブランチ名]
コミットIDを変えず履歴を取り込む
github desktopでいうcompare branchで取り込む方法と一緒

git でよくつかうチルダ(~)とキャレット(^)の違い

チルダ(~)は一個前のコミットを指す。
HEAD~~だったら今作業しているコミットの2つ前
・キャレット(^)は親コミットのこと
親コミットとは???
Git の HEAD^ と HEAD~ の違い - yu8mada
この記事がわかりやすかったです。