【Alexa】次のバスの時刻を教えてくれる。バス通勤とかに便利。

このスキルが意外と便利だったりする。

使い方は簡単。

Alexaアプリで、よく使うバス停(乗るバス停と降りるバス停)を登録するだけ。

設定が終わったら「アレクサ、次のバスは?」と話しかけるだけ。

そうすると、次のバスが何分後の何時何分に来るか、その次のバスは何分後か、というのを教えてくれます。

これ、自宅の近所、よく使うバス停と、降りるバス停を登録しておくと、家を出るタイミングが分かるので、非常に便利なんです。

そういえば、Pixel4aってeSIM搭載なので、手軽に乗り換えられるんじゃ無いかって思ったけど。

通常、新規契約やMNPでSIMカードを発行して貰うとき、発行手数料として3000円ぐらい支払わなくちゃいけないし、

SIMカードが届くまで電話やモバイル通信ができなくなります。

WiFi経由なら問題無いけど、二段階認証とかでSMS受信が必要になった場合に困ります。

しかし、eSIMが使えるなら、発行手数料もかからないし、設定すればその場ですぐ使用できます。

そもそもeSIMって何?

端末に内蔵されているSIMカードのようなもので、

最初は空っぽの状態ですが、プロファイル情報を書き込んであげることでSIMカードとして機能します。

日本国内のeSIM事情。

調べてみると、日本のモバイル通信事業者でeSIM対応を行っているのは、

楽天モバイルとIIJmioの2業者だけですね。

思った以上に少ないっすね。

楽天モバイルの特徴。

基本料金は2980円ですが、一年間無料。

そして通信量は無制限。

ただし、これは楽天圏内に限りまして、今のところ楽天圏内は大都市圏に限ります。

それ以外は他事業者の回線を借りて通信を行いますが、その場合は5GBの制限があります。

ただ、札幌はすでに楽天圏内なので容量無制限で通信可能。

ただし、地下などでは楽天回線が使えない場合があります。

IIJmioの特徴。

Zeroプランでは、契約手数料1円、基本料金は150円で、使用する容量に応じて料金が加算されます。

例えば、1GB使用する場合は300円、それ以降は1GB使用する度に450円、といった感じです。

で、どうする?

今のNifmoのプランでは通話+7GBで2300円払っています。

楽天モバイルにすれば1年無料で通信し放題だけど、それ以降は割高になってしまいます。

でも楽天ポイント付くんだよね?

IIJmioは論外。

ちょっと考えます。

【COCOS2D-X】アイコン画像をピッチリ並べる

とりあえず、アイコンをピッチリ並べてみました。

ポイントは、座標や拡大サイズを全て計算で算出すること。

こうしないと、機種が変わったときに、確実にレイアウトが崩れます。

    float buttonScale = visibleSize.height / (visibleSize.height / 4.0);
    float buttonBase = 0.0;
    auto homeButton = Sprite::create("btnHome.png");
    if (homeButton == nullptr)
    {
        problemLoading("'btnHome.png'");
    }
    else
    {
        homeButton->setPosition(Vec2(sprite->getPosition().x + sprite->getContentSize().width * scaleRate / 2 + origin.x, visibleSize.height + origin.y));
        homeButton->setAnchorPoint(Vec2(1.0,1.0));
        homeButton->setScale(buttonScale);
        buttonBase = visibleSize.height - homeButton->getContentSize().height * buttonScale;
        this->addChild(homeButton, 1);
    }

    auto charaButton = Sprite::create("btnChara.png");
    if (charaButton == nullptr)
    {
        problemLoading("'btnChara.png'");
    }
    else
    {
        charaButton->setPosition(Vec2(sprite->getPosition().x + sprite->getContentSize().width * scaleRate / 2 + origin.x,
                                      buttonBase + origin.y));
        charaButton->setAnchorPoint(Vec2(1.0,1.0));
        charaButton->setScale(buttonScale);
        buttonBase -= charaButton->getContentSize().height * buttonScale;
        this->addChild(charaButton, 1);
    }

    auto equipButton = Sprite::create("btnEquip.png");
    if (equipButton == nullptr)
    {
        problemLoading("'btnEquip.png'");
    }
    else
    {
        equipButton->setPosition(Vec2(sprite->getPosition().x + sprite->getContentSize().width * scaleRate / 2 + origin.x,
                                      buttonBase + origin.y));
        equipButton->setAnchorPoint(Vec2(1.0,1.0));
        equipButton->setScale(buttonScale);
        buttonBase -= equipButton->getContentSize().height * buttonScale;
        this->addChild(equipButton, 1);
    }

    auto questButton = Sprite::create("btnQuest.png");
    if (questButton == nullptr)
    {
        problemLoading("'btnQuest.png'");
    }
    else
    {
        auto scale = buttonBase / questButton->getContentSize().height;
        questButton->setPosition(Vec2(sprite->getPosition().x + sprite->getContentSize().width * scaleRate / 2 + origin.x,
                                      buttonBase + origin.y));
        questButton->setAnchorPoint(Vec2(1.0,1.0));
        questButton->setScale(scale);

        this->addChild(questButton, 1);
    }

例えば、「キャラ」のアイコンは「ホーム」のアイコンの下に並ぶように座標を計算して配置していますし、

その下の「装備」も「キャラ」の下に並ぶように座標を計算で算出しています。

「クエスト」のボタンは、上の3つのアイコンを並べた空きスペースにピッチリ収まるように、拡大率を算出して配置しています。

アイコンの拡大率も計算で算出しているので、機種や解像度が変化しても、アイコンの大きさが変わる程度で、大きくレイアウトは崩れないと思います。

思った以上に良い感じです。