tabula rasa

白紙

WSL2+UbuntuでC++の競プロ環境を作る

なんとなくVimを使いたくなったのですがWindowsとの相性が悪すぎたのでWSL使ってUbuntu上で動くようにしました。

環境

Windows11 Home 22H2

WSL2でUbuntuインストール

よっぽどのことがなければwslコマンドは通るようになってると思うから省略 無理だったらWindowsUpdate確認

  • Windowsの機能から「LinuxWindowsサブシステム」と「仮想化プラットフォーム」を有効にする

  • wslのデフォルトをwsl2にする

wsl --set-default-version 2
  • Ubuntuをインストール(管理者で)
wsl --install -d Ubuntu

ここからはUbuntu上で

  • neovimインストール
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:neovim-ppa/unstable
$ sudo apt-get update
$ sudo apt-get install neovim
  • ~/.config/nvimにinit.vim,dein.toml,dein_lazy.toml作成
  • ~/.config/nvim/pluginsにcoc.vim作成

中身は適当に

"行番号を表示
set number
"シンタックスハイライトをon
syntax on
"行末まで検索した後行頭に戻って検索
set wrapscan
"検索結果をハイライト表示(:nohで消す)
set showmatch
"tabキーで挿入されるスペースの数
set shiftwidth=2
"中括弧を始めた後などの改行のあと自動的にインデントを入れる
set smartindent
"インデント周りの各種機能で操作されるスペースの数
set softtabstop=4
"VimではUTF-8で文字を表示する
set encoding=utf-8
"UTF-8でファイルを読み込み、ダメだったらShift_JISを試す
set fileencodings=utf-8,sjis
"UTF-8でファイルを書き込む
set fileencodings=utf-8
"コマンドモードでtabを使ってファイル名を補完するときに、1回目は最大共通文字列、次からは順番にファイル名を完全補完する
set wildmode=longest,full

"Ctrl+J,Ctrl+Kでパラグラフ一つ分移動 nnoremap <C-j> } nnoremap <C-k> {

" Vim起動時に画面下側にターミナルを立ち上げ、いいぐらいの高さにしておく(resizeの値は適宜調整) if has('vim_starting') split wincmd j resize 15 terminal wincmd k endif

"エディタとターミナルの操作をCtrl+Tで切り替え tnoremap <C-t> <C-&gt;<C-n><C-w>k nnoremap <C-t> <C-w>j i "ターミナルモード中にEscでターミナルノーマルモードに移行 tnoremap <Esc> <C-&gt;<C-n>

set autochdir

let &t_SI .= "\e[5 q"

inoremap { {}<LEFT> inoremap [ []<LEFT> inoremap ( ()<LEFT> inoremap " ""<LEFT> inoremap ' ''<LEFT>

"dein setting-------------------------------------------------------- let s:dein_dir = expand('$HOME/.cache/dein') let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim' "if &compatible " set nocompatible " Be iMproved "endif " dein.vimがない場合githubからDL if &runtimepath !~# '/dein.vim' if !isdirectory(s:dein_repo_dir) execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir endif execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p') endif " 設定開始 if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) " プラグインリスト(toml) let g:rc_dir = expand('$HOME/.config/nvim') let s:toml = g:rc_dir . '/dein.toml' let s:lazy_toml = g:rc_dir . '/dein_lazy.toml' " tomlのロード call dein#load_toml(s:toml, {'lazy':0}) call dein#load_toml(s:lazy_toml, {'lazy':1}) " 設定終了 call dein#end() call dein#save_state() endif " Required: filetype plugin indent on syntax enable " 未インストールがあればインストール if dein#check_install() call dein#install() endif "dein setting end------------------------------------------------------

"nerdtree setting nmap <C-f> :NERDTreeToggle<CR>

"Clipboard setting set clipboard+=unnamedplus

[[plugins]]
repo = 'Shougo/dein.vim'

plugins repo = 'vim-airline/vim-airline' hook_add =''' let g:airline#extensions#tabline#enabled = 1 nmap <C-p> <Plug>AirlineSelectPrevTab nmap <C-n> <Plug>AirlineSelectNextTab let g:airline#extensions#tabline#buffer_idx_mode = 1 '''

plugins repo = 'vim-airline/vim-airline-themes' hook_add =''' let g:airline_theme = 'bubblegum' let g:airline#extensions#tabline#enabled = 1 let g:airline_powerline_fonts = 1 '''

plugins repo = 'ryanoasis/vim-devicons'

plugins repo = 'preservim/nerdtree'

plugins repo = 'neoclide/coc.nvim' merged = 0 rev = 'release' hook_add = ''' source ~/.config/nvim/plugins/coc.vim '''

dein_lazy.tomlは使い方がいまいちよくわからなかったので空です。

" デフォルトでインストールするもの
let g:coc_global_extensions = [
    \'coc-clangd',
    \]

" エラーと警告の色を指定 highlight CocErrorSign ctermfg=15 ctermbg=196 highlight CocWarningSign ctermfg=0 ctermbg=172

"スペースinfoでHover noremap <silent> <Leader>info :<C-u>call CocAction('doHover')<cr> "スペースdfでDefinition nnoremap <silent> <Leader>df :call CocAction('jumpDefinition')<CR> "スペースfmtでFormat nnoremap <space>fmt :call CocAction('format')<CR> " Coc-quick-fix nnoremap <space>fx :call CocAction('doQuickfix')<CR> " autocomplete inoremap <silent><expr> <C-j> coc#pum#visible() ? coc#pum#next(1) : "&lt;C-j>" inoremap <silent><expr> <C-k> coc#pum#visible() ? coc#pum#prev(1) : "&lt;C-k>" inoremap <silent><expr> <Enter> coc#pum#visible() ? coc#pum#confirm() : "&lt;Enter>" inoremap <silent><expr> <Esc> coc#pum#visible() ? coc#pum#cancel() : "&lt;Esc>" inoremap <silent><expr> <C-h> coc#pum#visible() ? coc#pum#cancel() : "&lt;C-h>"

うまくいってればこの時点でこんな感じになってるはず

C++のファイルを開いたところ

atcoder-cliとonline-judge-toolsのインストール

製作者様のブログに準じます

tatamo.81.la

-node.jsが必要なのでインストール

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

一旦ターミナル再起動

$ nvm install node
$ npm install -g npm
  • pip3のインストール
$ sudo apt-get install python3-pip
  • atcoder-cli, online-judge-toolsのインストール
$ npm install -g atcoder-cli
$ pip3 install online-judge-tools

accとojコマンドが通ってればOK

atcoder-cliとonline-judge-toolsの設定

  • ログイン
$ acc login
$ oj login https://atcoder.jp/
  • 連携のための設定
$ acc config default-contest-dirname-format test
$ acc config default-task-choice all

テンプレート設定

$ acc config-dir
$ cd ~/.config/atcoder-cli-nodejs
$ mkdir cpp
$ cd cpp

この中にmain.cppとtemplate.jsonを作成

/**
*    author:  mioupa
**/

#include <bits/stdc++.h> #include <math.h> #define rep(i, n, m) for (int i = n; i < m; ++i) #define ll long long #define ALL_RANGE(v) v.begin(), v.end() #define REV_ALL_RANGE(v) v.rbegin(), v.rend() #define INF 1010000000

using namespace std;

template <class T> inline bool chmax(T &a, T b) { if (a < b) { a = b; return 1; } return 0; } template <class T> inline bool chmin(T &a, T b) { if (a > b) { a = b; return 1; } return 0; }

//-----------------end_template------------------

int main() {

return 0; }

{
  "task":{
    "program": ["main.cpp"],
    "submit": "main.cpp"
  }
}

$ acc config default-template cpp

↑いちいち問題選ぶのがめんどくさいので

使い方

適当にAtcoder用のディレクトリを作って

acc new {コンテスト名}

を叩く

サンプルがダウンロードされるので問題ごとにmain.cppに書き込んでいって(多分テンプレートが入ってるはず)

g++ main.cpp && oj t

コンパイル&テストケース確認

acc s

で提出

おわりに

全部適当なのでなんか問題あったら指摘ください。よろしくお願いいたします。

【備忘録】RealESRGAN 導入(CUI)

AIってすごいですね

 

インストール

GitHubからダウンロード

github.com

zip展開して適当なところに置いとく

 

環境変数の設定

realesrgan-ncnn-vulkan.exeがあるフォルダのPathを環境変数に追加

 

(参考:https://www.k-cube.co.jp/wakaba/server/environ.html)

 

 

Path通ってるか確認

realesrgan-ncnn-vulkan.exe -h

↑これ打ち込んでヘルプ出てきたらいい感じ

 

使い方

コマンド例

realesrgan-ncnn-vulkan.exe -i input.jpg -o output.png -n model_name

ファイル名んとこをフォルダにするとフォルダ内の画像一括でできる

モデル一覧
  1. realesrgan-x4plus (デフォルト 速い)
  2. realesrnet-x4plus (よくわからない 実写向け?)
  3. realesrgan-x4plus-anime (アニメ向け? 遅い 多分画質いいんだろうけど素人目にはわからん)
  4. realesr-animevideov3 (アニメ向け? 速い)
オプション
  • -n モデル選択
  • -i インプットファイル/フォルダ選択
  • -o アウトプットファイル/フォルダ選択
  • -s 拡大率(2,3,4がある デフォルトは4)
  • -f 出力フォーマット(.jpgとか.pngとか)指定

多分ほかは使わん

.hlsの動画をスマホで見れるようにしたい

こんにちは 三浦です。

先日、ひょんなことから.hlsの動画を手に入れてしまったので、mp4にしようと思っていたら、あまりネットに情報がなく、いろいろと模索して見つけた方法を紹介していこうと思います。

必要なもの

  • (管理者権限のある)パソコン
  • (若干の)やる気

以上です。

 

手順

1.hlsの動画をtsファイルとm3u8ファイルに分ける

正直ここが一番苦労しました。だってネットに乗ってねえから

というわけで自分で見つけ出した方法を書いときます。多分もっといい方法あると思うから知ってる人はコメントへ、よろしくお願いいたします。

 

自分はUniExtractというソフトを使いました。

 

インストールは下↓から

www.vector.co.jp

インストールはダウンロードして解凍するだけなので割愛します。

 

これにhlsファイルをブチ込めば、同じディレクトリにバラバラ殺人されたtsファイルとm3u8ファイルが一緒になったフォルダが生成されてるはずです。

 

というわけで手順1は終了。

 

2.FFmpegをインストールする

こっから先はネットにも乗ってると思います しらんけど

FFmpegはこちら↓

https://www.ffmpeg.org/

 

自分のOSに合ったやつをダウンロードしましょう。

インストーラ起動して指示に従ってくだけです。

 

ディレクトリを覚えておいてください

 

3.環境変数の設定

多分このへんから管理者権限ないと厳しい

 

左下のwindowsマーク右クリック→システム→システムの詳細設定→環境変数

 

特に何もなかったら「システムの環境変数」の方にしましょう。

もとから「PATH」っていうのがあった場合、その末尾に「;C:~~~~~~~(さっきインストールした場所)\bin」っていうのを付け加えてください。

 

4.tsとm3u8をFFmpegにブチ込む

というわけで、先程解凍して生成されたtsファイルのあるフォルダを開いて、上のごちゃごちゃ書いてあるバーに「cmd」と入力

 

これを使うとmp4動画が生成されます。(普通にコマンドプロンプト開いてディレクトリ変えるのでもいいよ)

 

そして次のように入力します。

 

ffmpeg -i (インデックスファイル名).m3u8 -movflags faststart -c copy -bsf:a aac_adtstoasc (保存する動画名).mp4

 

多分windows10のコマンドプロンプトコピーアンドペーストできるようになってた気がする 

こんな感じ

f:id:ohc_cho:20210301230346p:plain

名前消したのでなんか汚くなってるのは気にしないでください。

すると同じディレクトリにmp4の動画が生成されてるはずです。

これでおしまい

 

まとめ

特にないです。お疲れさまでした。