好奇心のかたまり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から
登録して完了。
あとは何かクローンしてくる時に
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
↓ログの結果
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));
}
↓改善後のログ結果
連想配列のMap()
Pythonでいうところの辞書。
気軽にクリエイターの支援と、記事のオススメができます!