日記帳

プログラミングのことをつぶやく日記です。

ptコマンドをwsl2環境のDebianに導入する

タイトルの通り高速検索ツールptコマンドをwsl2環境のDebianに導入します。

こちらを参考にしていきます。

V2! V2! Go言語製 高速検索ツールThe Platinum Searcherのv2をリリースしました · THINKING MEGANE

まずはダウンロードリンクにアクセスします。

Releases · monochromegane/the_platinum_searcher · GitHub

386,amd64,armと3種類あるので、自分のハードウェアネームを確認します。

❯ uname -m
x86_64

x86_64なので、amd64のtar.gzをダウンロードすればよいです。

❯ wget https://github.com/monochromegane/the_platinum_searcher/releases/download/v2.2.0/pt_linux_amd64.tar.gz
# 解凍する
❯ tar xzvf pt_linux_amd64.tar.gz
# pathの通っているディレクトリに移動する
❯ sudo mv pt_linux_amd64/pt /usr/local/bin/
# ptコマンドを実行する
❯ pt --version
pt version 2.2.0

ここまでの一連の動作を実行して、ptコマンドの導入することができました。

wsl2使用時にvimでファイルオープンすると発生するE474: Invalid argument: listchars=tab:\~V\-を解決した

wsl2使用時にvimでファイルオープンすると発生すると下記のエラーが表示され、ファイルの末尾に $ が付いたり、日本語が文字化けする事象が発生しました。原因はファイルがutf-8として認識されていないことだと推測しました。

E474: Invalid argument: listchars=tab:\~V\-

解決策として.vimrcに明示的にutf-8であることを宣言しました。.vimrcの先頭に下記の記述をします。その後vimでエラーになったファイルをオープンしたらエラーメッセージが表示されなくなり、文字化けしなくなりました。

scriptencoding utf-8
set encoding=utf-8

参考にしたサイト

stackoverflow.com

wsl2でgit logが文字化けする

wsl2を使用してgit logコマンドを実行したら、下記のように日本語が文字化けしました。

commit 7b2ad84788e699401fb2cc6c7733dafd853f7c45 (HEAD -> master, origin/master, origin/HEAD)
Author: ryuchan00
Date:   Tue Nov 30 15:02:00 2021 +0900

    <E6><B4><E6><96><B0>

原因はlessコマンドの文字コードを明示的に指定していないことでした。git logの表示はlessが用いられているのです。したがって、僕はzshを使用しているので.zshrcに下記の行を追加して、lessはutf-8を使用して開くことを明示的にしました。

# git logの文字化けを防ぐためにlessの文字コードを指定する。
export LESSCHARSET=utf-8

.zshrcを再読み込みしてgit logコマンドを実行したところ、文字化けがなくなっていました。

commit 7b2ad84788e699401fb2cc6c7733dafd853f7c45 (HEAD -> master, origin/master, origin/HEAD)
Author: ryuchan00
Date:   Tue Nov 30 15:02:00 2021 +0900

    更新

こちらを参考にしました。

git log、git diff、git showでの日本語の文字化けをまとめて対策 | WWWクリエイターズ

大学院を受験する場合に考えなくてはいけないことを書きしたためる

日記をつけて自分の中で整理したい。そろそろぼんやりと大学院の受験をするかを考えなくてはいけない。そうすると今の僕の悩み事は以下の通りである。

  • 研究テーマを何にすべきか
  • 昼か夜にするか
  • 志望校をどうすべきか
  • 私立にした場合は学費を捻出できそうか
  • 勉強時間をどのように捻出するか
  • 仕事を辞めるのか、辞める場合はいつごろにするのか
  • その場合の生活費はどのくらいになりそうか

書き出すだけで胃が痛くなってきた。僕の場合はあまり周りに頼る人がいないので自分のお財布事情も考慮する。深く考えた結果は、また後程書きしたためる。どちらにしろTOEICのスコアが必要なので受けよう。

ガウスの消去法をプログラムする

ガウスの消去法のプログラムをRubyで作成した。deleteメソッドが前進消去、backward_substitutionが交代代入である。

def delete(a, b)
  n = a.size
  l = Array.new(n, Array.new(n))

  for k in 0..n - 2 do
    for i in k + 1..n - 1 do
      l[i][k] = a[i][k].to_f / a[k][k]
      for j in k + 1..n - 1 do
        a[i][j] = a[i][j] - l[i][k] * a[k][j]
      end
      b[i] = b[i] - l[i][k] * b[k]
    end
  end

  for k in n - 1..0 do
    for j in k + 1..n - 1 do
      b[k] = b[k] - a[k][j] * b[j]
    end
    b[k] = b[k].to_f / a[k][k]
  end
  return a, b
end

# 方程式の解を求める
def backward_substitution(a, b)
  n = a.size
  x = []
  (n - 1).downto(0) do |i|
    sum = b[i]
    # n -1 == i のときは実行しないようにする
    (i + 1).upto(n - 1) do |j|
      sum -= a[i][j] * x[j]
    end
    x[i] = sum / a[i][i]
  end
  return x
end

def print(b, x)
  printf "b=\n"
  b.each { |bb| printf "|%-5s|\n", bb }
  x.each_with_index { |xx, i| printf "x%s=%s\n", i + 1, xx }
end

def gauss_jordan_elimination(a, b)
  a, b = delete(a, b)
  x = solve(a, b)
  return a, b, x
end

a = [
  [1, 2, 3],
  [3, 5, 4],
  [4, 6, 7]
]
b = [
  8,
  17,
  23
]

_, b, x = gauss_jordan_elimination(a, b)
print(b, x)

Aとbはそれぞれ以下の通り

f:id:leokun0210:20211202003313p:plain

実行結果は以下のようになる。

b=
|8    |
|-7.0 |
|5.0  |
x1=1.0
x2=2.0
x3=1.0

アルゴリズムや計算量についても書きたいが、時間が取れないので今回は書かない。