JavaScript request-promise

request-promiseを入れ子にしたときどうなるか検証する。

phpでslimフレームワークで以下のようなレスポンスになるようにする。

http://localhost:8080/getJson
["1","2","3"]
http://localhost:8080/check/{count}
2は["OK"]、1、3は["NG"]を返すようにする。

# 2
["OK"]
# 1 or 3
["NG"]

slimで書くと以下のようになります。
※routes.phpのみ記載します。

<?php

use Slim\Http\Request;
use Slim\Http\Response;

// Routes

$app->get('/getJson', function (Request $request, Response $response, array $args) {
    $json = ['1', '2', '3'];
    return $response->withJson($json);
});

$app->get('/check/{count}', function (Request $request, Response $response, array $args) {
    if( $args['count'] === "2" ) {
        $json = ['OK'];
        return $response->withJson($json);
    } else {
        $json = ['NG'];
        return $response->withStatus(404)->withJson($json);
    }
});

phpのビルドインサーバの起動方法

$ php -S localhost:8000 -t public public/index.php

このときに、node.jsでgetJsonを叩く。
その結果を使って、ループを回してcheckを叩く。
1はNG。2はOK。3は叩かれないことを検証する。

この仕様を満たすように以下のコードを作成した。
※以下のコードは仕様を満たせていません。。

$ cat a.js
var rp = require('request-promise');
rp('http://[::1]:8080/getJson')
    .then(function (json) {
        const parse = JSON.parse(json);
        parse.some(function(value) {
            console.log(value);
            rp('http://[::1]:8080/check/'+value)
                .then(function(json) {
                    console.log('success='+value);
                    return true;
                })
                .catch(function (err) {
                    console.log('error='+value);
                    return false;
                })
        });
    })
    .catch(function (err) {
        console.log(err);
    });

※ 持ってたPCだと、localhost、127.0.0.1でも叩くことができなかった。なのでIPv6の指定方法で叩いています。

実行してみると

$ node a.js
1
2
3
error=1
success=2
error=3

error=3まで実行されてしまった。

原因としては、promiseで処理しているため。
5行目が処理される。つまり1が処理されていく。
7行目が処理されていくが、request-promiseの処理でブロックされないため、リクエスト処理より前に5行目に戻る。つまり2が処理されていく。同様に処理はブロックされず、3が処理されていく。
リクエスト処理が戻ってきたタイミングで9行目、13行目にあるconsole.logが実行される。
書いてみるととても不思議な動きに見える。

Kindle Paperwhite 第7世代と第10世代

技術書を読むために電子書籍リーダーにはお金を出して揃えていく。
2015年に発売された第7世代と2018年に新しく出た第10世代を比較する。

Clean Codeという書籍を参考に紹介したいと思います。とても良い本なので、ここで紹介させていただきます。

左が2018年(第10世代)、右が2015年(第7世代)
※第7世代の方は裏面に滑り止めのアクセサリーを装着しています。そのため、見え方が違います。

装着しているのはこちらです。かわいいですよね!

kindleというロゴが目立ちますねw

スペックの違いなどは別のサイトにお願いするとして、ここでは「ユーザー補助」機能を紹介します。

第10世代には、「ユーザー補助」というメニューが追加されています。

赤い枠がついたメニューが増えています!

「白黒反転」というものが増えています。

左が白黒反転されたものです。

目に優しい・・・!

ありがとうAmazon。

wordpress構築

意気込み

プログラマーとして情報を発信するために、wordpressを準備した。

今回はロリポップとさくらを比較。以前ロリポップを使っていたが、気分を変えてさくらにお願いすることにした。

更に、独自ドメインを持っているので、設定する。

「あき.net」
punycode 「xn--l8jwa.net」を持っているので、設定する。

独自ドメインを設定するときの注意点

  • さくらに課金してお試し会員から卒業する。
    • じゃないと、独自ドメインが設定できない。
  • ドメインを管理しているサービスで、ネームサーバの変更を行う。私の場合、ムームードメインだったので以下のような画面から操作して設定した。
  • ネームサーバを変更後にさくら側でドメインの設定を行う。詳しくは参考を見てください。
    • ネームサーバ変更後、すぐに作業はできません。
    • 「初期ドメインがDNSに登録されていません。しばらく後に設定して下さい」といった文言が表示されます。対策としては、10分、20分くらい待ってみましょう。それでだめなら問い合わせしてみてください。

参考

 さくらのサポート情報 
【ドメイン設定】他社で取得・管理中のドメインを利用
https://help.sakura.ad.jp/hc/ja/articles/206053782
サービス・プラン表示ここから対象サービス・プラン  サービス・プラン表示ここまで「さくらのレンタルサーバ」「さくらのマネージドサーバ」「さくらのメールボックス」では他社で取得あるいは、管理されているドメインでも利用することができます。前提条件・設定...