iku8log

Webエンジニアのタダのメモ。

エンジニアの勉強法について考えてみた

僕は勉強の効率が良くなく、あたまも良くない。 ある事柄を理解して記憶するまでおそらく人より時間がかかる。

基本的に勉強は量をこなすようにしています。

もっと今後のエンジニアライフをもっと実りのあるものにしていくために、自分なりの勉強法について考えてみました。 この方法が良いか悪いかは、未実施なのでわかりませんが、そさそうな気はしています。

実践する勉強法

  • 勉強分野を分ける
  • 週1で復習の日を取り入れる
  • 週1で酒をのみ映画を見る
  • 業務にも取り入れる

勉強分野を分ける

ざっくりと勉強する分野を分けました。 僕の場合、以下のように興味があり必要だと思うことについて分けました。

  • フロント
  • サーバサイド
  • インフラ

毎日上記の分野にそれぞれ学びます。 例)1時間毎にフロント、サーバサイド、インフラの計3時間。

この時各分野について、覚えておくべきことをメモしておきます(復習の時使います)。 メモのポイントとしては、キーワードをメモします。文章ではなく。 さすがにキーワードだけだと無理だろうと思う箇所は文章で。

週1で復習の日を取り入れる

復習ってちょー大事。学生の頃も、忘れた頃にもう一度解くということを良くやってました。 勉強したときはちゃんと理解したつもりになるけど、すぐ忘れちゃいますからね。

僕は復習の日は「日曜日」に設定しました。 理由はモチベがあまり高くなく、時間が確保できる曜日だからです。

モチベが高くないところがポイントで、モチベが高い日は頭が冴えているので新しいことを学んだほうが良いんです(僕はね)。 しかも次の日、会社だし....。

日曜は復習の日だけど、勉強もするかも。

週1で酒をのみ映画を見る

ま、安めってことですね。

余暇も大事です。 この日は勉強しない。あえて勉強しないことで「勉強したい!」モチベを高めます。

勉強お休みの日は「月曜日」に設定しました。 会社の始まりでやる気が出にくいので、ぱーっと飲んで映画見ます。

業務にも取り入れる

プライベートで、1週間に1日復習の日を設け、1週間に1日休みの日を設けました。 これを業務にも取り入れます。

業務は5日しかないので、僕は、

月曜日を復習の日と設定しました。休みはないです。業務なんでね(というか土日休んでるし)。

月曜日を復習の日に選んだ理由としては、先週の月〜金にした業務を土日に忘れかけて、月曜日に思い出す! という、忘れた頃に思い出す作戦です。

業務でもメモは自分なりにとっていて、毎日つけています。 次の日するべきことを前日に作成し、todoリストとして消していく。っていうのが今までしたが、 これに加えて、その日学んだことや覚えておくべきことがらをメモしていく(個別にメモしていたので日単位ではまとまっていなかった)。

このメモをtodoリスト以外月曜に復習します。

その他&懸念点

  • プライベートの勉強法で、復習日の日を休みにして、「忘れた頃に作戦」をしたいが、土曜日を休みにするのはもったいないので出来ない。
  • 飲み会の日や風の日はどうするか問題
    • もちろん何もしない。効率が落ちるから次の日にしたほうが良い
    • ただ、継続力が欠けてくる可能性がある

3日前から、この勉強法を実践しています。 結果は出てませんが、今までのダラダラ勉強よりは確実に良くなるはずです。

今後、改善改良を加えていって、自分の勉強法を確立していきます。 また、効果が実感できれば報告します。

参考: 効率重視のエンジニアが実践している効果的な勉強法を解説する - paiza開発日誌

SpringBoot2 gradleコマンドによる起動まで

SpringBoot2 gradleコマンドによる起動まで

gradleコマンドを使って、SpringBoot2を起動するまでの流れをメモ。 ※開発環境はMacjava、gradleコマンドが使えることが前提。

起動までの流れ

  • 雛形を取得(Spring Initializr)
  • ビルド
  • 起動

雛形を取得

SpringBootプロジェクトの雛形ファイルはSpring Initializrよりダウンロードできる。

セレクトボックスで「Gradle Project」に変更し、 DependenciesにWebと入力し選択する。

あとは下の「Generate Projectボタン」より雛形のzipファイルをダウンロードできる。

f:id:iku8:20181223161405p:plain

ビルド

まずはzipファイルなので解凍。 解凍が終わったら「demo」ディレクトに移動し以下コマンドを実行。

gradle build

これでビルドが完了。

※ポイント build.gradleファイル中を覗いてみると、

implementation('org.springframework.boot:spring-boot-starter-web')

という行がある。

通常のプロジェクトでは 「org.springframework.boot:spring-boot-starter-web」ではなく 「org.springframework.boot:spring-boot-starter」となっており、Webアプリケーションようではない。

「Spring Initializr」でWebと選択したため、Webアプリケーション用の設定に書き変わっている。

起動

ディレクトリで上で、以下実行。

gradle bootrun

ポートは8080で起動するので、ブラウザでアクセスすると

http://localhost:8080/

以下のような画面が出る。

f:id:iku8:20181223161419p:plain

エラーとなっているが、コントローラやビューなど表示するものがないので想定通り。 これからコントローラ等を追加し、アプリケーション作成していく。

とりあえずこれで、開発までの下準備は完了。

コマンドメモ

  • gradle build
    • javaプログラムをビルドする(build.gradleの設定を見る)
  • gradle bootrun
    • buildされたファイルによってアプリケーションを起動する
    • java -jar jarファイル名でも起動可能(今回の例)
      • java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

phpstorm mac 便利なよく使う機能まとめ

これはただのメモになります。環境によっては動きません。

ショートカット

ファイル名検索

command+shift+O

直近に開いていたファイル一覧

command+shift+E

なんでも検索

shift shift

シフトキーを2回押すと開きます。 クラスやファイル名、アクション名など検索できます。

ブックマークする

command+F3

ブックマーク一覧

command+shift+F3

戻る、進む

一つ前に見ていたファイル(または場所)に戻る

command+[

上の逆(進む)

command+]

行の移動

移動させたい行にカーソルを持っていき(複数行選択でも移動可能)以下を実行

下移動

command+shift+↓

上移動

command+shift+↑

keepalivedとかvrrpとかvipとか

ただの備忘録なのであしからず。

keepalivedというロードバランサなしくみがLinuxにはある。

その中でVRRPという仕組みが使われている。

VRRPはmaster、backupという2つのサーバがある。ルータの場合もある。というか普通はそうらしい。

masterが基本的には利用され、masterが死んだときbackupが初めて利用される。 masterが死んだかどうかの確認をbackup側が定期的にチェックする。で死んでたら、自分で「俺がmasterだ」と昇格する。

IPからmacアドレスを取得しフレームを流すが、backupが昇格した段階で、俺のmacアドレスはコレだとarpする。 この時のarpは「Gratuitous ARP 」っていうらしい。 しかしコレは通信相手のためにやっているのではなく、L2スイッチのためにしているっぽい(良くわからない)

実際にはarpもするが、macアドレス時代masterのものをbackupが引き継ぐのでaprが全ての機器に届かなくても、キャッシュされていても問題ない。

ちょっと補足。

masterとbackupは同じIP(VIP)、同じmacアドレス(仮想MACアドレス)。

fail2banについてssh周りだけ調べてみた。

fail2banはsshとかの不正アクセスを検知して、自動的に攻撃元IPを遮断してくれるもの。

僕は、さくらVPSのcentos7を使用していますがデフォルトで入っているっぽいですね。

ない場合はyumとかで入れちゃいましょう。

ですが、デーモン見るとfail2ban動いていませんでした。 初期のままでは動作していない?っぽいので、

sudo systemctl start fail2ban

して、起動させました。

設定ファイル

動作確認をと思って、設定ファイルを以下のように編集しました。

/etc/fail2ban/jail.conf

bantime  = 60 # どのくらいの時間banするか
findtime  = 10 # どのくらいの期間中に失敗したらbanするか
maxretry = 1   # どのくらい失敗したらbanするか

bantimeはその名の通り、1度banしてどのくらいの間banし続けるかという設定。 今回は60。秒単位なので1分間はbanします。

findtimeとmaxretryですが、これはどのくらいの期間中に何回ssh接続が失敗したらbanするという設定。 例えば、findtimeが60でmaxretryが10なら、 1分間の間に10回失敗したら、banするよって感じ。

今回はmaxretryを1に設定しているので、一回でも失敗したら問答無用でbanされます。これならfindtimeを設定する意味はないですが。

初期は以下の様になってましたよ。

bantime  = 600
findtime  = 600
maxretry = 10

10分間の間で10回失敗したら、10分間banするって感じですね。割と厳しめ。

ban出来なかった

sshの接続ユーザを存在しないものにしてテストしてみましたが、banされませんでした。

コマンドでban状況を見るとたしかにバンされている。

sudo fail2ban-client status sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 1
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned: 1
   `- Banned IP list:   xxx.xxx.xxx.xxx #IPはヒミツ。

なぜ??と思ったら、実はちゃんとbanされていました。ssh。そう22番ポートがね。 僕はsshのポートを変えているのですり抜けれてました。

/etc/fail2ban/jail.conf

[sshd]
port    = 22222

こんな感じでサービス毎にポートが指定できます。

再起動もお忘れなく。

sudo systemctl restart fail2ban

※firewalldと連携して遮断してるっぽいので、firewalldも起動していないと、ban出来ませんでした。

余談

fail2banはメールとかも送れるっぽいので、結構良いですよ。

暇な時にいじってみよう。