学んだことのログ

プログラミングとかものを作るのが好きです

仮想マシン (VM)

仮想マシン (Virtual Machine)

ソフトウェアを使って疑似的にコンピュータ全体の動きや作りを再現した仮想的なコンピュータのこと。

現実のハードのコンピュータと同じようにCPUやメモリ、OSなどを選定できる。

ゲストOS

ここで仮想的なコンピュータの方で使用するOSをゲストOS、実際にその仮想環境にアクセスするPCのOSをホストOSという。

Azureだとコンピューティングの選択肢はVMだけではなく、コンテナー と サーバーレス コンピューティングというのがある。

勉強になったこと

OSSのローカルの動作確認で自PCにtomcatを落としてローカルサーバーを立ててそこにOSSをwarファイルをアップロード、tomcat起動で自作アプリと疎通確認をしたのがわりと勉強になった。

OSSにで対象のJDKを落としてJAVA_HOMEに設定したり、上手く動かないとtomcatのverが合ってなかったり……今までIDEでなんだろうこれ(よくない)と思いつつやっていた環境構築の意味がだんだん分かるようになってきて、勉強になるしおもしろい。

最初の1~2年はとにかく動くものを作ること、で精いっぱいだったが、実用の部分をやってきたので改めて基礎の部分を勉強していく必要があると思った。

7/24の日報

やったこと

AtCoder B~C問題:5AC

Begginerに絞っているので1日1時間で3ACぐらいのペースでできるといいけどまだまだ時間がかかる。精進あるのみ。

ついAtCoderをやりたくなってしまうけど、資格の勉強をしなければいけない時間が刻々と迫っているので、優先順位を考えて今後はAtCoderは1日1時間(平日)、土日は2時間と決めて勉強していくことにする。

最近はちょっとセキュリティ方面にも興味がでてきたので色々と勉強してみたい。

やりたいことが多すぎて、勉強時間がいくらあっても足りないので優先順位を決めながらやっていく必要がある……

7/4の日報

7月に入って急に忙しくなったが、相変わらず勉強時間は以前よりも取りやすくなっているので、引き続き勉強を進めたい。

今の仕事的に必要となることがIT技術以外のことが増えてきた。

学びたいジャンルとして、データビジュアライゼーションや技術的ライティングを学びたい。伝わりやすい資料作りをしていくことが7月の目標。

それから会社の研修でロジカルシンキングも学ばないといけない。これはまだよくイメージが掴めていないので書籍等を読んでみようと思う。

とにかく作りながら学んできたが、基礎が足りてないと感じているので5月から開発の基礎から学び直しているが、これはかなり良かったと思うので今月も引き続き勉強していきたい。

7月勉強すること

技術系

・Webアプリ開発基礎

資格

・応用情報

仕事関連

ロジカルシンキング

・技術文書

・データビジュアライゼーション

 

あとは、できたら仕事で使わない言語を趣味としてやってみたい…

setTimeoutとかsetIntervalのコールバック関数に自前の引数を渡したい

コールバック関数とは

引数として渡される関数のこと。

他の関数の引数として渡して、他の関数の処理のタイミングで実行される関数。

こういうの

$('#alert-button').click(function (msg) {  // ←このfunctionが引数=callback
    alert(msg);
});

とかこういうの ※コールバック関数を変数に入れて、引数として渡している

$('#alert-button').click(alertmsg); // ←このfunctionが引数=callback

var alertmsg = function (msg) {
    alert(msg);
}

です。

関数に括弧( )があるときとないときの違い

setIntervalのコールバック引数に関数を渡そうとしてありがちなのが、実行結果を引数に渡してしまうこと。

こういう感じ

var msg = "Bad!";
var alertmsg = function (msg) {
    alert(msg);
}
setTimeout(alertmsg(msg),5000);

これだと、5秒後ではなくJS読み込みタイミング時にしか実行されない。

理由

関数の横に括弧( )を入れると関数が実行されるため。

上記の書き方だとJSが読み込まれた段階でalertmsgが実行されてしまい、引数にはコールバック関数ではなく実行結果が渡っている形になる。

そのため、コールバックの関数に引数がない場合は

var msg = "Bad!";
var alertmsg = function (msg) {
    alert(msg);
}
setInterval(alertmsg,5000);

関数が引数として渡されているだけで、実行はされていない。実行タイミングはsetTimeoutに設定された時間になるため5秒後に実行される。

どう書くか 案①コールバック関数に無名関数を渡してその中に引数を渡したい関数をいれる

var message = "OK!";
var alertmsg = function (msg) {
    alert(msg);
}
setInterval(function () {
    alertmsg(message)
}, 5000);

どう書くか 案②コールバック関数の戻り値に引数を渡したい関数をいれる

var message = "OK!";
function alertmsg(msg){
    return function(){
        alert(msg);
    }
}
setInterval(alertmsg(message), 5000);

これでいけます。

JSの関数を実行したいときに括弧( )を付けるときとつけないときの違い

括弧( )を付けるとき

こういう状態のとき

    start();

前提:関数の横に括弧( )を入れると関数が実行する。

そのため、ブラウザがこの箇所を読み込んだ時に処理が実行する。

括弧( )を付けないとき

こういう状態のとき

document.body.onkeydown start;

前提:onkeydownとは「何がキーが押されたとき」のイベントハンドラ

onkeydownにstartいう関数を代入しておくことで、「何がキーが押されたとき」に代入した関数が実行される。

ちなみに

こう書くとどうなる

document.body.onkeydown start;

 関数に括弧( )をつけると実行になるため、onkeydownに対して、start関数が実行したものを登録している状態になる。

つまりJSファイル読み込み時にstart()が実行され、その時点での実行結果がonkeydownに代入されてしまう。

onkeydownに対してイベントが発火したときに関数を実行したい場合は、関数のみを登録するようにする。