wtorek, 16 grudnia 2008

HTTP 417 i Webservice

Ostatnio w firmie napisałem aplikację, która łączy się poprzez webservice do "bardzo ważnego" systemu z punktu widzenia firmy. Program służy ludziom w jednej zdalnej lokalizacji (nazwijmy ją LZ), natomiast serwer znajduje się gdzie indziej. Droga z jednego punktu do drugiego, jest raczej długa mimo niewielkiej geograficznej odległości (ok. 5km). Pewnego dnia aplikacja przestała działać (firma też w tym momencie znacznie zwolniła).

Ale do rzeczy, po krótkim wywiadzie okazało się, że wywołanie metod serwisu skutkuje rzuceniem wyjątku. Dokładnie WebException skarżący się na "HTTP ERROR 417: Expectation failed". Po dalszym wywiadzie o co chodzi, okazało się iż sprawa ma się z nieodpowiednimi wpisami w nagłówku HTTP. Po uruchomieniu aplikacji w innym miejscu niż LZ, problem znikł. Okazało się, że ISP dostarczający sieć do LZ miesza coś w HTTP przy pomocy transparentnego proxy.

No dobra problem zidentyfikowany, ale teraz jak go ominąć? Proste: zabrońmy dostawcy mieszać nam w strumieniu zabezpieczając go przez szyfrowanie. Włączamy w webserwisie SSL, uprzednio generując certyfikat przy pomocy wbudowanego w IIS generatora certyfikatów. Następnie trzeba zmusić program kliencki by bez pytania akceptował ten certyfikat. Tu posłużyłem się informacjami znalezionymi tutaj. W ten sposób ominąłem problem i dodatkowo zabezpieczyłem dane.

środa, 29 października 2008

Basic Commodore 64 na twoim PC

Tak, to prawda, a na dodatek to nie żadna emulacja przy pomocy któregoś z emulatorów. Autorzy www.pagetable.com skonwertowali oryginalny kod Basica z C64 na język C. Całość jest wydana na licencji BSD wraz z źródłami. Więc można skompilować na prawie każdym systemie. Więcej...

niedziela, 20 lipca 2008

Wyrażenia regularne w C# - podmiana

Wyrażenia regularne pozwalają także na podmianę tekstu na podstawie podanych wzorców. Klasa Regex posiada metodę Replace umożliwiającą podmianę tekstu.
Najprostszy sposób to wywołanie metody, której argumentami są: ciąg wejściowy, wzorzec oraz ciąg, który zostanie użyty do podmiany.


string tekst = "Ala mz kota, a kot mw Ale";
string podmiana = Regex.Replace(tekst, "m.", "ma"); // podmień tekst rozpoczynający się od m i kończący się dowolnym znakiem
Console.WriteLine(podmiana); // wyświetlenie podmienionego tekstu


Bardziej rozbudowana wersja tej metody pozwala na zastosowanie delegatów wywoływanych w momencie dopasowania do wzorca.


class Program
{
private static string ReplaceMethod(Match m)
{
Console.WriteLine(m.Value); // znaleziony tekst
return "ma"; // zwrócenie tekstu który znajdzie się w miejscu dopasowania
}

static void Main(string[] args)
{
string tekst = "Ala mz kota, a kot mw Ale";
string podmiana = Regex.Replace(tekst, "m.", ReplaceMethod);
Console.WriteLine(podmiana);
Console.ReadKey();
}
}

wtorek, 8 lipca 2008

Wyrażenia regularne w C#

Wyrażenia regularne to podstawowe narzędzie przy analizie i modyfikacji tekstu. C# też oferuje odpowiednią klasę do używania wyrażeń regularnych. Mowa tu o klasie Regex.
Klasy można używać w dwojaki sposób, tworząc obiekty tej klasy lub też korzystać ze statycznych metod. W tych dwóch przypadkach, postępuje się w podobny sposób.

Wyszukiwanie tekstu

Klasa Regex posiada dwie metody posiadające kilka innych wariantów: Match i Matches. Pierwsza z nich zwraca jedynie pierwszy wynik wyszukiwania w postaci obiektu klasy Match.

string tekst = "Ala ma kota, a kot ma Ale";
Match match = Regex.Match(tekst,"kot.?");
while (match.Success) // czy zostało coś znalezione
{
Console.WriteLine(match.Value); // Wyświetlenie wyniku wyszukiwanie
match = match.NextMatch(); // odczytanie następnego wyniku
}

W powyższym przykładzie zastosowana została metoda Match, która zwraca pojedynczy wynik oraz metoda NextMatch(), która zwraca kolejny. Można pobrać całą kolekcję wyników przy pomocy metody Matches.

string tekst = "Ala ma kota, a kot ma Ale";
MatchCollection matches = Regex.Matches(tekst, "kot.?");
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
}

poniedziałek, 7 kwietnia 2008

Witam na moim blogu

Postanowiłem, że pod adresem rychlik.eu będzie mój blog. Będzie to znacznie lepsze rozwiązanie niż prawie "nieżywa" strona. Na tym blogu skupię się głównie na moich zainteresowaniach czyli programowanie w C#, Ruby itp. Poza tym znajdą się tu różne ciekawe "znaleziska" z sieci, część z nich bezpośrednio na blogu, reszta na moim profilu del.icio.us.