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.