には plotly.js-1.51.3/dist/plotly-locale-ja.js に、下相当をマージすれば良いらしい。
{
  format: {
    month: "%Y-%m",
    dayMonth: "%m/%-d",
    dayMonthYear: "%Y-%m-%d"
  }
}
#!/usr/local/bin/perl

use utf8;
use Modern::Perl;
use List::MoreUtils qw(firstidx);
use Text::CSV_XS qw(csv);
use Text::Trim;
use YAML::Syck;

# https://www.mizuhobank.co.jp/corporate/ebservice/cb/webreport/manual/pdf/manual_cb.pdf
# CSVファイルのフォーマットを教えてください。
# p110 預金取引明細表
sub parse_mizuho_report_csv {
    my ($file) = @_;

    state @header1 = qw(
        データ区分
        店番号
        口座番号
        作成年月日
        西暦
        期間(開始)
        期間(終了)
        科目
    );
    state @header2 = qw(
        データ区分
        取引日
        取引区分
        取引情報(1)
        お引き出し額
        取引情報(2)
        取引情報(3)
        取引情報(4)
        お預け入れ額
        取引情報(5)
        差引残高
        摘要
        合計件数(引出) 
        合計件数(預入)
        合計金額(引出)
        合計金額(預入)
        合計文言
        決済日
    );
    my sub idx2 ($) { my $name = $_[0]; my $idx = firstidx { $_ eq $name } @header2; die $name unless $idx > -1; $idx };

    my $aoa = csv( in => $file );

    my @rows1 = grep $_->[0] eq 1, @$aoa; die unless @rows1 == 1;
    my @rows2 = grep $_->[0] eq 2, @$aoa;

    my %h;

    # 1
    @h{@header1} = @{$rows1[0]};
    delete $h{データ区分};

    # 2
    {
        my $cols = pop @rows2;
        die unless $cols->[idx2 '合計文言'] eq '最終残高';
        $h{最終残高} = trim $cols->[idx2 '差引残高'];
    }
    {
        my $cols = pop @rows2;
        die unless $cols->[idx2 '合計文言'] eq '合計金額';
        $h{'合計金額(引出)'} = trim $cols->[idx2 '合計金額(引出)'];
        $h{'合計金額(預入)'} = trim $cols->[idx2 '合計金額(預入)'];
    }
    {
        my $cols = pop @rows2;
        die unless $cols->[idx2 '合計文言'] eq '合計件数';
        $h{'合計件数(引出)'} = trim $cols->[idx2 '合計件数(引出)'];
        $h{'合計件数(預入)'} = trim $cols->[idx2 '合計件数(預入)'];
    }
    for (@rows2) {
        my @idx = idx2 '取引日' .. idx2 '摘要';
        my %kv;
        @kv{ @header2[@idx] } = map trim, @$_[@idx];
        push @{$h{取引}}, \%kv;
    }

    \%h;
}

my $ref = parse_mizuho_csv "mizuho_web_report/XXXXXXXXXXXXX201912XX.csv";
say Dump $ref;

__END__

% ./parse_mizuho_report_csv.pl
--- 
作成年月日: 2019年12月XX日
取引: 
  - 
    お引き出し額: ''
    お預け入れ額: ''
    取引区分: ''
    取引情報(1): ''
    取引情報(2): 繰越
    取引情報(3): ''
    取引情報(4): ''
    取引情報(5): ''
    取引日: 2019-12-XX
    差引残高: XXX
    摘要: ''
  - 
    お引き出し額: ''
    お預け入れ額: XXX
    取引区分: ''
    取引情報(1): ''
    取引情報(2): 振込 カ)XXXXXXXXX
    取引情報(3): ''
    取引情報(4): ''
    取引情報(5): ''
    取引日: 2019-12-XX
    差引残高: XXX
    摘要: ''
口座番号: XXXXXXX
合計件数(引出): 0
合計件数(預入): 1
合計金額(引出): 0
合計金額(預入): XXX
店番号: 'XXXX'
最終残高: XXX
期間(終了): 普通預金
期間(開始): 2019年12月XX日
科目: ~
西暦: 2019年12月XX日

CC 2019Q4 振り返り

2019年 第4四半期 振り返り。
前回

CC1 プッシュアップ

前回同様に こちら を目標に励みます。

step10の足は肩幅程度に開いておきます。対角線の手足で支える形になり、手と同じ側の足が浮いてきますが自然に浮かせています。

step9は三頭狙いとして平行してやります。ボールでなく軍手で、手の方向は縦です。
多分こっちを強くすることが、目標に僅かでも近づく気がしています。

もの足りないときは、ホリゾンタルバーディップスと、三頭狙いの前傾しない直立ぎみのディップスをやります。

スターティングストレングス によると
「ディップは一人で荷重して段階的に負荷を上げることができるので腕立て伏せより優れています」とあります。

CC1 スクワット

step10のバリエーションとして
A. ワンレッグスクワット (載っているやつ)
B. 手を頭にもってくやつ
C. 手を後ろで組むやつ
を試しています。

Aは20レップ、Bは17レップ、Cは10レップぐらいが限界です。

BやCのほうが、太股付け根や臀筋の負荷が強いと思います。
また、むしろAより膝に頼れないのではないかと思っています。
A は膝の負荷を減らすように後ろ荷重目に行うこともできますが
BやCは自然とそうならざるをえず、かえって膝に優しい気がしています。

スクワットは息が上がるので、ハードだと感じています。

他のメニューとしては、ジャンピングランジ20秒休み10秒3セットです。
ジャンプは目一杯行います。
時間効率の良いメニューだと感じています。

CC1 プルアップ

ワンアームプルアップは思ったより遠そうだと分かってきました。

アシステッドでタオルでが限界です。

色々やり方があるようですが、限られたレンジで少しずつ広げる戦略はひとまず置いておいて
できるだけ広い可動域で負荷を上げていこうと思っています。

あまり向上しているように思えませんが、体重が上がっているのも関係しているかもしれません。

また、閉じた逆手でやるプルアップも二頭筋狙いで平行してやっています。

胸をバーに付けにいくようなフォームもあったり、手幅、握り、フォームなどを工夫すると色々な箇所を鍛えられるようです。

プルアップとしては、背中を丸めずに真っ直ぐな姿勢なものを、今のところ続けていこうと思っています。

CC1 レッグレイズ

腰を丸めず後傾にならずとも、Vやバータッチが可能になってきました。

フォームも大分納得できるレベルになってきました。

ストリクトで20レップが目標です。

その後はフォームを維持したままスピードを上げるのも試してみたいです。

立ちコロは腰に入ってしまう気がして、中止しています。
サーキットなどでやるときは、猫背のまま腹で引くようにしています。
目一杯まで腕を伸ばしたり、床すれすれまで低くしたりするのは避けています。

CC1 ブリッジ

step10はまだ早いと、step8を十分にやっていました。

片手でstep8ができるようになってきました。

ゲッコーブリッジも無理なくできるようになってきました。(腕・三頭に効く気がします)

ブリッジのまま歩くのもやってます。(エクソシスト? スパイダーウォーク?)
頭方向は大股で歩けます。足方向は、まだ摺り足です。対角線の手足を動かすのが、まだ意識してやっとです。

足で歩くのと同様に、一瞬片側だけで支えるときが、結構トレーニングになっている気がします。

そろそろstep10に挑み初めてもと思っています。

CC1 ハンドスタンドプッシュアップ

step6 が幅30cmを割ってきました。

ここからが、肘、手首周りがキツそうです。

壁倒立して、片手で数秒支えたり、横に歩いたりするのもしています。前腕にも効く気がします。

また逆立ち歩きもできるようになってきました。

CC2 ハンギングシリーズ

ツインタオルハングが1mできるときがあるようになってきました。

手の油分や、タオルに残っている油分が結構左右します。

CC2 グリップワーク

何もやってません。

CC2 指先プッシュアップ

6をずっとやっています。

先をチャレンジしてもよいかもしれません。

CC2 プレスフラッグ

片側が大分苦手でしたが、左右できるように練習していました。

step8 の75度バージョンをやっていますが、上の肘が結構曲っていて、あまり伸ばせません。

step6 か step7 に戻って、肘をクリアしたほうが良いかもしれないと思いました。

CC2

壁ハンドレスヘッドスタンドも試しはじめました。

とにかく無理のない範囲で。事故率0で。違和感0で。

CC2 カルフレイズ

8を2セットやっていますが、50レップぐらいできるようになってきました。

もう1レップも出来ないというところまでやるのは変わらないのですが
終わった後に、回復が早いというか後に引かないようになってきました。
慣れてきたのかもしれません。

カルフレイズで鍛えることによって、逆に足の不自然な使い方を招いてしまわないか気になっているのですが
今のとこあまり感じません。
むしろ、歩いたりジャンプするときに、僅かに足に羽が生えたような少し軽くなる感じがあります。
へんな例えですが。

CC3 パワージャンプ

step10は最初からできました。

step9 は数日出来ずに苦労しましたが、片足でニータックしにいく、ニータックトップ中に手を動かすと意識したら、出来るようになりました。

step3 をシンプルに練習しています。

CC3 パワープッシュアップ

step10は高さにもよりますが、やるだけであれば step7 のほうが難しい気がします。

step7 を練習していますが、まだ尻までです。

力つきると頭から落ちます。。。

また、ちょっと立つテク? チート? 足位置が少し前進する? があるようですが、それは避けています。
(それが出来ること自体でも凄いのですが)

CC3 キップアップ

step7を完璧にしたいのですが、結構失敗します。

CC3 フロントフリップ

step4まではマットできるので、step5を設備のある場所で試したいと思います。

CC3 バックフリップ

step4 までは左右差あるものの、なんとか出来る気がします。(フォームをチェックしてもらってないのでなんとも)

CC3 マッスルアップ

上半身をせりだすところまで到達できません。

マッスルアップができたら、大分効率良く鍛えられるようになる気がしているのですが。。。

---

怪我をせず楽しんでやれていて漸進しているので、まずまずでしょう。

zpool expand 確かめ

#!/usr/local/bin/perl

use Modern::Perl;
use File::Spec;

my $img1  = File::Spec->rel2abs('img1');
my $img2  = File::Spec->rel2abs('img2');
my $img3  = File::Spec->rel2abs('img3');
my $img4  = File::Spec->rel2abs('img4');
my $pool  = "pool_try1";
my @check = (
    "zpool status $pool",
    "zpool get all $pool | ack '\\bsize|expand'",
);

my @cmd = (
    "truncate -s 1G $img1",
    "truncate -s 1G $img2",
    "truncate -s 2G $img3",
    "truncate -s 2G $img4",
    "zpool create $pool mirror $img1 $img2",
    @check,
    "zpool detach $pool $img2",
    @check,
    "zpool attach $pool $img1 $img3",
    @check,
    "zpool detach $pool $img1",
    qq#perl -E 'sleep 1 while `zpool status $pool` =~ /Wait/'#,
    "zpool detach $pool $img1",
    "zpool attach $pool $img3 $img4",
    @check,
    "zpool online -e $pool $img3",
    @check,
    "zpool destroy $pool",
);
for (0..$#cmd) {
    my $cmd = $cmd[$_];
    say "" unless $_ == 0;
    say "% $cmd";
    system($cmd);
}

__END__

% truncate -s 1G /usr/home/bokutin/code/try/zpool_expand/img1

% truncate -s 1G /usr/home/bokutin/code/try/zpool_expand/img2

% truncate -s 2G /usr/home/bokutin/code/try/zpool_expand/img3

% truncate -s 2G /usr/home/bokutin/code/try/zpool_expand/img4

% zpool create pool_try1 mirror /usr/home/bokutin/code/try/zpool_expand/img1 /usr/home/bokutin/code/try/zpool_expand/img2

% zpool status pool_try1
  pool: pool_try1
 state: ONLINE
  scan: none requested
config:

        NAME                                              STATE     READ WRITE CKSUM
        pool_try1                                         ONLINE       0     0     0
          mirror-0                                        ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img1  ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img2  ONLINE       0     0     0

errors: No known data errors

% zpool get all pool_try1 | ack '\bsize|expand'
pool_try1  size                           960M                           -
pool_try1  autoexpand                     off                            default
pool_try1  expandsize                     -                              -

% zpool detach pool_try1 /usr/home/bokutin/code/try/zpool_expand/img2

% zpool status pool_try1
  pool: pool_try1
 state: ONLINE
  scan: none requested
config:

        NAME                                            STATE     READ WRITE CKSUM
        pool_try1                                       ONLINE       0     0     0
          /usr/home/bokutin/code/try/zpool_expand/img1  ONLINE       0     0     0

errors: No known data errors

% zpool get all pool_try1 | ack '\bsize|expand'
pool_try1  size                           960M                           -
pool_try1  autoexpand                     off                            default
pool_try1  expandsize                     -                              -

% zpool attach pool_try1 /usr/home/bokutin/code/try/zpool_expand/img1 /usr/home/bokutin/code/try/zpool_expand/img3

% zpool status pool_try1
  pool: pool_try1
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Tue Dec 17 09:27:47 2019
        87.5K scanned at 87.5K/s, 87.5K issued at 87.5K/s, 96.5K total
        1.50K resilvered, 90.67% done, no estimated completion time
config:

        NAME                                              STATE     READ WRITE CKSUM
        pool_try1                                         ONLINE       0     0     0
          mirror-0                                        ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img1  ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img3  ONLINE       0     0     0

errors: No known data errors

% zpool get all pool_try1 | ack '\bsize|expand'
pool_try1  size                           960M                           -
pool_try1  autoexpand                     off                            default
pool_try1  expandsize                     -                              -

% zpool detach pool_try1 /usr/home/bokutin/code/try/zpool_expand/img1
cannot detach /usr/home/bokutin/code/try/zpool_expand/img1: no valid replicas

% perl -E 'sleep 1 while `zpool status pool_try1` =~ /Wait/'

% zpool detach pool_try1 /usr/home/bokutin/code/try/zpool_expand/img1

% zpool attach pool_try1 /usr/home/bokutin/code/try/zpool_expand/img3 /usr/home/bokutin/code/try/zpool_expand/img4

% zpool status pool_try1
  pool: pool_try1
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Tue Dec 17 09:27:49 2019
        93.5K scanned at 93.5K/s, 93.5K issued at 93.5K/s, 116K total
        2K resilvered, 80.60% done, no estimated completion time
config:

        NAME                                              STATE     READ WRITE CKSUM
        pool_try1                                         ONLINE       0     0     0
          mirror-0                                        ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img3  ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img4  ONLINE       0     0     0

errors: No known data errors

% zpool get all pool_try1 | ack '\bsize|expand'
pool_try1  size                           960M                           -
pool_try1  autoexpand                     off                            default
pool_try1  expandsize                     -                              -

% zpool online -e pool_try1 /usr/home/bokutin/code/try/zpool_expand/img3

% zpool status pool_try1
  pool: pool_try1
 state: ONLINE
  scan: resilvered 93.5K in 0 days 00:00:00 with 0 errors on Tue Dec 17 09:27:49 2019
config:

        NAME                                              STATE     READ WRITE CKSUM
        pool_try1                                         ONLINE       0     0     0
          mirror-0                                        ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img3  ONLINE       0     0     0
            /usr/home/bokutin/code/try/zpool_expand/img4  ONLINE       0     0     0

errors: No known data errors

% zpool get all pool_try1 | ack '\bsize|expand'
pool_try1  size                           1.94G                          -
pool_try1  autoexpand                     off                            default
pool_try1  expandsize                     -                              -

% zpool destroy pool_try1

UPnP

# pkg install miniupmpc

# /usr/local/bin/upnpc
upnpc : miniupnpc library test client, version 2.1.
 (c) 2005-2018 Thomas Bernard.
Go to http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
for more information.
Usage : /usr/local/bin/upnpc [options] -a ip port external_port protocol [duration]
                Add port redirection
        /usr/local/bin/upnpc [options] -d external_port protocol <remote host>
                Delete port redirection
        /usr/local/bin/upnpc [options] -s
                Get Connection status
        /usr/local/bin/upnpc [options] -l
                List redirections
        /usr/local/bin/upnpc [options] -L
                List redirections (using GetListOfPortMappings (for IGD:2 only)
        /usr/local/bin/upnpc [options] -n ip port external_port protocol [duration]
                Add (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)
        /usr/local/bin/upnpc [options] -N external_port_start external_port_end protocol [manage]
                Delete range of port redirections (for IGD:2 only)
        /usr/local/bin/upnpc [options] -r port1 [external_port1] protocol1 [port2 [external_port2] protocol2] [...]
                Add all redirections to the current host
        /usr/local/bin/upnpc [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time
                Add Pinhole (for IGD:2 only)
        /usr/local/bin/upnpc [options] -U uniqueID new_lease_time
                Update Pinhole (for IGD:2 only)
        /usr/local/bin/upnpc [options] -C uniqueID
                Check if Pinhole is Working (for IGD:2 only)
        /usr/local/bin/upnpc [options] -K uniqueID
                Get Number of packets going through the rule (for IGD:2 only)
        /usr/local/bin/upnpc [options] -D uniqueID
                Delete Pinhole (for IGD:2 only)
        /usr/local/bin/upnpc [options] -S
                Get Firewall status (for IGD:2 only)
        /usr/local/bin/upnpc [options] -G remote_ip remote_port internal_ip internal_port protocol
                Get Outbound Pinhole Timeout (for IGD:2 only)
        /usr/local/bin/upnpc [options] -P
                Get Presentation url

protocol is UDP or TCP
Options:
  -e description : set description for port mapping.
  -6 : use ip v6 instead of ip v4.
  -u url : bypass discovery process by providing the XML root description url.
  -m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.
  -z localport : SSDP packets local (source) port (1024-65535).
  -p path : use this path for MiniSSDPd socket.
  -t ttl : set multicast TTL. Default value is 2.

# upnpc -a 192.168.0.10 8011 8010 tcp 30
upnpc : miniupnpc library test client, version 2.1.
 (c) 2005-2018 Thomas Bernard.
Go to http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
for more information.
List of UPNP devices found on the network :
 desc: http://192.168.0.1:xxxxx/rootDesc.xml
 st: urn:schemas-upnp-org:device:InternetGatewayDevice:1

Found valid IGD : http://192.168.0.1:xxxxx/ctl/IPConn
Local LAN ip address : 192.168.0.10
ExternalIPAddress = xxx.xxx.xxx.xxx
InternalIP:Port = 192.168.0.10:8011
external xxx.xxx.xxx.xxx:8010 TCP is redirected to internal 192.168.0.10:8011 (duration=30)

# cat /var/log/upnp.leases
TCP:8010:192.168.0.10:8011:1583320251:libminiupnpc
( lease_file は起動時に空だと削除される。1件目のマッピングが追加されたときに作成される。終了時にはそのまま残る。)

NAT-PMP

net/libnatpmp に /usr/local/bin/natpmpc が含まれていて、これを使えば簡単なチェックが出来るようだ。

# natpmpc -h
Usage :
  natpmpc [options]
        display the public IP address.
  natpmpc -h
        display this help screen.
  natpmpc [options] -a <public port> <private port> <protocol> [lifetime]
        add a port mapping.

Option available :
  -g ipv4address
        force the gateway to be used as destination for NAT-PMP commands.

  In order to remove a mapping, set it with a lifetime of 0 seconds.
  To remove all mappings for your machine, use 0 as private port and lifetime.

# natpmpc -a 8000 8001 tcp 30
initnatpmp() returned 0 (SUCCESS)
using gateway : 192.168.0.1
sendpublicaddressrequest returned 2 (SUCCESS)
readnatpmpresponseorretry returned -7 (FAILED)
readnatpmpresponseorretry() failed : the gateway does not support nat-pmp
  errno=61 'Connection refused'
( enable_natpmp=yes になってない )

# natpmpc -a 8000 8001 tcp 30
initnatpmp() returned 0 (SUCCESS)
using gateway : 192.168.0.1
sendpublicaddressrequest returned 2 (SUCCESS)
readnatpmpresponseorretry returned 0 (OK)
Public IP address : xxx.xxx.xxx.xxx
epoch = 2712262545
sendnewportmappingrequest returned 12 (SUCCESS)
readnatpmpresponseorretry returned -51 (FAILED)
readnatpmpresponseorretry() failed : not authorized
( allow 1024-65535 192.168.0.0/24 1024-65535 などで許可していない )

# natpmpc -a 8000 8001 tcp 30
initnatpmp() returned 0 (SUCCESS)
using gateway : 192.168.0.1
sendpublicaddressrequest returned 2 (SUCCESS)
readnatpmpresponseorretry returned 0 (OK)
Public IP address : xxx.xxx.xxx.xxx
epoch = 2712262658
sendnewportmappingrequest returned 12 (SUCCESS)
readnatpmpresponseorretry returned -52 (FAILED)
readnatpmpresponseorretry() failed : network failure
( /etc/pf.conf に rdr-anchor anchor が設定されていない。PF_FILTER_RULES=on の挙動の場合になります )

# natpmpc -a 8000 8001 tcp 30
initnatpmp() returned 0 (SUCCESS)
using gateway : 192.168.0.1
sendpublicaddressrequest returned 2 (SUCCESS)
readnatpmpresponseorretry returned 0 (OK)
Public IP address : xxx.xxx.xxx.xxx
epoch = 2712262909
sendnewportmappingrequest returned 12 (SUCCESS)
readnatpmpresponseorretry returned 0 (OK)
Mapped public port 8000 protocol TCP to local port 8001 liftime 30
epoch = 2712262909
closenatpmp() returned 0 (SUCCESS)

# cat /var/log/upnp.leases
TCP:8000:192.168.0.10:8001:1583317213:NAT-PMP 8000 tcp

FreeBSD で xgboost をコンパイル

FreeBSD 12.0 以下は base の llvm に OpenMP が有効になってないらしく途中でエラーがでる。
devel/llvm80 を OpenMP enabled で入れて
https://xgboost.readthedocs.io/en/latest/build.html#building-on-ubuntu-debian の cmake .. を
cmake -DCMAKE_CXX_COMPILER=clang++80 ..
とすればよいようだ。

python binding はそのまま
cd xgboost/python-package
python setup.py install

perl adv
perl adv