ABC260Dで学んだこと
set
s.upper_bound(x) のほうが upper_bound(s.begin(),s.end(),x) より速い
upper_bound(s.begin(),s.end(),x) でやるよりはseg_treeで管理したほうが速い
wslにsshサーバーを立ててプライベートネットワークの他のPCから入る
windows11のアプデでPCがまともに起動しなくなったので色々やり直した。
毎回やり方わからなくなるので、自分用にメモ。
・ホストマシンが起動したら自動でsshサーバ立ち上げてくれて、
・ローカルマシンはssh/config設定した内容&鍵認証で入るだけ、
を目指す。
途中までホスト側で作業、最後の鍵登録でクライアント側に移る。
やったことは以下
ホスト側
wslのインストール
docs.microsoft.com
いつから変わったのか、ここにあるようにコマンドプロンプトなどで "wsl --install" と入力するだけでwsl(Ubuntu)を入れてくれました。らくちん。
VScodeのインストール
azure.microsoft.com
(どのページから行ったか忘れたけど)公式ページから入れるだけ。
wsl側のshスクリプト作成(wslのIPアドレス取得、ポートフォワードの設定)
参考
wsl2でsshサーバを起動し、外部からそこに接続 #Linux - Qiita
#!/bin/bash IP=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}') netsh.exe interface portproxy delete v4tov4 listenport=22 netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=$IP sc.exe config iphlpsvc start=auto sc.exe start iphlpsvc
ifconfigがないと言われたので入れる
wsl
Command 'ifconfig' not found, but can be installed with: sudo apt install net-tools
netsh.exe interface portproxy show v4tov4
windows側のbatファイル作成(上記shの呼び出し、sshサーバ起動を行う)
batファイル
wsl --exec bash /home/port_fowarding_22.sh wsl -u root --exec sudo service ssh restart
ルーターの設定
ポート開放。
使っている機器の説明を参照。
公開鍵の登録の準備
まずパスワード認証を許可する(あとで戻す)
wsl
sudo vi /etc/ssh/sshd_config
で
PasswordAuthentication no
にする。
viの操作は
・"i"で編集モード?に変更
・該当箇所を編集
・"Esc"で編集モードを抜ける
・":wq"で保存(w)と終了(q)
もしなければ mkdir ~/.ssh しておく
ここでクライアント側の操作に移る。
鍵の登録が終わったら、先ほどと同じ手順でパスワード認証をnoに戻す
サーバー起動
wsl
sudo service ssh restart
このときに(もしくは前の手順だったかも)、鍵のファイルのpermissionがどうのこうのとエラーが出たら、
それに従って設定を変更する。
chmod +x ~~~
で行けたはず。
クライアント側
鍵生成
https://linuxfan.info/ssh-ed25519
ssh-keygenコマンドで作成できる。
- t オプションで鍵の種類(暗号化のアルゴ)を指定できる。
指定しなくてもできるが、Ed25519が良いみたいな話をよく見るのでそれで作成した。
ssh-keygen -t ed25519
鍵登録
参考
qiita.com
色々方法はあるが、ssh-copy-idコマンドを使う
ssh-copy-id -i ($公開鍵のパス) ($接続先のアカウント名)@($接続先アドレス)
もしくはscpコマンド
SSHの鍵認証設定 #ssh公開鍵認証 - Qiita
scpでコピーしたあと、ホスト側でauthorized_keyに追加する必要がある。
追記 2023/10/31
いつからかPC起動時にsshサーバが自動起動しなくなっていた。
wslで
sudo service ssh restart
すれば起動するのでポートフォワードとかは生きているっぽい。
どこかのWindowsUpdateとかでタスクスケジューラが何か変になったとか?あとでなおす。
UnityでVisual Studio使うときに予測変換(Intelisence?)が出ない
最近Unityを触り始めました。
visual studio で予測変換(Intelisence?)が出ないな~、でもEditor Attachingの設定項目ないな~、と思っていたら使うエディタの設定が少し違ったようです。
docs.microsoft.com
Unityのエディタ画面から
Edit>Preferences>External Tools>External Script Editor のエディタ選択で、visual studioを選んで問題なければよし。
それでもIntelisenceが出ないときは、エディタ選択でBrows選んで
Program Files>MicrosoftVisualStudio>...>Common7>..>devenv.exe を選ぶ。(パスは環境による)
と、相変わらずEditor Attachingは出ないがIntelisenceが効くようになった。
おそらくUnityのバージョンが新しいとこうなるっぽい?
参考書にならってvisual studio入れたものの、
今までvisual studioはなんとなく敬遠してVScode使ってたので、
VScodeでできるようにしたい。
でも.NET SDKって何。
1e12 != 1000000000000 ?
これのとき、2文探査の上限を
ll r=N*1e12/K + 10;
としたらWAで、
ll r=N*1000000000000/K + 10;
としたらACだった。
1e12 != 1000000000000 ?
あとで調べる
wsl2のdockerのkaggle公式イメージ(gpuあり)のコンテナに建てたjupyter-labにプライベートネットワークの他のPCから繋ぐ
いろいろ試行錯誤あったので自分用メモ
後でもう少し詳しく書く(はず)
やったことは以下
- wsl2の有効化
詳しい説明がたくさんあるのでそちらを参照。
途中で山ほど見た。
後でリンク貼る。
- docker及びnvidia-dockerのインストール
dockerはともかくnvidia何とかあたりをどうやったのか自分でも覚えていない。
この辺のサイトを見てやったと思う。
初心者がDocker + Ubuntu20.04でKaggleのGPU環境構築した備忘録 - Qiita
待ってました CUDA on WSL 2 - Qiita
- kaggle環境のdockerfileを取得
buildにすごく時間かかる。
し、たまによくわからんエラーで止まる。
何度かコンテナやイメージを消してやり直したりしたらできてた。
kaggleの環境をdockerで再現 | VasteeLab
- コンテナを起動
(wsl2) docker run --runtime nvidia --rm -it -p 8080:8080 -v /home/hoge/kaggle-ws:/home/kaggle-ws --name kaggle-gpu kaggle/python-gpu-build /bin/bash
こんな感じのコマンドでやった。
runじゃなくてstart,attachで--rmなしとかのほうがいいんですかね。dockerワカラナイ。
でもどこかでインスタンスは毎度消したほうがいいとかって見た気がする。
一応オプションについてメモ
あっているかはわからん。
・ --runtime nvidia : ランタイムをnvidiaのやつ(要はGPU?)使いますよということ?
・ -it : なんかコマンドの入出力をコンテナとホストでつないでくれるやつ?
・ --rm : コンテナ終了時(exitしたとき?)にインスタンスを自動削除してくれる
・ -p 8080:8080 : ホストとコンテナのポートフォワード?してくれる。jupyter-labはデフォルトが8080って見たので8080にした。
・ -v /hoge:/hogehoge : ホストとコンテナのディレクトリを共有してくれる。左がホスト右がコンテナ。ほんとは--mountオプションでやったほうがいいとか見たがうまくいかなかった。
・ --name kaggle-gpu : コンテナの名前つけ
・ kaggle/python-gpu-build : 起動するイメージ名
・ /bin/bash : 起動後にbash使えるようにしてくれる?
Dockerコンテナ内でKaggle APIをつかう - Qiita
- kaggle.jsonを配置
~/.kaggleの下にkaggle.jsonを置く。
これでkaggle apiが使える。
GCPとkaggle公式イメージ(docker)でGPU環境の構築 - Qiita
- jupyter-labを起動
使ったdockerイメージだと"run_jupyter.sh"なるものが用意されているのでこれを実行。
このスクリプトの中のオプションも大事っぽいがちゃんと調べてないので追々。
コマンドプロンプトを管理者権限で実行して、↓のようなコマンドを実行。
netsh.exe interface portproxy add v4tov4 listenaddress=<ローカルマシンのipアドレス>listenport=8080 connectaddress=<wslのipアドレス> connectport=8080
WSL2で起動したサーバーに外部の端末からアクセスする – GUNMA GIS GEEK
他のPCからサーバ建てたPCに入れるように新しい受信規則を設定。
ネットワークはプライベートのみ。サーバPCのネットワークの変更も忘れずに。(ここで詰まった)
Windows10で特定のポートを開放する – Born Digital サポート
プライベート? パブリック? ネットワークの種類の違いと切り替え方 - いまさら聞けないWindows 10のTips - 窓の杜
- 今回結局やらなかったけどこういうのもやりたい
公式Dockerとvscodeを使ったKaggleの環境構築 - Qiita
個人的にはgoogle colabのランタイムもリモートPCにつなぎたい。
とりあえずこんなところでしょうか。
最初はデスクトップの環境を寝ながらノートPCで使いたいというだけだったのに、思った以上に大変なことになった。
勉強不足。
set, lower_bound
setって順序つき集合になってたんですね。
なので、x以上の要素の値を取り出したかったら
auto iter = set.lower_bound(x); int ans = *iter;
って感じでできそうです。
x"より大きい"なら upper_bound
これを知ってたらACできたやつ
atcoder.jp
クラスカル法
クラスカル法(英: Kruskal's algorithm)は、グラフ理論において重み付き連結グラフの最小全域木を求める最適化問題のアルゴリズムである。(Wikipedia)
クラスカル法 - Wikipedia
使った例
Submission #24808238 - 競プロ典型 90 問
dsuを用いて軽い辺から使っていく感じ。