【kafka】 kafkaの中身が見たいとき

trifectaを使います。

バイナリがあるので、ビルドは必要ありません。

wget https://github.com/ldaniels528/trifecta/releases/download/v0.22.0rc8-0.9.0.1/trifecta-cli-0.22.0rc8b-0.9.0.1.bin.jar
wget https://github.com/ldaniels528/trifecta/releases/download/v0.22.0rc8-0.9.0.1/trifecta-ui-0.22.0rc8b-0.9.0.1.zip
unzip trifecta-ui-0.22.0rc8b-0.9.0.1.zip
cd trifecta-ui-0.22.0rc8b-0.9.0.1/bin/
./trifecta-ui &

設定が必要なら、$HOME/.trifecta/config.properties を適当に編集して./trifecta-ui &を起動し直します。

ブラウザで hostname:9000 にアクセスします。

“Observe”のタブからkafkaの中身を見れます。

【Java】 kafkaStreams.cleanUp(); がstate dirのファイルをうまく消せなくてエラーになる場合

おそらくwindows環境だけの問題です。

        KafkaStreams kafkaStreams = new KafkaStreams(builder.build(), streamsConfiguration);
        kafkaStreams.cleanUp();

の前に

        final File baseDir = new File(streamsConfiguration.get(StreamsConfig.STATE_DIR_CONFIG).toString());
        final File stateDir = new File(baseDir, streamsConfiguration.get(StreamsConfig.APPLICATION_ID_CONFIG).toString());
        //System.out.println(stateDir);
        try {
            FileUtils.deleteDirectory(stateDir);
        } catch (IOException e) {
            System.out.println("delete error");
        }

を突っ込みます。

import org.apache.commons.io.FileUtils; などが必要になります。

【debezium/kafka】 kafkaに外部から繋ぎたいとき

デフォルトだとkafka:9092に外から繋げません(たぶん)。

docker-compose.yamlに

kafka:
    (snip)
    environment:
        ADVERTISED_LISTENERS: "PLAINTEXT://xxx.xxx.xxx.xxx:9092"

xxx.xxx.xxx.xxxに外部から接続したい、ホストのアドレスを入れるとつながるようになります。

上記のようにした場合は、SECURITY_PROTOCOL_CONFIGをPLAINTEXTにして繋ぐのをお忘れなく。

【Java】 xmlファイルから設定を読み込む

まずxmlファイル(ここではconfig.xml)を読み込んでおきます。

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("config.xml");
        Element root = document.getDocumentElement();

単一の設定(Stringで返す)用と、複数の設定(ArrayListで返す)用に、関数を用意します。

    public static String getconfig(Element root, String tag) {
        NodeList nodeList = root.getElementsByTagName(tag);
        Node node = nodeList.item(0);
        String str=node.getTextContent();
        return str;
    }

    public static ArrayList<String> getconfigarr(Element root, String tag) {
        NodeList nodeList = root.getElementsByTagName(tag);
        ArrayList<String> a = new ArrayList<>();
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node node = nodeList.item(i);
            a.add(node.getTextContent());
        }
        return a;
    }

以下のように利用します。

        String filename=getconfig(root,"filename");
        ArrayList<String> fromAddresses = getconfigarr(root,"fromaddress");
        int pictureWidth=Integer.parseInt(getconfig(root,"pictureWidth"));
        boolean debug=Boolean.parseBoolean(getconfig(root,"debug"));

【Java】 swing JFrame マルチディスプレイ環境で特定のディスプレイにウインドウを表示する

https://github.com/BigMarker/deskshare-public/blob/master/jnlp/src/main/java/com/bigmarker/client/deskshare/ScreenCap.java にあった showOnScreen という関数を利用させてもらう。

    private static void showOnScreen(int screen, JFrame frame) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gd = ge.getScreenDevices();
        if (screen > -1 && screen < gd.length) {
            frame.setLocation(gd[screen].getDefaultConfiguration().getBounds().x, frame.getY());
        } else if (gd.length > 0) {
            frame.setLocation(gd[0].getDefaultConfiguration().getBounds().x, frame.getY());
        } else {
            throw new RuntimeException("No Screens Found");
        }
    }

【Java】swing JFrame ウインドウに画像を表示する ついでに画像をリサイズする

リサイズ後のサイズを pictureWidth, pictureHeight にセットしておく。
イメージのファイル名は filename に。

    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame();
    frame.setLayout(new GridLayout(1, 1));

    BufferedImage img = null;
    img = ImageIO.read(new File(filename));

    Image dimg = img.getScaledInstance(pictureWidth, pictureHeight, Image.SCALE_SMOOTH);

    ImageIcon image;
    image = new ImageIcon(dimg);
    image.getImage().flush();

    JLabel label = new JLabel(image);
    frame.add(label);

    frame.pack();

    frame.setVisible(true);

【Java】 javaでusbカメラ、内蔵カメラを操作する

こちらのライブラリがとても便利です。
https://github.com/sarxos/webcam-capture

使い方はこちら
youtube: Java Webcam Capture for Beginners#1 : Introduction and Capture webcam image with 3 lines of code
https://www.youtube.com/watch?v=2BHyL_XK8YQ

本気で三行から始められます。

キャプチャしてファイルに保存するサンプル
https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/example/java/TakePictureExample.java

カメラ映像をライブでウインドウに表示するサンプル
https://github.com/sarxos/webcam-capture/blob/master/webcam-capture/src/example/java/WebcamPanelExample.java


おまけ

webcamの解像度を設定したいとき

        Dimension[] nonStandardResolutions = new Dimension[] {
            WebcamResolution.PAL.getSize(),
            WebcamResolution.HD.getSize(),
            new Dimension(720, 480),
            new Dimension(1280, 720),
            new Dimension(1000, 500),
        };

などとしておいて

        webcam.setCustomViewSizes(nonStandardResolutions);
        webcam.setViewSize(new Dimension(1280, 720));

パネルに出るデバグ情報を消す

        WebcamPanel panel = new WebcamPanel(webcam);
        panel.setFPSDisplayed(false);
        panel.setDisplayDebugInfo(false);
        panel.setImageSizeDisplayed(false);
        panel.setMirrored(false);

2つ以上カメラが接続されてる場合、任意のカメラを操作する
webcamnoに1とか2とか入れて

        List<Webcam> webcams = Webcam.getWebcams();
        //Webcam webcam = Webcam.getDefault();
        Webcam webcam = webcams.get(webcamno); 

【Java】 Javaの暗号制限を解除する

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files はJava 9 および Java 8 Update 151以降では不要です。
java.securityファイルを編集し、crypto.policy=unlimitedとします。

例:

# vi /usr/java/jre1.8.0_151/lib/security/java.security
:
(823行目)
#crypto.policy=unlimited
↓ コメントを外す
crypto.policy=unlimited