2020/09/14

Actions on Google の Account linking に Login with Amazon の OAuth2.0 を利用する

 IFTTT有料化で、Google Home の ホームデバイスを重い腰を上げて作成中

Alexa スマートホームスキル同様に Actions on Google においても OAuth2.0認証が必要
Alexa スマートホームスキルで利用した Amazon の認証サービス Login with Amazon を Actions on Google で流用しようとしていくつか躓いたのでメモ


各サービスで、プロジェクト(google.com側)とセキュリティプロファイル(Amazon.com側)を作成した状態です

Actions on Google

Login with Amazon



OAuth2.0 URLの対応

Authorization URL: https://www.amazon.com/ap/oa
Token URL: https://api.amazon.com/auth/o2/token
Scopes: profile
※Scope: profile を記載しないと認証時にエラーが発生や元の画面に戻されたりします


Amazon側でリファレンス元とリダイレクト先を設定
許可されたオリジン: https://accounts.google.com
許可された返信URL: https://oauth-redirect.googleusercontent.com/r/PROJECT-ID


Google側プロジェクトIDの確認

Project Settings で Project ID を確認




2020/09/10

IFTTT がついに有料化

 IFTTT がついに有料化 IFTTT Pro

無料版はアプレットが3つまでと絶望的な変更
そして Proの利用料は $9.99/月だが、2020/10/7までに $1.99~$9.99/月で設定した金額で最初の1年間は利用可能らしい

$9.99になる前に別のサービスを探すかなぁ
Google Assistant (Google Home) に対応したサービスあるのだろうか
Amazon Echo のスマートホームスキル作ったからそっちへ移行かなぁ


2020/08/31

OUKITEL C21 スペック

OUKITEL C21 (2020/8/11発売) を注文(発売記念かなんかで USD89.99)したのでスペックをメモ

 https://oukitel.com/pages/c21-specs
公式のスペックって、なんで(PCで)あんなに見にくいのだろう
  • EU & Japan Version を選択すれば、ドコモのメインバンドである B1/3/19 に対応
  • スロットに Nano/Nano+TF とあり、sim + sim  か sim + microSD(microSDHC) のどちらかの接続構成で利用可
  • Wi-Fi 5GHz の W53, W56 対応は不明(W52しか対応していないと思う)

OUKITEL C21

Dimensions and Weight
Width 75.5mm Height 157.3mm Depth 8.75mm
WeightApprox 170g (including the battery)

Display Size Resolution
6.4 inches
1080 x 2310
19.25 : 9
FHD+ In-cell LTPS Punch-hole display
450nit typictal, 400nit min
398PPI

Performance
Operation system
CPU: MediaTek Helio P60 (4 x Cortex-A73 2.0GHz & 4 x Cortex-A53 2.0GHz)
GPU: ARM Mali G72 MP3, up to 800MHz
RAM: 4GB
Storage: 64GB
Battery: 4000mAh
Android 10

Rear Camera
Megapixels: 16MP+2MP+2MP+2MP
Aperture: f/2.0
Autofocus: AF+FF+FF+FF
Flash: YES

Front Camera
Sensor: S5K3T1
Megapixels: 20MP
Autofocus: FF
Aperture: f/2.0

Video Recording
1080p, 720p, 480p video recording, 30fps

Bands(EU & Japan Version)
FDD-LTE: B1/3/7/8/19/20
WCDMA: B1/8
GMS: B2/B3/B5/B8

Bands(North & South America Version)
FDD-LTE: B1/2/4/5/7/8/12/17/28A/28B
WCDMA: B1/2/4/5/8
GMS:B2/B3/B5/B8

Wi-Fi: 2.4G/5G
Port: Type-c port
Card Slot: Nano/Nano+TF
Bluetooth: 5.0
Positioning: GPS GLONASS BEIDOU
FM: Yes
Sensors: Proximity Sensor, Ambient Light Sensor, G-sensor, M-sensor, Gyroscope, Geomagnetic Instrument,Acceleration sensor

Oracle は INSERT INTO .. SELECT .. WHER の FROM を省略できない

Postgre から Oracle へ移行で、INSERT で 固定値を投入しつつ WHERE と絡める SQL文で躓いたのでメモ

INSERT INTO
:
SELECT
:
WHERE
:

としたとき、SELECT文に FROM が省略されていると Oracleでは受け付けてくれない
この場合、指定するテーブルが無いので、デフォルトで用意されている DUAL テーブルを指定する

INSERT INTO
:
SELECT
:
FROM DUAL
WHERE
:

2020/08/27

Oracle で 空文字の判定

 Postgre で使用していた SQL文を Oracle へ持ってきて動かなかったのでメモ

プログラムから SQL雛形に置換文字列を埋め込んで、それを実行させていたため事故の無いようデータが空の場合、スキップさせるため WHER節へ

WHERE ('$DATA$' <> '') AND ... みたいなのを組み込んでいた
($DATA$ には文字列が置換される)

これを Postgre から Oracle へ持ってきた所、常に false となってしまいデータが更新されない
('AAA' != '') や ('AAA' <> '') は、常にfalse が返る

Oracle で空文字を判定するには IS NULL や IS NOT NULL を使うらしい

WHERE ('$DATA$' IS NOT NULL) AND ... 

.NET から Oracle 接続で TNS解決できない

 .NET から Oracle.ManagedDataAccess を利用、Data Source へ TNS名を入れるが、

ORA-12154: TNS: 指定された接続識別子を解決できませんでした

が出てしまう
今回は Oracleを利用したアプリケーションの環境で、Oracle DBへ接続するため、Oracle関連の一般的な環境変数がほとんど入っていない(からかどうかは不明)

要は tnsnames.ora にTNS定義してあるが、.NET から引けてない状態


解決方法1
oracle のディレクトリにある tnsnames.ora を実行環境へコピー

解決方法2
.NET側で app.config の TNS_ADMIN へパスを記載して、環境変数 ORACLE_HOME へパスを入れておく

<oracle.manageddataaccess.client>
    <version number="*">
      <!--ここから-->
      <settings>
        <setting name="TNS_ADMIN" value="%ORACLE_HOME%/network/admin" />
      </settings>
      <!--ここまで-->
      <datasources>
            <datasource alias="SampleDataSource" descriptor="(略)" />
      </datasources>
    </version>
</oracle>

解決方法3
tnsnames.ora の該当箇所 TNS名=Values の Values の所をそのまま Data Source=Values へ持ってきて、tnsnames.ora を利用しない


1 は元が変更されても反映されないので、シンボリックリンクにしておくとよいかも
2 は既に環境変数 ORACLE_HOME が設定されていれば利用しやすい
3 は決め打ちになるので、Data Source は外部ファイルにして変更可能にしておくのがベターかも

2020/08/21

マイナポイントの予算が枯渇するかどうか計算

 マイナポイントの予約を急げ的な記事をよく見かけるので、予算が枯渇するかどうか計算してみた

マイナポイント事業の予算は 2,478億円で、利用予想は 4,000万人、つまり一人あたりの予算は 6,195円 ということになる
付与されるポイントの上限が 5,000ポイントなので 1,195円は電通に支払う手数料等なのだろう

で、この予算が枯渇するかどうかを計算

予算利用者数予算/利用者数備考
247,800,000,00040,000,0006,195予算割当の根拠
247,800,000,00022,137,50011,1942020/7/1 のマイナンバーカード取得総数
247,800,000,0003,000,00082,6002020/8/11 会見のマイナポイント予約数

7/1 時点でのマイナンバーカード取得率(マイナポイント予約数ではない) 17.5% と人口で計算した数字で利用予想の半分強、実際にマイナポイントを利用するであろう 8/11 会見の予約数が300万人
記事の中で 90万人/月 で増えたとか書いてあるが、マイナポイント終了の 2021年3月まで予算の根拠となっている利用予想の 4,000万人には全く届きそうにない

マイナポイントを利用するのであれば、早く取得するのに越したことはないが、開始直後に急いで 20,000万円分を利用する必要はなさそう

2020/08/20

ビルド直後の Centos7.0 で yum update で Error: kernel conflicts

 Cloudatcost でビルド直後の Centos7.0 に ssh から yum update をかけた所、途中でsshが落ち、その後


Error: kernel conflicts with kmod-14-9.el7.x86_64
Error: firewalld conflicts with 1:NetworkManager-0.9.9.1-13.git20140326.4dba720.el7.x86_64
Error: avahi-libs conflicts with avahi-0.6.31-20.el7.x86_64
Error: Package: avahi-libs-0.6.31-13.el7.x86_64 (@anaconda)
           Requires: avahi = 0.6.31-13.el7
           Removing: avahi-0.6.31-13.el7.x86_64 (@anaconda)
               avahi = 0.6.31-13.el7
           Updated By: avahi-0.6.31-20.el7.x86_64 (base)
               avahi = 0.6.31-20.el7
Error: initscripts conflicts with centos-release-7-0.1406.el7.centos.2.3.x86_64
 You could try using --skip-broken to work around the problem
** Found 176 pre-existing rpmdb problem(s), 'yum check' output follows:
ModemManager-glib-1.6.10-3.el7_6.x86_64 is a duplicate with ModemManager-glib-1.1.0-6.git20130913.el7.x86_64
1:NetworkManager-1.18.4-3.el7.x86_64 is a duplicate with 1:NetworkManager-0.9.9.1-13.git20140326.4dba720.el7.x86_64
1:NetworkManager-libnm-1.18.4-3.el7.x86_64 has installed conflicts NetworkManager-glib < ('1', '1.18.4', '3.el7'): 1:NetworkManager-glib-0.9.9.1-13.git20140326.4dba720.el7.x86_64


なエラーが出て、再構築するはめに
ビルドし直した後、コンソールから yum update を行うことでうまくいったのだが...

2020/08/18

Delphi Indy IdHTTPServer(IdHTTPServer) で UTF-8 を返す

 Indy の HTTP Server (TIdHttpServer)で、UTF-8 をレスポンスさせる

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var S: string;
begin
    S := '<html><head></head><body>Hello World!ハローワールド!</body></html>';

    // UTF-8
    AResponseInfo.ContentStream := TStringStream.Create(S, TEncoding.UTF8);
    AResponseInfo.ContentType := 'text/html; charset=utf-8';

    {
    // Shift-JIS
    AResponseInfo.ContentStream := TStringStream.Create(S, TEncoding.GetEncoding(932));
    AResponseInfo.ContentType := 'text/html; charset=shift-jis';
    }
end;
AResponseInfo.ResponseText へそのまま記述するとデフォルトエンコードで処理されてしまうので、ContentStream へ直接投入し、ContentType へ charset でエンコードを記載しておく
charset の記述がないと、ブラウザは正しくエンコードを判断してくれない