正規表現で単語(Word)でaあるいはbの表現は
(a|b)
ですが、lsでは通用しない。いろいろ調べたら、
{a,b}
で表現するらしい。
例えば、拡張子がjpgとzip両方ヒットしたいとき
ls *.{jpg,zip}
で実行する。
覚えづらい。
正規表現で単語(Word)でaあるいはbの表現は
(a|b)
ですが、lsでは通用しない。いろいろ調べたら、
{a,b}
で表現するらしい。
例えば、拡張子がjpgとzip両方ヒットしたいとき
ls *.{jpg,zip}
で実行する。
覚えづらい。
Windows 11にWSL2でUbuntuを導入した。しかし、PCを再起動してから、wslコマンドで
ログオン失敗: 要求された種類のログオンは、このコンピューターではユーザーに許可されていません。
エラーが発生して、Ubuntuが起動できなくなった。
インターネットでいろいろ調べたが、
に解決策が書かれていました。
管理者権限で実行されたPowerShellで
powershell restart-service vmcompute
を実行すればOK。
セキュリティーが厳しくなり、rootユーザーでも別のユーザーのパスワードを設定するときにエラーになる。
$ sudo passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
passwd: Authentication token manipulation error
インターネットには辞書チェック自体を無効にする方法が書かれているが、rootユーザーのみそのチェックから抜ける方法を調べた。
結論から言うと、/etc/pam.d/system-authの
password requisite pam_pwquality.so try_first_pass local_users_only enforce_for_root
行の緑部分の「enforce_for_root」を削除すると、rootユーザーのみチェックから抜けることができた。
Gitであるファイルの特定の行の修正履歴を知りたくなり、それを出すコマンドを調べた。
View git history of specific line - Stack Overflow
には解決策が書かれている。
git log -L行数,1:/path/to/the/file
を実行すればよい。参考URLでは/path/to/the/fileをシングルクオートで囲まれているが、シングルクオートがなくても大丈夫のようである。
ちなみに、最後にその行を修正した人と時間を調べるのに、
git blame /path/to/the/file
で調べられる。
AtcoderのABC253のE - Distance Sequence問題を解く際に、Java 11.0.6のバッグを発見した。
提出したコードは
import java.util.Scanner; import java.util.stream.IntStream; public class Main { /** mod対象数字 */ private static final long MOD = 998_244_353L; public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { int n = scanner.nextInt(), m = scanner.nextInt(), k = scanner.nextInt(); // dp[i][j]はi番目の数字がj以下のすべての組み合わせ数 long[][] dp = new long[2][m + 1]; IntStream.rangeClosed(0, m).forEach(i -> dp[0][i] = i); IntStream.range(1, n).forEach(i -> { dp[i & 1][0] = 0L; IntStream.rangeClosed(1, m).forEach(j -> { if (0 == k) { dp[i & 1][j] = (dp[(i - 1) & 1][m] + dp[i & 1][j - 1]) % MOD; } else { dp[i & 1][j] = (dp[(i - 1) & 1][m] - dp[(i - 1) & 1][Math.min(m, j + k - 1)] + dp[(i - 1) & 1][Math.max(0, j - k)] + MOD + dp[i & 1][j - 1]) % MOD; } }); }); System.out.println(dp[(n - 1) & 1][m]); } } }
であるが、「02_max_05.txt」のテストケースだけ「WA」になってしまう。
ローカルでの実行(OpenJDK 11.0.15を使用)は問題なかったのに、仕方なくAtCoderの使う11.0.6をダウンロードして、実行したら、実行するたびに異なる結果になっていた(原因不明)。
原因はよくわからないが、IntStreamで書いたforEach文を普通のfor文に置き換えたら、実行できた。最終的に提出したコードは
import java.util.Scanner; import java.util.stream.IntStream; public class Main { /** mod対象数字 */ private static final long MOD = 998_244_353L; public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { int n = scanner.nextInt(), m = scanner.nextInt(), k = scanner.nextInt(); // dp[i&1][j]はi番目の数字がj以下のすべての組み合わせ数 long[][] dp = new long[2][m + 1]; IntStream.rangeClosed(0, m).forEach(i -> dp[0][i] = i); for (int i = 1; i < n; i++) { dp[i & 1][0] = 0L; for (int j = 1; j <= m; j++) { if (0 == k) { dp[i & 1][j] = (dp[(i - 1) & 1][m] + dp[i & 1][j - 1]) % MOD; } else { dp[i & 1][j] = (dp[(i - 1) & 1][m] - dp[(i - 1) & 1][Math.min(m, j + k - 1)] + dp[(i - 1) & 1][Math.max(0, j - k)] + MOD + dp[i & 1][j - 1]) % MOD; } } } System.out.println(dp[(n - 1) & 1][m]); } } }
である。
結局、AtCoderのために、JDK 11.0.6が必要であることと、IntStreamが信頼できないことを学んだ。
カーネルのアップデートの際に、エラーが起き、kmod-VirtualBoxパッケージがうまくインストールされていなかった。そのせいか、vboxdrv.service がうまく起動できなくなった。
手動でインストール手順を調べた。
akmods --force --kernels カーネルバージョン --akmod VirtualBox-kmod
を実行すれば大丈夫.
ここでのカーネルバージョンは uname -r の実行結果のフォーマットである。今の最新バージョンは 5.18.5-200.fc36.x86_64 である。
突然githubへ接続できなくなった。
sign_and_send_pubkey: signing failed for RSA "/home/user/.ssh/id_rsa" from agent: agent refused operation
~/.ssh/config は正しく設定されており、~/.ssh のパーミッションが 700、~/.ssh/* のパーミッションが 600 になっていることも確認できた。
github - Permission denied (publickey) error when using Git? - Stack Overflow
に解決策が書かれている。
を実行すればよい。