はくなまたた

大丈夫、問題ない、どうにかなるさ

javascriptの非同期について

javascriptを勉強していると何点がつまずく点があったが、そのひとつが非同期通信だった。

関数で返り値を取ろうとしても処理のタイミングによっては値が取れないことがあります。

下の例だと戻り値を2倍しているだけなのですが、わざとsetTimeoutで処理のタイミングをずらしています。こうなるとfunc1の値が返ってくる前にfunc2を実行してしまってundefinedになるので注意が必要です。ここらへんはjavascriptを触るとみんな陥るところかもしれない。

これを解決するためにcallbackを勉強して次にpromiseを勉強して次にasync/awaitを勉強することになると思うがひとつずつ理解していかないと後々やっかいだと気付いた。

  let ret = func1(2);
  ret = func2(ret);
  func3(ret);

  function func1(d) {
    setTimeout(function() {
      console.log('1:' + d);
      return d * 2;
    }, Math.random() * 1000);
  }
  function func2(d) {
    setTimeout(function() {
      console.log('2:' + d);
      return d * 2;
    }, Math.random() * 1000);
  }
  function func3(d) {
    setTimeout(function() {
      console.log('3:' + d);
    }, Math.random() * 1000);
  }   
 

解説はほかのサイトで丁寧に書かれているのでそちらを参考にしてください。

とりあえずcallback関数を使えば関数そのものを引数に渡すことができるので、関数の数珠繋ぎみたいなのが出来ます。

これを利用するとfunc1の結果をfunc2に渡してfunc3に渡すみたいな数珠繋ぎが完成します。

下記を実行すると上から順番に実行されます。

  func1(2func2);

  function func1(dcallback) {
    setTimeout(function() {
      console.log('1:' + d);
      callback(dfunc3);
    }, Math.random() * 1000);
  }
  function func2(dcallback) {
    setTimeout(function() {
      console.log('2:' + d * 2);
      callback(d * 2);
    }, Math.random() * 1000);
  }
  function func3(d) {
    setTimeout(function() {
      console.log('3:' + d * 2);
    }, Math.random() * 1000);
  }
 

簡単そうですが、見慣れない書き方なので最初パッと見ただけで理解できませんでした。あとアロー関数も変に省略されていてパッと見意味がわかりませんでした。

Javascriptって色んな事が出来て色んな書き方が出来てしまうので、慣れるのに時間がかかるなと思いました。ネットにサンプルは色々落ちているが人によって書き方が違うのでそういった点もJavascriptを最初に触って戸惑う点かもしれません。 

1Dayログ

コロナ過で増えているリモートワークですが、慣れないリモートワークはなかなか作業効率があがりません。

 

自分が一日どれくらい仕事をしているのか正確に測定したいと思い簡単なタイマーアプリを作りました。

 

1度どのくらいパソコンの前で仕事をしているか測定してみるといいかもしれません。

 

下記からご自由にお使いください。

 

service.octopus5.xyz

デュアルモニター間のアプリの移動ショートカットキー

デュアルモニターを使っていて、片方のモニタの電源を落としたときに、アプリが消した画面側にいて、こっちに持ってきたい場合ってありませんか?

 

今まで知らなくて、もう一度モニタの電源を付けてアプリを移動させてきてから不要なモニタの電源を切るか、HDMI端子をぶっこ抜いてシングルモニタに切り替えていました。

 

実は探したらショートカットキーを使って消えた画面からブラウザなりなんなりをアクティブなモニタに持ってこれるんですね。知らなくて人生損してました。

 

やり方は簡単!移動させていアプリをアクティブにして「Shift」+「Windowsボタン」+「← もしくは →」

 

これさえ知っておけば、モニタの電源を付けなおす必要もないし、HDMI端子をぶっこ抜く必要もなし!

 

もっと早くググっていればよかった(笑)

 

Windows10でポート番号を調べる方法

Oracleをインストールしようとしていたら既に別のアプリがポートを使っていたので調査してみた。

f:id:takao99:20200404164126p:plain

 

f:id:takao99:20200404163048p:plain

コマンドプロンプトを起動して、

netstat -ano と入力

これでPIDを取得できるので、どのポートがどのPIDで使われているか調べる。

 

 

f:id:takao99:20200404163355p:plain

Ctrl + Alt + Delでタスクマネージャーを起動し、カラムを右クリックしてPIDを追加する

 

 

f:id:takao99:20200404163558p:plain

f:id:takao99:20200404163826p:plain

ポート番号:1521がOracleで使われているのがわかります。

 

gmailの未読だけを表示

これは便利!

gmailの未読がめっちゃ溜まってしまったんだがどうしよう。。。

とりあえずgmailの検索ボックスでis:unreadと打てば未読だけが表示される。

全選択して既読にしていこうかな。

 

is:unread

 

ショック!Snipping Toolの遅延機能が無くなっている!

本日気が付いたがいつのまにかSnipping Tool遅延機能が無くなっていた!

たまに使っていた機能だけにショック!

代わりに何かいいツールはないのか?!

 

Snipping Tool

f:id:takao99:20191130120400p:plain