将棋プログラミング

将棋に関するソフトウェア開発のノウハウ等。

Google API の OAuth 認証で invalid_grant

Google API を OAuth 認証で使うために、Google API Console で、次の設定を行った。

1. 認証情報のページを表示
2. 認証情報を新規作成
3. OAuth クライアント ID の作成
4. アプリケーションの種類の設定
5. JavaScript 生成元とリダイレクト URI の設定

次のように説明されている。

JavaScript 生成元とリダイレクト URI のどちらか、または両方を入力します。

そこで、リダイレクト URI だけを設定し、作業を進めた。

6. code を取得
7. アクセストークンを取得

アクセストークンを取得しようとすると、次のエラーが返ってきた。

{
  "error": "invalid_grant",
  "error_description": "Bad Request"
}

色々、試した結果、JavaScript 生成元にも設定することで、正しく動作するようになった。


参考:
developers.google.com

Xcode 11 で作成した Mac アプリケーションは applicationWillTerminate が呼ばれない

Xcode 11 で作成した Mac アプリケーションでは、applicationWillTerminate と applicationShouldTerminate が呼ばれないことに気が付いた。
ファイルをドロップしたりすると、呼ばれる場合がある。
これらが呼ばれないと、アプリケーション終了時にデータを保存できないので、大変困る。

Xcode 10.1 や Xcode 9.2 で作成すると、呼ばれる。
それぞれで作成したプロジェクトを比較したところ、Xcode 11 で作成した Mac アプリケーションでは、Info.plist に、次の2項目が追加されていることに気が付いた。

<key>NSSupportsAutomaticTermination</key>
<true/>
<key>NSSupportsSuddenTermination</key>
<true/>

NSSupportsSuddenTermination の値を false / NO にすると、applicationWillTerminate と applicationShouldTerminate が呼ばれるようになった。

追記:
2019/11/13 にリリースされた Xcode 11.2.1 も同様です。

参考:
developer.apple.com

iOS の定期購読のリジェクト事例

参考として、iOS の定期購読のリジェクト事例を紹介する。
従来、承認されていた iOS アプリのアップデイトが次の理由でリジェクトされた。

Guideline 3.1.2 - Business - Payments - Subscriptions

We noticed that one or more of your auto-renewable subscriptions is marketed in a manner that may mislead or confuse users about the subscription terms or pricing.

Specifically, the billed amount of your auto-renewable subscription is not clearly and conspicuously displayed to the customer.

定期購読する前に、当然、価格を表示しないといけないが、単に表示するだけではなく、明確に目立つように表示しないといけない、というのがリジェクトの理由だった。
定期購読の価格の文字を大きくし、また、色を付け、承認された。

さらに、もう1回リジェクトされた。
これは、別の画面で、無料試用の文字が定期購読の価格の文字より大きかったためで、定期購読の価格の文字を大きくし、承認された。

Unexpected error while obtaining screenshot from device: EOF

多分、Android SDK Build-Tools を r29 にアップデイトしたことが原因で、スクリーンショットを撮る際、次のエラーになるようになった。

Unexpected error while obtaining screenshot from device: EOF

次の対策で、この問題が解決した。

1. Android Studio を終了

2. 次のファイルをダウンロードする。

https://dl.google.com/android/repository/platform-tools_r28.0.0-windows.zip

3. adb.exe を入れ替える。

Android\sdk\platform-tools にある adb.exe の更新日時は 2019/03/06 だった。
これをダウンロードした adb.exe と入れ替える。
adb.exe の更新日時は 2018/05/22 になる。


参考サイト:
stackoverflow.com

第29回世界コンピュータ将棋選手権の戦型分析

今年(2019年)の第29回世界コンピュータ将棋選手権の棋譜296局の戦型を分析しました。

f:id:ykakinoki:20190604070937p:plain
第29回世界コンピュータ将棋選手権の戦型分析

1.棋譜の入手

棋譜ファイルは、次の CSA のサイトから入手できます。
www2.computer-shogi.org

•第29回 (2019年5月3,4,5日) から wcsc29_kifu.zip をダウンロードし、展開します。
拡張子が .csa のCSA形式の棋譜ファイルが296局あります。

2.決勝

8チームによる決勝 28局の勝率・平均手数は、次の通りです。

先手(下手)勝ち:    12
後手(上手)勝ち:    10
先手(下手)宣言勝ち:     2
後手(上手)宣言勝ち:     2
千日手    :     2
持将棋    :     0
先手(下手)勝率: 0.538
後手(上手)勝率: 0.462
平均手数   : 190.143  千日手を含む 
平均手数   : 200.308  千日手を除く 

入玉宣言勝ちは4局と多く、千日手は2局です。
先手勝率は、0.538です。
千日手2局を除くと、平均手数は約200手と、かなり長いです。

決勝の戦型は、次の通りです。

                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:            角換わりその他:    11  39.3%    0.600
  2:          角換わり腰掛け銀:     7  25.0%    0.200
  3:                  相掛かり:     4  14.3%    1.000
  4:                      矢倉:     3  10.7%    0.333
  5:                      雁木:     2   7.1%    1.000
  6:              その他の戦型:     1   3.6%
────────────────────────────
計                                 28   100%    0.545

角換わりが18局と最も多く、相掛かり4局、矢倉3局と続きます。
振り飛車横歩取りは、1局もありません。

初手は、次のように、▲7六歩が21局と多いです。

   次の手    棋譜数(%)    先手勝率
────────────────────────────
 1.▲7六歩      21 ( 75%)     0.444      8勝     10敗
 2.▲2六歩       5 ( 17%)     1.000      3勝      0敗
 3.▲7八金       2 (  7%)     1.000      1勝      0敗
────────────────────────────
計               28            0.545     12勝     10敗

3.全棋譜

選手権の全棋譜296局に対しては、次の結果です。

先手(下手)勝ち:   146
後手(上手)勝ち:   134
先手(下手)宣言勝ち:     2
後手(上手)宣言勝ち:     4
千日手    :    10
持将棋    :     0
先手(下手)勝率: 0.517
後手(上手)勝率: 0.483
平均手数   : 122.155  千日手を含む 
平均手数   : 123.717  千日手を除く 

千日手を除く平均手数は、約124手と、一般的な平均手数に近くなります。
先手勝率は、0.517 と、決勝より5割に近くなります。

戦型は、次の通りです。

                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:            角換わりその他:    57  19.3%    0.431
  2:                  相掛かり:    46  15.5%    0.524
  3:              その他の戦型:    42  14.2%    0.525
  4:                      矢倉:    22   7.4%    0.571
  5:                  四間飛車:    21   7.1%    0.476
  6:        横歩取り△3三角型:    20   6.8%    0.650
  7:          角換わり腰掛け銀:    19   6.4%    0.353
  8:          角交換型振り飛車:    16   5.4%    0.467
  9:                      雁木:    10   3.4%    0.700
 10:            横歩取りその他:     8   2.7%    0.500
 11:                  三間飛車:     8   2.7%    0.500
 12:                    中飛車:     7   2.4%    0.571
 13:                      未定:     6   2.0%    0.500
 14:            ゴキゲン中飛車:     6   2.0%    0.667
 15:                相振り飛車:     3   1.0%    1.000
 16:                向かい飛車:     3   1.0%    1.000
 17:            一手損角換わり:     1   0.3%    1.000
 18:                ひねり飛車:     1   0.3%    0.000
────────────────────────────
計                                296   100%    0.521

角換わりが最も多く、次が相掛かりです。
四間飛車が21局、横歩取りが28局です。

初手は、次のように、▲7六歩が多く、決勝と違って、様々な手が指されています。

   次の手    棋譜数(%)    先手勝率
────────────────────────────
 1.▲7六歩     171 ( 58%)     0.488     79勝     83敗
 2.▲2六歩      65 ( 22%)     0.565     35勝     27敗
 3.▲7八金      12 (  4%)     0.727      8勝      3敗
 4.▲3八銀       8 (  2%)     0.625      5勝      3敗
 5.▲6八玉       5 (  1%)     0.800      4勝      1敗
 6.▲4六歩       5 (  1%)     0.400      2勝      3敗
 7.▲5八玉       5 (  1%)     0.400      2勝      3敗
 8.▲1六歩       5 (  1%)     0.500      1勝      1敗
 9.▲9八香       4 (  1%)     0.750      3勝      1敗
10.▲6六歩       4 (  1%)     0.500      2勝      2敗
11.▲6八飛       1 (  0%)     1.000      1勝      0敗
12.▲4八銀       1 (  0%)     1.000      1勝      0敗
13.▲6八銀       1 (  0%)     0.000      0勝      1敗
14.▲3八金       1 (  0%)     0.000      0勝      1敗
15.▲3八飛       1 (  0%)     0.000      0勝      1敗
16.▲6八金       1 (  0%)     0.000      0勝      1敗
────────────────────────────
計              296            0.521    146勝    134敗