fv17の日記 - Coding Every Day

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

Ruby - なぜmapとかcollectとか、エイリアスが沢山あるのか?

ズバリの記事を発見

map と collect、reduce と inject ―― 名前の違いに見る発想の違い

Rubyで「なぜこうなっているのか?」は多くの場合、LispSmallTalk、あとPerl起源が多い気がする。
逆にJavaは世に出た時期がほぼ同じで影響を受けてないから、全然違う感が強い。

まつもとさんも「気分で使い分けてる」と当時のインタビューで発言しているので、まぁ気が向いたら。

長時間集中して勉強するには

最近工夫していること、意識していること

勉強する場所

図書館

  • 自宅だとダラダラ過ごし必要以上に休んでしまう。
  • 図書館だと休憩していても周りが集中モードなので、適度に休憩できて"さぁやるか!"となりやすい

We Workなどのシェアオフィスを借りる

  • 自宅や職場の近くに図書館がなかったり、深夜帯に勉強したい場合に良い
  • 深夜帯の場合、自宅だと仕事で疲れて寝てしまうことがあるためNG
  • 月1~1.5万円ぐらい

茶店は気分転換、もしくは時間がなく短期集中用と割り切る

  • 周りがざわざわしていて集中しにくいので基本避ける
  • 1時間とかの隙間時間とか、気分転換のための場所替え目的ならば可
  • プレミアムなスタバは静かなのでOKだが値段が高い

自宅や職場から10分圏内で学ぶ

  • 図書館等も移動時間が長い場合はNG。
  • ただし、30分電車に乗るが、その30分間勉強できる場合等は移動時間に含めない。
  • 何もせずに15分歩かなければならない等を避ける。

集中力を維持する時間の使い方

INとOUTを交互に行う

  • インプット系、アウトプット系、インプット系をと交互に行う
  • インプット系を3~4時間続けていると集中力が切れるため、インプット系は最大3時間まで

ポロモードテクニックで疲れを溜め込まない

  • 1サイクルは30分以内。10分でも良い
  • 2~6サイクルやった後、20~60分休憩
  • 休憩なしの場合、その後の集中力切れが激しいためNG
  • 50分実施、10分休憩でもOK

休憩は規定の時間のみ

  • 基本は「疲れる前に休憩を取る」
  • 休憩は基本的に定められた時間のみとする。
  • 規定時間をすぎた場合は、問答無用で課題に取り組む。

勉強方法を改善し効率を上げる

難しい単元を学ぶ時は初っ端から写経しない

  • 書籍等で学ぶ時にいきなり写経しない
  • 全体像が見えておらず、理解していない状態での写経に意味なし
  • 最初の1~3回はさらっと読んで全体像を把握
  • 4回目前後で丁寧に写経しながら読み、理解度と定着度を高める
  • ただし、基礎文法とか最初から100%理解できるものに関しては写経して問題なし

何度も同じ部分を写経しない

  • 英単語とかなら何回かに渡って繰り返し書いたりもする
  • しかし、プログラミングで書籍を何回も写経するのは時間の無駄
  • 開発時に演習ができるため、1~2回写経後はパッと読んで復習し、どんどん実開発へ適用させる
  • 独自サービスに学んだことをドンドン反映させて行く。仕事と異なり、機能の優先順位とかはド無視。
  • 数学と同じで「問題を覚える」ではなく「解き方を覚える」的な姿勢

メンタル面での工夫

この勉強法で正しいのか、将来合格するのか等は一切考えない

勉強中はメモ前の以外のことは一切考えない。無意味。

ポジティブに考える

浪人していたり、会社を辞めて勉強していたり、残業がある中で試験が差し迫っていて間に合わないと感じる場合、無理やり、あほと呼ばれてもいいレベルでポジティブに考える。
悩んだり、迷っていられるほど人生に時間はない。少しでも前に進む意志を持つこと。

タスクはmeasurableにする

Git - 【stashコマンド】変更分を一時避難し、コミットせずに別ブランチへ移動する

作業中にコミットせずに別ブランチへ移動しなければならなくなった場合の操作方法。

git stashで一時避難

git stashで作業内容を一時保存し、別ブランチへ移動することが可能になる。

git stash

この時、下記2つのファイルが一時避難され、変更前の状態に戻る。

  • addしていないワークツリーに存在する変更ファイル
  • addしてステージングされているがまだコミットされていないファイル

git stash applyで元に戻す

別ブランチでの作業が終わり、再度ファイルを退避していたブランチで作業したい場合は下記で元に戻す。

# addされていないファイルのみ元に戻す
git stash apply

# addされていたファイルも元に戻す
git stash apply --index

Git - リモートの最新情報をローカルに反映する(fetchとpull)

リモート(GIthubなど)から最新情報を取得し、それをローカルに反映させるには2つの方法がある。一つがfetchでもう一つがpull。

fetch

fetchはリモートリポジトリからローカルリポジトリに最新情報を取得する。
この時、ワークツリー(ローカルで実装しているファイルが置いてあるところ)は更新されない。

git fetch <リモートリポジトリの名称>
git fetch origin

ワークツリーに反映させたい場合はmergeコマンド
下記はmasterブランチを最新にしたい場合で、originのあとにスラッシュが必要

git merge <リモートリポジトリ名称>/<ブランチ名称>
git merge origin/master

pull

pullはリモートリポジトリからローカルリポジトリに最新情報を取得した上で、ワークツリーにもその情報を反映する。つまり、fetchしてmergeするのを一括で実行してくれる。

git pull <リモートリポジトリ名称> <ブランチ名称>
git pull origin master

pullする時の注意点

pullの挙動は、現在自分がいるローカルのブランチに指定したリポートリポジトリをmergeしようとするため、git pullする前には必ずローカルのブランチを適切なものに変更しておくこと。

AWSで無料枠利用なのに毎月4$弱課金されていた件

Elastic IPで毎月4$課金されてた

何も使ってないのに課金された!と叫んでいたら、これを思い出しました。
togetter.com

明細にここ数ヶ月、毎月300~400円前後 Amazon Web Serviceの記載があったが、遂に対応。

思ったこと

そーいえば昔ZOZ●で買い物した時も、気づいたら意味不明な会員にされてて課金されてた思い出。
あーあと、学生時代に某銀行で使える上限をメッチャ低くしてて、気づかないうちにリボッ^ー^という罠も...

つか、預金に数十万あるのに上限10万にしてて15万円使ったら、5万円分はリボ払いになるって...(金額はあくまで例)

この「よく分からんけど気づかないうちに課金されて、メリットを1ミリも享受していない」状況を生み出すのは、自サービスでは絶対しないようにしようと誓う。姑息でタチが悪いなーって印象が強すぎるのよね...

まぁぶっちゃけ月数百円ぐらいどうでもいいレベルで、小さいこととやかく言ってんじゃねーよという。
そして情弱乙と言われたらグーの音も出ない。

ちなみにリボ払いは海外旅行言った時にオーバーしてて数千円の損害。
学生極貧時代だったのでぶち切れて速攻で銀行を変えたというしょーもない話も思い出した。

数千、数万は勉強代ですよ(キリッ。

【心の声】ちきしょー、300円あれば缶コーヒー3本買えたわ^^

【オブジェクト指向】単一責任の原則について理解を深める

単一責任の原則(SRP)についての理解を深めてくれる良記事。
SRPに違反しているコードを徐々に改良していく丁寧な解説で非常に分かりやすい。

medium.com

記事を紹介する背景

Sandi Metz氏の「オブジェクト指向設計実践ガイド」を数週読了。
しかし、SOLID原則に関する具体例が弱く、腑に落ちない部分が多々あった。

なかなか良記事が見つからず骨が折れたが、上記の記事に巡り会うことができた。

単一責任の原則を生み出したUncle Bobの投稿記事

なお、SRPの考え方を世に出した、Uncle Bobことマーティン氏のブログ記事は下記。

https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html