ネットが遅いのでIPv6 IPoE + DS-Liteにした

TL;DR

BB.exciteコネクト(IPoE接続プラン)1DS-Lite対応ルータで月額700円(税抜)でインターネットが速くなったのでフレッツ光が遅い人は試してみてください。

IPv4 PPPoEが遅い

本格的に在宅勤務が始まったが、自宅のネットが遅すぎて業務に支障をきたしていた。

どうもIPv4 PPPoEが詰まっているようだ。PPPoEはネットワーク終端装置という部分で輻輳しやすいらしい。 いまはIPv6 IPoEというものが利用可能で、これはGWR(GateWay Router)を介してインターネットに出ていくいわばLANそのものであり高速だとか2。 "PPPoE IPoE" とかでググるとそれっぽいポンチ絵が出てくるので見てみてください。

IPv6 IPoEを契約する

電話したり契約書を郵送したりしなくてもIPoEを試せるプロバイダはBB.exciteINTERLINKを見つけた。他にもあると思うので自分だけのプロバイダを見つけるんじゃ。

PPPoEのように接続認証が利用できないのでどうするのかと思ったら、フレッツ光ネクストが開通したときに郵送されてくる「お客さまID」と「アクセスキー」をプロバイダに通知することで直接接続できるようだ。的外れな例えかもしれないけど、CATVインターネット接続はWAN側インタフェースに直接IPが割り当てられるのでプロバイダにMACアドレスを通知すると思うんだけど、あんな感じのイメージで捉えた。 で、郵送でしか送られてこない書類なんてもちろん失くしてしまったので116116に電話して再度郵送してもらった。今度はちゃんとスキャンしてDropboxに保存しておいた。

無事お客さまIDとアクセスキーが届いたらプロバイダでIPoE契約をする。1時間〜半日ほどで使えるようになるようだ。待っている間も開通後も既存のPPPoE接続に一切の影響がないので気軽に申し込むことが可能。

DS-Lite (IPv4 over IPv6)でIPv4も利用する

IPoEが開通した時点でIPv6でサービス提供しているサービスはすべて利用できる。YouTubeNetflixIPv6で利用できるし凄く速い。 ただ、IPv4でしか利用できないサービスは一切利用できない。ここでDS-Liteという技術を利用して、IPv6パケットはそのままIPv6インターネットへ、IPv4パケットはIPv6カプセル化されてAFTRと呼ばれる出口でNAT変換されてIPv4インターネットへ出ていくようにすることができる。つまりきちんと設定さえしてしまえば、利用側はIPv6だのIPv4だの意識することなくインターネットに接続できるわけだ。これはGeekなページのDS-Liteの仕組みが図もあってわかりやすかった。

DS-Liteを利用するには対応ルータが必要となる。プロバイダのIPoE契約時に必ず対応ルータの一覧があると思うけど、手持ちのRTX1100/RTX1200ともにDS-LiteのためのIPIPトンネル設定が可能だったので追加コストゼロだった。まだ持ってなくてYAMAHAルータの設定に抵抗がない方は、RTX1100は中古で3000円ほど、RTX1200は中古で10000円ほどで手に入ったりするのでオススメ(ホンマか?)

ということで非常に速くなりました!朝から晩まで、これまで特に使い物にならなかった夜9-12時ぐらいのピークタイムも含めて上下とも安定して70Mbps以上出ます3

RTX1100/RTX1200でDS-Liteの設定

以下、RTX1100/RTX1200での設定例。いずれでも動作確認した。非常に簡単。

[RTX1200] # show config
# RTX1200 Rev.10.01.78 (Wed Nov 13 16:29:42 2019)
# Memory 128Mbytes, 3LAN, 1BRI
# main:  RTX1200 ver=b0
# Reporting Date: Apr 7 23:35:59 2020
administrator password *
login user xxxx *
security class 2 off off off
console character ascii
console prompt "[RTX1200] "
ip route default gateway tunnel 1
ipv6 prefix 1 ra-prefix@lan2::/64
ip lan1 address 192.168.11.1/24
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
ipv6 lan2 secure filter in 1010 1011 1012 2000
ipv6 lan2 secure filter out 3000 dynamic 100 101 102 103 104 105 106
ipv6 lan2 dhcp service client ir=on
tunnel select 1
 tunnel name DS-Lite
 tunnel encapsulation ipip
 tunnel endpoint address 2404:8e00::feed:100
 tunnel enable 1
ipv6 filter 1010 pass * * icmp6 * *
ipv6 filter 1011 pass * * tcp * ident
ipv6 filter 1012 pass * * udp * 546
ipv6 filter 2000 reject * * * * *
ipv6 filter 3000 pass * * * * *
ipv6 filter dynamic 100 * * ftp
ipv6 filter dynamic 101 * * domain
ipv6 filter dynamic 102 * * www
ipv6 filter dynamic 103 * * smtp
ipv6 filter dynamic 104 * * pop3
ipv6 filter dynamic 105 * * tcp
ipv6 filter dynamic 106 * * udp
telnetd service off
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.11.100-192.168.11.199/24 expire 12:00 maxexpire 12:00
dns server dhcp lan2
sshd service on
sshd host lan1
sshd host key generate *

ほとんどそのままフレッツ光ネクスト インターネット(IPv6 IPoE)接続 : コマンド設定DS-Lite(transix)でインターネット接続 : コマンド設定あたりから持ってきただけ。例によって、これは情報提供のみを目的としているので自己責任でご利用ください。

「AFTRのアドレス」という部分はインターリンクのFAQが参考になるけど、NTT東日本エリアかNTT西日本エリアかによって接続先が違う。このIPv6アドレスからInternet Multifeedのtransixを経由してIPv4に出ていく。診断くんとかで確かめるとtransixのsharedなIPv4アドレスに変換されていることが確認できる。

AFTRのアドレスは2つ掲載されているが、RTX1100とDS-Liteで高速化(ひかり電話なし)というサイトでkeepaliveを使って8.8.8.8へのpingの反応をみてもう片方にフォールバックする方法が書かれていて、これはオシャレだと思った。まあ片方だけでも特段困ることはないでしょう。

拠点間VPN自宅サーバをどうするか

で、今更気付いたけど、IPoE + DS-LiteではこれまでのようにネットボランチDNS4を利用できない。

これまではPPPoE接続してWAN側にIPv4グローバルIPを割り当てるppインタフェースをnetvolante-dnsでホスト名に紐付けることで名前解決していた。このホスト名をCNAMEレコードでエイリアスし、ルータの内側にあるホストにStatic NATでパケットを向けてやると、あたかも固定IPの自宅サーバのようなことが安価に実現できていたのだ。

ところが前述の通り、DS-LiteではtransixのNAT経由でIPv4インターネットに接続するので、サーバとしてIPv4の接続を受け入れるのが不可能になる。素晴らしいことに、ネットボランチDNS自体はすでにIPv6対応をしているが、利用できるのはRTX1210等の一部ルータのみに限られる。手持ちのRTX1100/RTX1200とも非対象機種となっている。誠に残念だ…

あいや、IPoEだけではなくてPPPoE契約も残して、IPoE + DS-LiteしつつPPPoE接続もして要するにこれまと全く同じ方法でネットボランチDNSを利用することは可能だ。ただ、自宅サーバの目的のため"だけ"にPPPoEの料金を支払いつづけるのはちょっともったいない気がする。とはいえ、自宅サーバはどうでもいいとして、実家と東京、東京と米国の拠点間VPNは紛れもなくこのネットボランチDNSを使って互いのホストを指定していたので、これが利用できなくなるのはかなりの痛手だ。

IPv6の固定IPを利用できるサービスなどもあるらしいと教えていただいたので、良い方法がないかもう少し色々考えてみたい。いいアイデアがあったら是非教えてください。


  1. 別にINTERLINKのZOOT NATIVEでもよい。こちらは月額1000円(税抜)

  2. 結局今は利用者が少ないから速いだけということなのか?専門家ではないので細かいところは許してくだされ。

  3. うちはVDSLなので100Mbpsで頭打ちになっている。その分安いので不満はない。

  4. YAMAHAが提供するDynamic DNSのようなサービス。これを無料で使わせてもらえるのもYAMAHAルータを使う大きな魅力。

AWS Japanで1年経った

4月1日でAWS Japanに入って1年が経ちました。とても早かったです。

ネットワークエンジニアとしてキャリアが始まり、自宅サーバに固定IPを8本引いてXenKVMで仮想インスタンスをホストして知人に有料で貸してたら海の向こうからやってきたEC2の登場に腰を抜かし、その後バックエンドエンジニアになり、Androidエンジニアになり、10年の時を経てAWSを使ったお仕事をしているのは感慨深いものがあります。

AWS Japanで働いていてよかったことは沢山ありますが、これまでとは比較にならない深度でAWSのことを理解し、様々な生のユースケースに触れられるところです。AWSのスキルは言ってしまえばいちクラウドベンダの知識に過ぎませんが、それが世界中で使われているので事実上世界で通用するスキルを身に着けていることになるのは素晴らしいことです。

僕のキャリアはスタートアップといわゆるウェブ系企業を渡り歩いてきたので、比較的シンプルな構成のアプリケーションに関わることが多かったですが、AWS Japanの技術者として色々なお客様と仕事をしていると、かつての自分には想像もつかなかったような難しい要件を求められることが少なくありません。その時に、どんな難しい場所にもぴったり合うブロックのピースを見つけられるのは、今なおAWSをおいて他にないというべき境地にあると感じます。

21世紀も20年代に突入し、エンジニアとクラウドの関わり方もまた少しずつ変わりつつあります。今年はぜひとも、自分の最大の強みであるモバイル開発の観点からもAWSの良さを伝えていけたらなと考えています。今年も宜しくお願いいたします!

そうそう、僕のチームは次の2ポジションを熱烈募集しています。ご興味のお有りの方は是非お声がけください!それでは。

www.amazon.jobs

www.amazon.jobs

心のローパスフィルタ

地殻を毛細血管のごとく駆け巡る光ファイバが空間の垣根を取り去った結果、四半世紀前なら触れることすらなかった情報に晒されるようになった。 これは幸福でも不幸でもある。

観測する限り、多くの人は自分の置かれている環境の平均値で構成されている。朱に交われば赤くなるというやつだ。 これは環境のお陰で自分が周りのレベルまで引き上げられる例も、自分自身がいわば浸透圧の合った塩分濃度に自然と落ち着く例もあるだろう。 とにかく、環境から著しく外れた存在に触れるには周囲の人間を何ホップもしなければならなかった。

ところがインターネットが魔界の界峡トンネルのように突然1ホップで次元の違う人々に出会うことを可能にしてしまった。その結果、ブラウザ越しの玄関先にはS級妖怪がゴロゴロ歩いている。テクノロジーの進化はいつも喜ばしい。問題はこれにどう向き合うかだ。

ある種の人間にとって―まあこれは僕のことなのだが―半径30m以内にいる*ように見える*人たちは、自分が到達すべき平均目標に見えてしまうことがある。こうなると不幸だ。本来は界峡トンネルを越えないと出会うことすらできなかった文字通り次元の違う存在が当然にできることを、僕はどうして努力してもなお達成できないのだろうと思い悩むことになる。立っている土台も、越えてきた屍の数も、これから対峙する課題のスケール感も違うにも関わらずだ。

結局の所、昔からお母さんに言われる「他所はよそ、家はうち」に行き着く。どこかで心のローパスフィルタで余りにも高い理想をカットしないと自分の足元もおぼつかない。インターネットは簡単に他人の人生を摂取することができ、それはアルコールのようなエンターテインメント性と常習性をもたらすが、あくまで他人の物語だ。慎ましくも愛らしい自分の人生を、諦めるのではなく、前向きに受け入れなければならない。自分の他に自分の人生の面倒を見てくれる人はいないのだから。そんなことを考えていた。

肉体と精神の不可分性

一週間ほど出張で非常に寒い地域にいて、不運にもインフルエンザに罹患してしまい寝込んでいた。ようやく帰国できたが、身体的にも精神的にも参ってしまった。

 

元々体力には自信があって、この10年ぐらいインフルはおろか風邪で休むことすら稀だったし、昨年9月で酒もやめたので「二日酔いで翌日を棒に振る」みたいな現象もまったくなくなって、健康とは完全にコントローラブルなものになっていたはずだった。

 

ところがいざ39℃の熱で数日間夢うつつの生活を送ると、健康というのがどれほど得難いものであったかという当たり前の事実を思い知らされた。とりわけ、肉体的健康とは完全に独立して存在していると思っていた精神的健康というものが、肉体的な衰弱によりあっさりと共倒れになったのは大きなショックだった。知力は体力に依存しているのだ。考えもしなかった。

 

久しぶりに出社して懸垂機にぶら下がってみると、果たして体が持ち上がらない。あれだけ毎日取り組んでいたことが、砂上の楼閣ように一夜にして失われてしまった。また、毎朝3時に起きてコツコツつづけていたアルゴリズムクイズと数学も、いまは何をやっていたのか思い出せないほどだ。特に極度に頭を使う作業が先々週ぐらいから絶不調で、一体どうなってしまったのか自分でも呆然としていたのだが、思えば病気の兆候だったのだろう。体力的にはようやく回復したが、まだ頭の中は蜘蛛の巣がかかったように茫漠としている。いまも言葉がうまく出てこない。

 

これまで、自分に対する投資はもっともROIが高いという信念をもって絶えず勉強し続けてきた。結果的に、努力はすべてを叶えないが、自分がなりたいソフトウェア技術者ぐらいはかならず努力でたどり着けるという確信を持つに至った。ところが、このような前提は肉体的な健康というものに大きく依存していることに図らずも気付かされた。これから30代後半を過ごし、40代に突入するにあたって、この基盤はますます脅かされる可能性が高い。これまでのように、ただ盲目的に自分のやれることをやってさえいればどこかにたどり着けるという確信がすこし揺らいでしまった。自分がいまの状況にあるのは、単に幸運だったのだ。慎まねばならない。

 

また近い将来、怨念にも似た執念の火が自分の中で燃え始め、再び元の自分に戻れる日がくると信じているが、それまではほんの少しだけ無茶な早起きをやめてしばらく自分の健康と向き合いたいと思う。命あっての物種。人生は長く短い。このバランスが最も難しい。それでは、近いうちにまた。

レッテル貼りを嫌っていた自分がレッテル貼りモンスターになっていた話

ここのところずっと考えていたことが自分の中でまとまってきたので言語化する。

僕の非常によくない傾向として、自虐的・自罰的な物言いをするという点がある。たとえば、

  • CS学位がないので何をやってもダメ
  • 算数がわからないので競プロやる資格なし
  • 英語サッパリできない、TOEIC900点は現地校の幼稚園なみ

というようなやつだ。これは正直に言って、自分の中では経験に基づく事実のようなもので、いずれも「だから何とかしなくては!」という部分が自分に対してかかっているのだが、言い方が稚拙すぎて、同一属性の全人類に対して銃口を向けていることに気付いていなかった。

「僕は文系なので…」みたいな自虐もそうだ。そもそも自分がこういうレッテル貼りに対して人一倍憤慨していたはずなのに。

この画像が一時期Twitterで流行っていて「文系はこんなのも解けないのか」みたいなdisりをみるたびに、微分導関数ぐらい導けるわいふざけんなよという思いがあった。"文系"を無学のエイリアスとして使うんじゃないよと。これは、ともすれば"文系"を自分に対する言い訳として使っていた軟弱な態度と完全に矛盾する。それに、理転して情報科学の大学院に進学した今では、この言葉は自虐としてすら機能していない。自分が最も嫌い、軽蔑していたレッテル貼りを自ら進んで行うモンスターになっていたということだ。いまは自分を恥じている。

US駐在したときもそうだった。日本では謎のコンサルが「シリコンバレーのエンジニアは年収2000万!」みたいな物価も何も考えてねえだろみたいなことを言うのを見て疲弊し、たまに現地就職の日本人にまで「駐在組はクビにもならないし家賃補助もあっていいですよね」と謎の憎しみを向けられたりしたものだ。どれも実態を伴わないレッテル貼りによるものだ。全部自分が嫌っていたやつだ。現代のイソップ童話の登場人物に自分がなってしまっていた。

僕個人としては次の点に気を付けたい。

  • 自分の属するカテゴリについて言及しない。常に主語は自分とする。
  • 自虐を控える。
  • 何かを貶めない。批判は建設的対案とともにする。

自分の娘に見られて恥ずかしくないことだけインターネットに書こうと思います。それではポケモン捕まえてきます。

とにかく次の10年を生き残りたい

ついに2020年になってしまった。

この10年はとにかくネイティブアプリ開発にすべてを投資した。
京都GTUGのイベント情報によれば、第1回Androidハッカソンは2009年9月5日に開催されている。このハッカソンのためにドコモ HT-03Aを契約しに行ったのがAndroidとの出会いだった。当時APIレベル3、コードネームCupcake、バージョン1.5である。加速度がホントにJavaのコードから取れてびっくりしたのを覚えている。

実に丸10年の月日が過ぎた。スマートフォンの普及率は20-30代で90%を超え、今後も低くなるということはないだろう。当然、それらスマートフォンで動作するネイティブアプリ開発の需要もしばらくは続くに相違ない。ただし、開発の前線から見える情景は少しずつ変わってきているようにも感じられる。
3-4年前だとネイティブファースト(特にiOS)が当然であり、ウェブが存在しないサービスも少なくなかったが、ウェブへの回帰も見られるようになってきた。また、FlutterによるiOS/Androidアプリ同時開発も流行しているように思う。この辺りは個人の感覚だし、東京とそれ以外、あるいは米国、欧州でもかなり違っているのだろうと想像するが、本ポエムの主眼ではない。

次の10年は何に投資すればよいのだろうか。本当に知りたい。僕は深刻にこの辺りの嗅覚が鈍い。
iPhoneがリリースされた2007年当時、僕はすでにプログラマだった。当時所属していた会社はSkypeのようなP2P通信アプリを開発しており、LinuxザウルスやSymbianOSなんかにも対応していた記憶がある。その渦中にあって、iPhoneがその後天下を取ることを想像できなかった。BlackBerryNokia端末との違いが分からなかった。当事者とは案外そんなものだ。何回目かのxR元年と、いつ来るかわからないシンギュラリティ。また同じように、10年後振り返って「ああ、なんであのときアレに投資していなかったのか…」と嘆息するのだろう。

次の10年は僕の40代を捧げる10年となる。実際に35歳を過ぎてみて、新しいことに興味を持って勉強をし続ければまだまだ全然戦えるという感覚はある。理論や研究を補うために大学院にも進学した。競プロも始めた。酒もやめた。ただまあ、抗いきれない事実として体力は落ち続けているし頭の回転も少しずつ鈍っている。圧倒的な瞬発力の戦いから、総合格闘技で最後は寝技で絞めるみたいな感じになってきている。次の投資先は慎重に決めねばならない。

一旦、2020年Q1は再びウェブフロントエンドへの投資を少し増やしてみようと思っている。2013年まではフロントエンド開発(なんと、jQueryとbackbone.js)もしていたのだが、7年も経ってしまって自分の知識はバクテリアに分解されて石油となっている。その間ウェブ技術は目覚ましい発展を遂げ、現在のJSは当時とは完全に別物だと感じる。TypeScriptで型の恩恵も受けられる。ありがたいことだ。この状況を作ってくれた人々に感謝したい。

という訳で何卒諸々ご指導ください。本年も宜しくお願いいたします。

アルゴリズムと数学的思考力

厳しい。年始早々厳しさを感じている。自分のプログラミング力にだ。伸び悩んでいる。

端的に言って、数学力のなさが自分のプログラミング能力に制限をかけている。例えばこの問題。

560. Subarray Sum Equals K
入力として与えられる配列 nums のうち、合計が k となる部分配列の個数を数え上げよ。どうも有名な問題らしいが…

まず大前提として、部分配列なので i, j の2重ループで始点・終点を定めて sum(nums[i, j]) = k になるものを数え上げれば必ず答えが得られる。最悪計算量は O(N^3) ただし i < nums.length < 20000 という制約があるので N^3 では遅すぎるから何か考えてくださいというのがスタート地点。

ここで、結果の変わらない累積和を何度も求めているので nums[i, j] = k を求めたい場合、 nums[0, j] - nums[0, i - 1] としてこれまでの計算結果を利用できることに気付けると計算量を大幅に減らせる。ただし、nums には負数が含まれているので同じ累積和が何度も出現する可能性があるので Map で出現頻度をカウントする

public int subarraySum(int[] nums, int k) {
    int j = 0;
    Map<Integer, Integer> seen = new HashMap<>();
    seen.put(0, 1);
    int counter = 0;
    for (int num : nums) {
        j += num;
        int i = j - k;
        if (seen.containsKey(i)) {
            counter += seen.get(i);
        }
        seen.put(j, seen.getOrDefault(j, 0) + 1);
    }
    return counter;
}

これで時間計算量 O(N) 空間計算量 O(N) で通った。 seen.put(0, 1) の部分だけトリッキーで、このアルゴリズムがそもそも前の計算結果を利用するものなので、初めて sum(nums[0, j]) == k になるケースをカバーする。

これってもはや算数の問題で、区間 nums[i, j] = knums[0, j] - nums[0, i - 1] で求まるっていうのは答え見て初めてマツコデラックスが感心する時の声で「ハ〜〜〜〜〜〜!」って唸ることしかできなかった。もう1題。

373. Find K Pairs with Smallest Sums
ソート済み配列 nums1, nums2 と整数 k が与えられる。このとき nums1, nums2 から1つずつ取り出してつくるペア (u,v) を、和が小さい順に k 個取り出せ。

Input: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
Output: [[1,2],[1,4],[1,6]] 

これも O(N^2) で全ペアが列挙でき、それを整列するコストが O(N log N) なので最悪計算量 O(N^2) で必ず解ける問題。これには特に nums.length, k の制約が示されていないが、AtCoderなどのコンテストでは間違いなく O(N^2) では制限時間に収まらない(=不正解となる)データが与えられるだろう。したがってもっと高速なアルゴリズムを考えなさいというのが趣旨となる。

ここで nums1, nums2 はソート済みなので、nums1[0], nums2[0] は常に最小のペアであることが保証される。このような最小のインデックスをそれぞれ i, j とした場合、nums1[i], nums2[j] が解答のひとつならば nums1[i + 1], nums2[j]nums1[i], nums2[j + 1] が次の答えの候補になる。言われてみればそうである(孫権顔)

後は候補が複数あった場合に低コストで最小値を得られるデータ構造を考える。そう、二分ヒープ(最小)である。min heap の追加・削除の最悪コストは O(log N) なので、今回要素数 k の候補から常に最小を取り出しつつ k 個集めるまで繰り返すので O(K log K) が模範解答のひとつとなる。本件は競プロ界で著名な 宇宙ツイッタラーX さんに解説いただいて初めて理解できた。スレッドを参照されたい。

実装例も、氏のそれより綺麗には到底書けないので 氏のgist を見ていただきたい。

で、ここからが主題なのだが、これらの問題はプログラミング能力というか算数の問題なのだ。最初の問題はデータ構造と言っても HashMap ぐらいしか使ってないし、2題目も min heap こそ確かにコンピュータ・サイエンス的なデータ構造ではあるものの、これは最小(最大)値を O(log N) で出し入れできる(最小(最大)値の参照だけなら O(1))データ構造とだけ覚えていれば使える類のものだし、そこがこの問題を解く最大のキーというわけではない。現に僕は min heap を使うと模範解答になるというヒントを貰った後も「 nums1[i], nums2[j] が答えならば nums1[i + 1], nums2[j]nums1[i], nums2[j + 1] がその候補になる」という核心部分が出てこなかったし、むしろここがこの問題の最大のキーポイントであるわけで。

ここからは自分でもうまく整理できていないのだが、これは「数学力」なんだろうか。僕が数学が苦手なのは自他ともに認めるところだが、いま大学院の授業についていくためにマセマの微分積分とかを解いてるけど、なんというかこう、公式あてはめて微分するとかとは違うわけじゃないですか。使われているのは中学生レベルの四則演算で、むしろ「数学的思考力」を問われているというか。

社会人になってプログラマとして10年ぐらいやっていて忘れかけていたけど、そういえば僕は勉強まったくできなかったな、受験敗者だったわ、忘れてた。僕には数学的思考力が致命的にない。こういうのをアルゴリズムクイズを解いていると嫌というほど思い出させられる。

今回の2題は非常に悔しい思いをしたので覚えたが、これを繰り返していけば僕のように頭がよくない人間も類題を解けるようになるのか、それともちょっとひねられるだけでまたまったくお手上げになってしまって悔し涙に枕を濡らすのか、いまは分からない。願わくは2年後に読み返したときに「あの時はあんなしょうもない問題で悩んでいたんだなぁ😅」と思えるようになっていたいが、どうやることやら。正月に書くような内容ではないな…