1

Firefox: Amazon.de ruckelt

Gerade eben festgestellt, warum die Amazon-Seite auf meinem Rechner immer ruckelt.
Es lag an dem Firefox-Plugin Linkification, welches URLs im Internet in anklickbare Links verwandelt.
Deaktiviert man es, verschwinden auch die Lags. Ein Eintragen der Amazon-Homepage in die Linkification Blacklist hat bei mir nichts bewirkt…

0

Windows Server 2012: VPN einrichten

Ich hatte das Problem, dass ich mich mit meinem Windows Server 2012 Home-Server gerne per VPN in das Uni-Netzwerk per OpenVPN einloggen wollte. Installiert und konfiguriert war OpenVPN korrekt.
Aber nachdem ich meinen Benutzernamen und Passwort eingegeben habe, scheint er sich zu verbinden, bis im Fenster

Successful ARP Flush on interface

zu lesen bekomme, dann dauert es kurz und anschließend kommt mehrmals die Meldung

Wed Apr 30 20:35:09 2013 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
Wed Apr 30 20:35:09 2013 Route: Waiting for TUN/TAP interface to come up…

nach ein paar Sekunden wird das OpenVPN-Icon grün und er zeigt an, ich wäre verbunden. Das Windows-Netzwerk-Icon zeigt allerdings eine eingeschränkte Konnektivität und weder im Browser kann ich eine Verbindung herstellen, noch in der Eingabeaufforderung eine Webseite anpingen.
OpenVPN als Administrator ausführen hat genauso wenig geholfen, wie im Kompatibilitätsmodus mit Windows 7.

Lösung war es VPN richtig zu konfigurieren.

  • Dazu zunächst den ServerManager starten und Remote Access bei den Server Roles installieren.
  • Dann DirectAccess and VPN (RAS) bei den Role Services auswählen
  • Nach der Installation beim konfigurieren Deploy VPN only klicken
  • Dadurch wird das Fenster Routing and Remote Access MMC geöffnet. Jetzt auf dem eigenen Server rechts klicken und and Configure and Enable Routing and Remote Access wählen.
  • Im Routing and Remote Access Server Setup Wizard dann den letzten Punkt Custom configuration auswählen
  • Und im nächsten Schritt VPN access anklicken.

Danach sollte es funktionieren.

(Eine bebilderte Anleitung findet man hier)

2

WPF: Resources.resx und Sprache ändern (Localization)

C# bietet die Möglichkeit Strings in einer Resource-Datei abzulegen und diese dann aus dem Code aufzurufen. Ebenfalls ist es möglich so Mehrsprachigkeit zu ermöglichen. Im Folgenden wird beschrieben, wie das in einer WPF-Anwendung angewendet werden kann.

  • Als erstes erstellt man sich mehrere Resources-Dateien im Properties-Ordner.
    • Resources.resx
    • Resources.de-DE.resx
    • Resources.en-US

    Resources.resx ist die Standard-Datei. Auf diese wird zurückgesprungen, falls ein String in den Sprach-Resources-Dateien nicht gefunden wird. Das kann ausgenutzt werden, wenn man Strings definieren will, die in jeder Sprache gleich sind. Zum Beispiel der Name des Programms oder ähnliches. Diese werden also nur in der Resources.resx angelegt.
    Die sprachspezifischen Dateien müssen den jeweiligen Länder-Code im Namen enthalten.

    Wichtig: Um aus den XAML-Dateien auf die Resources-Dateien zugreifen zu können, muss der Access Modifier im Designer auf Public geändert werden.

  • Als nächsten Schritt setzt man in der App.xaml.cs im App()-Konstruktor die gewünschte Sprache:

    string culture = "de-DE";
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    MYPROGRAMNAME.Properties.Resources.Culture = new CultureInfo(culture);
    

    MYPROGRAMNAME muss mit dem eigenen Projekt-Namen ersetzt werden.
    Diese drei Einstellungen müssen gesetzt werden, damit die Strings sowohl aus den .cs-Dateien als auch aus den .xaml-Dateien der richtigen Sprachdatei geholt werden.

  • Um in .cs-Dateien auf die Resources-Dateien zugreifen zu können, braucht man zunächst in jeder dieser .cs-Dateien einen ResourceManager. Dieser muss nicht neu erstellt werden, sondern kann einfach geholt werden:

    private static ResourceManager resManager = MYPROGRAMNAME.Properties.Resources.ResourceManager;
    

    MYPROGRAMNAME muss wieder mit dem eigenen Projekt-Namen ersetzt werden.

    Auf die Strings aus den Resourcen kann man dann folgendermaßen Zugreifen:

    resManager.GetString("MYSTRING");
    

    MYSTRING ist der Bezeichner des Strings in den Ressourcen.

  • Um in XAML-Dateien die Ressourcen-Strings zu verwenden, muss zunächst der Namespace angegeben werden. Dazu im allerersten Tag (hier Window) als ein Attribut setzen. Ich wähle die Abkürzung resx:

    <Window ...
        xmlns:resx="clr-namespace:MYPROGRAMNAME.Properties" >
    

    MYPROGRAMNAME ist durch den Projekt-Namen zu ersetzen.
    Dann kann man so darauf zugreifen: (hier anhand eines Buttons erklärt)

    <Button Content="{x:Static resx:Resources.MYSTRING}" />
    

    MYSTRING ist der Bezeichner des Strings in den Ressourcen.

  • Zusätzlich noch einige Tipps:

  • Um einen Zeilenumbruch im Designer der Ressourcen zu erreichen, drückt man [Shift]+[Return]
  • Auch Variablen kann man in den Resourcen anzeigen. Dazu setzt man in den Strings Platzhalter: {0}, {1}, usw… In den .cs-Dateien gibt man dann die Variablen per string.Format weiter.

    string.Format(resManager.getString("MYSTRING"), VARIABLENAME)
    

    MYSTRING muss durch den Resourcen-String ersetzt werden, VARIABLENAME durch die Variable, die anstelle des „{0}“ angezeigt werden soll.

0

WPF: Zugriff aus XAML auf StringCollection in Settings.settings

Um eine Liste in C# im XAML per Data Binding mit einer StringCollection aus einer Settings-Datei (hier Settings.settings im Properties-Ordner) gibt man die ItemsSource folgendermaßen an:

Zunächst muss der Namespace im allerersten Tag (hier Window) als Attribut angegeben werden. Ich wähle die Abkürzung resx:

<Window ...
    xmlns:resx="clr-namespace:MYTOOLNAME.Properties" >

MYTOOLNAME ist durch den Projektnamen zu ersetzen.

Jetzt kann man die das ItemSource-Attribut einer ListBox folgendermaßen setzen:

<ListBox 
    ItemsSource="{Binding Source={x:Static resx:Settings.Default}, Path=MYSTRINGCOLLECTION}" />

MYSTRINGCOLLECTION ist durch den Bezeichner der StringCollection zu ersetzen.