Phonetische Suche 👍 👎

Ab sofort besteht die Möglichkeit, eine phonetische Suche im Blog zu verwenden, wodurch eine unscharfe Suche nach Begriffen mit ähnlichem Klang ermöglicht wird. Standardmäßig ist diese Option jedoch deaktiviert.

So werden beispielsweise "s", "ss" und "ß" gleich behandelt und somit viele Beiträge auch bei fehlerhaft geschriebenen Stichworten gefunden – es kann jedoch auch zu überflüssigen Ergebnissen kommen.

Zum verwendeten Algorithmus lassen sich weitere Informationen unter dem Begriff Kölner Phonetik finden.

Kopfzeilen einer Webseite mit C# ermitteln 👍 👎

Ergänzend zu Quelltext einer Webseite mit C# einlesen möchte ich noch zeigen, wie sich die HTTP-Header der Antwort auf eine Anfrage ermitteln lassen. Wir verwenden dazu die bereits bekannte Klasse HttpWebRequest:
Kopfzeilen per HttpWebRequest ermitteln
01020304050607080910111213141516171819
HttpWebRequest request = HttpWebRequest.CreateHttp("http://domain.tld/");
/** * Hier könntet ihr auch eigene Kopfzeilen senden, z. B.: * request.Headers[HttpRequestHeader.Cookie] = "Cookie-Daten";**/
using(WebResponse response = request.GetResponse()) { for(int i = 0; i < response.Headers.Count; i++) { string header = response.Headers.GetKey(i);
foreach(string value in response.Headers.GetValues(i)) { /** * "header" enthält den Titel der Kopfzeile, * "value" enthält einen Wert zu dieser. **/ } }}
Die ebenfalls aus dem vorherigen Beitrag bekannte Klasse WebClient bietet diese Möglichkeit in ähnlicher Form.

PHP-Funktionen in C# vorschlagen 👍 👎

Für die (Pseudo-)Kategorie PHP-Funktionen in C# habe ich einige Vorschläge von Lesern erhalten.

Um diesen Prozess ein wenig zu optimieren, gibt es nun eine Funktion für derartige Vorschläge.

Quelltext einer Webseite mit C# einlesen 👍 👎

Manchmal kann es sinnvoll sein, den Quelltext einer Webseite automatisiert abzurufen, beispielsweise um Tests durchzuführen. Dies lässt sich in C# sehr einfach über die HttpWebRequest-Klasse lösen:
Quelltext per HttpWebRequest einlesen
01020304050607
HttpWebRequest request = HttpWebRequest.CreateHttp("http://domain.tld/");
using(WebResponse response = request.GetResponse()) { using(StreamReader streamReader = new StreamReader(response.GetResponseStream())) { string content = streamReader.ReadToEnd(); }}
Noch kompakter lässt sich das Ganze mit Hilfe der Klassen WebClient oder HttpClient lösen:
Quelltext per WebClient oder HttpClient einlesen
010203040506070809101112131415161718
  // WebClientusing(WebClient webClient = new WebClient()) {      // blockierend    string content = webClient.DownloadString("http://domain.tld/");
// nicht blockierend webClient.DownloadStringCompleted += (sender, e) => { string content = e.Result; };
webClient.DownloadStringAsync(new Uri("http://domain.tld/"));}

// HttpClientusing(HttpClient httpClient = new HttpClient()) { string content = await httpClient.GetStringAsync("http://domain.tld/");}
Abschließend sei bemerkt, dass diese Möglichkeit nicht für fragliche Aktionen genutzt werden sollte – dazu gehört im Übrigen auch schlicht unnötiger Traffic. Smiley: winking

(Pseudo-)Zufallszahlen in C# 👍 👎

Sehr häufig benötigt man in div. Anwendungen zufällige Zahlen (oder zumindest solche, die sich hinreichend ähnlich verhalten). Hierfür steht uns in C# die grundlegende Klasse Random zur Verfügung:
Random-Klasse verwenden
0102030405060708091011121314
Random random = new Random();
int randomInt = random.Next(); // Intervall: [0,Int32.MaxValue)int randomIntMax = random.Next(8); // Intervall: [0,8) bzw. [0,7]int randomIntMinMax = random.Next(5, 19); // Intervall: [5,19) bzw. [5,18]
/** * Befüllt "randomData" mit * zufälligen Byte-Werten.**/
byte[] randomData = new byte[3];random.NextBytes(randomData);
double randomDouble = random.NextDouble(); // Intervall: [0,1)
Manche Entwickler sind ggf. erst einmal etwas auf Grund der oberen Grenze verwirrt, welche bei Verwendung der entsprechenden Methoden exklusiv ist. Das bedeutet, dass ihr das eigentlich gewünschte Maximum inkrementiert angeben müsst, sofern dieses ebenfalls enthalten sein soll.

Die Verwendung gestaltet sich dennoch offensichtlich sehr einfach. Zu berücksichtigen gilt jedoch, dass als Seed standardmäßig ein zeitabhängiger Wert verwendet wird – um dieses Verhalten selbst zu steuern, existiert eine weitere Variante des Konstruktors. Gleiche Startwerte ergeben wie üblich gleiche Sequenzen an Zufallszahlen.

Für sensiblere Anwendungen, beispielsweise zur Schlüsselgenerierung, steht der kryptografische Zufallszahlengenerator RNGCryptoServiceProvider als konkrete Implementierung der abstrakten Basisklasse RandomNumberGenerator zur Verfügung. Die Verwendung gestaltet sich ähnlich einfach:
RNGCryptoServiceProvider-Klasse verwenden
01020304050607080910111213
using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) {      // 3 Zufallszahlen erzeugen    byte[] randomData = new byte[3];    rng.GetBytes(randomData);
// Zufalls-Bytes durchlaufen foreach(byte randomNumber in randomData) { /** * "randomNumber" enthält nun jeweils * eine der erzeugten Zufallszahlen. **/ }}
Weitere sinnvolle Hinweise finden sich in den jeweiligen Klassenbeschreibungen des MSDN.

Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche