Windows版の Daedalus Mainnet (4.1.0#18213)。

起動後のプロセスの概略は
* cardano-node.exe ブロックチェーンの土台。名前付きパイプを張る。dir \\.\pipe\\cardano-node-mainnet.*
* cardano-wallet.exe そのパイプと通信し、RESTAPI を提供。port に listen
* daedalus 見えてる画面。Electronで固めたもの

だと思われます。

付属の cardano-wallet.exe で動作中の情報を取れないかなと。
cardano-wallet.exe だと

C:\Program Files\Daedalus Mainnet>cardano-wallet network clock --port XXXXX
This server only accepts secure HTTPS connections.

と出てきてしまって、HTTPS通信する方法が分からず。

下でできた。cardano-wallet.exe 経由ではなく RESTリクエスト 直だけど。

#!/usr/bin/perl

use Modern::Perl;

use File::Spec::Functions qw(catfile);
use HTTP::Tiny;
use IPC::System::Simple qw(capture);
use JSON::MaybeXS qw(:legacy);
use YAML::Syck;

sub get_cardano_wallet_pid {
    capture("tasklist") =~ /cardano-wallet\.exe\s+(\d+)/ ? $1 : die;
}

sub get_cardano_wallet_port {
    my $pid = get_cardano_wallet_pid();
    capture("netstat -nao") =~ /\s+127\.0\.0\.1:(\d+).*\s+$pid$/m ? $1 : die;
}

my $port = get_cardano_wallet_port();

my $http = HTTP::Tiny->new(
    SSL_options => {
        SSL_cert_file => catfile($ENV{APPDATA}, 'Daedalus Mainnet\tls\client\client.crt'),
        SSL_key_file  => catfile($ENV{APPDATA}, 'Daedalus Mainnet\tls\client\client.key'),
    },
    default_headers => {
        'Content-Type' => 'application/json',
    },
);
#my $uri  = "https://127.0.0.1:$port/v2/network/clock";
my $uri  = "https://127.0.0.1:$port/v2/wallets";
my $res  = $http->get($uri);

if ($res->{success}) {
    say Dump decode_json $res->{content};
}
else {
    die Dump $res;
}

__END__
---
-
  address_pool_gap: 20
  assets:
    available: []

    total: []

  balance:
    available:
      quantity: 'XXX'
      unit: lovelace
    reward:
      quantity: XXX
      unit: lovelace
    total:
      quantity: 'XXX'
      unit: lovelace
  delegation:
    active:
      status: delegating
      target: poolXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    next: []

  id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  name: XXXXXXXXXXXXXXXXXXXXX
  passphrase:
    last_updated_at: 20XX-XX-XXTXX:XX:XX.XXXXXXXZ
  state:
    status: ready
  tip:
    absolute_slot_number: XXXXXXXX
    epoch_number: 276
    height:
      quantity: 5951584
      unit: block
    slot_number: 282623
    time: 2021-07-08T04:15:14Z

前提

三大キャリアのSIMとして、ドコモのSIMとします。

格安SIMとして、あるドコモ系回線の格安SIMとします。直接は避けました。

結論

  • 格安SIMとiOSという組み合わせでは、遅延する場合があり、改善不可能。
  • 格安SIMとAndroidという組み合わせでは、遅延する場合があるが Push Notification Fixer などで改善できる。
  • 三大キャリアのSIMでは遅延が確認できなかった。

検証

  • iOS として iPhone SE (13.6), iPad Mini (13.2)
  • Android として Nexus5X (8.0.0)
  • 双方に入れた Skype に両方にPush通知が来るようにして待機中にして、PCからSkype通話をかける
  • すぐ鳴った場合は o そうでなければ x。x の後に時間がある場合は、通知が遅れて届いた日時。
  • Skype通話後、1〜10分おいて、またSkype通話。
  • 無線LANは記載が無ければオフです。
# 同じ iOS で、SIMの違いで差を確認
ts                     , mvno(iPhone)             , mno(iPad)
2020-09-21T13:34:39+09 , x                        , o
2020-09-21T13:37:23+09 , o                        , o
2020-09-21T13:45:45+09 , x 2020-09-21T13:48:10+09 , o
2020-09-21T13:50:01+09 , x                        , o
2020-09-21T13:55:30+09 , x 2020-09-21T13:58:26+09 , o 
2020-09-21T14:02:07+09 , x 2020-09-21T14:08:46+09 , o
2020-09-21T14:10:03+09 , o                        , o
2020-09-21T14:15:00+09 , x 2020-09-21T14:20:35+09 , o

# SIMを入れかえて、SIMに応じて結果が移るか
ts                     , mvno(iPad)               , mno(iPhone)
2020-09-21T14:27:35+09 , o                        , o
2020-09-21T14:38:37+09 , x                        , o
2020-09-21T14:45:56+09 , x 2020-09-21T14:46:32+09 , o
2020-09-21T14:57:01+09 , x 2020-09-21T14:57:20+09 , o

# MNO側を Android にしてみた
ts                     , mvno(iPad)               , mno(Android)
2020-09-21T16:28:26+09 , x 2020-09-21T16:29:31+09 , o
2020-09-21T16:35:43+09 , x                        , o
2020-09-21T16:58:00+09 , x                        , o

# MVNO側を Android にしてみた。遅延しないと思ったら無線がOnだった・・・
ts                     , mvno(Android無線ON)      , mno(iPhone)
2020-09-21T17:02:25+09 , o                        , o
2020-09-21T17:10:16+09 , o                        , o
2020-09-21T17:20:38+09 , o                        , o
2020-09-21T17:24:10+09 , o                        , o
2020-09-21T17:29:33+09 , o                        , o
2020-09-21T17:40:31+09 , o                        , o
2020-09-21T18:12:20+09 , o                        , o

# MVNO側を Android にしてみた。
ts                     , mvno(Android)            , mno(iPad)
2020-09-21T18:18:20+09 , x 2020-09-21T18:18:57+09 , o
2020-09-21T18:22:12+09 , x 2020-09-21T18:22:53+09 , o

# Push Notification Fixer を使ってみる
ts                     , mvno(Push Notification Fixer 1min) , mno(iPad)
2020-09-21T18:25:30+09 , o                        , o
2020-09-21T18:32:18+09 , o                        , o
2020-09-21T18:46:10+09 , o                        , o 
2020-09-21T18:49:10+09 , o                        , o
2020-09-21T18:49:28+09 , o                        , o
2020-09-21T19:44:59+09 , o                        , o

余談

  • SMSであればおそらく鳴るまでの時間に大差はないと思いますが、SMSよりプッシュ通知のほうがずっと速いので。

クリップボードの内容をモニターして、自動的に発動したり同期したりするの動かしているのだけれど
ファイルマネージャ(thunar や nautilus や PCMan) で Ctrl-X or Ctrl-C した場合に
ファイルパスの文字列を Ctrl-C した場合と区別したい。

xclip -selection clipboard -t TARGETS -o が有用なようだ。

(urxvt で文字列をコピー)
# xclip -selection clipboard -t TARGETS -o
TARGETS
UTF8_STRING

# xclip -selection clipboard -o
/home/user/file

(nautilus でファイルを選択して Ctrl-X)
# xclip -selection clipboard -t TARGETS -o
TIMESTAMP
TARGETS
MULTIPLE
x-special/gnome-copied-files
text/uri-list
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/plain;charset=utf-8
text/plain

# xclip -selection clipboard -t x-special/gnome-copied-files -o
cut
file:///home/user/file

# xclip -selection clipboard -o
/home/user/file

ちなみに xclip には xclip-copyfile xclip-cutfile xclip-pastefile が含まれていて、ssh -Y でリモート間でもファイルを転送できます。

host1# mkdir dir1

host1# echo content1 > dir1/file1

host1# echo content2 > dir1/file2

host1# xclip-copyfile dir1

host1# ssh -Y host2

host2# xclip-pastefile
x dir1/
x dir1/file1
x dir1/file2

host2# cat dir1/file1
content1

FreeBSD の場合は /usr/local/bin/xclip-pastefile を修正する必要があるかも。

host1# xclip-copyfile dir1

host1# ssh -Y host2

host2# xclip-pastefile
tar: Error opening archive: Failed to open '/dev/sa0'

host2# exit

host1# xclip-copyfile dir1

host1# ssh -Y host2

host2% xclip -selection secondary -o | gunzip -c | tar xv -f -
x dir1/
x dir1/file1
x dir1/file2

host2% cat 
#!/bin/sh
set -e
if [ "x$1" != "x" ]; then
    echo "Usage: $0" >&2
    exit 1
fi
xclip -selection secondary -o | gunzip -c | tar xv
perl adv
perl adv