Gitで各ブランチを最近commitした日時順にソートした一覧を表示する

Gitで各ブランチの一覧を最近commitした日時順にソートしたい。

List remote Git branches and the last commit date for each branch. Sort by most recent commit date. · GitHub

にコマンドが書かれている。

for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ci %cr" $branch | head -n 1` \\t$branch; done | sort -r 

 を実行すればよい。

Maximaで関数の最小値を得るための引数を計算する

Atcoderのabc204問題E(E - Rush Hour 2)では  \frac{D}{t+1} + t の最小値を得るための tを計算する必要があった。

後で調べたMaximaでの計算方法であるが、記録のため保存する。

How to find the maximum and minimum of a function using Maxima? - Stack Overflow

に参考して、Maximaには以下のように入力する。

 f(t):=d/(t+1) + t;

 (関数定義)

f_deriv: diff(f(t),t); 

 (関数の微分を求める)

solve(f_deriv=0,t);

 (微分が0の解を求める)

結果としては

 [t = (- sqrt(d)) - 1, t = sqrt(d) - 1]

 と出力されるが、本来関数の最大値と最小値のときの両方のtが入っている。今回はE問題の解説で \sqrt{t} - 1が回答となることがわかる(E問題ではまた整数に丸める必要がある)。

念のため、グラフでの確認も可能ですが、Maximaで関数に dのような変数が定義されている場合のグラフの出力する方法がわからず、とりあえずd=10のときのグラフを出力してみた。

 f(x):=10/(t+1)+t;

plot2d(f(x), [t,0,10])$

 出力されたのは以下のようなグラフ

f:id:hanaokaiwa:20210607044849p:plain

 \sqrt{10} - 1 \approx 2.16 のところに最小値になっていることが確認できる。

Vimで編集内容に現在の行番号を入れる

VimでDBに入れるためのマスターデータのCSVファイルを作成して、最初の項目が数字のIDであるが、実は現在の行番号と同じ数字である。

現在の行番号を1行ずつ入れるのは面倒なので、一括置き換えでできないかを調べてみた。

Replace a pattern with current line number - Vi and Vim Stack Exchange

に答えが書かれていた。xを現在の行番号に置き換える場合、

:%s/x/\=printf("%d", line('.'))

を実行すればよい。

それを自分の場合では,

:%s/^/\=printf("%d,", line('.'))

(行の先頭に「行番号,」を挿入)を実行すればよい。

数列の任意の2つの項のXORの結果の合計を計算する方法

とある長さ Nの数列 A_1, A_2, \dots , A_Nに対し、 1\leq i\leq j\leq Nを満たす全ての組 (i,j)について A_i XOR  A_jをもとめ、その合計を計算する問題の解き方。

 詳細については

Editorial - Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)

の後半に説明されている。

まず、ある桁数 kに対し、すべての 1\leq i\leq Nについて、 A_i k桁目が1か0かを判定して、それぞれの A_iの数を数える。例えば、 k桁目が1の数が C_{k1}で、 k桁目が0の数が C_{k0}の場合、 k桁目関して、合計の結果はC_{k1} \times C_{k0} \times 2^{k-1}となる。

上記の計算を1桁目から A_iの最大桁まで計算し、合計すれば、結果が求められる。

 

JavaMail で添付ファイルのダウンロードが遅い場合の対応方法

JavaMailを使って、GMailから添付ファイルをしていたが、5Mぐらいの添付ファイルをダウンロードするのに、150秒ほどかかる。いろいろ調べましたが、

Slow rate (Rx) retrieving an attachment from Gmail with javaMail on Android - Stack Overflow

Java Mail Slow downloading attachment Office 365 - Stack Overflow

には解決法が書かれていた。ソースコード

 props.setProperty("mail.imaps.partialfetch", "false");

を追加するだけである。ここのpropsはSystem.getProperties()の変数である。

試しに追加してみたら、魔法のように150秒にかかった添付ファイルのダウンロードが3秒ほどでできた。

Db2でSQLのアクセスプランを確認する

Db2でアクセスプランを確認する必要があったため、実施した手順を記録する。

まず、1回のみ実施する前処理として、以下のコマンドを実行する。

$ db2 connect to DB名

$ db2 -tvf ~/sqllib//misc/EXPLAIN.DDL

$ db2 connect reset

 そして、以下のURLの資料に参考して、以下の手順でアクセスプランの取得が可能である。

アクセスプラン(実行計画)の読み方入門

$ db2 connect to DB名

$ db2 "set current explain mode explain"

$ db2 "何かのSQL"

あるいは

$ db2 -tvf sqlファイル

db2 "set current explain mode no"

$ db2exfmt -1 -d DB名 -o 出力ファイル名

試しにSAMPLE DBで実行してみた。

$ db2 connect to SAMPLE

$ db2 "set current explain mode explain"

$ db2 "SELECT t1.* FROM employee as t1 INNER JOIN department as t2 ON t1.workdept=t2.deptno WHERE t2.deptname like 'BRANCH%'"

db2 "set current explain mode no"

$ db2exfmt -1 -d SAMPLE -o output.txt

作成されたoutput.txtから以下のアクセスプランが見られる。

Access Plan:Access Plan:

-----------

Total Cost: 143.581

Query Degree: 1

              Rows

              RETURN

             (   1)

              Cost

                I/O

                |

               100

              ^HSJOIN

             (   2)

             143.581

                21

          /-----+------\

      1000              100

      TBSCAN        TBSCAN

     (   3)               (   4)

     81.9241          61.6304

        12                9

        |                   |

      1000             1000

 TABLE: USER   TABLE: USER

    EMPLOYEE    DEPARTMENT

       Q2                Q1

 TBSCANの文字ではテーブルスキャンが発生している意味である。

ちなみに、IDを使用するように以下のSQLを実行したアクセスプランも確認してみた。

SQL

 SELECT * FROM employee WHERE empno='000010'

 アクセスプラン:

Access Plan:

-----------

Total Cost: 13.6198

Query Degree: 1

            Rows

            RETURN

           (   1)

            Cost

              I/O

              |

              1

            FETCH

            (   2)

           13.6198

               2

          /---+----\

        1          1000

      IXSCAN   TABLE: USER

       (   3)      EMPLOYEE

     6.81278        Q1

        1        |

      1000

     INDEX: USER

     PK_EMPLOYEE

       Q1

 INDEXを使用していることが確認できる。

2020年12月10日放送日本人のお名前

読めそうで読めない一放送された超難読名字特集:

1.いちじく さま

2.五六ふのぼり さま

3.さっか(また さかん) さま

4.薬袋みない さま

5.小鳥遊たかなし さま

6.四月一日わたぬき さま

7.貴家さすが さま

8.めんじょう さま

9.四十物あいもの さま

やはり書き留めないと忘れてしまう。