Einfacher Passwort-Generator unter Java

Das Ausdenken von Passwörtern ist prinzipiell eine schlechte Idee; besser ist es, wenn diese automatisch generiert werden. Ein solcher Generator kann problemlos selbst geschrieben werden. In diesem Fall in Java:

public class PasswordGenerator {

    private static final SecureRandom secureRandom = new SecureRandom();

    private static final String alpha = "abcdefghijklmnopqrstuvwxyz";
    private static final String alphaCaps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String numeric = "0123456789";
    private static final String specials = "!§$%&/()=?.:,;+*#<>";

    public enum CharacterSet {
        Alpha,
        AlphaCaps,
        AlphaBoth,
        Numeric,
        AlphaNumeric,
        Special,
        All
    }

    private static String getCharacters(CharacterSet characterSet) {

        switch (characterSet) {
            case Alpha:
                return alpha;
            case AlphaCaps:
                return alphaCaps;
            case AlphaBoth:
                return alpha + alphaCaps;
            case Numeric:
                return numeric;
            case AlphaNumeric:
                return alpha + alphaCaps + numeric;
            case Special:
                return specials;
            case All:
                return alpha + alphaCaps + numeric + specials;
        }

        return alpha;
    }

    public static String generatePassword(int length, CharacterSet characterSet) {

        String characters = getCharacters(characterSet);
        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < length; i++) {
            stringBuilder.append(characters.charAt(secureRandom.nextInt(characters.length())));
        }

        return stringBuilder.toString();
    }
}

Der Generator funktioniert im Groben so, das aus einem bestimmten Zeichenvorrat zufällig Zeichen gewählt und aus diesen das Passwort erzeugt wird. Als Zufallsquelle kommt nicht die gebräuchliche Klasse Random zum Einsatz, sondern die Klasse SecureRandom. Diese von Random abgeleitete Klasse erzeugt aus kryptografischer Sicht starke Zufallszahlen, was die Sicherheit des Generators erhöht. Als kleines Gimmick lässt sich der gewünschte Zeichensatz, aus welchem das Passwort generiert werden soll, über einen Enum auswählen:

String s = PasswordGenerator.generatePassword(64, PasswordGenerator.CharacterSet.All);
System.out.println(s);

Damit würde auf der Konsole ein Passwort mit 64 Zeichen ausgegeben werden, welches den kompletten Zeichenvorrat der Generator-Klasse nutzt.

Waipoua-Theme für den Podlove Publisher anpassen

Seit meinem letzten Wechsel des Designs auf seeseekey.net nutze ich eine stark modifizierte Version des Elmastudio-Themes Waipoua. Neben Anpassungen am Design wurden unter anderem die externen Einbindungen der Google Fonts deaktiviert. In den aktuellen Themes von Elmastudio werden diese leider immer noch extern eingebunden; was wohl auch auf absehbare Zeit so bleibt.

Leider hat das Waipoua-Theme einige Probleme mit dem Plugin Podlove Publisher. Der Podlove Publisher ist ein Plugin, welches einen Workflow für Podcasts, vom Anbieten bis zum Abonnieren bereitstellt.

Das erste Problem mit dem Podlove Publisher im Zusammenhang mit dem Waipoua-Theme ist die Anzeige der von Beiträgen mit dem Post Type podcast auf der Startseite. In den Experteneinstellungen des Podlove Publishers ist dies die Einstellung Blog und Podcast kombinieren. Damit dies mit dem Waipoua-Theme funktioniert muss die Datei index.php des Themes angepasst werden. Dort findet sich folgende Quelltextblock:

<?php /* Start the Loop */ ?>
<?php global $query_string;
query_posts( $query_string . '&ignore_sticky_posts=1' ); ?>

  <?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part( 'content', get_post_format() ); ?>

  <?php endwhile; // end of the loop. ?>

<?php wp_reset_query(); // reset the query ?>

An dieser Stelle werden sämtliche Manipulationen der Abfrage entfernt. Anschließend sollte der Code so aussehen:

<?php /* Start the Loop */ ?>

  <?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part( 'content', get_post_format() ); ?>

  <?php endwhile; // end of the loop. ?>

Nach dieser Modifikation tauchen die Beiträge mit dem Post Type podcast in der Beitragsliste im Startmenü auf. Das nächste Problem betrifft die Darstellung der Beiträge mit dem Post Type podcast, sobald diese einzeln angezeigt werden. Hierbei wird das Design zerschossen, da der Beitrag in voller Breite angezeigt wird. Eine Sidebar würde in diesem Szenario nach unten rutschen.

Nach dem Fix funktionieren die Einzelseiten mit dem Post Type podcast

Um dies zu verhindern muss die Datei header.php angepasst werden. Dort findet sich nach dem schließenden head-Tag die Zeile:

<body <?php body_class(); ?>>

Diese Zeile wird entfernt und stattdessen durch folgenden Quellcode ersetzt:

// Fix problem with single posts (post type: podcast)
$body_class = get_body_class();

// single-podcast exists in body class, replace
if (in_array("single-podcast", $body_class)) {

  echo "<body class=\"";

  foreach($body_class as $body_class_value) {
    if ($body_class_value == "single-podcast") {
      $body_class_value = "single-post";
    }

    echo $body_class_value . " ";
  }
  
  echo "\" >";
}
else {
?>
  <body <?php body_class(); ?>>
<?php
}
?>

Der Quellcode sorgt dafür das die Klasse single-podcast in single-post umbenannt wird. Damit greift das CSS für gewöhnliche Beiträge und die Darstellung der Podcast-Seiten funktioniert ohne Probleme. Als letzten Schritt habe ich die archive.php angepasst. In der Datei wurde der komplette header-Block entfernt. Diese Anpassung ist im Gegensatz zu den anderen Anpassungen Geschmackssache. Sie sorgt dafür das keinerlei Archivtexte mehr auftauchen.

Schriftart für Quelltext

Für die Darstellung von Quelltext werden in den meisten Fällen eine Monospace-Schriftart genutzt. Das bedeutet das jedes Zeichen genau die gleiche Breite besitzt – dies wirkt sich positiv auf die Lesbarkeit des Quelltextes aus. Mit Hack 2.0 wurde vor einigen Tagen eine freie Monospace-Schriftart vorgestellt, welche sich besonders an Entwickler richtet. Die Schriftart liegt dabei in unterschiedlichsten Fontformaten (OTF, TTF, SVG, EOT, WOFF, WOFF2) vor.

Die Schriftart eignet sich besonders gut zur Darstellung von Quelltext

Die Schriftart eignet sich besonders gut zur Darstellung von Quelltext

Bezogen werden kann die Schriftart über die offizielle Seite es Projektes – die Quelldaten sind auf GitHub zu finden. Lizenziert ist der Font unter der Hack Open Font License und der Bitstream Vera License.

Quellcode und WordPress

Auf der Suche nach einer schönen Methode um Quellcode unter WordPress zu formatieren bin ich über die Seite http://www.niljuha.de/quellcode-boxen-in-wordpress/ gestolpert. Dort wird das über die Formatierung mittels Monospace gelöst. Dazu muss man nur seine style.css entsprechend erweitern bzw. anpassen. In meinem Fall sieht das ganze dann so aus:

pre {
 background: #6C7A94;
 border: 1px solid #333;
 color: #fff;
 font: 12px "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
 overflow: auto;
 padding: 10px;
 -moz-border-radius: 3px;
 border-radius: 3px;
 margin-bottom: 14px;
}

pre * {
 font: 12px "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
}

Diese Methode hat den Vorteil das man keine weiteren Plugins benötigt und das ganze auch noch sehr ansprechend aussieht :)