Schriftgröße unter IntelliJ IDEA dynamisch anpassen

In der IDE IntelliJ IDEA von JetBrains kann die Schriftgröße für den Editor, wie gewünscht eingestellt werden. In manchen Fällen soll die Schriftgröße allerdings dynamisch eingestellt werden. Ein solcher Fall ist z.B. der Präsentationsmodus. In diesem Modus wird der Editor im Vollbild-Modus dargestellt und dient so der Präsentation des Quellcodes.

Das Einstellungsfenster von IntelliJ IDEA

Sollen hier die Zeilen, je nach Anforderung, nun größer oder kleiner dargestellt werden, kann dies über eine Option in den Einstellungen erreicht werden. In den Einstellungen findet sich unter Editor -> General der Punkt Change font size (Zoom) with Command+Mouse Wheel. Auf anderen Betriebssystemen wird statt der Command-Taste die Ctrl-Taste genutzt. Wird diese Option aktiviert, kann die Größe der Schriftart, in Verbindung mit der Command-Taste, dynamisch über das Mausrad eingestellt werden.

550-Inconsistent/Missing DNS PTR record

Beim Senden einer Mail an eine Mail des Anbieters Freenet erhielt ich vom Mailserver folgende Antwort:

host emig.freenet.de[2001:748:100:40::8:115]
said: 550-Inconsistent/Missing DNS PTR record (RFC 1912 2.1)
(example.org) 550 [2001:db8:a0b:12f0::1]:34865 (in reply to RCPT TO command)

Der PTR Resource Record, auf den hier verwiesen wird, ist ein wichtiges Element für Durchführung von Reverse DNS-Abfragen. Für die IPv4- und die IPv6-Adresse des Servers hatte ich einen solchen Eintrag gesetzt. Deshalb war ich etwas verwundert, dass diese Meldung gesendet wurde. Bei der Nachforschung stellte ich dann fest, dass der Server eine IPv4-Adresse besitzt, aber ein ganzes IPv6-Subnetz. Das ist nicht weiter verwunderlich, allerdings sendet Postfix nicht mit einer festen IPv6-Adresse, sondern nutzt irgendeine Adresse aus dem Subnetz. Werden die Einstellungen von Postfix geöffnet:

nano /etc/postfix/main.cf

findet sich dort der Eintrag:

inet_interfaces = all

Durch diesen Eintrag ist nicht genau festgelegt, welche IP-Adresse für das Senden genutzt wird. Hier sollten die genauen IP-Adressen festgelegt werden:

inet_interfaces = 82.91.44.12,2001:db8:a0b:12f0::1

Anschließend sollte Postfix neu gestartet werden:

service postfix restart

Wird nun erneut eine Mail an den Freenet-Server geschickt, so kann es passieren, dass die Fehlermeldung erneut zurückgesendet wird. In einem solchen Fall muss noch einige Minuten bis Stunden gewartet werden, bevor der Freenet-Server die Mails entgegennimmt.

Umfragen mittels freier Software durchführen

Wer online Umfragen durchführen möchte, kann für diesen Zweck unterschiedlichste Webtools nutzen. Das Problem an den meisten dieser Tools ist das die Verarbeitung bei einem Drittanbieter erfolgt und der Nutzer somit keine Kontrolle und Hoheit über die gesammelten Daten hat. Vor allem bei sensiblen Daten empfiehlt es sich das entsprechende Umfragen-Tool selbst zu hosten. Mit LimeSurvey, existiert ein solches Tool, welches daneben freie Software ist.

Eine Umfrage mittels LimeSurvey

Mithilfe von LimeSurvey können Umfragen, Befragungen und vieles mehr realisiert werden. So sind z.B. unter anderem anonyme Umfragen möglich, bei denen die Antworten und die Teilnehmer nicht mehr miteinander in Verbindung gebracht werden können. Die offizielle Seite von LimeSurvey ist unter limesurvey.org zu finden. Der eigentliche Quelltext ist unter anderem auf GitHub zu finden. Lizenziert ist LimeSurvey unter der GPL in Version 2.

ExecutorService unter Java nutzen

Wenn unter Java die Ausführung von Quelltext parallelisiert werden soll, so können hierfür Threads genutzt werden:

Thread thread = new Thread(new TestRunnable());
thread.start();

In diesem Beispiel wird für eine auszuführende Aufgabe ein Thread erstellt und dieser anschließend gestartet. Nun kann es Fälle geben, in welchem mehrere Threads die gleiche Aufgabe ausführen sollen, allerdings nicht unbedingt die entsprechende Anzahl von Threads angelegt werden soll. Für eine solche Aufgabe eignet sich ein ExecutorService. Im ersten Schritt sollte ein Runnable definiert werden. In diesem Interface wird eine run-Methode definiert, die den auszuführenden Quellcode enthält:

public static class TestRunnable implements Runnable {

    @Override
    public void run() {
        // Do something
    }
}

Nun kann der ExecutorService angelegt werden und mit einem Threadpool ausgestattet werden. Anschließend werden die neuen Instanzen des Runnable, mittels der execute-Methode, an den ExecutorService übergeben.

// Executor service
ExecutorService executorService = Executors.newCachedThreadPool();

// Add jobs to executor service
for (int i = 0; i < 100; i++) {
    executorService.execute(new TestRunnable());
}

// Shutdown executor service
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

Damit würden die Aufgaben abgearbeitet. Allerdings würde der ExecutorService nun bis zu einem Timeout noch bestehen bleiben. Stattdessen wird er im Beispiel kontrolliert heruntergefahren. Nach der Ausführung der shutdown-Methode nimmt der ExecutorService keine neuen Aufträge mehr an; bestehende Aufträge werden allerdings noch abgearbeitet. Über die Methode awaitTermination wird sichergestellt das der Service wartet, bis alle Aufgaben abgearbeitet sind. Bei der Methode wird ein Timeout angegeben, nach welchem der Service zwangsweise abgeschaltet wird. Damit werden die Aufgaben Stück für Stück abgearbeitet, ohne entsprechende viele Threads zu öffnen. Stattdessen werden Threads aus dem Threadpool wiederverwendet.