投稿

JavaScript 非同期処理 Promiseをループする

JavaScriptで複数のリソースの読み込みやWebスクレイピング等によるリソース取得時に「XMLHttpRequest」を使い非同期で読み込みたい時があります。 最近ではPromiseで非同期処理をするのが一般的ですが`for`の中にPromiseを入れても意味がありません。 ``` for(i=0; i < 10; i++){ let a = new Promise((resolve, reject)=>{ setTimeout(()=>{ console.log("foo"); return resolve(); }) }) } console.log("bar"); ``` #### Output ``` bar foo(10) ``` この様にPromise自体は実行されますが、forの中身が実行されている間に次の`console.log("bar");`が実行されてしまいます。 ## 解決方法 条件が合うまで同じ関数を呼び出す方式でループを実現します。 ``` function PromiseLoop(a, c, b = 0){ if(b >= a){ return Promise.resolve(); }else{ return c(b).then(()=>{ return PromiseLoop(a, c, b + 1); }); } } ``` * a : 繰り返し回数 * c : 関数 (戻り値は`Promise.resolve()`である必要がある) * b : 条件初期化 引数`c`にはreturnに`Promise.resolve()`を返す必要があります。 Promiseを返さないと`then()`で次の処理が動きません。 ``` return c(b).then(()=>{ return PromiseLoop(a, c, b + 1); }); ``` 引数`b`は特に指定が無い限り初期値を`0`に初期化し

Qt TableView

イメージ
# QtのTableViewの最もシンプルな例を紹介します。 QtTableViewはデータをテーブル上に表示するGUIウィジェットです。 主に次の様な手順で使用します。 * TableViewをインスタンスし、用意する * モデルデータオブジェクトを定義する * TableViewの`setModel`メソッドでオブジェクトを渡す ### TableViewのモデルを作成する <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8YSn9b0kDSCf5JaOMJ7Ivt39K10KMJVNOpp4KvVzKMfiAdtdhzAsPAgw74tv5Ew2gY_dfkeA7JJYkbanBplWv64JA_RavrHhzlT034jDTLI31xGzrVNcOePQOJL1jMTH7-e_L6J0Odo/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2020-01-04+11.09.37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8YSn9b0kDSCf5JaOMJ7Ivt39K10KMJVNOpp4KvVzKMfiAdtdhzAsPAgw74tv5Ew2gY_dfkeA7JJYkbanBplWv64JA_RavrHhzlT034jDTLI31xGzrVNcOePQOJL1jMTH7-e_L6J0Odo

Qt SQLite データ書き込み

イメージ
## ※ 現段階では書捨てです。後日正しく直します。 .pro ファイルにsqlを追加 ``` QT += core gui sql ``` ## UIの構成 <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSbXwLo8oZZ0id54lKbqrtcgLDLkuI9doC6tSI0nm9L2R7UtK_NKvk26Sz13pWcm1lltm8R-6JaKve5uxtddHR6HN5X8dqMSMesx3c4aCGCB_5XZsKgvk0aHZZqsFpa6irbIRahuq8Na8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2019-12-08+23.19.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSbXwLo8oZZ0id54lKbqrtcgLDLkuI9doC6tSI0nm9L2R7UtK_NKvk26Sz13pWcm1lltm8R-6JaKve5uxtddHR6HN5X8dqMSMesx3c4aCGCB_5XZsKgvk0aHZZqsFpa6irbIRahuq8Na8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%258

ウェブアプリケーション用テンプレートを公開

イメージ
汎用性の高いウェブアプリケーション用HTMLテンプレートを配布します。 # 概要 <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuqJAp2XSDkkRhe7V9E5aHpJ0CN1P7P_NdD_MMjQVgmxsULE5Gzvc8cCpJN8ZXVs1hdhy0R5pCc5WD5d8H0fV31bbLbUfINnYuCZuR-GSVQ4NTqMXJ-H4Bxi_1OxAEb5k3chj2fWFRl3g/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2019-10-13+5.24.27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuqJAp2XSDkkRhe7V9E5aHpJ0CN1P7P_NdD_MMjQVgmxsULE5Gzvc8cCpJN8ZXVs1hdhy0R5pCc5WD5d8H0fV31bbLbUfINnYuCZuR-GSVQ4NTqMXJ-H4Bxi_1OxAEb5k3chj2fWFRl3g/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2019-10-13+5

[GAS] スプレッドシートの値、取得・書き込みを行う

イメージ
# はじめに GASとは「Google Application Script」の頭文字をとったもので、Googleが提供している各サービスをこのスクリプトを使い、プログラムする事でこれまでになかった機能を作ったり、作業を簡易化する事が出来る様になります。 よく使われるサービスとしては、GoogleDrive ・ Gmail等でしょうか。これらをGASを使ってプログラムを組む事で連携させる事が可能になります。 JavaScriptをベースとしたプログラミング言語で、JavaScriptと言ってもバージョンが幾つかあり、現時点(2019年)でのネイティブはES6ぐらいでの開発が一般的かと思います。 GASではJavaScript1.6を採用している様ですので、使える構文や仕様が限られますが、十分かと思います。また、TypeScriptからコンパイルする事がオススメされています。 # スプレッドシートの基本操作 GAS入門としてはスプレッドシート(Microsoft Excelみたいな物)のコントロールです。 ## スプレッドシートの準備 ### 新規スプレッドシート作成 Google Driveで任意のディレクトリで新規スプレッドシートを作成します。 名前も任意の名前にします。この作成したスプレッドシートを操作するスクリプトを作成して行きます。 <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfBHZJBvOtQrGrmaaBo1NjSwlAVk34UzAyZ8EiosDl4xaY0aDT6jC2yUTWm4TRDdR9wW7yA_isdUBGMP6polzoDK38J9FTVdV-PCe6agWEkehcsJ7Esc45ZDXMvI5wBZ-yGvep8Tn7mgw/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%2

iOS Siriショートカット使い方

イメージ
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQZyYWwqxxkCkJyiSwALMm9OZpYkIndlASzdEXvUdu2tXBbR69jsWm0oB4MK_rgWv9FiiRIF69oG2F_cD3XfbxTVU160nz8wZxKxyxq5JBKL-LlLqtZIRKgywSyCVotVaZO6NaFQdd9WE/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2582%25B91.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQZyYWwqxxkCkJyiSwALMm9OZpYkIndlASzdEXvUdu2tXBbR69jsWm0oB4MK_rgWv9FiiRIF69oG2F_cD3XfbxTVU160nz8wZxKxyxq5JBKL-LlLqtZIRKgywSyCVotVaZO6NaFQdd9WE/s400/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2582%25B91.png" width="400" height="141" data-original-width="606" data-original-height="214" /></a></div> # Siri ショートカットとは Siri ショートカットはiOSを搭載しているiPhone・iPad等で利用出来るApple

Affinity Designer 図形からくり抜きをする方法

イメージ
Affinity Designerのデザイナーペルソナで図形の形にオブジェクトをくり抜く方法を紹介します。 <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9dTQor_sXEM8kfhrJiy9OBPgN9bKQ6Qybe9zR8LFXHoGvswTw3xD13wA35sKTqsuRqUPkCenaukTh-msHZw4rLvmgNJfSy7MoYQMPoXoUowL4yv7V5_zYUQSL95BLbsCF1vkGs2NbWWs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2019-08-13+1.50.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9dTQor_sXEM8kfhrJiy9OBPgN9bKQ6Qybe9zR8LFXHoGvswTw3xD13wA35sKTqsuRqUPkCenaukTh-msHZw4rLvmgNJfSy7MoYQMPoXoUowL4yv7V5_zYUQSL95BLbsCF1vkGs2NbWWs/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588