Zum Inhalt

Autor: Dennis Wilmsmann

FRITZ!Box 6320 Update auf FRITZ!OS 05.51

In der letzten Nacht ist tatsächlich von Unitymedia ein Update für die FRITZ!Box 6320 auf Version 05.51 verteilt worden:

fritzbox6320-05.51

Quelle: Facebook

Damit sollen nun u.a die WLAN Probleme behoben sein, wegen denen ich vor einiger Zeit noch einen TL-WR841ND als WLAN Accesspoint hinter die FRITZ!Box gehängt hatte. Ich werde das WLAN der FRITZ!Box 6320 jetzt also mal wieder ausprobieren und evtl. sind die Probleme ja wirklich beseitigt, und ich kann wieder auf den anderen WLAN Accesspoint verzichten. Aber mal abwarten…

Update vom 17.05.2013: Ich habe das WLAN der FRITZ!Box 6320 wieder deaktiviert und nutze lieber meinen TP-Link Accesspoint. Das Update der FRITZ!Box hat das WLAN zwar verbessert, aber es kann weiterhin nicht mit dem TL-WR841ND mithalten. Die Reichweite ist deutlich geringer und falls ein Upload/Download die Bandbreite auslastet, können andere Geräte im WLAN kaum noch Seiten aufrufen. Was allerdings nach dem Update auf 05.51 nicht mehr auftritt, sind die sporadischen WLAN Abbrüche. Jedenfalls bei meiner  FRITZ!Box.

Unitymedia: Gmail, IMAP und IPv6

Seit einigen Tagen kann ich nicht mehr mit Thunderbird via IMAP auf meine Gmail Konten zugreifen; es passiert einfach nichts, nicht mal eine Fehlermeldung à la „Passwort falsch“ oder sowas in der Art wird angezeigt. Scheinbar liegts an IPv6. Man bekommt ja bei Unitymedia als Neukunde keinen IPv4 Anschluss mehr, sondern nur noch IPv6 (IPv4 über DS-Lite). Damit verteilt dann die FRITZ!Box 6320 von Unitymedia auch IPv6 Adressen an die Systeme im LAN, sofern dort IPv6 aktiviert ist.

IPv6:
um-gmail-ipv6

IPv4:
um-gmail-ipv4

Mit deaktiviertem IPv6 klappt der Zugriff dann auf Gmail via IMAP auch.

disable-ipv6-win7

Spindown bei Festplatten verhindern

In meinem Notebook MSI GE60 ist eine Western Digital WD10JPVT Blue als Festplatte verbaut, die leider das tolle Feature besitzt, bereits nach ca. 3 Sekunden einen Spindown durchzuführen. Wenn danach dann wieder auf die Festplatte zugegriffen wird, gibts eine kurze Verzögerung, die nicht wirklich lange dauert, aber bemerkbar ist und nervt. Vom Hersteller Western Digitial gibt es für das Problem leider keine Lösung bzw. ich habe keine gefunden.

Mit ein paar Zeilen Java läßt sich das Problem umgehen: Es werden alle x Sekunden ein paar Zeichen Text in eine Datei geschrieben, die nach x Durchläufen gelöscht und neu erstellt wird. Das kostet kaum Performance, sorgt aber für minimale Last auf der Festplatte.

package de.denniswilmsmann.preventspindown;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/*
 * $Log: $
 */

/**
 * <br/>Created: 18.04.2013
 * <br/>Author: Dennis Wilmsmann
 * <br/>Last committed $Date: $
 * @author  $Author: $
 * @version $Revision: $
 */
public class PreventSpindown {

    private static final String PREFIX = "preventspindown_";
    private static PreventSpinDownThread t;
    private static int secondsPerLine = 5;
    private static int linesPerFile = 10;
    private static TrayIcon icon;
    private static Image stopImage;
    private static Image runImage;
    private static String running = "Prevent Spindown - Running";
    private static String stopped = "Prevent Spindown - Stopped";

    /**
     * @param args String[]
     * @throws URISyntaxException
     * @throws IOException
     * @throws AWTException
     */
    public static void main(String[] args) throws URISyntaxException, IOException, AWTException {
        // check command line params
        if (args != null) {
            for (String arg : args) {
                if (arg.startsWith("secondsPerLine")) {
                    secondsPerLine = Integer.parseInt(arg.split("=")[1]);
                } else if (arg.startsWith("linesPerFile")) {
                    linesPerFile = Integer.parseInt(arg.split("=")[1]);
                }
            }
        }

        // at least 1 line per second and 1 line per file
        secondsPerLine = Math.max(1, secondsPerLine);
        linesPerFile = Math.max(1, linesPerFile);

        SystemTray tray = SystemTray.getSystemTray();
        Toolkit toolkit = Toolkit.getDefaultToolkit();

        stopImage = toolkit.getImage("drive.png");
        runImage = toolkit.getImage("drive-green.png");

        PopupMenu menu = new PopupMenu();

        MenuItem startItem = new MenuItem("Start");
        startItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (t == null || !t.isRunning()) {
                    t = new PreventSpinDownThread(secondsPerLine, linesPerFile);
                    t.start();
                    icon.setImage(runImage);
                    icon.setToolTip(running);
                }
            }
        });
        menu.add(startItem);

        MenuItem stopItem = new MenuItem("Stop");
        stopItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (t != null) {
                    t.setRunning(false);
                    icon.setImage(stopImage);
                    icon.setToolTip(stopped);
                }
            }
        });
        menu.add(stopItem);

        MenuItem closeItem = new MenuItem("Close");
        closeItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        menu.add(closeItem);
        icon = new TrayIcon(stopImage, stopped, menu);
        icon.setImageAutoSize(true);

        tray.add(icon);
    }

    public static class PreventSpinDownThread extends Thread {

        private final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd_HHmmss");
        private int secondsPerLine = 5;
        private int linesPerFile = 10;
        private boolean running = true;

        public void setRunning(boolean running) {
            this.running = running;
        }

        public PreventSpinDownThread(int secondsPerLine, int linesPerFile) {
            this.secondsPerLine = secondsPerLine;
            this.linesPerFile = linesPerFile;
        }

        @Override
        public void run() {
            // remove old files first
            File tmp = new File("");
            File folder = new File(tmp.getAbsolutePath());
            if (folder.isDirectory()) {
                for (File f : folder.listFiles()) {
                    if (f.getName().startsWith(PREFIX) && f.getName().contains("txt")) {
                        System.out.println("remove old file " + f.getAbsolutePath());
                        f.delete();
                    }

                }
            }

            System.out.println("write a new line each " + secondsPerLine + " seconds");
            System.out.println("write a new file each " + linesPerFile + " lines");

            int count = 0;
            File newTextFile = null;
            String filename = null;

            try {
                while (running) {
                    if (newTextFile == null) {
                        filename = PREFIX + df.format(new Date()) + ".txt";
                        newTextFile = new File(filename);
                        System.out.println("create new file " + newTextFile.getAbsolutePath());
                        newTextFile.deleteOnExit();
                    }
                    FileWriter fileWriter = new FileWriter(newTextFile, true);

                    String random = UUID.randomUUID().toString();
                    System.out.println(random);

                    fileWriter.write(random);
                    fileWriter.write("\n");
                    fileWriter.close();
                    count++;

                    icon.setToolTip(PreventSpindown.running + " " + count + "/" + linesPerFile + "\n" + filename);

                    Thread.sleep(1000 * secondsPerLine);

                    if (count >= linesPerFile) {
                        count = 0;
                        System.out.println("remove old file " + newTextFile.getAbsolutePath());
                        newTextFile.delete();
                        newTextFile = null;
                    }
                }
                // delete file after stop
                newTextFile.delete();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public boolean isRunning() {
            return running;
        }
    }
}

Update vom 18.04.2013: Die Konsole wird per default nicht mehr angezeigt und dafür gibts ein kleines Icon im Systray, um per Rechtsklick zu starten bzw. zu stoppen.

psd1

psd3

psd2

Ich habe mal alles zusammen in ein ausführbares JAR File gepackt mit dazugehöriger start.bat Datei für Windows. Das sollte eigentlich auf jedem System laufen, auf dem Java 6 (oder aktueller) installiert ist: preventspindown.zip

Das ZIP File irgendwo entpacken und via start.bat starten. Wie oft eine neue Zeile geschrieben werden soll und wann eine neue Datei erstellt wird, wird über die Parameter secondsPerLine (default=5) und linesPerFile (default=10) gesteuert. Einfach nach den eigenen Wünschen in der start.bat anpassen.

Wenn in der start.bat wieder mit java.exe anstatt javaw.exe gestartet wird, erscheint auch wieder die Konsole:

preventspindown

Gleichmäßige Schriftgröße in WordPress Kommentaren

Mein momentanes WordPress Theme rückt Kommentare unter den Beiträgen zwar schön ein, verkleinert aber auch nach jeder Ebene die Schriftgröße etwas. Aber der 2. oder 3. Ebene wird die Schrift dann irgendwie zu klein:

Zu kleine Schriftarten

Mit etwas CSS läßt sich aber eine gleichmäßige Schriftgröße erzwingen (style.css):

.commentlist li, #commentform input, #commentform textarea {
 font-size: 1em; 
}
.commentlist cite, .commentlist cite a {
 font-size: 1em; 
}

Gleichmäßige Schriftgröße

Quelle: WordPress/Mandigo/User tips and tricks

MSI GE60: Turbo Taste immer aktiv

Falls die Turbo Taste beim MSI GE60 dauerhaft leuchtet, d.h. die NVIDIA GPU aktiv ist, abr gerade kein kein Spiel läuft, kann auch ein anderes Programm die Ursache mein. Bei mir war Steam. Es ist allerdings möglich, Programm dauert auf die integrierte Intel HD GPU festzulegen, nämlich via NVIDIA Systemsteuerung (Rechtsklick auf den Desktop):

MSI GE60 Turbo: Steam

TP-Link TL-WR841ND als WLAN Accesspoint

Da meine FRITZ!Box 6320 v2 (5.28) nicht die WLAN Qualität/Performance/Zuverlässigkeit liefert, die ich gerne hätte, habe ich mich nach einem günstigen WLAN Accesspoint umgesehen, den ich hinter die FRITZ!Box klemmen kann und der die WLAN Aufgaben der FRITZ!Box übernimmt. Bei Amazon bin ich dann über den Router  TL-WR841ND von TP-Link gestolpert (ja, kein reiner Accesspoint, ich weiß): Fast 300 4 bis 5 Sterne Bewertungen für gute 20€? Kann also nicht ganz so schlecht sein, das Ding. Auch wenn es ein Router ist, der eigentlich mit einem DSL Modem zusammen genutzt werden möchte, tut er seine Arbeit auch als WLAN Accesspoint sehr gut. Alternativ gibts für ein paar € mehr noch das Modell TP-Link Archer C1200, mit drei Antennen, Gigabit Ethernet und einem USB Port, um z.B. eine Festplatte oder einen Drucker anzuschließen und im Netzwerk freizugeben. Wer noch etwas mehr WLAN Leistung benötigt, sollte einen Blick auf den TP-Link AC3150 oder den großen Bruder TP-Link Archer C5400 werfen. Oder die extrem kompakte Variante, die hervorragend als Accesspoint funktioniert: TL-WA850RE

Mit den folgenden Schritten hat der TL-WR841ND das WLAN der FRITZ! Box bei mir ersetzt:

  1. IP Adresse des TL-WR841ND auf 192.168.1.2 geändert (die FRITZ! Box hat 192.168.1.1 bei mir)
    TL-WR841ND-LAN
  2. DHCP beim TL-WR841ND deaktiviert (erfordert einen Neustart)
    TL-WR841ND-DHCP
  3. WLAN der FRITZ!Box deaktiviert
    FritzBoxWlan
  4. WLAN beim TL-WR841ND identisch zur Konfiguration der FRITT!Box eingestellt, d.h. gleiche SSID und gleicher WPA2 Key
    WLAN_1
    WLAN_2
  5. TL-WR841ND Router Port 1, 2, 3 oder 4 mit der FRITZ!Box verbunden (nicht (!!!) mit dem WAN Port des TL-WR841ND)
    wan_unplugged

Alle Geräte, die bisher via FRITZ!Box mit dem WLAN verbunden waren, haben sich ohne jeglichen Aufwand (dank gleicher SSID und gleichem WPA2 Key) verbunden, von der FRITZ!Box weiterhin per DHCP eine IP Adresse bekommen und haben Internetzugang.

Der Aufwand hielt sich mit ca. 10 Minuten für die FRITZ!Box und den TL-WR841ND sehr in Grenzen, den Kabelsalat nachher ordentlich zu verstecken, hat etwas länger gedauert.

Update vom 12.02.2013:
Am PC hab ich einen WLAN USB Stick von TP-Link: TL-WN821N
Durch drei Wände hindurch ist die Verbindungsqualität ganz hervorragend:

TL-WN821N

Damit kann ich meine 50 MBit Leitung von Unitymedia auch fast zu 100% nutzen:

Update vom 30.06.2013:
Mich haben viele Leute gefragt, warum ich den TP Link Router nicht per WAN Port an die Fritz Box anschließe, weil das mit einer passenden Konfiguration scheinbar auch funktioniert: Dann wird der TP Link Router als echter Router genutzt, ich möchte aber nur die WLAN  Accesspoint Funktionalität nutzen.

WLAN Probleme bei der FRITZ!Box 6230 v2 (Firmware 5.28)

Ich bin seit einigen Tagen Besitzer einer FRITZ!Box 6230 v2 von Unitymedia mit der momentan aktuellen Firmware 5.28. An sich ist das Gerät gut, was allerdings gar nicht geht, sind die plötzlichen WLAN Aussetzer. Die Qualität der Verbindung an sich ist gut, auch durch mehrere Wände hindurch, nur nach einiger Zeit gibts Verbindungsabbrüche.

Eine kurzfristige Lösung ist dann das deaktivieren und aktivieren meines USB WLAN Adapters.

WLAN USB

Aussehen tut das Problem so:

WLAN Status

Die Verbindung an sich ist also OK, nur selbst bei einem Ping vom PC aus auf die FRITZ!Box gibts Aussetzer.

ping -t 192.168.1.1

Immerhin scheine ich nicht alleine mit dem Problem zu sein, eine wirkliche Lösung habe ich aber auch nicht gefunden.