Akamai vs Cloudflare vs Fastly : (Private Relayの) 出口プロキシ が NXDOMAIN かどうか

言いたいこと

Apple iCloud+のPrivate Relayは擬似VPNとでも言えるような2段プロキシを採用していますが, 日本の東京エリアではAkamaiとCloudflareとFastlyの3社が分担でが出口プロキシを担当しているようで, これは事前に出さたIPリストからwhoisすることで確認できます.
(本来は地域別のIPアドレス割り当ての対応表リストという役割がありますが,現状ではここ以外から通信することは不可能と思われる以上,これが実質的に出口プロキシのリストそのものになっています.)

同様にそのIPアドレスnslookupを仕掛ければ,Akamaiサーバだけは

a[ppp-qqq-rrr-sss].deploy.static.akamaitechnologies.com
/* [ppp-qqq-rrr-sss] は出口プロキシが利用可能なipv4アドレス */

と解決ますが,CloudflareサーバとFastlyサーバではnxdomainを返されます.

1つの同じサービスにどのような理屈・過程で複数の仕様ができてしまったのか,その理由を知りたいと考えています.
特に一部のサービスではAkamaiサーバにのみ規制がかかっている (5ch.netのburned bbq:proxy(60)など) ため, この (恐らくセキュリティ関係の) 設定の差が不便を生んだのではないかと疑っています.

加えて,Appleは出口プロキシのあり方についてどう考えているのか,DNSレコードに乗らないことをよしとしているのか, または近い将来に仕様が統一されるかユーザーが選択できるか,といったことについても知れたら良いなと思っています.

おまけ

東京の出口プロキシのIPのリスト(CSV)を作ったよ!

一覧

172.224.240.128/27,Akamai
172.225.46.64/26,Akamai
172.225.46.208/28,Akamai
172.225.48.0/26,Akamai
172.225.48.128/28,Akamai
172.225.52.176/28,Akamai
172.225.54.128/26,Akamai
172.225.74.128/26,Akamai
172.225.75.0/24,Akamai
172.225.76.0/24,Akamai
172.225.122.0/25,Akamai
172.225.122.192/27,Akamai
172.225.123.0/25,Akamai
172.225.123.128/27,Akamai
172.225.124.192/27,Akamai
172.225.127.0/25,Akamai
172.226.24.0/25,Akamai
172.226.24.128/27,Akamai
172.226.42.0/25,Akamai
172.226.54.0/26,Akamai
172.226.54.64/28,Akamai
172.226.56.0/26,Akamai
172.226.56.64/28,Akamai
172.226.58.0/26,Akamai
172.226.58.64/28,Akamai
2a02:26f7:b980::/42,Akamai
104.28.0.45/32,Cloudflare
104.28.0.46/32,Cloudflare
104.28.4.73/32,Cloudflare
104.28.4.74/32,Cloudflare
104.28.44.37/32,Cloudflare
104.28.44.38/32,Cloudflare
104.28.44.39/32,Cloudflare
104.28.44.40/32,Cloudflare
104.28.44.41/32,Cloudflare
104.28.44.42/32,Cloudflare
104.28.44.43/32,Cloudflare
104.28.44.44/32,Cloudflare
104.28.44.45/32,Cloudflare
104.28.44.46/32,Cloudflare
104.28.44.47/32,Cloudflare
104.28.44.48/32,Cloudflare
104.28.44.49/32,Cloudflare
104.28.44.50/32,Cloudflare
104.28.44.51/32,Cloudflare
104.28.44.52/32,Cloudflare
104.28.44.53/32,Cloudflare
104.28.44.54/32,Cloudflare
104.28.44.55/32,Cloudflare
104.28.44.56/32,Cloudflare
104.28.44.57/32,Cloudflare
104.28.44.58/32,Cloudflare
104.28.44.59/32,Cloudflare
104.28.44.60/32,Cloudflare
104.28.44.61/32,Cloudflare
104.28.44.62/32,Cloudflare
104.28.44.63/32,Cloudflare
104.28.44.64/32,Cloudflare
104.28.44.65/32,Cloudflare
104.28.44.66/32,Cloudflare
104.28.44.67/32,Cloudflare
104.28.44.68/32,Cloudflare
104.28.44.69/32,Cloudflare
104.28.44.70/32,Cloudflare
104.28.44.71/32,Cloudflare
104.28.44.72/32,Cloudflare
104.28.44.73/32,Cloudflare
104.28.44.74/32,Cloudflare
104.28.67.170/32,Cloudflare
104.28.67.171/32,Cloudflare
104.28.67.172/32,Cloudflare
104.28.67.173/32,Cloudflare
104.28.67.174/32,Cloudflare
104.28.67.175/32,Cloudflare
104.28.67.176/32,Cloudflare
104.28.67.177/32,Cloudflare
104.28.67.178/32,Cloudflare
104.28.67.179/32,Cloudflare
104.28.67.180/32,Cloudflare
104.28.67.181/32,Cloudflare
104.28.67.182/32,Cloudflare
104.28.67.183/32,Cloudflare
104.28.67.184/32,Cloudflare
104.28.67.185/32,Cloudflare
104.28.67.186/32,Cloudflare
104.28.67.187/32,Cloudflare
104.28.67.188/32,Cloudflare
104.28.67.189/32,Cloudflare
104.28.67.190/32,Cloudflare
104.28.67.191/32,Cloudflare
104.28.67.192/32,Cloudflare
104.28.67.193/32,Cloudflare
104.28.67.194/32,Cloudflare
104.28.67.195/32,Cloudflare
104.28.67.196/32,Cloudflare
104.28.67.197/32,Cloudflare
104.28.67.198/32,Cloudflare
104.28.67.199/32,Cloudflare
104.28.67.200/32,Cloudflare
104.28.67.201/32,Cloudflare
104.28.67.202/32,Cloudflare
104.28.67.203/32,Cloudflare
104.28.67.204/32,Cloudflare
104.28.67.205/32,Cloudflare
104.28.67.206/32,Cloudflare
104.28.67.207/32,Cloudflare
104.28.70.170/32,Cloudflare
104.28.70.171/32,Cloudflare
104.28.70.172/32,Cloudflare
104.28.70.173/32,Cloudflare
104.28.70.174/32,Cloudflare
104.28.70.175/32,Cloudflare
104.28.70.176/32,Cloudflare
104.28.70.177/32,Cloudflare
104.28.70.178/32,Cloudflare
104.28.70.179/32,Cloudflare
104.28.70.180/32,Cloudflare
104.28.70.181/32,Cloudflare
104.28.70.182/32,Cloudflare
104.28.70.183/32,Cloudflare
104.28.70.184/32,Cloudflare
104.28.70.185/32,Cloudflare
104.28.70.186/32,Cloudflare
104.28.70.187/32,Cloudflare
104.28.70.188/32,Cloudflare
104.28.70.189/32,Cloudflare
104.28.70.190/32,Cloudflare
104.28.70.191/32,Cloudflare
104.28.70.192/32,Cloudflare
104.28.70.193/32,Cloudflare
104.28.70.194/32,Cloudflare
104.28.70.195/32,Cloudflare
104.28.70.196/32,Cloudflare
104.28.70.197/32,Cloudflare
104.28.70.198/32,Cloudflare
104.28.70.199/32,Cloudflare
104.28.70.200/32,Cloudflare
104.28.70.201/32,Cloudflare
104.28.70.202/32,Cloudflare
104.28.70.203/32,Cloudflare
104.28.70.204/32,Cloudflare
104.28.70.205/32,Cloudflare
104.28.70.206/32,Cloudflare
104.28.70.207/32,Cloudflare
104.28.83.195/32,Cloudflare
104.28.83.196/32,Cloudflare
104.28.83.197/32,Cloudflare
104.28.83.198/32,Cloudflare
104.28.83.199/32,Cloudflare
104.28.83.200/32,Cloudflare
104.28.83.201/32,Cloudflare
104.28.83.202/32,Cloudflare
104.28.83.203/32,Cloudflare
104.28.83.204/32,Cloudflare
104.28.83.205/32,Cloudflare
104.28.83.206/32,Cloudflare
104.28.83.207/32,Cloudflare
104.28.83.208/32,Cloudflare
104.28.83.209/32,Cloudflare
104.28.83.210/32,Cloudflare
104.28.83.211/32,Cloudflare
104.28.83.212/32,Cloudflare
104.28.83.213/32,Cloudflare
104.28.83.214/32,Cloudflare
104.28.83.215/32,Cloudflare
104.28.83.216/32,Cloudflare
104.28.83.217/32,Cloudflare
104.28.83.218/32,Cloudflare
104.28.83.219/32,Cloudflare
104.28.83.220/32,Cloudflare
104.28.83.221/32,Cloudflare
104.28.83.222/32,Cloudflare
104.28.83.223/32,Cloudflare
104.28.83.224/32,Cloudflare
104.28.83.225/32,Cloudflare
104.28.83.226/32,Cloudflare
104.28.83.227/32,Cloudflare
104.28.83.228/32,Cloudflare
104.28.83.229/32,Cloudflare
104.28.83.230/32,Cloudflare
104.28.83.231/32,Cloudflare
104.28.83.232/32,Cloudflare
104.28.99.191/32,Cloudflare
104.28.99.192/32,Cloudflare
104.28.99.193/32,Cloudflare
104.28.99.194/32,Cloudflare
104.28.99.195/32,Cloudflare
104.28.99.196/32,Cloudflare
104.28.99.197/32,Cloudflare
104.28.99.198/32,Cloudflare
104.28.99.199/32,Cloudflare
104.28.99.200/32,Cloudflare
104.28.99.201/32,Cloudflare
104.28.99.202/32,Cloudflare
104.28.99.203/32,Cloudflare
104.28.99.204/32,Cloudflare
104.28.99.205/32,Cloudflare
104.28.99.206/32,Cloudflare
104.28.99.207/32,Cloudflare
104.28.99.208/32,Cloudflare
104.28.99.209/32,Cloudflare
104.28.99.210/32,Cloudflare
104.28.99.211/32,Cloudflare
104.28.99.212/32,Cloudflare
104.28.99.213/32,Cloudflare
104.28.99.214/32,Cloudflare
104.28.99.215/32,Cloudflare
104.28.99.216/32,Cloudflare
104.28.99.217/32,Cloudflare
104.28.99.218/32,Cloudflare
104.28.99.219/32,Cloudflare
104.28.99.220/32,Cloudflare
104.28.99.221/32,Cloudflare
104.28.99.222/32,Cloudflare
104.28.99.223/32,Cloudflare
104.28.99.224/32,Cloudflare
104.28.99.225/32,Cloudflare
104.28.99.226/32,Cloudflare
104.28.99.227/32,Cloudflare
104.28.99.228/32,Cloudflare
104.28.101.191/32,Cloudflare
104.28.101.192/32,Cloudflare
104.28.101.193/32,Cloudflare
104.28.101.194/32,Cloudflare
104.28.101.195/32,Cloudflare
104.28.101.196/32,Cloudflare
104.28.101.197/32,Cloudflare
104.28.101.198/32,Cloudflare
104.28.101.199/32,Cloudflare
104.28.101.200/32,Cloudflare
104.28.101.201/32,Cloudflare
104.28.101.202/32,Cloudflare
104.28.101.203/32,Cloudflare
104.28.101.204/32,Cloudflare
104.28.101.205/32,Cloudflare
104.28.101.206/32,Cloudflare
104.28.101.207/32,Cloudflare
104.28.101.208/32,Cloudflare
104.28.101.209/32,Cloudflare
104.28.101.210/32,Cloudflare
104.28.101.211/32,Cloudflare
104.28.101.212/32,Cloudflare
104.28.101.213/32,Cloudflare
104.28.101.214/32,Cloudflare
104.28.101.215/32,Cloudflare
104.28.101.216/32,Cloudflare
104.28.101.217/32,Cloudflare
104.28.101.218/32,Cloudflare
104.28.101.219/32,Cloudflare
104.28.101.220/32,Cloudflare
104.28.101.221/32,Cloudflare
104.28.101.222/32,Cloudflare
104.28.101.223/32,Cloudflare
104.28.101.224/32,Cloudflare
104.28.101.225/32,Cloudflare
104.28.101.226/32,Cloudflare
104.28.101.227/32,Cloudflare
104.28.101.228/32,Cloudflare
104.28.118.164/32,Cloudflare
104.28.118.165/32,Cloudflare
104.28.118.166/32,Cloudflare
104.28.118.167/32,Cloudflare
104.28.118.168/32,Cloudflare
104.28.118.169/32,Cloudflare
104.28.118.170/32,Cloudflare
104.28.118.171/32,Cloudflare
104.28.118.172/32,Cloudflare
104.28.118.173/32,Cloudflare
104.28.118.174/32,Cloudflare
104.28.118.175/32,Cloudflare
104.28.118.176/32,Cloudflare
104.28.118.177/32,Cloudflare
104.28.118.178/32,Cloudflare
104.28.118.179/32,Cloudflare
104.28.118.180/32,Cloudflare
104.28.118.181/32,Cloudflare
104.28.118.182/32,Cloudflare
104.28.118.183/32,Cloudflare
104.28.118.184/32,Cloudflare
104.28.118.185/32,Cloudflare
104.28.118.186/32,Cloudflare
104.28.118.187/32,Cloudflare
104.28.118.188/32,Cloudflare
104.28.118.189/32,Cloudflare
104.28.118.190/32,Cloudflare
104.28.118.191/32,Cloudflare
104.28.118.192/32,Cloudflare
104.28.118.193/32,Cloudflare
104.28.118.194/32,Cloudflare
104.28.118.195/32,Cloudflare
104.28.118.196/32,Cloudflare
104.28.118.197/32,Cloudflare
104.28.118.198/32,Cloudflare
104.28.118.199/32,Cloudflare
104.28.118.200/32,Cloudflare
104.28.118.201/32,Cloudflare
104.28.121.164/32,Cloudflare
104.28.121.165/32,Cloudflare
104.28.121.166/32,Cloudflare
104.28.121.167/32,Cloudflare
104.28.121.168/32,Cloudflare
104.28.121.169/32,Cloudflare
104.28.121.170/32,Cloudflare
104.28.121.171/32,Cloudflare
104.28.121.172/32,Cloudflare
104.28.121.173/32,Cloudflare
104.28.121.174/32,Cloudflare
104.28.121.175/32,Cloudflare
104.28.121.176/32,Cloudflare
104.28.121.177/32,Cloudflare
104.28.121.178/32,Cloudflare
104.28.121.179/32,Cloudflare
104.28.121.180/32,Cloudflare
104.28.121.181/32,Cloudflare
104.28.121.182/32,Cloudflare
104.28.121.183/32,Cloudflare
104.28.121.184/32,Cloudflare
104.28.121.185/32,Cloudflare
104.28.121.186/32,Cloudflare
104.28.121.187/32,Cloudflare
104.28.121.188/32,Cloudflare
104.28.121.189/32,Cloudflare
104.28.121.190/32,Cloudflare
104.28.121.191/32,Cloudflare
104.28.121.192/32,Cloudflare
104.28.121.193/32,Cloudflare
104.28.121.194/32,Cloudflare
104.28.121.195/32,Cloudflare
104.28.121.196/32,Cloudflare
104.28.121.197/32,Cloudflare
104.28.121.198/32,Cloudflare
104.28.121.199/32,Cloudflare
104.28.121.200/32,Cloudflare
104.28.121.201/32,Cloudflare
2606:54c0:3b00:10::/64,Cloudflare
2606:54c0:3b00:128::/64,Cloudflare
2606:54c0:3b20:10::/64,Cloudflare
2606:54c0:3b20:128::/64,Cloudflare
2606:54c0:3b40:10::/64,Cloudflare
2606:54c0:3b40:128::/64,Cloudflare
2606:54c0:3b60:10::/64,Cloudflare
104.28.0.45/33,Cloudflare
146.75.189.22/31,Fastly
2a04:4e41:0029:000b::/64,Fastly
146.75.196.14/31,Fastly
2a04:4e41:0030:0007::/64,Fastly
146.75.201.12/31,Fastly
2a04:4e41:0035:0006::/64,Fastly

みんなも試してみよう!

原文

Akamai vs Cloudflare vs Fastly : whether Egress Proxy (on Private Relay) are NXDOMAIN

In my country (Tokyo, Japan), it seems like that

"Akamai Technologies, Inc.", "Cloudflare, Inc.", and "Fastly, Inc.",

are providing almost all the egress proxy for using Private Relay (and these are estimated by whois information).

Also I was able to resolve the domain of Akamai's egress proxy with nslookup, such as:

a[ppp-qqq-rrr-sss].deploy.static.akamaitechnologies.com
/* [ppp-qqq-rrr-sss] means available ipv4 address of egress proxy */

but I couldn't resolve Cloudflare's and Fastly's, with NXDOMAIN error.

I want to know how and why has this difference occurred between Cloudflare, Fastly and Akamai, still it's one and the same service.

Because I found that some web services limit the use for accesses from Akami's Egress Proxy only, thus I'm guessing that this difference (security settings?) is causing the inconvenience.

In addition, I would like to know if Apple is comfortable with the situation of egress proxy not in the DNS records. And I hope that near the future either specification would be standardized or users would be able to choose them.


By the way, I might be often assigned the following IP addresses:

the list

172.224.240.128/27,Akamai
172.225.46.64/26,Akamai
172.225.46.208/28,Akamai
172.225.48.0/26,Akamai
172.225.48.128/28,Akamai
172.225.52.176/28,Akamai
172.225.54.128/26,Akamai
172.225.74.128/26,Akamai
172.225.75.0/24,Akamai
172.225.76.0/24,Akamai
172.225.122.0/25,Akamai
172.225.122.192/27,Akamai
172.225.123.0/25,Akamai
172.225.123.128/27,Akamai
172.225.124.192/27,Akamai
172.225.127.0/25,Akamai
172.226.24.0/25,Akamai
172.226.24.128/27,Akamai
172.226.42.0/25,Akamai
172.226.54.0/26,Akamai
172.226.54.64/28,Akamai
172.226.56.0/26,Akamai
172.226.56.64/28,Akamai
172.226.58.0/26,Akamai
172.226.58.64/28,Akamai
2a02:26f7:b980::/42,Akamai
104.28.0.45/32,Cloudflare
104.28.0.46/32,Cloudflare
104.28.4.73/32,Cloudflare
104.28.4.74/32,Cloudflare
104.28.44.37/32,Cloudflare
104.28.44.38/32,Cloudflare
104.28.44.39/32,Cloudflare
104.28.44.40/32,Cloudflare
104.28.44.41/32,Cloudflare
104.28.44.42/32,Cloudflare
104.28.44.43/32,Cloudflare
104.28.44.44/32,Cloudflare
104.28.44.45/32,Cloudflare
104.28.44.46/32,Cloudflare
104.28.44.47/32,Cloudflare
104.28.44.48/32,Cloudflare
104.28.44.49/32,Cloudflare
104.28.44.50/32,Cloudflare
104.28.44.51/32,Cloudflare
104.28.44.52/32,Cloudflare
104.28.44.53/32,Cloudflare
104.28.44.54/32,Cloudflare
104.28.44.55/32,Cloudflare
104.28.44.56/32,Cloudflare
104.28.44.57/32,Cloudflare
104.28.44.58/32,Cloudflare
104.28.44.59/32,Cloudflare
104.28.44.60/32,Cloudflare
104.28.44.61/32,Cloudflare
104.28.44.62/32,Cloudflare
104.28.44.63/32,Cloudflare
104.28.44.64/32,Cloudflare
104.28.44.65/32,Cloudflare
104.28.44.66/32,Cloudflare
104.28.44.67/32,Cloudflare
104.28.44.68/32,Cloudflare
104.28.44.69/32,Cloudflare
104.28.44.70/32,Cloudflare
104.28.44.71/32,Cloudflare
104.28.44.72/32,Cloudflare
104.28.44.73/32,Cloudflare
104.28.44.74/32,Cloudflare
104.28.67.170/32,Cloudflare
104.28.67.171/32,Cloudflare
104.28.67.172/32,Cloudflare
104.28.67.173/32,Cloudflare
104.28.67.174/32,Cloudflare
104.28.67.175/32,Cloudflare
104.28.67.176/32,Cloudflare
104.28.67.177/32,Cloudflare
104.28.67.178/32,Cloudflare
104.28.67.179/32,Cloudflare
104.28.67.180/32,Cloudflare
104.28.67.181/32,Cloudflare
104.28.67.182/32,Cloudflare
104.28.67.183/32,Cloudflare
104.28.67.184/32,Cloudflare
104.28.67.185/32,Cloudflare
104.28.67.186/32,Cloudflare
104.28.67.187/32,Cloudflare
104.28.67.188/32,Cloudflare
104.28.67.189/32,Cloudflare
104.28.67.190/32,Cloudflare
104.28.67.191/32,Cloudflare
104.28.67.192/32,Cloudflare
104.28.67.193/32,Cloudflare
104.28.67.194/32,Cloudflare
104.28.67.195/32,Cloudflare
104.28.67.196/32,Cloudflare
104.28.67.197/32,Cloudflare
104.28.67.198/32,Cloudflare
104.28.67.199/32,Cloudflare
104.28.67.200/32,Cloudflare
104.28.67.201/32,Cloudflare
104.28.67.202/32,Cloudflare
104.28.67.203/32,Cloudflare
104.28.67.204/32,Cloudflare
104.28.67.205/32,Cloudflare
104.28.67.206/32,Cloudflare
104.28.67.207/32,Cloudflare
104.28.70.170/32,Cloudflare
104.28.70.171/32,Cloudflare
104.28.70.172/32,Cloudflare
104.28.70.173/32,Cloudflare
104.28.70.174/32,Cloudflare
104.28.70.175/32,Cloudflare
104.28.70.176/32,Cloudflare
104.28.70.177/32,Cloudflare
104.28.70.178/32,Cloudflare
104.28.70.179/32,Cloudflare
104.28.70.180/32,Cloudflare
104.28.70.181/32,Cloudflare
104.28.70.182/32,Cloudflare
104.28.70.183/32,Cloudflare
104.28.70.184/32,Cloudflare
104.28.70.185/32,Cloudflare
104.28.70.186/32,Cloudflare
104.28.70.187/32,Cloudflare
104.28.70.188/32,Cloudflare
104.28.70.189/32,Cloudflare
104.28.70.190/32,Cloudflare
104.28.70.191/32,Cloudflare
104.28.70.192/32,Cloudflare
104.28.70.193/32,Cloudflare
104.28.70.194/32,Cloudflare
104.28.70.195/32,Cloudflare
104.28.70.196/32,Cloudflare
104.28.70.197/32,Cloudflare
104.28.70.198/32,Cloudflare
104.28.70.199/32,Cloudflare
104.28.70.200/32,Cloudflare
104.28.70.201/32,Cloudflare
104.28.70.202/32,Cloudflare
104.28.70.203/32,Cloudflare
104.28.70.204/32,Cloudflare
104.28.70.205/32,Cloudflare
104.28.70.206/32,Cloudflare
104.28.70.207/32,Cloudflare
104.28.83.195/32,Cloudflare
104.28.83.196/32,Cloudflare
104.28.83.197/32,Cloudflare
104.28.83.198/32,Cloudflare
104.28.83.199/32,Cloudflare
104.28.83.200/32,Cloudflare
104.28.83.201/32,Cloudflare
104.28.83.202/32,Cloudflare
104.28.83.203/32,Cloudflare
104.28.83.204/32,Cloudflare
104.28.83.205/32,Cloudflare
104.28.83.206/32,Cloudflare
104.28.83.207/32,Cloudflare
104.28.83.208/32,Cloudflare
104.28.83.209/32,Cloudflare
104.28.83.210/32,Cloudflare
104.28.83.211/32,Cloudflare
104.28.83.212/32,Cloudflare
104.28.83.213/32,Cloudflare
104.28.83.214/32,Cloudflare
104.28.83.215/32,Cloudflare
104.28.83.216/32,Cloudflare
104.28.83.217/32,Cloudflare
104.28.83.218/32,Cloudflare
104.28.83.219/32,Cloudflare
104.28.83.220/32,Cloudflare
104.28.83.221/32,Cloudflare
104.28.83.222/32,Cloudflare
104.28.83.223/32,Cloudflare
104.28.83.224/32,Cloudflare
104.28.83.225/32,Cloudflare
104.28.83.226/32,Cloudflare
104.28.83.227/32,Cloudflare
104.28.83.228/32,Cloudflare
104.28.83.229/32,Cloudflare
104.28.83.230/32,Cloudflare
104.28.83.231/32,Cloudflare
104.28.83.232/32,Cloudflare
104.28.99.191/32,Cloudflare
104.28.99.192/32,Cloudflare
104.28.99.193/32,Cloudflare
104.28.99.194/32,Cloudflare
104.28.99.195/32,Cloudflare
104.28.99.196/32,Cloudflare
104.28.99.197/32,Cloudflare
104.28.99.198/32,Cloudflare
104.28.99.199/32,Cloudflare
104.28.99.200/32,Cloudflare
104.28.99.201/32,Cloudflare
104.28.99.202/32,Cloudflare
104.28.99.203/32,Cloudflare
104.28.99.204/32,Cloudflare
104.28.99.205/32,Cloudflare
104.28.99.206/32,Cloudflare
104.28.99.207/32,Cloudflare
104.28.99.208/32,Cloudflare
104.28.99.209/32,Cloudflare
104.28.99.210/32,Cloudflare
104.28.99.211/32,Cloudflare
104.28.99.212/32,Cloudflare
104.28.99.213/32,Cloudflare
104.28.99.214/32,Cloudflare
104.28.99.215/32,Cloudflare
104.28.99.216/32,Cloudflare
104.28.99.217/32,Cloudflare
104.28.99.218/32,Cloudflare
104.28.99.219/32,Cloudflare
104.28.99.220/32,Cloudflare
104.28.99.221/32,Cloudflare
104.28.99.222/32,Cloudflare
104.28.99.223/32,Cloudflare
104.28.99.224/32,Cloudflare
104.28.99.225/32,Cloudflare
104.28.99.226/32,Cloudflare
104.28.99.227/32,Cloudflare
104.28.99.228/32,Cloudflare
104.28.101.191/32,Cloudflare
104.28.101.192/32,Cloudflare
104.28.101.193/32,Cloudflare
104.28.101.194/32,Cloudflare
104.28.101.195/32,Cloudflare
104.28.101.196/32,Cloudflare
104.28.101.197/32,Cloudflare
104.28.101.198/32,Cloudflare
104.28.101.199/32,Cloudflare
104.28.101.200/32,Cloudflare
104.28.101.201/32,Cloudflare
104.28.101.202/32,Cloudflare
104.28.101.203/32,Cloudflare
104.28.101.204/32,Cloudflare
104.28.101.205/32,Cloudflare
104.28.101.206/32,Cloudflare
104.28.101.207/32,Cloudflare
104.28.101.208/32,Cloudflare
104.28.101.209/32,Cloudflare
104.28.101.210/32,Cloudflare
104.28.101.211/32,Cloudflare
104.28.101.212/32,Cloudflare
104.28.101.213/32,Cloudflare
104.28.101.214/32,Cloudflare
104.28.101.215/32,Cloudflare
104.28.101.216/32,Cloudflare
104.28.101.217/32,Cloudflare
104.28.101.218/32,Cloudflare
104.28.101.219/32,Cloudflare
104.28.101.220/32,Cloudflare
104.28.101.221/32,Cloudflare
104.28.101.222/32,Cloudflare
104.28.101.223/32,Cloudflare
104.28.101.224/32,Cloudflare
104.28.101.225/32,Cloudflare
104.28.101.226/32,Cloudflare
104.28.101.227/32,Cloudflare
104.28.101.228/32,Cloudflare
104.28.118.164/32,Cloudflare
104.28.118.165/32,Cloudflare
104.28.118.166/32,Cloudflare
104.28.118.167/32,Cloudflare
104.28.118.168/32,Cloudflare
104.28.118.169/32,Cloudflare
104.28.118.170/32,Cloudflare
104.28.118.171/32,Cloudflare
104.28.118.172/32,Cloudflare
104.28.118.173/32,Cloudflare
104.28.118.174/32,Cloudflare
104.28.118.175/32,Cloudflare
104.28.118.176/32,Cloudflare
104.28.118.177/32,Cloudflare
104.28.118.178/32,Cloudflare
104.28.118.179/32,Cloudflare
104.28.118.180/32,Cloudflare
104.28.118.181/32,Cloudflare
104.28.118.182/32,Cloudflare
104.28.118.183/32,Cloudflare
104.28.118.184/32,Cloudflare
104.28.118.185/32,Cloudflare
104.28.118.186/32,Cloudflare
104.28.118.187/32,Cloudflare
104.28.118.188/32,Cloudflare
104.28.118.189/32,Cloudflare
104.28.118.190/32,Cloudflare
104.28.118.191/32,Cloudflare
104.28.118.192/32,Cloudflare
104.28.118.193/32,Cloudflare
104.28.118.194/32,Cloudflare
104.28.118.195/32,Cloudflare
104.28.118.196/32,Cloudflare
104.28.118.197/32,Cloudflare
104.28.118.198/32,Cloudflare
104.28.118.199/32,Cloudflare
104.28.118.200/32,Cloudflare
104.28.118.201/32,Cloudflare
104.28.121.164/32,Cloudflare
104.28.121.165/32,Cloudflare
104.28.121.166/32,Cloudflare
104.28.121.167/32,Cloudflare
104.28.121.168/32,Cloudflare
104.28.121.169/32,Cloudflare
104.28.121.170/32,Cloudflare
104.28.121.171/32,Cloudflare
104.28.121.172/32,Cloudflare
104.28.121.173/32,Cloudflare
104.28.121.174/32,Cloudflare
104.28.121.175/32,Cloudflare
104.28.121.176/32,Cloudflare
104.28.121.177/32,Cloudflare
104.28.121.178/32,Cloudflare
104.28.121.179/32,Cloudflare
104.28.121.180/32,Cloudflare
104.28.121.181/32,Cloudflare
104.28.121.182/32,Cloudflare
104.28.121.183/32,Cloudflare
104.28.121.184/32,Cloudflare
104.28.121.185/32,Cloudflare
104.28.121.186/32,Cloudflare
104.28.121.187/32,Cloudflare
104.28.121.188/32,Cloudflare
104.28.121.189/32,Cloudflare
104.28.121.190/32,Cloudflare
104.28.121.191/32,Cloudflare
104.28.121.192/32,Cloudflare
104.28.121.193/32,Cloudflare
104.28.121.194/32,Cloudflare
104.28.121.195/32,Cloudflare
104.28.121.196/32,Cloudflare
104.28.121.197/32,Cloudflare
104.28.121.198/32,Cloudflare
104.28.121.199/32,Cloudflare
104.28.121.200/32,Cloudflare
104.28.121.201/32,Cloudflare
2606:54c0:3b00:10::/64,Cloudflare
2606:54c0:3b00:128::/64,Cloudflare
2606:54c0:3b20:10::/64,Cloudflare
2606:54c0:3b20:128::/64,Cloudflare
2606:54c0:3b40:10::/64,Cloudflare
2606:54c0:3b40:128::/64,Cloudflare
2606:54c0:3b60:10::/64,Cloudflare
104.28.0.45/33,Cloudflare
146.75.189.22/31,Fastly
2a04:4e41:0029:000b::/64,Fastly
146.75.196.14/31,Fastly
2a04:4e41:0030:0007::/64,Fastly
146.75.201.12/31,Fastly
2a04:4e41:0035:0006::/64,Fastly

so now you can check it.

Firefox Focus + Private Relay + kiriwake jpneの挙動

さて!答えを予想してみましょう!

実験1

iOS 15もしくはiPadOS15において,以下の2つのブラウザ

で以下の3つのサイト

を覗いた時,対応するプロバイダ(もしくはそれが十分に類推できるiPアドレス)が以下のように表示された.

Safari Firefox Forcus
kiriwake jpne cman cgi test-ipv6 kiriwake jpne cman cgi test-ipv6
Private Relay enable v6+ egress node egress node egress node egress node jpne vne jpne vne
4G LTE egress node egress node egress node egress node docomo sp docomo sp
Private Relay disable v6+ jpne vne
4G LTE docomo sp

ここでdocomo sp(spmode-ne.jp)の場合は必ずipv4接続のみが表示された.
egress nodeはiCloud+のPrivate Relay出口ノード(プロキシ?サーバ?)であり,Fastly・Cloudflare・Akamaiのいずれかがランダムに出現する.

考察1-1

AppleによるPrivate Relayの説明によれば,

https://support.apple.com/ja-jp/HT212614

iCloud+ のサブスクリプションで使える iCloud プライベートリレーは、Safari で Web を閲覧する際にプライバシーを守ってくれます。詳しくご説明します。

https://developer.apple.com/jp/support/prepare-your-network-for-icloud-private-relay/

Private Relayは、SafariでのWebブラウジングDNS解決クエリを保護し、Appの安全でないhttpトラフィックからユーザーを守ります。

https://www.apple.com/jp/newsroom/2021/06/apple-advances-its-privacy-leadership-with-ios-15-ipados-15-macos-monterey-and-watchos-8/

Safariでのブラウズ時、Private Relayはユーザーのデバイスから発信されるすべてのトラフィックを確実に暗号化し、Appleやユーザーのネットワークプロバイダを含む何者もユーザーと訪問先のウェブサイトの間でのトラフィックにアクセスしたり読み取ったりできないようにします。

とあることから,Safari(又はSFSafariViewController系)ではないはずのFirefox Focusで接続した時にPrivate RelayのEgress Nodeの情報が表示されたkiriwake jpneの挙動は『この説明には』則していないと言える.

現にこうやって表示された以上,何らかの干渉が発生していると見るべきでは?

考察1-2

kiriwake jpneについて解説するページがjpneからお出しされていたが,

https://www.jpne.co.jp/ebooks/v6plus-ebook.pdf

なお、以下の状況では、JPNE切り分けサイトによるチェックが失敗する可能性があるので注意が必要です。

Google Chromeのライトモード(GoogleのProxy経由)がON Cloudflare WARPなどのVPNが設定されていた

上記状況では、JPNE切り分けサイトとの接続がプロキシ経由になります。このとき、HTTPなどによってJPNE切り分けサイトと直接接続するのはプロキシです。 そのため、JPNE切り分けサイトのチェックで、v6プラスを利用していないと判定されてしまいます。

確かにSafariなら説明の通りの挙動をするものの,Private Relayの対象外であるはずのFirefox Focusでこの挙動をする説明には至っていない.
ページのソースを見ても,jpne.co.jpがこちらのipv6アドレスを把握してページをレンダリングしてから.cgiファイルを送ってきているように見える.

推察1-1

もしかして…ipv6接続が優先されるサイトの場合,ブラウザがSafariかどうかに関わらず,強制的にPrivate Relayを経由するようになる…とか?

追加実験1

nslookup kiriwake.jpne.co.jpで得られた18.179.181.47でアクセスしてみた,これを叩くと強制的にipv4接続になり,トップにipv4アドレスが表示される
…ダメです,出口串のIPアドレスが出ました,結果もさっきと変わらなかったです

追加実験2

iPadOSで同じことをやったらiOSと同じ結果になった,これは一体…

推察1-2

なぜかkiriwake.jpne.co.jpとPrivate RelayとFirefox Focusだけ相性が悪いとしか言いようがない

実験2

他のサイトでもやってみたり,パケット覗き見したりする必要があると思いましたので,お時間を下さい
先駆者の方がいらっしゃいました,これはありがたい…

解決

Appの安全でないhttpトラフィックからユーザーを守ります。

この「App」は「Safariだけ」ではなく「App全体」を指す
すなわち

  • 端末から出るTCP80宛の通信
  • WKWebViewから出るHTTPプロトコルの通信
  • SafariおよびSFSafariViewControllerから出る通信

が対象となり,上記の3サイトの中でkiriwake jpneのURLだけが非httpsであったため,Firefox Focusと言えどPrivate Relayに通信を流さざるを得なかったという流れになる.
もちろん当該サイトはhttpsでも実装されているので,つまり「なぜかhttpでurlを生成して実験した私が悪い」という表現が正確だと言えるだろう.う〜んこの

この辺はOS側で通信をチェックしているようで,非httpsやTCP80宛の通信Chromeでも何でもPrivate Relayへと流される.
実際にやってみたら本当にそうなった,端末から見えちゃうくらいなら隠せというAppleの思想なんだろうか…?

感想

macOS Montereyが正式リリースされ次第でそっちでも確認したいですけど,誰かにこれと同じことを試してみて欲しいと思っています…

実際の検証を元に教えて頂いた方,本当にありがとうございます🙏↓
https://twitter.com/falms

Apple (iCloud+) Private Relay (iOS15~)ついに来たな…

まずは公式サイトを読もう

www.apple.com developer.apple.com support.apple.com

利用環境

iOS 15, iPad OS 15,macOS MontereyにおけるSafari Appおよびアプリ内のSafariブラウザ
(それに加えてSFSafariViewControllerで動いてる画面)

developer.apple.com

他社製のブラウザやWKWebViewで動いている画面,およびその他の通信方法を提供するブラウザは対象外
マシン全体の通信の置き換えはできない,適用範囲はあくまでSafari系の周りにのみ限られる
および,端末から出るTCP80宛の通信WKWebViewから出るHTTPプロトコルの通信全て
(以下に経緯が載っています)

soluna-eureka.hatenablog.com

WKWebViewとSFSafariViewControllerの見分け方

右上か左上に「ぁあ」があればSFSafariViewController,「⬆️」しかなければWKWebView
後者もしくは独自ブラウザで行うTCP443宛のHTTPS通信なら,Private Relayにはまず流されないと考えても良さそう

出口サーバの管轄会社はどこ?

cloudflare, akamai, fastlyの3社…らしい(他にあったら教えて欲しい),ここら辺はAppleが一括で契約してくれてるはず

www.cman.jp

ここから見て自分のIPアドレスの登録情報が上の3社のどれかなら成功

www.speedtest.net

もしくはここで「iCloud Private Relay」と出れば成功

契約方法

既にiCloud+の一部になっているので,iCloudに課金契約をつけてiCloud+にしてやる必要がある, つまりは無料Apple会員では利用不可,当たり前だよなぁ?

support.apple.com

最安なら50GBを130円で購入できるので,ライトユーザーはコレくらいでいいっすね

利用方法

  1. 契約します
  2. 本体を買ってApple IDでログインします
  3. 「設定」→「Apple ID」→「iCloud」→「プライベートリレー(ベータ版)」
  4. オンにする
  5. IPアドレス位置情報設定」をいじる(「国と時間帯を使用」で良いんじゃないかな)

不都合が起きれば別のブラウザを使えば良いしオフにしても良い,割と簡単に素早くスイッチが入るっぽいのでご安心を

仕組み

Private RelayはiCloudに組み込まれている新しいインターネットプライバシーサービスで、ユーザーはより安全でプライバシーが保護された方法でウェブに接続してブラウズできるようになります。Safariでのブラウズ時、Private Relayはユーザーのデバイスから発信されるすべてのトラフィックを確実に暗号化し、Appleやユーザーのネットワークプロバイダを含む何者もユーザーと訪問先のウェブサイトの間でのトラフィックにアクセスしたり読み取ったりできないようにします。その後、ユーザーのリクエストはすべて2つの別々のインターネットリレーを通じて送信されます。1つ目はユーザーの実際の位置情報ではなく地域に割り当てられた匿名のIPアドレスをユーザーに割り当てます。2つ目はユーザーが訪問しようとしているウェブアドレスを復号し、目的の場所にユーザーを転送します。この情報の分割によって、ユーザーと訪問先のサイトの両方が、Appleを含むどのような組織にも特定できなくなるため、ユーザーのプライバシーが保護されます。
https://www.apple.com/jp/newsroom/2021/06/apple-advances-its-privacy-leadership-with-ios-15-ipados-15-macos-monterey-and-watchos-8/

iCloud Private Relayサービスは、革新的なマルチホップアーキテクチャを採用しています。異なる事業者が運用する2つの独立したインターネットリレーを介してリクエストが送信されるため、Appleを含むいかなる者も、ユーザーのブラウジングアクティビティの詳細を閲覧したり収集したりすることができません。Private Relayでは、接続しているクライアントがiPhoneiPadMacであることが検証されるため、接続元のデバイスAppleバイスであることが保証されます。また、デフォルトでは、エグレスIPアドレスにより、クライアントのおおよその位置情報が都市レベルで正確に表されるので、IPアドレスに基づいて地域ベースの制限を課す際に、関連する位置情報をネットワークが受け取ることもできます。その場合でもクライアントの固有IPアドレスは引き続きマスク処理され、匿名化されたアドレスのみがWebサイトと共有されます。これらのアドレスは、Private Relayユーザーのグループ間でも共有されます。
https://developer.apple.com/jp/support/prepare-your-network-for-icloud-private-relay/

通常は、Web を閲覧すると、Web トラフィックに含まれている情報 (DNS レコードや IP アドレスなど) をネットワークのプロバイダや、閲覧した Web サイトに知られてしまいます。この情報を基に、閲覧者の本人確認が実施されたり、時間経過に伴う位置情報や閲覧履歴を蓄積してプロフィールが作成されたりする場合があります。iCloud プライベートリレーは、Safari で Web を閲覧する際に、あなたが誰で、どのサイトを訪れているのか、Apple も含め誰一人としてわからないよう徹底し、プライバシーを守るしくみになっています。
プライベートリレーが有効になっている場合、あなたのリクエストは 2 つの個別の安全なインターネットリレーに分けて送られます。IP アドレスを見ることができるのは、ネットワークのプロバイダと 1 つ目のリレー、これは Apple が運用しています。DNS レコードは暗号化されるので、あなたが閲覧しようとしている Web サイトのアドレスを両者とも知ることはできません。2 つ目のリレーは他社のコンテンツプロバイダが運用していて、これが一時的な IP アドレスを生成し、あなたがリクエストした Web サイトの名前を復号化した上で、そのサイトにあなたをつないでくれます。これらすべてが最新のインターネット標準を用いて行われるので、プライバシーを守りながら、申し分のないパフォーマンスで快適に閲覧を続けられます。
https://support.apple.com/ja-jp/HT212614

1段階目のAppleのサーバはユーザの通信を受け入れ転送する,2段階目のcloudflare, akamai, fastlyのサーバは通信を暗号化し接続する,つまりAppleは通信された内容を把握しないし,依頼された企業は誰が通信したかを把握しないということになる…?
確かにコレなら「通信したユーザと通信した内容を1つの組織が両方を同時に把握する」ことは起こり得ないと言える…

というよりもSafariそのものがTor browserのような機能を持つことになる,どんな回線でもプロバイダの先で最初にicloudに接続し転送と暗号化を経てサイトにアクセスできる,それに加えてそこそこな速度も出るし(最大100Mbpsまでは期待できそう)

IPv6もOK

ちゃんと対応している,フルで置き換わる

QUICとは何か

datatracker.ietf.org tex2e.github.io www.cybertrust.co.jp

難しスギィ!
要するに

  • HTTP-over-QUICがHTTP/3で,
  • QUICはTCPTLS・HTTP/2の一部をUDP上で実装して,
  • IPアドレスが変わっても再接続が可能

ってことですか…?

VPNやTorとは何が違うのか

Safari系の画面でなければ素通りする

TwitterもNicovideoもPixivもJaneStyleもSFSafariViewControllerを使ってなさそうなのでダメっす,必ずSafariからやりましょう

位置情報が探られやすい

IPアドレス位置情報設定」で「おおよその位置情報を保持」にするとGoogleに都市レベルの位置情報をお出しされる
「国と時間帯を使用」でも国家レベルや時間帯レベルの位置情報が出てくる,つまり位置匿名性は高いとは言えない

実際TorやVPNやProxyならば出口ノードが海外におかれる場合も多く,それには劣ってしまう…と考えている(各リレーの中身がどんな風に構成されてるかにもよりそうだが,個人の集合体ではなく4社独占体制なので明らかに脆い)

開示請求するとどうなるの?

実はノーログだったりするのか,それとも素直に応じるタチなのか,Appleと3社の間でどんなやりとりが発生するのか,やってみなければわからない部分が非常に多く,興味深い
というか「プロバイダ←Apple←3社←Web管理者←申立人」みたいな4段構えになりかねない,「お互いにデータを照合しない」というPrivate relayの取り決めがどこまで通用してどこから通用しないのかが,そこが非常に気になる…

林檎ユーザだとバレる可能性がある

段々と出口サーバのIPが割れてくる可能性がある,というよりこの特定作業は有志が既に初めてそうなのが…
https://mask-api.icloud.com/egress-ip-ranges.csv
なんだこれは,たまげたなぁ…(14MBのcsv
既に全てのリレーの出口が掲示されているじゃないか…

中国とロシアで使えない

前者は公式発表だけど後者はユーザー報告,これは法律が違ったり圧力がかかったりしているせいなのですか?

今のところ確認されている不都合

日本国内限定

モバイルデータ通信による機能が阻害される

通信会社からユーザーを見れば,宛先が全てiCloudになる上に内容も秘匿されるので, 一切のコンテンツフィルタは動作しなくなる(本体内蔵型を除く)し, 特定サービスが対象の無料プランも検知できないから適用されない
iOS向けで出しているアプリであっても中身がSFSafariViewControllerで動いているものはアウトになるので, 契約してる携帯通信会社のページを確認しておこう

出口のIPアドレスがコロコロ変わる

特に匿名掲示板だとIDなどが切り変わるか(運がとても良ければ)被る可能性があり,思わぬ事故が発生するかもしれない
不都合なら火狐を使おう

やっぱり遅い

100Mbps以上の速度が欲しかったら使うな

締め出される可能性がある

非常に強い林檎アンチなコミュニティがあれば,IPアドレスから焼かれる可能性が考えられる
もしくは側から見ればプロキシとの違いが明確にわからない以上,トラフィック量だけを見てオートでブロックすれば, 間違ってフィルタされてしまう可能性だってある
後者は簡潔なホワイトリスト設定をAppleが出しているわけではなさそう,さっきのクソデカcsvで何とかするしかないみたい…

matlab / simulinkの円形のsum blockの完全な向きの変え方

まとめ

円形を選択した時にやりたい操作ですね

右回転

command(⌘) + R

左回転

shift(⇧) + command(⌘) + R

左右の(鏡像)反転

command(⌘) + I

上下の反転について

そんな操作はないですね
その代わりブロックパラメータ>メイン>符号リストをいじれば解決します

1入力1出力の場合

直線

f:id:Soluna_Eureka:20210825195149p:plain

上直角

f:id:Soluna_Eureka:20210825195203p:plain

下直角

f:id:Soluna_Eureka:20210825195227p:plain

2入力1出力の場合

上下直角

f:id:Soluna_Eureka:20210825195628p:plain

上直角空き

これがデフォルトでお出しされることが多い f:id:Soluna_Eureka:20210825195639p:plain

下直角空き

f:id:Soluna_Eureka:20210825195650p:plain

45°分け

かっこいいから好き f:id:Soluna_Eureka:20210825195703p:plain

感想

|は空白端子を意味するらしい
やってみたところこの記事にあるような単語を使っても検索結果には出てこなかったので共有しときます

xparseで条件分岐コマンドを生成 LaTeX

準備

\usepackage{xparse}
\usepackage{mleftright} %あったほうがいい

ドキュメント https://ctan.org/pkg/xparse

leftとrightを楽にしたい

\NewDocumentCommand\ld{}{\left.}
\NewDocumentCommand\rd{}{\right.}
\NewDocumentCommand\alc{}{\mleft\lparen}
\NewDocumentCommand\arc{}{\mright\rparen}

関数に変数を明示したい

\NewDocumentCommand\funct{m}{
    {#1}_{\alc t \arc}
}   %f(t)

積分記号の引数処理を楽にしたい

\NewDocumentCommand\intet{moo}{
    \IfValueTF{#2}{
        \IfValueTF{#3}{
            \int_{#2}^{#3}
        }{
            \int_{#2}
        }
    }{
        \int
    }
    {#1} {\mathrm{d}t}
}

\[
  \intet{\funct{f}}[T]
\]
  • #2があって#3があるなら $ \int $ の上下に引数を入れる
  • #2のみなら $ \int $ の下に引数を入れる
  • #2もないなら $ \int $ のみ

これだと $ \int_T f_{(t)} \mathrm{d}t $ が生成される

微分ry

\NewDocumentCommand\difft{mo}{
    \IfValueT{#2}{\ld}
    \frac{\mathrm{d}}{\mathrm{d}t} {#1}
    \IfValueT{#2}{\right\vert_{#2}}
}

\[
  \difft{x^2}[2] &= 4
\]
  • #2があるなら $ \vert $ と引数のセットをつける
  • #2がないならなし

これだと $ \left. \frac{\mathrm{d}}{\mathrm{d}t} x^2 \right|_2 = 4 $ が生成される

解説

関数

\IfValueTF{}{}\IfValueT{}\IfValueF{}

変数がある時〜!がtrueでない時〜!がfalse
TF{}{}trueの処理とfalseの処理を分けて書ける
それ以外はtruefalseのどちらかの時だけを書ける

\IfNotValueTF{}{}\IfNotValueT{}\IfNotValueF{}

その逆を往く

\IfBooleanValueTF{}{}\IfBooleanValueT{}\IfBooleanValueF{}

\BooleanTrue\BooleanFalseに対応する(後述)

\NewDocumentCommand

コマンド新設置

\NewDocumentCommand\新しい関数の名前{引数のオプション}{処理の中身}

\RenewDocumentCommand

コマンド上書き

\NewDocumentCommand\新しい関数の名前{引数のオプション}{処理の中身}

引数

関数側

最低限は以下のルールを守る

  • 前から#1#2#3…と呼ぶ
  • 念のために{#1}のように前後は{}で囲っておいたほうがいい
  • 定義の中で既に定義された別の関数を用いることができる
    • デフォルトの値にも設定できる
  • 変数に段落(\par動作)も含めたいならオプションの前に+をつけよう
  • コマンドの省略制御は割りと難しいので,使用頻度の高い順に番号を振るのが吉
  • mオプション
    • 入力がなければコンパイルエラー吐いて止まる
    • 要するに普通の引数と同じ
  • oオプション
    • 入力がなければ-NoValue-すなわち変数なしを返す
      • この時に変数を無理矢理に出力すると"-NoValue-"という文字列になる
      • でも"-NoValue-"を入力に渡すと-NoValue-は返されない
    • 入力があれば処理は続行する
  • O{デフォルトの値}オプション
    • 入力がなければデフォルトの値を採用する
    • 入力があれば入力を採用する
  • +bオプション
    • 環境設定的なbegin{}を作るのに重宝する
    • 引数の最後にこれを持ってくることで,以降の文章が全て入力として扱われる
  • sオプション
    • コマンドの後に*を入れてモードを切り替えるのに便利
    • *あれば\BooleanTrue,なければ\BooleanFalse
      • 引数設定の先頭にsがあるなら,このどっちかが必ず変数#1に入る
      • 別に先頭である必要はないが,慣習的に先頭の方がよさそう

本文側

だいたいこんな感じか

  • mオプション
    • \コマンド{引数}の形を取る
    • {}は入力ありと判定される
  • oオプション
    • \コマンド[引数]の形を取る
    • []は入力ありと判定される
  • Oオプション
    • \コマンド[引数]の形を取る
    • []は入力ありと判定される
  • sオプション
    • *の有無に依存する
    • 必ず\BooleanTrue\BooleanFalseのどちらかを返す
  • 省略制御は難しい
    • 例えば関数側で{s m m O{xyz} o o}と指定した時
      • []\BooleanFalse,-NoValue-,-NoValue-,"",-NoValue-,-NoValue-になる
      • {}[][]\BooleanFalse,"",-NoValue-,"","",-NoValue-,になる
    • 要するに引数の型をチェックして前に詰めていく上に「入力なし」を入力できないらしい

これを使う利点

割と楽に2つ以上の引数の省略が可能になる,使い分けが増えることで関数名が節約できる
(デフォルトでは自明に1個までしか省略できない)

意見・要望

積分記号あるじゃないですか,あれって

\[
  \left\int f(x) \right.
\]

的な感じでサイズを調整してくれるとマジで嬉しいんですよね
実際には! Missing delimiter (. inserted).つまり\intは区切り記号(括弧類)じゃないってエラー吐かれるんですが
でもだってほら,微分に使う$\vert$はleftrightできるし,$\int$も対応して欲しいなって

\begin{align} x = a+b \end{align}

TeX + VSCode + git on Mac 設定 メモ

前提

  • pdfファイルが欲しい
  • VSCode上で完結させる
    • CLIはなるべく使いたくない
  • latexmkで以下を一括で起爆する
    • uplatex
    • upbibtex
    • biber
    • upmendex
    • dvipdfmx
    • 1回のコマンド内で済む
  • gitでバージョン管理したい
    • 致命的なミスを回避したいので
  • macOSでスマン

下準備

gitインスコ

$ brew install git
$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

homebrew入れてない人は適宜に導入してくれたほうが良い シェルのパスも通しておこうな(VSCodeから叩きたいので)

VSCodeインスコ

brew install --cask visual-studio-code

TeXShop on Macインスコ

ここから.pkgを落とす 適当に全部インスコする こっちはなんとなくだがhomebrewはおすすめしない TeXの管理にhomebrewを使うのは直感的ではなさそう

設定

GUIアプリケーション

TeXShop

実質的に不要(使わないので)

TeX Live Utility

適宜にライブラリをアプデしておこう ちなみに年度バージョン切り替えはこれじゃないと面倒

git

実質的に不要(GitHub使わないなら)

VSCode

latex関係

  • 拡張機能の欄を開いてLaTeXで検索
  • 以下をインストール
    • LaTeX Workshop
    • LaTeX Utilities
  • LaTeX Workshopの「拡張機能の設定」を開く
    • 右上の「設定(json)を開く」を選択
  • settings.jsonに以下をコピペ
{
"files.associations": {
    "*.sty": "latex",
    "*.cls": "latex"
},
"latex-workshop.latex.tools": [{
    "name": "latexmk",
    "command": "latexmk",
    "args": [
    "-e","$latex=q/uplatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S/",
    "-e","$bibtex=q/upbibtex %O %B/",
    "-e","$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/",
    "-e","$makeindex=q/upmendex %O -o %D %S/",
    "-e","$dvipdf=q/dvipdfmx %O -o %D %S -z 0/",
    "-norc",
    "-gg",
    "-pdfdvi",
    "%DOC%"
    ]
}],
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.chktex.enabled": true,
"latex-workshop.chktex.delay": 0,
"latex-workshop.latex.autoBuild.run": "never",
"latex-workshop.latex.watch.delay": 0
}
  • 設定内容イメージ
    • ビルドにlatexmkを指定する
      • uplatexとdvipdfmxの組み合わせを想定
      • 最終ビルドでは"$dvipdf=q/dvipdfmx %O -o %D %S -z 0/""$dvipdf=q/dvipdfmx %O -o %D %S -z 3/"にしておくとファイル容量がむちゃくちゃ減少
      • これを雛形からやろなんて思たらクソダルいしコピペした方がええでマジ
    • セーブ時の自動ビルドを無効化する
    • pdfビューワをtabで開く
    • chktex(エラー検出ソフト,デフォルトでTeXLiveに入ってる)をオンにする
    • スタイルファイル(スクリプト置き場).styとクラスファイル(雛形設定置き場).clslatexファイルとして扱う

git関係

  • 拡張機能の欄を開いて@popular gitで検索
  • 以下をインストール
    • Git History
    • GitLens
    • Git Graph
    • Project Manager
    • gitignore
    • Git Blame
  • とりあえずこれででいいと思います…

使い方

  • ルートフォルダを開き.texファイル,.styファイル,.clsファイルを用意する
  • .bibファイルも必要なら
  • 画像とかを管理するフォルダは別に作った方がよさそう
  • .texファイル,.styファイル,.clsファイルを開いて編集する
  • 様式を満たした上で右上の再生ボタンを押す
    • latexmkなので1回で完全にビルドされる
    • 「View LaTeX PDF File」するとpdfが開く
      • でも動作が重いので別のビューワを持ってきた方がいいよ
    • エラー吐いたらコンパイラのログを読もう
      • ggれば高確率でTeX Wikiのどこかにぶち当たる
  • ワークスペースを保存しておく
    • 次回以降にVSCodeを立ち上げると勝手にセッティングしてくれるので
  • gitが用意できているなら
    • 初回は拡張機能からgit init
      • 画像とかあると時間がかかる,気を付けてね
    • 更新したらステージング,気が済んだらコミット
      • ブランチ,マージ,スタッシュ…などはそれ専用の解説記事を見てくれた方がいいです
  • 日本語の名前を使ってるフォルダかファイルがあると新規ファイルの追加でエラー吐く(ステージングできなくなる)
    • どうやらVSCode拡張機能gitのステージングは絶対パスを使ってスクリプトを打ってるらしく,そのどこかに日本語が入っているとgitがエラーを吐く
    • ターミナル開いてgit add -Aするとできる場合がある
      • こっちは相対パスで動いてるくさい(../a/b/cみたいなヤツか?)
      • ルートフォルダ含むプロジェクト内で日本語を使わなければこれで解決しそう
  • Git Graph
    • 更新履歴をツリーで見せてくれる
  • Git History
    • 更新履歴を細かく見せてくれる
  • GitLens
    • コミット当時のファイルと現在編集中のファイルを比較してくれる
  • Git Blame
    • GitLensのコンパクト版

初回でルートフォルダを選択し作業スペースとして開いたらgit系拡張機能が勝手に$HOMEをルートフォルダにして大量にファイルを漁り始める件について

  • 選択したフォルダの中に.gitがないと勝手にそうなっちゃうらしい
    • 自動git initはされないっぽい
    • settings.json"git.autoRepositoryDetection": "subFolders"を入れればこの動作自体は止まるっぽい
  • ちゃんとgit init.gitを作ってからブラウザやタブを再読み込みすると治るっぽい
    • シェルはちゃんと移動しているので安心してくれ

このやり方の利点

gitが有能

  • 自分の進捗が時刻や変更箇所と共に記録されるので,単純に進度管理にも便利だと思います
  • 取り返しのつかないミスをした時のリカバリーにもなると思います
  • パターンを分けながら制作する時にも役に立つと思います

VSCodeが有能

  • 圧倒的補完機能
  • 圧倒的検索機能
  • 圧倒的拡張機能
  • 圧倒的GUI

TeX on Mac 設定 メモ

前提

  • pdfファイルが欲しい
  • pdfTeXやdvips+ps2pdfは使わない
    • uplatexとdvipdfmxを使う
  • luascriptであるptex2pdfを使ってtexから.pdfまで一気にコンパイルする(TeXShopでデフォルトでできる)

下準備

TeXShop on Macインスコ

ここから.pkgを落とす
適当に全部インスコする

環境設定

タイプセット

デフォルトのコマンド

LaTeX

デフォルトのスクリプト

TeX + DVI

タイプセット後の動作

編集を続ける

ファイル保存時に

関連ファイルも保存する

Sync 方式

SyncTeX

内部設定

パス設定

コンパイルを起爆する実行ファイルがどこにあるかを指定する

TeX

/Library/TeX/texbin

Distiller (Ghostscript)

/usr/local/bin

homebrewで最新版を入れてるなら

/usr/local/Cellar/ghostscript/x.y.z/bin

でも良さそう

TeX+dvipdfmx

コンパイル時のコマンドを編集する

LaTeX

luascriptであるptex2pdfをどうやって起爆するかの設定

ptex2pdf -u -l -ot "-synctex=1 -file-line-error" -od "-z 0"
-u

upLaTex召喚オプションその1

-u

upLaTex召喚オプションその2

-ot

upLaTexコンパイラオプション召喚オプション
以下の""に文字列を突っ込む

-synctex=1

synctex有効化

-file-line-error

エラー位置をログに出力

-od

dvipdfmxオプション召喚オプション
以下の""に文字列を突っ込む

-z 0

コンテンツ(写真等)情報量の圧縮手順を切る,爆速コンパイルになる
ところで動画とかwebフレームの埋め込みとかもできるんだろうか…?

何が言いたいか

ptex2pdfのオプションついては https://texwiki.texjp.org/?ptex2pdf dvipdfmxのオプション(-od ""で呼び出せる)については https://texwiki.texjp.org/?dvipdfmx uplatexのオプションについての記事はなかったので
uplatex --helpして読むしかない

詳細

Distiller

Apple DistillerにするとバグるのでNG

ドキュメント

TeXファイル

先頭

\documentclass[a4paper,12pt,uplatex,fleqn,dvipdfmx]{jsreport}

uplatexdvipdfmxを指定しておいて,それに対応しているclsを読み込めばいいんじゃないですかね…

ipv6専用ddnsがフレッツ網で試供されていた

きっかけ

無料のDNSで遊びたかった
ipv4DNSは申請の敷居が高いし,ぶっちゃけv6プラスだと実質固定ipで面白くないし,なのであんまり乗り気になれなかった

と思ったらipv6専用ddnsが試供されていた,なるほどなぁ…

リンク

概要
HTTP(S)なAPI
NTPやpingで動かす場合
採用事例

HTTP(S) API

フレッツ網内かipv6インターネットから呼び出すのが前提
それ以外はddnsapi-v6ddnsapi-v4に書き換える
http://https://でもOK

dnsを新規設定

http://ddnsapi-v6.open.ad.jp/api/new/?[HostName]
  • 返却されるCSVの中にKeyが含まれる
  • KeyとHostNameが対応するので大事に取っておく

同一HostNameのアドレスを更新

 http://ddnsapi-v6.open.ad.jp/api/renew/?[Key]
  • このAPIを叩いたマシンのipv6アドレスが反映される
  • Keyは必須,HostNameは不要

Host Nameのみ更新

http://ddnsapi-v6.open.ad.jp/api/changehostname/?[Key]=[NewHostName]
  • これもKeyは必須
  • ipv6アドレスは反映されない

dnsそのものを削除

http://ddnsapi-v6.open.ad.jp/api/delete/?[Key]
  • これもKeyは必須

状況確認

http://ddnsapi-v6.open.ad.jp/api/status/?[Key]
  • [Key]を[HostName]にすると返却される情報の一部(機密なやつ)がhiddenされる

Keyを紛失する時のための対策

新規設定時に

http://ddnsapi-v6.open.ad.jp/api/new/?[HostName],[MailAddress]

しておくと紛失時に

http://ddnsapi-v6.open.ad.jp/api/recovery/?[MailAddress]

することでメアドに結びつけられたdnsとKeyの一覧が届くらしい ここでKeyの再設定がされることはない

利用例

まだやったことないけどブラウザから手で打ったら本当に動作したので間違いではなさそう

追記・ipアドレスの構成について

こっちがほんへ ipv6のアドレスの構成は,一般的なネットワークであればrfc4291によるところで

  • 上位,プレフィクス
    • 通常は64bitそのままサブネットプレフィックスとする
    • もしくは以下のように分割したものを合体
      • n bit,グローバルルーティングプレフィクス
      • 64-n bit,サブネット識別子
  • 下位,サフィクス
  • 48bitのMACアドレスをModified EUI-64で64bitに変換して申告し,そのままインターフェース識別子として使う
    • ↑実際はセキュリティ的な観点で現在は非推奨
  • もしくはDHCPv6サーバが64bitをランダムに生成して配布する

と規定されている.

NTTのNGN網でも通常のIPv6 IPoE接続であれば上記に従い,光電話を使用する場合は,NGNからONUにグローバルルーティングプレフィクスが48bitもしくは56bit(わからんけどここのp.56にある通りなら)で渡され,その下のHGWにはONUからサブネット識別子が16bitもしくは8bit(本体設定のDHCPv6サーバ払い出し状況を見るに下位4bitを割り当てて残りは0埋め?標準HGWに0を割り当て?)で渡され,残りの64bitを端末MACアドレスから生成(同上のp.26より,これはrfc3315によるもの)する.

ちなみに光電話を使用しない場合はONUのサフィクスが最初から64bitで降ってくるらしく,すなわちHGWの追加構成や自家構成ができない.

v6プラスオプションを申し込んだ上で光電話を使う場合も,ネイティブなIPv6インターネット機能を使うなら,上と同様のIPv6 IPoE接続を利用することになる.手元の環境を確認したところ,同じプレフィクスと異なるランダムなサフィクスを持つ2アドレスが振られている.

しかしIPv4接続をする場合は,ここのp.42にある通りに,v6プラスが採用しているMAP-Eの仕様であるrfc7597によるところで

  • 上位,プレフィクス→以下を結合して64bitに成形
    • VNE事業者が持つIPv6プレフィクス,上位n bits
    • MAP-Eで与えられるIPv4サフィクス,上位p bits
      • 要はIPv4アドレスの末尾がIPv6プレフィクスにくっつく
    • 同上のポート番号から得られるPSID,上位q bit
      • ポート番号の一部を用いて生成される
    • サブネットID
      • 64 - n - p - q > 0 の時に発生
      • 基本的に0埋め(HGWの複数使用は想定されていない?)
      • もし64 - n - p - q < 0なら後者の処理に影響する
      • これ,厳密にはプリフィクスとは呼ばないらしいです
  • 下位,サフィクス→以下を結合して64bitに成形
    • PSID(同上),下位q bit
    • MAP-Eで与えられるIPv4アドレス,下位32bit
    • 0パディング,下位から
      • 64 - q - 32 = rビットだけ埋まる
      • プレフィクス64 bitよりデカいとココが削られる

と規定されている.つまりインターフェースのMACアドレスが関与することなく4to6および6to4のNAPTが実現できており,これは一般ユーザには見えない(完全にIPv6で実装されたNTTのNGN網内でのみ使われるため,要するにHGWからVNEの間でのみ4to6 NAPTで得られるアドレスが使われる)ものとなる.

前述したが,DHCPv6サーバ払い出し状況の項目については,HGWがONUからセグメントを預ったルーターに関するもので,ONU・HGW一体型1つで利用する一般人は何も表示されないのが正解である.

そしてv6プラスオプションが有効な場合はMAP-Eの機能がHGW側に必要であるため,接続した時点で専用のソフトウェア(例の http://192.168.1.1:8888/enabler.ipv4/main )がオートに降ってくる.もし別のルータをONU・HGW一体型の配下に置いてMAP-Eの機能をさせたいのならば,v6プラスに対応するルータが先取してこのソフトウェアを入れないといけないし,ONUだけならもしかしたら沢山HGWもどきを設置できる…のかも知れない.固定IP取ったv6プラスでも契約しなきゃメリットなさそうだけど.

環境設定のネットワークのTCP/IPIPv6の設定のルーター欄に恐らくfe80::で始まるアドレスがあるが,それは192.168.1.1と同じ意味を持ちHGWにアクセスできるローカルIPv6アドレスである.

参考

ちなみにNURO光やその他の非NGNipv6対応の光回線はさらに仕様が違うらしい,なのでここでは扱わない

ipv6アドレスとVNEの関係

これでプレフィクスを取得できるらしいな?

$ curl -H 'Host:route-info.flets-east.jp:49881' -H 'Accept:*/*' -H 'Connection:close' --http1.1 http://route-info.flets-east.jp:49881/v6/route-info
0000,2020/09/17 09:23:31
1111,2404:01a8:7e00:0000:0000:0000:0000:0000/40 --NTT東日本
1211,2404:01a8:0000:0000:0000:0000:0000:0000/32 --NTT東日本
1212,2001:0c90:0000:0000:0000:0000:0000:0000/33 --NTT東日本
1311,2408:0210:0000:0000:0000:0000:0000:0000/30 --NTT東日本
1411,2400:2410:0000:0000:0000:0000:0000:0000/30 --BBIX-IPv6
1412,2409:0010:0000:0000:0000:0000:0000:0000/30 --MF-Transix-E-1
1413,240b:0010:0000:0000:0000:0000:0000:0000/30 --JPNE
1414,2404:7a80:0000:0000:0000:0000:0000:0000/30 --BIGLOBE
1415,2405:6580:0000:0000:0000:0000:0000:0000/30 --朝日ネット
1416,2400:4050:0000:0000:0000:0000:0000:0000/30 --OCN
1417,2401:4d40:0000:0000:0000:0000:0000:0000/30 --フリービット
1418,2001:0f70:0000:0000:0000:0000:0000:0000/30 --アルテリア・ネットワーク
1419,240b:c0c4:0000:0000:0000:0000:0000:0000/30 --楽天モバイル

4連続のNTT東日本を除けば現在は9社でVNEをやっているらしい,確認してみよう https://www.ntt-east.co.jp/info-st/ipoe_menu/

参考

光回線(v6プラス前提)の性能に関するメモ

導入に関するメモは

ここにあるのね〜 soluna-eureka.hatenablog.com

基本的な考え方

通信経路の一部分だけが最高速度を出せても他の部分にボトルネックがある限りは無駄である,インターネット上のサービスは通信経路上の最低速度に合わせてデータをやり取りする(もちろんサービスを提供する側のサーバの性能が悪いのもダメだが)

手元の設備にフォーカス

パソコンやスマホのインターフェース

RAMやSSDの性能

だってデータをDLしても手元に上手く落とせなきゃまず意味がない,RAMやSSDへの書き込み速度はどれくらいかチェックだ

有線接続

Ethernetでどこまでの速度に対応している?最大で1Gbpsの光回線なら1Gbpsに対応しているLANポートが必要だ,PCクラスタとプライベートネットワークを作ってデータを転送したいなら10Gbpsに対応しているのもいいらしい
前者は1000 BASE-T(上下どちらか1Gまで)もしくは1000 BASE-TX(上下同時に1Gまで),後者は10G BASE-T(上下どちらか10Gまで)と呼ばれるらしい,俗に言うギガビットEthernetと10ギガビットEthernet,なお10G BASE-TXは有線でみたことがない

無線接続

IEEE 802.11のどこまで対応している?1Gbps出るならせめてacは欲しい
将来を見据えるか余力を持った性能が欲しいならそろそろaxに対応しても良さそう

いい場所に置いてる?

LANソケットやルータから無駄に離れたり他の電子機器がそばにあったりすると,エラー率が上がるので速度も出なくなるぞ

屋内の周辺機器

任意のコネクタや変換器

最低でも1000 BASE-Tは欲しい,屋内で1000 BASE-TXやそれ以上をやりたいならそれに対応するものを選ぼう

有線LANのケーブル

下で1Gbpsを出したいなら最低でもcat5eかcat6,混雑する経路や長い経路もしくは上下同時に1Gbpsを使う必要がある場合はcat6が良い,それ以上を目指すなら10Gbpsに対応するcat6a(たまにcat6eと書かれる場合がある)を選ぼう
cat7以上の規格のものは市販品では使えない,これ以上はもう完全に産業用の何からしい,コネクタがcat5系列やcat6系列とは厳密には異なるので性能が発揮できない(互換性はあるのでコネクタの見た目さえ合えば取り敢えずは動くらしいんだが)

家の中に既にLANケーブルが埋まって存在している場合,その規格は差込口に書いてある場合が多い,もし書かれてなかったら自分で実験して確かめてみるべき

ルータ

Wi-fiに対応するなら無線LANとして802.11acか802.11axが欲しい
なおかつ有線の接続で1000 BASE-Tや1000 BASE-TXもしくはそれ以上に対応しているもの選ぼう

分配器,ハブ,アクセスポイント等

ルータ機能がないものでも,概ね上と同じ考え方ができる
ただしルーター機能の有無が転送速度に影響する可能性はある,なるべくシンプルな構成にしよう

家庭向けONU+HGW

注意 ONUとHGWが別々だったり一体だったりするので気をつけよう

1Gbpsまでの回線

光ファイバ(LINE)側について

上下ともに1GbpsでONUに到達する
…とは言うが,一応は光ファイバーの性能と光ネットワークの規格にも依存するらしい,まぁ業者が施工するなら間違いはないだろうし,ぶっちゃけ規格として1Gbpsが出せないというのはまずありえない
つまり少なくとも光回線なら最低でも上下1Gbpsを出せる用意ができていると考えても良い

ONUとHGWの間(WAN)について

一体化しているのであれば別に気にしなくても良いが,別々の場合はそれを結ぶコードについて有線の規格に気をつけなければいけない,流石に公式から提供されるセットに入っているものなら不足はないと思いたいが…
一般にONUだけでは(自力でHGWを作らない限り)光回線を利用できない,インターネットの認証とかは大方HGWの役目でONUはそれを有線の通信に変換しているだけらしい

HGWよりも内(LAN)側

ポートが複数あるケースがほとんど,新しいものは各ポートごとに片道1Gbpsで通信する1000 BASE-T規格に対応している
非NTTだと1000 BASE-TXに対応しているものもあるっぽい,ちゃんと使えるかを事前にNTTに問い合わせた方が良さそう
対外的な通信は光回線の容量の限界があるため,全てのポートを合計して上下1Gbps(1ポートだけ使う場合は片道1Gbps)という制限がある
光回線の認証および接続に加えて家庭内で使えるルーターとしての機能も持っているが,そっちの性能がどの程度のものなのかは取説になかった,気になるなら実験してみよう
もしONUとHGWが一体化しているのであれば,これらを一体で担うことになる

NURO光 2G

※実際に使っている知人に取材した

光ファイバ(LINE)側について

上り1Gbps下り2Gbpsで到達する
上に示した1Gbps回線とは光ネットワークの規格が異なるため,下りで2Gbpsを達成している,そのために専用回線の導通工事が必要になる…が,既に光回線の用意があるならONUを変えるだけで済む場合がある(集合住宅とか)し,もしくは近隣の住民と一緒に新規契約するなら光回線の設置工事も安心して受けられるだろう(担当者がまともなら)

ONUとHGWの間(WAN)について

なんか一体化しているものしかないらしい,以上

HGWよりも内(LAN)側

ポートは複数ある場合がほとんどだが,各ポートごとにどれも片道1Gbpsで通信する1000BASE-T規格に対応している,一方で1000 BASE-TX対応の機種は公式サイトを眺めた限りでは見つからなかった
その上で端末をいくつか繋げて同時にダウンロードしても合計で2Gbpsまで許容されるので下りの速度に差が出る,そもそもNURO光ISPとセットの契約である上にISPとしても優秀なので素で早いと言えるでもお前こないだ障害起こしてたじゃん

それ以上の回線

受動光ネットワーク(PON)には経路上のシステムとして規格と対応できる帯域が定めらており,5ギガビットや10ギガビットには高い規格が要求されるほか,対応した専用のONUISPを利用しなければならず,まずサービス提供エリアも限られる上に料金も高くなる
その上で前述した通りに屋内の設備を整えないと宝の持ち腐れであり,同時に帯域を使い切らないと本当にもったいないので,ぶっちゃけ1Gbpsもあれば普通の人は大丈夫だと思う,NURO光 2Gはコスパが良いと聞くがどうだろうか
ただ有線テレビ放送に受動光ネットワークを介して行われる方向性が見られたり,基地局側の機器の性能も進化し続けている,いよいよ10Gbps時代が到来するかもしれない…

ONUとHGWについて

見た感じだと次世代の高速光回線ONUとHGWが別々になっている
HGWの方は取説が公開されているが,ONUの方は取説が公開されていない,情報求む

光ファイバについて

情報求む
10G回線に限らず1G回線でも実際のケーブルに関する情報が不足している,どれもシングルモードなのはNTTの資料からわかるんだけど,どの速度でもどの距離でも一緒なのかどうかが気になる… www.ntt-east.co.jp

それ以外

家庭向けじゃない…なら業者の方ですか?
帯域保証回線ってクソ高いんですねあれ…

奥手の設備にフォーカス

光ファイバなど

光ファイバそのもの

光ファイバそのものに通信速度の上限は存在しないとされている
ただし品質が低かったり(反射率が悪い,無駄に長い)劣化したり(虫に食われる,鼠に食われる,踏んで折れる)するとダメなので,通信速度を上げたり以上があったりする場合はにファイバが対応できているかをチェックする必要はある
一応は光ファイバの品物そのものにも推奨距離や対応規格はあるものの,実際に業者にチェックしてもらうのがベスト

中継機,増幅器,分岐器,等々

基地局設備

参考

cat規格(有線LAN)まとめ

※通信規格名はあくまでEthernet/IP全体に対するものであり,有線LANに限らず光ファイバにも使われる
※xxBASE-Tだと有線LAN,xxBASE-(S|L|Z)(+1文字)だと光ファイバ…になるらしい,距離と波長は共にS<L<Zになるっぽいね

規格名 通信規格名 最大帯域 動作可能周波数(最大帯域時) 動作可能距離(最大帯域時) 備考
cat1 なし ? 1MHz ? 正式な規格ではないらしい ,というか電話回線用だった
cat2 なし 4Mbps 4MHz ? 正式な規格ではないらしい ,が割と使われていた
cat3 10BASE-T, 100BASEVG, 100BASE-T4 10Mbps 16MHz わからん もう古い,ボロいLANケーブルはだいたいコレか?
cat4 10BASE-T, 100BASE-T4 10Mbps 20MHz わからん もう古い,直後にcat5が出てきてすぐに使われなくなった?
cat5 10BASE-T, 100BASE-TX (Fast Ethernet), 1000BASE-T (Gigabit Ethernet) 100Mbps 100MHz なし 一般的な最大帯域よりも上の帯域で動作させる仕様(通信規格)があるにはあるらしい,しかし市販品では見たことがない
cat5e 10BASE-T, 100BASE-TX (Fast Ethernet), 1000BASE-T (Gigabit Ethernet), 2.5GBASE-T, 5GBASE-T 1Gbps 100MHz 100m いまどきのカテゴリー5ケーブルはこれを意味する,市販品でも1Gbpsはほぼ確実に出る,ただし長さは100mまでなので注意
cat6 10BASE-T, 100BASE-TX (Fast Ethernet), 1000BASE-T (Gigabit Ethernet), 1000BASE-TX, 2.5GBASE-T, 5GBASE-T, 10GBASE-T 1Gbps 250MHz なし cat5eよりもノイズ耐性がある…一応10Gbps通信もできるが,1本だけなら55m・複数本を一緒に置くと37mまで?
cat6A (or cat6e) 10BASE-T, 100BASE-TX (Fast Ethernet), 1000BASE-T (Gigabit Ethernet), 1000BASE-TX, 2.5GBASE-T, 5GBASE-T, 10GBASE-T 10Gbps 500MHz 100m cat6よりもノイズ耐性があり,事実上の10Gbps通信の正式対応版,ちなみに1000BASE-TXは1000BASE-Tの上位互換で完全二重通信(上下1Gbps)がサポートされるので,上下で1Gbpsを同時に出したかったらcat6以上が必要
cat7 ?(下位互換はあるらしい) ? 600MHz ?(10Gbpsで100m以上は出るらしい) 資料が少ないし未認定らしいしわからん…
cat7a ?(下位互換はあるらしい)(40GBASE-Tや100GBASE-Tを目指していた計画がなくなったらしいな) ? 1000MHz ? 同上
cat8 ?(完全下位互換or7Aのみ互換で未定?) ? 2000MHz 30m~36m(想定されるユースケースは限定されているらしい) 同上

以上をまとめると,

  • cat5e以上は最低条件
  • cat6が望ましい
  • cat6Aは1Gbpsを超える回線で使いたい

wi-fi規格(無線LAN)まとめ

追記します

PON規格まとめ

Ethernetの通信規格から外れるものがある,伝送フレームが異なる
ITUIEEEで分かれている,EthernetIEEEでそれ以外はITU
※波長の予約が大変なのはわかったのだが,ここではその記載は省く

規格名 定義名 伝送フレーム名 最大帯域 最大動作距離 最大分岐数 採用例 備考
GE-PON IEEE 802.3ah Ethernet ↑1.25Gbps,↓1.25Gbps 20km 32 フレッツ 光ネクスト,Yahoo! BB光KDDI 光プラス ホーム,eo 光ネット,4G携帯基地局バック回線 日本というかアジアで標準として使っているらしい
G-PON ITU G.984 GEM・ATM/GTC ↑1.25Gbps,↓2.5Gbps 60km 254 NURO光 2G 欧州的はこっちが標準らしい
XG-PON ITU G.987 XGEM/XGTC ↑2.5Gbps↓10Gbps 60km 64 NURO光 10G
XGS-PON ITU G.9807.1 XGEM/XGTC ↑10Gbps↓10Gbps 20km 64 NURO光 6Gs,同10Gs
10G-EPON IEEE 802.3av Ethernet ↑10Gbps↓10Gbps 20km 64 フレッツ 光クロス(10Gbps対応),auひかり ホーム 10ギガ
NG-PON2 ITU G.989 XGEM/XGTC ↑40Gbps↓40Gbps 40km 256 4つの波長の光を合成して使うと10Gbps×4=40Gbps相当の帯域が得られる,ここまでは1つの波長で10Gbpsが限界
NG-PON2+ ITU G.989 XGEM/XGTC ↑25Gbps↓100Gbps 40km 256 5G携帯基地局バック回線 下りのみで25Gbps×4=100Gbpsを実現,上りは25Gbps×1=25Gbps…まぁスマホ相手だしONU基地局だしで足りそうな気もする
50G-EPON(旧:100G-EPON) IEEE 802.3ca Ethernet ↑50Gbps↓50Gbps 20km 32 光ファイバ1本で上下100Gbpsするより上下50Gbpsを2つ実装した方が良いという判断,それぞれ25Gbps×2=50Gbpsと2波長で合成

※NG-PON2下位規格と下位互換が設けられている

以上をまとめると,

  • 現在は最低でも光ファイバ1本に上下それぞれ1波長を割り当てることで共に1Gbpsは確保できている,これが大抵の光コラボレーション回線(GE-PON)
    • 各戸で1本ずつ使っている…と思われるが,実際はスプリッタとかで共有している場合がほとんど
      • 最悪の場合で4(局内)×8(局外)=32本に分岐できるので,酷いと32Mbpsしか出ない
      • つまり「概ね1Gbps」は知識がない限りは見抜けない詐欺紛いの誇大広告,ベストエフォート値を「概ね」と誤魔化つつ公称値にするなんて絶対にいけない(改革派),いやよく考えたら共有ユーザー数に関わらず(というかそれすら教えられず)(時間平均値も事前にわからず)全ユーザーで一律に契約して料金を取るのはかなり詐欺に近い
      • PPPoEの網終端装置の増設もしないし(これはIPoEを実装してだいぶマシになったからまだヨシとはできるけど)
    • これを大量に束ねて入口であるNTT局のOLTにぶち込んでNGNEthernet/IP網に流し込んでいる
  • NURO光光ファイバ1本で下り2Gbpsを達成している(G-PON)
    • こちらもスプリッタで共有して契約する場合がほとんどだが…
      • NURO光自身が光ファイバをまるごと所有してG-PON対応のOLTに突っ込んで動かしている
      • 加えてそこまでユーザーが密集していない,つまり32本に分岐することがまずあり得ない(ただし加入者が少ないすぎると料金も割高になるが)
    • OLTから先もNGN網とは異なる独自の回線を経由している
      • 当然ISPとしても優秀なのでその先でも混雑しない
  • その他にも独自の光ファイバと専用回線を所有する業者はある,みんな頑張れ!
  • 地域や場所にもよるが,最近(つってもNTT自身の商用化は去年から)はNTTが10G-EPONに手を付け出してたり,OLTの性能は確実に向上してきている
    • NGN網へ流せる光ファイバの本数が増えたため,局内スプリッタが減らされている可能性がある(ONUあたりの通信速度は4倍になる)
    • あと「最近になってできた『ケチってない』市街地やマンション」はマシかもしれない,最初から1Gbps回線を見込んで局外でそこまでスプリットしていない可能性がある
      • それでも光コラボ回線なら諸要因を含めて平均で300Mbpsくらいか?(みんそくを見ながら)
    • 実はNTTはここ最近までNGN網を建設するのに全力で投資したために労力も財布もすっからかんになって,回線速度の向上なんかできねぇという状況だったのでは…?
  • 将来的にはNG-PON2と10G-EPONで10Gbps回線が増えるとは思う,一般に普及はしないだろうけど(ぶっちゃけ過剰すぎ)

コンテンツブロッカーの自作ユーザールール(ユーザーフィルタ)の倉庫

Twitter

正規表現の単語による完全なミュート,絵文字にも別で対応(URLでtwimg.comごとブロック),ハングルは全てミュート(ユニコードで網羅),かつツイートクエリ及びサーチクエリの保護,バグ防止のためにTwitter Card2種類の文言削除,「記事を読んでみませんか?」を無視,「話題を検索」から「COVID-19」と「エンターテイメント」を削除

twitter.com##div:matches-attr("/aria-label|role|data-testid|class/"="/タイムライン:.*|listbox|listitem|presentation|userCell|article|option|link|tablist|tab|region|button/") > div > div:contains(/朝日新聞|週刊朝日|朝日ウイークリー|asahi\.com|BuzzFeed|リテラ|lite-ra\.com|ハフポスト|huffingtonpost\.jp|東京新聞|毎日新聞|琉球新報|文春|ミモレ|CREA|business\sinsider\sjapan|テレビ朝日|テレ朝|日本テレビ|日テレ|フジテレビ|フジ|TBS|報道ステーション|報ステ|時事ドットコム|時事通信|時事メディカル|共同通信|現代ビジネス|Number|news zero|FNN|ママデイズ|BLOGS|ORICON|フラウ|モデルプレス|新R25編集部|東洋経済|Tasty\sJapan|ゲキサカ|Plum|BLOGOS|bizble|Kstyle|FRIDAY|就職四季報|DIGIDAY|ライフハッカー|DELISH KITCHEN|COVID-19|COVID19|COVID_19|新型コロナ|コロナウイルス|反ワクチン|フェミニズム|フェミニスト|lgbt|lgbt|ジェンダー|マイノリティ|女性.*権利|権利.*女性|イエ制度|家制度|家長制|人権|男尊女卑|男女共同参画|男女平等|MeToo|KuToo|勝部元気|石川優実|伊是名|新垣結衣|ガッキー|インセル|K-POP|BTS|GOT7|EXO|韓国人|エンターテインメント · トレンド|エンターテイメント · トレンド|俳優 · トレンド|若者.*重症|重症.*若者|医師会|リベラリズム|リベラル|リベラリティ|学問.*自由|自由.*学問|文化.*芸術|芸術.*文化|学術会議|障害者|従軍慰安婦|南京大虐殺|ナチス|共産|菅直人|鳩山|民主党|りっけん|立憲|立民|生理|月経|妊娠|出産|退陣を求めます|辞職を求めます|ニュース|アベ政権|アベやめろ|スガ政権|スガやめろ|献金|過去最多|過去最大|過去最低|ぢゃな|([\uAC00-\uD7AF]|[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uD7B0-\uD7FF]|[\uFFA0-\uFFDF])+|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83C\uDF64/imsu)
twitter.com##div:matches-attr("/aria-label|role|data-testid|class/"="/タイムライン:.*|listbox|listitem|presentation|userCell|article|option|link|tablist|tab|region|button/") > div > div:has(img:matches-attr("/src/"="/.*1f3f3-fe0f-200d-1f308.*|.*1f364.*/"))
twitter.com##div[data-testid="card.layoutLarge.detail"]:remove()
twitter.com##div[data-testid="card.layoutSmall.detail"]:remove()
twitter.com##a:contains(/まず記事を読んでみませんか?/):remove()
twitter.com##div:matches-attr("/aria-label|role|data-testid|class/"="/presentation/"):contains(/COVID-19|エンターテイメント|スポーツ/):remove()
twitter.com#@#div:matches-attr("/aria-label|role|data-testid|class/"="/テキストをツイート|検索クエリ/")

結果としてはだいたいこんな感じになる

f:id:Soluna_Eureka:20210520021014p:plain
参考スクショ

pixiv

バグの可能性あり.自己責任で(とくにSafariでやると死にがち)

pixiv.net##section:contains(/pixivFANBOX/im)
pixiv.net##div > a:contains(/pixivプレミアム無料体験/im):remove()
pixiv.net##div > div > div > div > div:contains(/イラストリクエスト作品|漫画リクエスト作品|pixivisionの新着記事|コンテスト結果発表|募集中のコンテスト|pixivコミックの人気作品|マンガのレベルアップ講座/im)
pixiv.net##div > section:contains(/コメント/im)

nicovideo

バナー位置を選んで削除

nicovideo.jp##div:matches-attr("/class/"="/MatrixRankingBannerAd|RankingMatrixNicoadsRow|InView BottomContainer|CommentPanelBannerAd NicoSpotAdContainer/"):remove()
nicovideo.jp##html > head:contains(/banner/):remove()
nicovideo.jp##div > div > div[class="Ads"]:remove()

Google

画像検索や翻訳結果のサジェストを削除

google.com##div > c-wiz > scrolling-carousel:remove()
google.com##div > g-expandable-container:remove()

【広告ブロッカー】Twitterが無条件にステマしてくるゴミみたいなメディアや目障りなクソ情報をブラウザ上で無視するフィルタ

再配布不可能・私的利用可能

やり方

PCブラウザ版のTwitterに限る
まずは拡張機能でブラウザ用のadguardを入手する
次に以下をユーザールールにコピペする

twitter.com##div:matches-attr("/aria-label|role|data-testid|class/"="/タイムライン:.*|listbox|listitem|presentation|userCell|article|option|link|tablist|tab|region|button/") > div > div:contains(/朝日新聞|週刊朝日|朝日ウイークリー|asahi\.com|BuzzFeed|リテラ|lite-ra\.com|ハフポスト|huffingtonpost\.jp|東京新聞|毎日新聞|琉球新報|文春|ミモレ|CREA|business\sinsider\sjapan|テレビ朝日|テレ朝|日本テレビ|日テレ|フジテレビ|フジ|TBS|報道ステーション|報ステ|時事ドットコム|時事通信|時事メディカル|共同通信|現代ビジネス|Number|news zero|FNN|ママデイズ|BLOGS|ORICON|フラウ|モデルプレス|新R25編集部|東洋経済|Tasty\sJapan|ゲキサカ|Plum|BLOGOS|bizble|Kstyle|FRIDAY|就職四季報|DIGIDAY|ライフハッカー|DELISH KITCHEN|VOCE|マネー現代|Huawei|ファーウェイ|華為|COVID-19|COVID19|COVID_19|新型コロナ|コロナウイルス|反ワクチン|フェミニズム|フェミニスト|インセル|lgbt|lgbt|ジェンダー|マイノリティ|女性.*権利|権利.*女性|イエ制度|家制度|家長制|人権|男尊女卑|男女共同参画|男女平等|MeToo|KuToo|勝部元気|石川優実|伊是名|新垣結衣|ガッキー|大坂なおみ|K-POP|BTS|GOT7|EXO|TWICE|韓国人|エンターテインメント · トレンド|エンターテイメント · トレンド|俳優 · トレンド|このトピックは今後おすすめとして表示されません。|若者.*重症|重症.*若者|医師会|リベラリズム|リベラル|リベラリティ|学問.*自由|自由.*学問|文化.*芸術|芸術.*文化|学術会議|障害者|従軍慰安婦|南京大虐殺|ナチス|共産|菅直人|鳩山|民主党|りっけん|立憲|立民|生理|月経|妊娠|出産|退陣を求めます|辞職を求めます|ニュース|アベ政権|アベやめろ|スガ政権|スガやめろ|献金|過去最多|過去最大|過去最低|ぢゃな|([\uAC00-\uD7AF]|[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uD7B0-\uD7FF]|[\uFFA0-\uFFDF])+|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08/imsu)
twitter.com##div:matches-attr("/aria-label|role|data-testid|class/"="/タイムライン:.*|listbox|listitem|presentation|userCell|article|option|link|tablist|tab|region|button/") > div > div:has(img:matches-attr("/src/"="/https:\/\/abs-0\.twimg\.com\/emoji\/v2\/svg\/1f3f3-fe0f-200d-1f308\.svg|https:\/\/abs-0\.twimg\.com\/emoji\/v2\/svg\/1f364\.svg/"))
twitter.com##div[data-testid="card.layoutLarge.detail"]:remove()
twitter.com##div[data-testid="card.layoutSmall.detail"]:remove()
twitter.com##a:contains(/まず記事を読んでみませんか?/):remove()
twitter.com##div:matches-attr("/aria-label|role|data-testid|class/"="/presentation/"):contains(/COVID-19|エンターテイメント|スポーツ/):remove()
twitter.com#@#div:matches-attr("/aria-label|role|data-testid|class/"="/テキストをツイート|検索クエリ/")

大まかな解説

使い方

ミュートしたい言葉をdiv:contains(/AAA|BBB|CCC/)AAABBB`CCC正規表現として入れる
それを含むツイートやユーザーは全て非表示になる(ユーザーページではユーザーの情報だけは見えてしまうけど)
正規表現検索を利用しているので公式クライアントより正確に安全に条件を絞れるミュート機能としての使い方が出来る
正規表現を用いた検索にはフラグとして/imusを使っているが,コレ以外の設定だと思うように動作しないので変更しない方が良い

絵文字の絞り込みには絵文字用の.svgイメージのソースURLを用いている,単独でUnicodeポイントが与えられる絵文字(例:🍤)ならば前後に.*を加えて入れれば良い(例:.*1f364.*)し,複数の絵文字の合成によって表示される絵文字(例:🏳️‍🌈)は指示に沿った複数のUnicodeポイントを半角ハイフンで連結し前後に.*を加えて入れれば良い(例:.*1f3f3-fe0f-200d-1f308.*
ちなみに正規表現を利用した検索において用いるUnicodeポイントがhex4桁までしか認められていない,サロゲートペアを利用してhex5桁1つをhex4桁2つに変換する必要がある,さすがに人力ではダルいので専用ツールサイトの利用を推奨する(例:🍤=>\uD83C\uDF64)(例:🏳️‍🌈=>\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08

|([\uAC00-\uD7AF]|[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uD7B0-\uD7FF]|[\uFFA0-\uFFDF])+はなにかって?これだけでハングルを全ブロックできる韓流トレンドのゴリ押しが悪い

またツイートクエリおよびサーチクエリはバグ動作回避のために対象外に設定することで保護した
Twitter Cardの説明文はバグ回避のため削除した,ちなみにLargeとSmallの2種類が存在する
さらに「まず記事を読んでみませんか?」を削除,「話題を検索」から「COVID-19」と「エンターテイメント」「スポーツ」を削除,「おすすめ」「トレンド」からジャンルで削除するにはエンターテインメント · トレンド|エンターテイメント · トレンド(なぜか2種類ある)を最初の正規表現のミュートリストに正確に追加する

仕組み

:matched-attr()と特定のパラメータを用いて検査の対象のdivを決め打ちし,:contains()と各種のワードで検査して引っかかったdivを不可視化している
> div >はどうやらdivの階層構造の深さを表すらしい…が,今のところ1個だけの状態が最もパフォーマンスが良い
そしてワンライナーで複数のdivを選定しているのでリストも1つで済む,フィルタリングがより快適になった

本来なら:remove()して少しでもブラウザを軽くしたかったのだが,非常によくバグる(Something Wrong is ~...の表示)ので断念
他のブラウザ用フィルタの拡張機能では同じ関数が使えないので,ほぼAdGuard専用になっていると考えて良い

注意

"/タイムライン:.*|listbox|listitem|presentation|userCell|article|option|link|tablist|tab|region/")の部分に"tweet"を加えると入力欄がバグるのでやらないこと
正規表現を間違えると想定外の動作を起こすので注意して入力すること

詳細な補足

仕様について

本来のコンテンツブロックは,basec ruleとしてドメインごとに挙動を設定できることが出発点であり,その次にCSS上の設定値や擬似クラスを利用して要素を指定してhideやremoveが可能になるnon-basic ruleがあり,その次にようやくextended css selectorがAdGuardに用意されているほか,さらにHTMLやScriptに対してのフィルタリングが実装されています
今回はextended css selectorを主に利用しており,matches-attrcontainsはどちらもDOMの変更を監視し,変化が発生する都度に評価を行いそれに則って動作します,なのでタイムラインの更新にも対応しています

ネット上の他の記事だとdiv[xxx="yyy"]div:has-text(/xxx|yyy/)のような解説が多いですが,前者は拡張性と管理性が低い・後者は使用する関数が古い問題があります,AdGuardのユーザールールのリファレンス(最新版)に沿いつつ設計することをお勧めします
ただし:has()セレクタCSS 4.0で実装されると策定されただけなので,現状どのブラウザでも未実装です,使えないので注意しておきましょうなので,公式リファレンスにある通りAdGuard内で関数が先行して実装されているので,使っても大丈夫です
aa.jp##div:matches-attr("/bb/"="/cc/"):contains(/xyz/):remove()みたいに関数を連結することが可能です,特定要素を丸ごと消したかったらこうした方が手っ取り早いです(効果範囲には気をつけましょう)

ユーザーが細かに挙動を制御できることで有名なuBLock Originと比較しましたが.正規表現が使えるAdGuardの方が今回は便利だと判断しました,あくまで他のブラウザ拡張機能では今回の構文が使えません

「エンターテイメント」と「エンターテインメント」

Twitterにはなぜか表記揺れがあります,両方消しましょう.

divの中身について

"/aria-label|role|data-testid|class/"

divタグのパラメータで明確に区別がつくのはおそらくはこの4つだけです
ちなみにTwitterはreactで動いているらしいです(react-rootがある)

タイムライン:.*

ユーザー発のアクティビティに関するもの,正規表現で以下を1個にまとめました
いずれもaria-label=で与えられます

タイムライン: ホームタイムライン

ホームに流れるタイムライン

タイムライン: トレンド

今どうしてる?

タイムライン:

最近でてきた「おすすめトピック」 後で名前が変わりそうなので注視

タイムライン: 話題を検索

検索ページのトップ

タイムライン: Carousel

検索ページでの横並びのサジェスト

タイムライン: タイムラインを検索

検索した結果

タイムライン: 会話

各ツイートのスレッド

タイムライン: 通知

通知

タイムライン: メッセージ

DM

タイムライン: リツイートされました

通知をクリックした画面

タイムライン: いいねしました

通知をクリックした画面

タイムライン: リツイートしたユーザー

ツイートから見れるやつ

タイムライン: いいねしたユーザー

ツイートから見れるやつ

listboxlistitem

role=で与えられます
検索窓のサジェスト欄と履歴欄がコレです,トレンド名とアカウント名を両方とも潰すには2つとも必要です

tablisttab

role=で与えられます
上と同じようなものです

userCell

data-testidで与えられます
色んな所に並んで表示される時にユーザーを非表示にします

articleregion

role=で与えられます
全てのツイートはコレに入っているので,念の為に対象にします

option

role=で与えられます
サジェストとか設定ボタンの枠です

link

role=で与えられます
Twitterが用意してくるリンクは大抵はこの中にあります

regionbutton

role=で与えられます
でっかい組み分けの箱と要素はこれです

card.layoutLarge.detailcard.layoutSmall.detail

data-testidで与えられます
説明文がバグを起こすので削除しました

スマホ対応について

例えばiPhoneSafariだと現時点ではうまく動作していません
ちょっとよくわからん,ユーザールールの動作条件がPCとは違うらしいですコンテンツセキュリティポリシーという存在のせいでAdGuardの動作そのものが制限されている可能性がありますね…
解決したらまた追記したいです

最後に

この記事は改善していくので,告知があれば最新版のルールを使った方がいいです
あとTwitterは無●

【macOS】Automatorで「pdf => png」「png => pdf」のクイックアクションを作る

参考元

Automatorを使って、PDFをpngに変換してPDFファイルと同名のディレクトリに置く
夏目祐樹

これのパターンを元に手を加えた

やりたいこと

pdfへの直書きができなかったり,写真をそのまんまpdfでまとめたかったり,そういう時にGUIをいちいち立ち上げるのは面倒すぎた
あとBig Surのプレビュー.appが72dpiでしかラスター出力できなくなってて詰んだ,それだと細かく書ききれないからマジで辛い…

縛り

  • Automator使用
    • 簡単に
    • 汎用に
    • 単一完結
  • クイックアクションとして呼び出す
    • それならファイルを右クリックして呼び出せる
    • アプリケーションとして?そんなん要らんやろ
  • Apple Scriptなし
    • Finderやプレビューの呼び出し説明書を読む気力が全くない
    • 本当ならScriptを書いて完結させるのがスマートだとは思う

PDF to PNG

1つのpdfから複数のpng

1.pdfファイルの受け入れ

f:id:Soluna_Eureka:20210825203922p:plain

ポイント

Automatorにはパス操作向けのテキスト処理の機能がないからbashのちからを借りるぜ!
入力は引数として入ってきた順番で$1$2みたいにになるぜ!
標準出力がそのままモジュールの出力になるぜ!
basenameにこんな感じにフルパスと拡張子を渡せば元のファイルの名前が得られるぜ!

2.生成するpngファイルの命名

f:id:Soluna_Eureka:20210825203933p:plain

ポイント

デフォルトだと元のpdfの名前がつくようになってるぜ!

3.元のpdfファイルがあるフォルダのパスを取得

f:id:Soluna_Eureka:20210825203950p:plain

ポイント

bashのちからを借りるぜ!
pngファイルをしまうフォルダを作るのに必要だぜ!
dirnameにこんな感じにパスを渡せば1段だけ上のディレクトリのパスが得られるぜ!

4.収納するフォルダのパスを生成

f:id:Soluna_Eureka:20210825204042p:plain

ポイント

bashのちからを借りるぜ!
pngファイルをしまうフォルダを作るのに必要だぜ!
さっき作ったフォルダの下にさっきつけた名前でフォルダを作った時のパスが得られるぜ!
ただし末尾に_PNGsをつけてわかりやすくしてやるんだぜ!

5.収納するフォルダを生成

f:id:Soluna_Eureka:20210825204105p:plain

ポイント

こっちも末尾に_PNGsをつけるんだぜ!

6.pngレンダリング

f:id:Soluna_Eureka:20210825204118p:plain

ポイント

他の拡張子を選ぶといろんな設定が出てくるぜ!
ちなみに350dpiは日本の印刷機には多い要件らしいんだぜ!

7.名前を編集してフォルダに収納

f:id:Soluna_Eureka:20210825204136p:plain

ポイント

作成日の昇順で並べてから1スタートの連番を通すとページ数になるぜ!
(ところでフォルダに収納しなかったファイルはどこにいくんだろうな)

PNG to PDF

複数のpngから1つのpdf

1.pngファイルの受け入れ

f:id:Soluna_Eureka:20210825204216p:plain

ポイント

さっきとほとんど同じだぜ!
複数選択の場合だとFinder表示上のトップファイルが変数の先頭になるっぽいぜ!

2.生成するpdfファイルの命名

f:id:Soluna_Eureka:20210825204232p:plain

ポイント

さっきとほとんど同じだぜ!

3.元のpngファイルがあるフォルダのパスを取得

f:id:Soluna_Eureka:20210825204245p:plain

ポイント

さっきとほとんど同じだぜ!
元の画像たちはなるべく1つのフォルダにまとめて置いとくことをおすすめするぜ!

4.収納するフォルダのパスを生成

f:id:Soluna_Eureka:20210825204256p:plain

ポイント

さっきとほとんど同じだぜ!
ただし末尾に_PDFをつけてわかりやすくしてやるんだぜ!

5.収納するフォルダを生成

f:id:Soluna_Eureka:20210825204309p:plain

ポイント

こっちも末尾に_PDFをつけるんだぜ!

6.pdfをレンダリング

f:id:Soluna_Eureka:20210825204320p:plain

ポイント

pngファイルの名前の順にページを編み込めるぜ!
並びを指定したい時は名前を変えればいいんだぜ!

7.名前を編集してフォルダに収納

f:id:Soluna_Eureka:20210825204333p:plain

ポイント

さっきとほとんど同じだぜ! 基本名だけ変えた方が安全だぜ!

感想

確かに手間は省けるようになった. ただしpdfからの変換は全てのページがpngになるので,不要なものは手動で消さねばならない …おとなしくクリスタEXとpdf対応IOプラグインを買いたいなと思いました.CELSYS万歳!

TwitterのMedeia Studioについて

Twitterの仕様が変わった

今年の4/1から色々と変わった

  • Androidユーザー向けにもSpacesが実装される
  • Periscopeは廃止,代わりにTwitter Media Studioが実装

Spacesについて

スルーします,スマホからじゃないと参加できない媒体とか個人的にちょっと信用できないし手を出す気にはなれないので

Periscopeはどうなった?

現状で以下のように確認できた

  • 新規ユーザーの登録は全て不可能

  • 登録済ユーザーのログインについて

    • iOSアプリは不可能
      • 4/1以前にログイン済ならセーフ,ただし再ログインは不可能
      • ログイン済ならスマホからの放送も可能
      • 過去の自分の放送も閲覧可能,削除は可能
    • ブラウザは可能
      • OBSなどから接続して配信する事は不可能
      • 過去の自分の放送も閲覧可能,ただし削除は不可能(元からできないんだけど)
  • 過去の放送について

    • Periscopeで配信されたものはPeriscopeドメインTwitterドメインの双方で見れる
      • 過去の放送だけ「Periscopeで視聴」が可能になる
      • 逆にProducer(後述)から配信した放送は「Periscopeで視聴」を押しても読み込まれない
    • iOSアプリからログアウトした場合,現時点では「ブラウザからログインしてアカウントを消す」意外に過去の放送を消す手段は存在しない
      • Twitter Media Studio(後述)にも放送があったことは表示されるが一切の編集できない
      • その場合,放送ソースには「Periscope」と表示される,別のサーバーからリダイレクトされてるっぽい

Twitter Media Studioについて

  • 「もっと見る」=>「Media Studio」で別ページが新規タブで開く

    • 「ライブラリ」はツイートしたメディア +「Producer」はPeriscopeを含む全てのライブ放送
    • インサイト」はメディアに関連するアカウントアクティヴィティ
    • 「予約投稿ツイート」は全ての予約ツイート
    • 「アナリティクス」はアカウントの全てのアナリティクス(別ページが新規タブで開く)
  • ProducerがPeriscopeの代わりに該当する,これが本題

Producerのやりかた

  • 「ライブ放送を作成」
  • 放送名,カテゴリ,ソースを設定
    • ソースは配信ソフトから繋げる宛先
    • URLとストリームキーがある
  • 「ライブ放送を作成」

その他の設定

オーディエンス

公開範囲のこと

予約設定

放送の開始時間と終了時間を指定できる 要するに切り忘れ系の放送事故が起こりにくい

繰り返し

定期配信向け昨日.毎週か毎日かで設定可能

ポスター画像

サムネのこと

Periscopeの設定

チャットを全画面モードで表示… 現状ではProducerからの放送にはPeriscopeでの接続は不可能 よってチャットはできない,つまり完全な死に機能,乙

ストリームの暗号化

いらないと思う

リプレイの制限

切り抜き対策かな?

地域の制限

中○人●共◉国に喧嘩を売る時くらいにしか使わないのでは?

補足

Periscopeのアカウントのライブ履歴の場所にもProducerで配信中のライブは表示されないので,コメントやチャットは完全にできないと考えた方がいい Periscopeは現状ではただのアーカイブセットになっている

結論

コメント機能なくした運営には失望した,はい

MacのUSキーボードでGoogle日本語入力を使う際の不具合

MacのUSキーボードでGoogle日本語入力を使う際の不具合

きっかけ

  • 半角スペースをデフォで打ちたい
  • 変換候補の精度が高い方がいい

やりかた

brew install --cask google-japanese-ime

もんだい

  • なぜかドイツ語入力になる
  • そのせいでかっこ等の記号類が思うように打てない

たいさく

  • そもそもGoogle日本語入力を使わない事,鉤括弧も入力できないので完全に無理
  • キーの置き換えもやめた方がいい
  • 半角スペースは「⇧」「␣」で打てるのでまぁ…

macOS `Catalina`に`clang 12.0.0`を入れて`ruby 3.0.0`を入れるだけ

ある日,rbenvを見ていた

brew upgrade ebenvして,

$ rbenv install -list
2.5.8
2.6.6
2.7.2
3.0.0
jruby-9.2.14.0
mruby-2.1.2
rbx-5.0
truffleruby-20.3.0
truffleruby+graalvm-20.3.0

昨年中にruby 3.0.0が正式にリリースされ,rbenvも対応したらしい.入れてみよっかなぁ〜俺もなぁ〜…

そのruby 3.0.0を入れようとしてしくじった

当時の環境は以下の通りだった.

  • MBP 2016 15inch
  • macOS Catalina
    • clang Apple 11.0.0←だいたいこいつのせいだった

吐かれたエラー

...
linking miniruby
generating x86_64-darwin19-fake.rb
x86_64-darwin19-fake.rb updated
make: *** [exe/ruby] Segmentation fault: 11
make: *** Deleting file 'exe/ruby'

BUILD FAILED (Mac OS X 10.15.7 using ruby-build 20201225)

Inspect or clean up the working tree at /var/folders/rk/0hczm32x2znb6pr6h4858hpc0000gn/T/ruby-build.20210104003100.75691.mUe6Zo
Results logged to /var/folders/rk/0hczm32x2znb6pr6h4858hpc0000gn/T/ruby-build.20210104003100.75691.log

Last 10 log lines:
compiling enc/unicode.c
compiling enc/utf_8.c
compiling enc/trans/newline.c
./revision.h unchanged
compiling version.c
linking miniruby
generating x86_64-darwin19-fake.rb
x86_64-darwin19-fake.rb updated
make: *** [exe/ruby] Segmentation fault: 11
make: *** Deleting file 'exe/ruby'

どうやら最後のmakeのとこでしくじったらしい.

原因推定

Segmentation fault: 11,これはなんかコンパイラが悪い気がしたので,設定や経過を見たくなった.

rbenv install -v 3.0.0

-vしながらrbenv installすると諸々の経過が見える,その結果

Configuration summary for ruby version 3.0.0

   * Installation prefix: /Users/username/.rbenv/versions/3.0.0
   * exec prefix:         ${prefix}
   * arch:                x86_64-darwin19
   * site arch:           ${arch}
   * RUBY_BASE_NAME:      ruby
   * enable shared:       yes
   * ruby lib prefix:     ${libdir}/${RUBY_BASE_NAME}
   * site libraries path: ${rubylibprefix}/${sitearch}
   * vendor path:         ${rubylibprefix}/vendor_ruby
   * target OS:           darwin19
   * compiler:            clang -fdeclspec
   * with pthread:        yes
   * with coroutine:      amd64
   * enable shared libs:  yes
   * dynamic library ext: bundle
   * CFLAGS:              ${optflags} ${debugflags} ${warnflags}
   * LDFLAGS:             -L. \
                          -L/Users/username/.rbenv/versions/3.0.0/lib  \
                          -fstack-protector-strong -L/usr/local/lib
   * DLDFLAGS:            -L/Users/username/.rbenv/versions/3.0.0/lib  \
                          -Wl,-undefined,dynamic_lookup \
                          -Wl,-multiply_defined,suppress
   * optflags:            -O3
   * debugflags:          -ggdb3
   * warnflags:           -Wall -Wextra -Wdeprecated-declarations \
                          -Wdivision-by-zero \
                          -Wimplicit-function-declaration -Wimplicit-int \
                          -Wpointer-arith -Wshorten-64-to-32 \
                          -Wwrite-strings -Wmissing-noreturn \
                          -Wno-constant-logical-operand -Wno-long-long \
                          -Wno-missing-field-initializers \
                          -Wno-overlength-strings -Wno-parentheses-equality \
                          -Wno-self-assign -Wno-tautological-compare \
                          -Wno-unused-parameter -Wno-unused-value \
                          -Wunused-variable -Wextra-tokens
   * strip command:       strip -A -n
   * install doc:         rdoc
   * JIT support:         yes
   * man page type:       doc
   * BASERUBY -v:         ruby 2.7.2p137 (2020-10-01 revision 5445e04352) \
                          [x86_64-darwin19]

を吐きながら,同じように失敗した.

   * target OS:           darwin19
   * compiler:            clang -fdeclspec

を見るに,macOS備え付けのclangを使っていることは察せた(私はいまだにコンパイラに手を出した事がない).

$ clang -v
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

どうもビルドにはコイツを使ったらしい. 悩んでTwitterを彷徨っていたら,clang Apple 12.0.0ruby 3.0.0を入れたっぽい方を発見した. またこ↑こ↓によると,macOS Big SurでちゃんとXCodeを入れている人は

$ clang --version
Apple clang version 12.0.0 (clang-1200.0.32.27)
Target: x86_64-apple-darwin20.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

となるらしい(私はXCodeを入れた後に消した,だってあれデカイし重いし…).

つまりclangのバージョンが古いせいでしくじったんじゃね?と考えた.

解決編

概要

CommandLineToolsを強制的に入れ直すとclang 12.0.0になるのでヨシ!ruby 3.0.0も入れられる!

手順

Catalinasoftowareupdateに任せてもそれ以上にCommandLineToolsは新しくならない(つまりclang 12.0.0はどう足掻いても手に入らない)ので,いっそ手動で入れ直す.

$ sudo rm -rf /Library/Developer/CommandLineTools
...
$ xcode-select --install

バージョン確認すると

$ clang -v
Apple clang version 12.0.0 (clang-1200.0.32.28)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

こうなるはず,やっぱりXCodeがなくても大丈夫だったじゃないか…

これで

$ rbenv install 3.0.0

すれば

Installed ruby-3.0.0 to /Users/username/.rbenv/versions/3.0.0

が出るはず,バージョンを変えるか変えないかはあなた次第だが

rbenv local 3.0.0

とかでできる.

終わり!閉廷!以上!みんな解散!君もう帰って良いよ

おまけ

clang 11.0.0(やそれ以前の任意のバージョンのclang)を使いたい時にどうするかを考えた.

概要

homebrewllvmを入れて,それ経由でclangのバージョンを任意に変えられるようにしようぜ?

llvmとは

llvmを開発している組織さんの公式ページはこ↑こ↓llvmまわりのダウンロードやドキュメント等はこ↑こ↓llvm自体はcc++コンパイラclangのバックで動いているような中間言語を生成するシステムで,というかclangcの仕様に対応しながらllvmと並行で開発・維持され続けているものになっている…らしいな? つまりある時からllvmのバージョンがclangのバージョンになっている,そしてbrewで手に入れられる最新版は今だとllvm 11.0.0で,それを入れるとclang 11.0.0がもれなくそれについてくる…という流れになる.

ただあくまで言語やアーキテクチャに依存せずより効率の良い中間言語を生成しようとするのがllvmで,それを利用してobjective-cなどをコンパイルするのがclang,そんでclangの開発の言い出しっぺはやっぱりAppleで…だからあっXCodeにちゃんと最新版のclang 12.0.0が入って提供されている,やっぱ林檎ってすげぇわマジで…

…なのでclanggccよりも性能と使い勝手が共に良い…らしい(私は開発者ではないので全くわからないが).

事前準備

homebrewを導入しておく.

最新版のllvmだけで良いなら

まずは入れてみる.

$ brew install llvm <versions>
...
$ brew info llvm
...

ちゃんと注意書きを読む(抜粋).

To use the bundled libc++ please add the following LDFLAGS:
  LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"

llvm is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have llvm first in your PATH run:
  echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> /Users/SolunaEureka/.bash_profile

For compilers to find llvm you may need to set:
  export LDFLAGS="-L/usr/local/opt/llvm/lib"
  export CPPFLAGS="-I/usr/local/opt/llvm/include"

keg-only…つまりシンボリックリンクが生成されないタイプのパッケージだけど,中身はちゃんとあるからパスだけは通そうね!あとコンパイラに知らせたいフラッグにも対応しているから,使いたければパスだけは通そうね!(意訳)

…ということで,コマンドとしてのllvmはどうもなさそうなので,それを打ってllvm経由のclangが有効になるような感じにするために,.bash_profileをいじる(参考:学生たちの技術ブログ).まだbashでごめんなさい

function llvm (){ #関数を定義している
    export PATH="/usr/local/opt/llvm/bin:$PATH" #以下,先の注意書きの通りにパスを追加・変更する
    export LDFLAGS="-L/usr/local/opt/llvm/lib"
    export CPPFLAGS="-I/usr/local/opt/llvm/include"
    unset -f llvm #いったん呼び出されたら定義されたこの関数を破壊する
}

ここまで終わったらterminalを立ち上げ直して

$ llvm
$ clang -v
clang version 11.0.0
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin

になるはず. 新しいタブを開けば元に戻るので安心だね!

旧版のllvmを使いたいなら

homebrewは基本的に最新版以外は絶対に認めないマンな上に過去版のインストールに関しては仕様が変わるらしい,そんな中で個人的に現在の参考になったのはこ↑こ↓brew tap-newbrew extractを用いて,自家製のtapに公式のformulaをぶち込んで,そのtapから更にbrew installすれば良い,らしい.これを発案した人,本当に賢い…

ということで試しにllvm 10.0.0を入れてclang 10.0.0に切り替えようとしてみる(主要な出力を抜き出す).

$ brew tap-new llvm/1000
Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/llvm/homebrew-1000/.git/
[master (root-commit) d649d61] Create llvm/1000 tap
 3 files changed, 85 insertions(+)
 create mode 100644 .github/workflows/publish.yml
 create mode 100644 .github/workflows/tests.yml
 create mode 100644 README.md
==> Created llvm/1000
/usr/local/Homebrew/Library/Taps/llvm/homebrew-1000

$ brew extract llvm llvm/1000 --version 10.0.0
==> Searching repository history
==> Writing formula for llvm from revision 96544f6 to:
/usr/local/Homebrew/Library/Taps/llvm/homebrew-1000/Formula/llvm@10.0.0.rb

$ brew install llvm/1000/llvm@10.0.0
==> Installing llvm@10.0.0 from llvm/1000
llvm@10.0.0: A full installation of Xcode.app is required to compile
this software. Installing just the Command Line Tools is not sufficient.

Xcode can be installed from the App Store.
Error: An unsatisfied requirement failed this build.

XCodeがないとダメと言われた.なんだコレは,たまげたなぁ… もしちゃんと入れている人がいたら試してみて欲しい.

あとはどうにかしてバージョンを切り替えてみて欲しい…

感想

コンパイラって色々あって大変だな〜とづまりすとこ 絶対もっと良いやり方があるのでは?brewはバージョン管理に不向きだしllvmclangは公式サイトからDLして突っ込んで自分でちゃんと関数を組み上げた方がいいんじゃないか?問題は解決したからもう何も考えられないけど…