DataGrip で クリアテキスト認証 を使う #DataGrip

概要

IAM 認証 による RDS 接続をする際などに、 MySQL のクリアテキスト認証が必要になる。

DataGrip から利用する方法をまとめておく。

おそらく Jetbrains 製品の Database Viewer でも同じ方法でできると思う。

参考: IAM認証によるRDS接続を試してみた | Developers.IO

設定方法

  • DataSource の設定項目の Advanced タブを開く
  • authenticationPlugin に com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin を指定する
  • VM environment に LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 を設定する

ドライバーに MySQL for 5.1 を利用している場合

パッケージ名が異なるので、 com.mysql.jdbc.authentication.MysqlClearPasswordPlugin を指定する。

参考

IntelliJ IDEA から MySQL に繋ごうとしたら Communications link failure #IntelliJIDEA

問題

IntelliJ IDEA や DataGrip から MySQL に接続したら、エラーになってしまった。

接続テストでは成功するのに、実際に繋ごうとすると Communications link failure と言われてしまう。

java.io.IOException: Socket is closed. Communications link failure. The last packet successfully received from the server was 24 milliseconds ago. The last packet sent successfully to the server was 30 milliseconds ago.

対応

接続設定の Driver を MySQL から MySQL for 5.1 に変更すると解消した。

接続先の MySQL は 5.6 だったんだけど、ドライバーのバージョンとの相性が原因だろうか。

f:id:su-kun1899:20200226105313p:plain

参考

1207. Unique Number of Occurrences

LeetCode の挑戦ログ

Problem

https://leetcode.com/problems/unique-number-of-occurrences/

  • 整数の配列を渡される
  • 値の登場回数がユニークで構成される場合は true を返す

Solution

class Solution {
    public boolean uniqueOccurrences(int[] arr) {
        Map<Integer, Long> map = Arrays.stream(arr)
                .boxed()
                .collect(Collectors.groupingBy(i -> i, Collectors.counting()));

        int valueCount = map.size();
        long occurrenceCount = map.values().stream().distinct().count();

        return valueCount == occurrenceCount;
    }
}

Impressions

  • 要素の数を数えたいときは、 Collectors#groupingBy の第 2 引数に Collectors.counting() を渡す

References

Measure What Matters を読んだ

巷で話題の OKR の本ということで読んでみた。

チームがチームとして機能するためには、同じ目標にフォーカスすることが大切だと思うんだけど、個々人の見ているものは想像以上にブレやすいというのは常々感じている。

なので明文化して常に立ち帰れるようにしておくのがいい。

プロジェクトベースだとインセプションデッキとか ODSC とかがあるけど、 OKR はもっと上位の、経営戦略みたいなものから紐付けてツリーを作っていくイメージ。

もちろん OKR が全てを解決するわけではないけど、いい仕組みだなとは思った。

本の中では基本 OKR 絶賛なわけだけど、ちゃんと失敗例も紹介している。

目標設定ってやつが大嫌いなんだけど、OKR ならやりたいかな。

少し気になるところとすれば、仮に明文化されていたとしても、それを定着させ、フォーカスがずれてきた時にアナウンスしていくことがキーになるということ。

チームでそれができればいいんだろうけど、体感としてはそれは難しくて(少なくともチームがスキルとして身につける必要があって)、できない時は役割として担う人が必要になると思う。

それをマネージャーと呼ぶならそうなのかもしれない。

あと、人事評価と紐付けないこと自体はいいと思うんだけど、個人の目標設定にまで紐づける必要があるのかは微妙だと思う。

せいぜいスモールチームまでじゃないかなぁ。

人材戦略みたいなものが明確に定義されてるならそれに紐づく OKR を個人が持つこともあるのかもしれないけど。

それは「個人での達成よりチームでの達成の方が好き」という僕自身の価値観ゆえの印象といえばそれは否めない。

977. Squares of a Sorted Array

LeetCode の挑戦ログ

Problem

https://leetcode.com/problems/squares-of-a-sorted-array/

  • 整数の昇順でソートされた配列が渡される
  • 各要素を自乗して、それを昇順でソートした配列にする

Solution

class Solution {
    public int[] sortedSquares(int[] A) {
        return Arrays.stream(A)
                .map(i -> i * i)
                .boxed()
                .sorted()
                .mapToInt(i -> i)
                .toArray();
    }
}

Impressions

  • ボクシングするのは毎度ながらめんどい
  • 累乗には Math#pow がある
    • double であつかう IF しかない
    • 今回は整数というのが分かっていたので使わなかった

617. Merge Two Binary Trees

LeetCode の挑戦ログ

Problem

https://leetcode.com/problems/merge-two-binary-trees/

  • 2つのバイナリツリーを同階層でマージしたツリーを作る

Solution

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        return merge(t1, t2);
    }

    private TreeNode merge(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) {
            return null;
        }

        int mergedVal = (t1 == null ? 0 : t1.val) + (t2 == null ? 0 : t2.val);
        TreeNode merged = new TreeNode(mergedVal);

        merged.left = merge(
                (t1 == null ? null : t1.left),
                (t2 == null ? null : t2.left)
        );
        merged.right = merge(
                (t1 == null ? null : t1.right),
                (t2 == null ? null : t2.right)
        );

        return merged;
    }
}

Impressions

  • 再帰処理はかなり頭を使わないと書けない
  • null チェックが美しさに欠ける(がどうすればいいものか)

自分の欠点を3つあげるとしたら

転職活動の面接で、「自分の欠点を3つあげるとしたらなんですか?」と聞かれたことがあった。

自分と向き合えるいい質問だなぁと思ったのと、後で見直したら面白そうなので記録しておく。

ちなみに面接の相手は開発者じゃなかったので、技術的な観点では答えていない。

目的の分からない作業ができない

「何のためにやるのか」が自分の中で明確になっていない作業ができない。

これは「目的を明確にしよう」みたいな綺麗事ではなくて。

お仕事なので、実際のところ手は動かすと思うんだけど、本当に著しくパフォーマンスが落ちる。

緊急のときなんか、は仕方なく説明を省略してとりあえず作業を終わらせたい時はあると思う。

でもそういう場面に弱い。

「やりたいことしかやらない」タイプではないけれど、「なぜやるかは納得してやりたい」気質が影響していると思う。

瞬発力や爆発力はない

完全にコツコツ型なので、一時的に負荷を上げて馬力を出すのは苦手。

昔は多少できた気もするが、意識的にコツコツ型へ移行したこともあり、今はあまりできる気がしない。

コミュニケーションが冗長

コミュニケーションをとる際に、できるだけコンテキストを共有したい思いがある。

これは自分がそうだから、人にもそうしようとしているからではある。

ただそれゆえ説明が過度になったり、時に冗長なことはあると思う。

場合によっては相手のコンテキストにも思いを馳せたりするので。