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.