好奇心のかたまり12

取り組んだこと

N予備校「【2020年度】プログラミング入門Webアプリ」第2章準備しよう17~

6時間

仮想マシンの再立ち上げ
home/vagrant直下に新しく以下のディレクトリを作成した。
その後vagrant init ubuntu/bionic64を行ってサイド仮想マシンを作成した。

mkdir -p ~/vagrant/newubuntu1
cd ~/vagrant/newubuntu1
vagrant init ubuntu/bionic64
vagrant up
vagrant ssh

その後ubuntuの日本語化を行う

// 日本語環境の作成
sudo locale-gen ja_JP.UTF-8
// 起動時に日本語環境で起動する
echo export LANG=ja_JP.UTF-8 >> ~/.profile
// 設定を反映する
source ~/.profile
// タイムゾーンを日本標準時に変更
sudo timedatectl set-timezone Asia/Tokyo

// 共有フォルダの作成
// ホストOS(自分の場合はmacOS)と仮想マシンOS(この場合Ubuntu)とでどちらからでもアクセス可能なフォルダを作成する。
// ホストOSのターミナルから
cd ~/vagrant/newubuntu1
code .
// を行いvisualstudioでVagrantfileの中身を編集
// Vagrantfileの47行目の空白に以下のコードを挿入
config.vm.synced_folder "./workspace", "/home/vagrant/workspace"
// また55~61のうち、以下の3箇所のコメントアウトを削除しておく
ココconfig.vm.provider "virtualbox" do |vb|
 #   # Display the VirtualBox GUI when booting the machine
 #   vb.gui = true
 #
 #   # Customize the amount of memory on the VM:
ココvb.memory = "1024"
ココend
// 変更後は保存して仮想マシンを再起動し、再接続
vagrant reload
vagrant ssh
// ホストOSと仮想マシンのポート番号を8000で対応させるためにVagrantfileの27行目に以下のコードを書き込む
config.vm.network "forwarded_port", guest: 8000, host: 8000

// gitとssh通信をするために秘密鍵と公開鍵の作成
// 仮想マシン上で
ssh-keygen
// ホームディレクトリの.sshに作成した秘密鍵と公開鍵が作成される
cd ~/.ssh
ls
-> authorized_keys id_rsa id_rsa.pub
// id_rsa.pubが公開鍵なので中身を表示させて、githubに登録する必要がある
cat id_rsa.pub
-> なんかよくわからん文字列


githubにアクセスして、自分のアイコンをクリック
Settingsから

スクリーンショット 2020-04-19 16.05.36

登録して完了。
あとは何かクローンしてくる時に
yesを入力してエンターするだけ。

17ソーシャルコーディング
conflictしたら、該当の箇所を自分で修正して再度commitしたらいいんだよ。

第3章サーバーサイドプログラミング入門
Node.jsのバージョン管理ツールnvmのインストール
以下のコマンドを実行

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
// /.bashrcの変更をログインしなおさずに反映させる
source ~/.bashrc
// Node.jsのインストール
nvm install v10.14.2
nvm use v10.14.2
// REPLを起動
node

REPL(Read-Eval-Print Loop):入力したコードをその場で実行して、結果を表示するツール。

// sample.js
'use strict';
const number = process.argv[2] || 0;

'use strict';:JavaScriptをstrictモードで実行する。

process.argv[]:コマンドライン引数を受け取るプロパティ。
process.argv[0] -> 実行ファイル(node.exe)のフルパス
process.argv[1] ->スクリプトファイル(.js)のフルパス

||:条件付き論理和
false || ture -> 左のfalseは無視されて右のtrueが結果として出力
true || false -> 左の値がtrueなので左の値が結果として出力

// ターミナル上でsample.js実行
node sample.js

03アルゴリズムの改良
このセクションのまとめ:実行時間のオーダーをチェックして、指数関数的に増加する場合はアルゴリズムの改善を行う。

// sample.jsにかかる実行時間を計測
time node sample.js

プロファイルツールを用いてプログラムの呼び出しなどの情報ログを残す。

node --prof sample.js
node --prof-process isolate-0x4313810-v8.log

↓ログの結果

スクリーンショット 2020-04-19 22.36.41

summary -> Javascriptが全体の処理の大部分が占めていることがわかる。
Bottom up (heavy) profile -> fib関数の呼び出しに時間がかかっていることを示している。
// fib.jsの改善
// 改善前
'use strict';
function fib(n) {
 if (n === 0) {
   return 0;
 } else if (n === 1) {
   return 1;
 }
 return fib(n - 1) + fib(n - 2);
}
const length = 40;
for (let i = 0; i <= length; i++) {
 console.log(fib(i));
}

// 改善後
'use strict';
const memo = new Map();
memo.set(0, 0);
memo.set(1, 1);
function fib(n) {
 if (memo.has(n)) {
   return memo.get(n);
 }
 const value = fib(n - 1) + fib(n - 2);
 memo.set(n, value);
 return value;
}
const length = 40;
for (let i = 0; i <= length; i++) {
 console.log(fib(i));
}

↓改善後のログ結果

スクリーンショット 2020-04-19 22.53.07

連想配列のMap()
Pythonでいうところの辞書。



この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
3
ためになりそうな知識にすぐ飛びつく、ただ蓄え方に問題があるため知識の定着が悪い。そこでnoteを使い、文章にして記録することを始めました。記録開始:20200408【背景色の選び方】https://flatuicolors.com/palette/in