Konami Code in einer WPF-Anwendung

Wer kennt ihn nicht, den Konami typischen Cheat-Code für Videospiele. Inzwischen findet der Konami Code in einigen Webseiten, Anwendungen und Spielen seinen Platz. Aber wie wird dieser eigentlich richtig unter WPF implementiert? Nun zunächst einmal sollten wir uns ansehen, wie der Konami Code eigentlich aussieht. Welche Tasten gedrückt werden müssen und in welcher Reihenfolge. Anschließend können wir uns Gedanken über die Implementierung machen und dann muss einem auch noch ein gutes Easter Egg dafür einfallen. Allgemeine Informationen zum Konami Code findet man leicht im Web, z.B. auf Wikipedia. Und hier eine kleine Grafik welche Tasten zum Konami Code gehören:

Up, Up, Down, Down, Left, Right, Left, Right, B, A

Konami Code Tasten

Weiterlesen

Ein eigener dynamischer DNS Dienst

Im heutigen Post möchte ich mich dem Thema widmen, wie man einen eigenen dynamsichen DNS-Dienst einrichtet. Was wird benötigt, um einen solchen Dienst aufsetzen zu können? Nun es wird ein Router benötigt, der eigene dynamische DNS Dienste unterstützt – wie z.B. die AVM Fritz!Box. Dazu wird noch ein Webspace mit PHP und MySQL sowie eine eigene Domain benötigt. Um sich dem Ganzen bewusst zu werden, was das hier eigentlich werden soll: Am Ende – nach der finalen Implementierung – soll eine Subdomain aufgerufen werden, welche wiederum eine Weiterleitung zu der eigenen IP-Adresse zu Hause liefert. Legen wir als Erstes die Datenbanken an. Für dies könnte folgendes Script verwendet werden, das über  phpmyadmin importiert werden kann.

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

CREATE TABLE IF NOT EXISTS `authentication` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(64) NOT NULL,
  `password` varchar(64) NOT NULL,
  `is_active` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user` (`user`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `dyndns` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(64) NOT NULL,
  `password` varchar(64) NOT NULL,
  `ip_addr` varchar(64) NOT NULL,
  `remote_addr` varchar(64) NOT NULL,
  `timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_ip` (`user`,`ip_addr`,`remote_addr`),
  UNIQUE KEY `only_user` (`user`),
  KEY `user_key` (`user`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Weiterlesen

C# API unter Windows 7, 8 und 8.1

Mit der Einführung von Windows 7 hat Microsoft mehrere neue und erweiterte API Funktionen bereitgestellt, die Entwickler auch in eigenen Anwendungen verwenden können. Während Funktionen wie Hyper-V oder Multitouch nicht unbedingt für jede Anwendung geeignet sind, gibt es andere, die jede Anwendung sinnvoll erweitern. In diesem Beitrag möchte ich mich auf die API-Funktionen für die Windows Taskbar und die neuen Dialoge konzentrieren, welche meiner Ansicht nach in jeder Anwendung sinnvoll sind und bestehende Funktionen erweitern.

Da diese Art der neuen Funktionalitäten leider bisher nicht den Weg in das .NET-Framework gefunden hat, muss hierfür das Package mittels NuGet nachträglich eingbunden werden. Hier kann in der Online-Bibliothek nach „Windows 7 API Code Pack“ gesucht werden. Mehr Informationen hier finden Sie hier: http://archive.msdn.microsoft.com/ Weiterlesen

Netzwerkauslasung auslesen

Seit Windows 8 gibt es über den TaskManager sehr nützliche Auswertungen zur Auslastung von CPU, RAM, Festplatten sowie dem Netzwerk. Diese in C# nachzubauen ist gar nichtmal schwer, da es im .NET-Framework bereits dafür vorgesehene Klassen und somit Implementierungen gibt. Im Falle der Netzwerkauslastung ist es jedoch so, dass keine Zuordnung zwischen IP-Adressen und Auslastung besteht wie es im TaskManager der Fall ist. Um diese Erweiterung zu implementieren, muss man im Rahmen des .NET-Frameworks einen kleinen Umweg bemühen. Weiterlesen

Android- und Windows-Apps mit Apples Swift erstellbar

RemObjects hat mit Silver ein neues Front-End für seinen hauseigenen Compiler Elements angekündigt, das es erlaubt, Programme, die in Apples neuer Sprache Swift geschrieben wurden, zu nutzen. Damit ist es möglich, Apps sowohl für Java als auch für .NET mit Plattformziel Mono/Xamarin, WinRT, Windows Phone und ASP.NET zu kompilieren. Bei Java sind Dalvik und ART möglich, somit können Interessierte auch Android-Apps mit Swift schreiben.

Silver arbeitet mit den IDEs Visual Studio 2013 unter Windows und dem hauseigenen Fire auf dem Mac. Wer möchte, kann auch Cocoa-Apps für iOS und OS X kompilieren, wobei das natürlich längst Xcode mit seinen Tools übernimmt.

Weiterlesen

MAC-Adresse anhand einer IP-Adresse ermitteln

Es ist möglich, die MAC-Adresse eines Ziels unter bestimmten Bedingungen anhand der IP-Adresse zu ermitteln. Dies ist unter Anderem im Regelfall im lokalen Netzwerk über diesen Weg möglich. Dies kann zum Beispiel einen Nutzen haben, wenn man einen lokalen Dienst anbietet, der nur bestimmten Rechnern Zugriff gewähren soll. Auch wenn die MAC-Adresse sich ähnlich wie die IP-Adresse verändern könnte, so ist diese doch deutlich statischer. Denn um die MAC-Adresse zu verändern benötigt man ausreichend Kenntnisse während sich die IP-Adresse alleine schon durch den DHCP im lokalen Netzwerk ändern könnte. Weiterlesen

HTML5 Formulare mit mehreren Submit-Buttons

In manchen Situationen hegt man den Wunsch, dass ein Formular mehrere „Ausgänge“ hat, also mehrere Submit-Buttons. Je nachdem, welche dieser Schaltflächen ein Anwender anklickt, werden unterschiedliche URL-Adressen mit unterschiedlichen Formular-Verarbeitungsscripts aufgerufen.

<form>
  <p>
    <label>E-Mail-Adresse eines Newsletter-Abonnenten:</label><br>
    <input type="email" name="mail" size="40">
  </p>
  <input type="submit" value="Ändern" formaction="/scripts/updateAbo.php" formmethod="post"> 
  <input type="submit" value="Löschen" formaction="/scripts/deleteAbo.php" formmethod="post"> 
</form>

Weiterlesen

Datentyp Erweiterungen

Oftmals kommt es vor, dass man bei einigen Datentypen die ein oder andere Methode mehr gebrauchen könnte. So ist zum Beispiel das aus VB bekannte „IsNumeric“ bei Strings sehr hilfreich und dennoch nicht in C# vorhanden. Dies lässt sich jedoch sehr einfach nachbauen. Dazu muss man nur eine Erweiterung, also eine Extension, des Datentypen „String“ erstellen. Dies funktioniert ganz einfach durch das Definieren einer statischen Methode, welche als ersten Parameter einen String erwartet, der wiederrum ein „this“ vorangestellt bekommt. Für den Fall einer „IsNumeric“-Prüfung würde die zu implementierende Methode zum Beispiel so aussehen:

public static bool IsNumeric(this string str)
{
    decimal d;
    return decimal.TryParse(str, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out d);
}

Dies kann natürlich mit jedem Datentypen gemacht werden und eventuell auch mit Interfaces. Das Wichtige und Relevante dabei sind nur die Aspekte, dass die Methode statisch ist und das „this“ vor den Parameter gestellt wird. Verwenden würde man die obige Implementierung wie folgt: „Ein String der keine Zahl ist“.IsNumeric();

Ermitteln von Feiertagen

Feiertage werden nicht nach dem Zufallsprinzip gesetzt, sondern es gibt eine feste Formel anhand welcher man sämtliche Feiertage berechnen kann. Hierbei muss man zwischen festen Feiertagen wie Neujahr und dem Tag der deutschen Einheit und den flexiblen unterscheiden. Zum Beispiel die, die sich an Ostersonntag ausrichten, welcher wiederrum errechnet werden kann. Dies ist mit der Gaußschen Osterformel möglich. Wenn man dies getan hat, werden von dem Ergebnisdatum aus nur noch Additionen sowie Subtraktionen durchgeführt. So lassen sich alle beweglichen Feiertage ermitteln. Wir nutzen zum errechnen vom Ostersonntag jedoch folgende Formel:

//year ist das aktuelle Jahr
int c = year / 100;
int n = year - 19 * (year / 19);
int k = (c - 17) / 25;
int i = c - c / 4 - ((c - k) / 3) + 19 * n + 15;
i = i - 30 * (i / 30);
i = i - (i / 28) * ((1 - (i / 28)) * (29 / (i + 1)) * ((21 - n) / 11));
int j = year + (year / 4) + i + 2 - c + (c / 4);
j = j - 7 * (j / 7);
int l = i - j;

int easterMonth = 3 + ((l + 40) / 44);
int easterDay = l + 28 - 31 * (easterMonth / 4);

Weiterlesen

Einen PHP-SOAP-Webservice erstellen und verwenden

Zum Erstellen eines SOAP-Webservices unter PHP gibt es einige Möglichkeiten. Eine davon wäre sicherlich bei Null zu beginnen und alles selbstständig zu programmieren. Eine andere Möglichkeit wiederrum ist die Verwendung von NuSoap; dies werde ich auch hier in diesem Beitrag tun. Was benötigt man zunächst einmal für einen NuSoap-PHP-Webservice? Nun zunächst einmal benötigt man einen Webspace auf dem PHP läuft und auch eine Datenbank wie z.B. MySQL ist an dieser Stelle hilfreich. Verwendet werden kann der Webservice anschließend in jeder SOAP-kompatiblen Programmiersprache. Ich werde hierfür C# verwenden.

Für den ersten Schritt sollten wir uns die Library für NuSoap herunterladen. Dies ist unter folgender URL möglich: http://sourceforge.net/projects/nusoap/ . Hier wird ausschließlich der „lib“-Ordner für die Referenzierung benötigt. Diesen packen wir auch direkt auf unseren Webserver, auf dem später der Webservice laufen soll. Weiterlesen