Tworząc biznesową aplikacje webową dochodzimy do miejsca, gdy trzeba ją odpowiednio zabezpieczyć. Do tego służą oczywiście certyfikaty. Aby nasz serwis działał również po SSL należy poczynić parę kroków....
Kontynuując temat „nieświadomej” lokalizacji aplikacji (porzedni wpis), postanowiłem bliżej przyjrzeć się zaokrągleniom liczb zmiennoprzecinkowych. Okazuje się, że i tu może nas spotkać niespodzianka. W jaki sposób zaokrągla się liczby w C#? Wszystko zależy od potrzeb. Poniżej wybrane sposoby oraz ich rezultaty...
W ostatnim poście obiecałem pokazać na przykładzie, że destruktory rzeczywiście mają negatywny wpływ na wydajność. Mamy prostą klasę:class MyClass { ~ MyClass() { // Jakis bezensowny kod np:for (int i =0; i <100*10000; i++) { var newinstance =new myclass(); } stopwatch.stop(); long duration = stopwatch.elapsedmilliseconds; przyjrzyjmy się teraz diagramowi przedstawiającemu rozkład obiektów względem generacji (clr profiler): na moim komputerze duration wyniósł 900. usuńmy destruk...
Z biegiem lat, mam nieodparte wrażenie, że doba staje się coraz bardziej krótsza. Brakuje mi czasu na wiele różnych rzeczy. Obojętnie czy jest to pisanie kodu, czytanie książek, czy też nauka. Problem ten dotyczy również bloga, dlatego też spróbuję rozwiązać go w pewien sposób, wprowadzając nowy rodzaj tekstów oznaczonych tagiem Szybkie porady. Głównym zadaniem wpisów oznaczonych takim znacznikiem, będzie rozwiązanie pewnych, jasno określonych problemów. Teksty tego typu mogą pojawić się właściwie w każd...
Architektura 4656 dni, 4 godziny, 55 minut temu 165 źrodło rozwiń
W każdej aplikacji, wykorzystujacej bazę danych do przechowywania informacji, są elementy/tabele/struktury, których zawartość zmienia się niezmiernie rzadko. W związku z tym, zasadne wydaje się zaimplementowanie mechanizmu przechowywania tychże informacji w “bardziej stałym” obiekcie. Ograniczyło by to komunikację pomiędzy bazą danych i aplikacją, a tym samym zwiększyło wydajność aplikacji. Mechanizm taki można zaimplementować na wiele sposobów. Jednym z nich może być klasa typu Manager do przechowywania...
W poprzedniej notce pokazałem jak przy pomocy bardzo prostego interfejsu IRepository oraz QueryObject można zrealizować warstwę dostępu do danych. W zalezności od wielkości projektu może się okazać, że ciut brakuje funkcjonalności. Co zatem robić? Z założenia nie chcemy już więcej zmieniać naszego interfejsu. Jak więc przykładowo wykonać operację pobrania rekordu z bazy i ustanowienia na nim blokady? W bazowej implementacji nie mamy takiej metody... i nie będziemy jej dodawać do interfejsu. Na szczęście...
Architektura 4656 dni, 17 godzin, 6 minut temu 110 źrodło rozwiń
Autor: Zostałem ostatnio zapytany jak można zaimplementować aplikację, bazującej na .NET, która miałaby być rozszerzana za pomocą wtyczek (czasem nazywanych też: Add-In, Add-On, Rozszerzenie, Extension, Plug-In, Snap-In, ...), z których każda uruchamiana by była w bezpiecznym środowisku (np. odrębnej domenie aplikacyjnej). Przyjrzyjmy się więc jakie są możliwości tworzenia rozszzerzeń dla aplikacji (.NET) i jak można przy ich pomocy zapewnić wspomniane bezpieczeństwo. Sposób „wszystko zrobię sam (może ud...
Jeśli miał ktoś do czynienia np. z CPP z pewnością kojarzy pojęcie destruktora. Jest to metoda, wywoływana w momencie zwalniania obiektu z pamięci (przeciwieństwo konstruktora). Zarówno w CPP jak w C#, nazwa destruktora stanowi ‘~’ plus nazwa klasy.
Aby przyspieszyć walidacje xml za pomocą DTD można użyć klasy XmlPreloadedResolver. Umożliwia ona zaczytanie przed walidacją linków jakie pojawiają się w dokumecie xml oraz linków do tych dokumentów, które znajdują się u nas lokalnie. Dzięki temu podczas walidacji wszelkie odnośniki do dokumentów zewnetrznych zistaną rozwiązane na te znajujące się lokalnie, a przez to walidacja przebiegnie szybciej, gdyż często serwery W3C są przeci...
autor: Czy korzystacie z refleksji w .NET? Czy zdarzyło wam się przeglądać/ustawiać właściwości klas poprzez refleksje? Czy korzystacie z atrybutów? Mnie często i równie często zdarzało mi się ponownie szukać kodu, który rozwiązałby mój problem, dlatego dla wygody poniżej zamieszczam różne funkcje rozszerzające, które realizują wspomniane wyżej zadania. (być może komuś jeszcze się one przydadzą).
Jestem właśnie w trakcie lektury "Czystego kodu" Roberta C. Martina (polecam wszystkim programistom). Chciałbym podzielić się pewnym spostrzeżeniem autora tej książki. Otóż jako zupełne przeciwieństwa stawia on kod obiektowy oraz kod proceduralny operujący na strukturach danych. Zasadnicza różnica polega na tym, że klasy ukrywają swoją implementację komunikując się ze światem zewnętrznym wyłącznie przez metody, podczas gdy struktury danych mają zupełnie jawną postać, przez co nie potrzebują żadnych metod...
Architektura 4659 dni, 3 godziny, 11 minut temu 224 źrodło rozwiń
Funkcja walidujaca REGON w VisualBasic .NET : Napisałem dziś funkcje w Visual Basic .NET (bo nigdzie w necie jeszcze nie ma) walidującą nr REGON. Poniżej przedstawiam jej kod Public Function walidujRegon(ByVal numerREGON As String) Dim cyfraKontrolna As Integer Dim dlugoscRegon As Integer = Len(numerREGON) 'wagi regonów 'regon7 = 2,3,4,5,6,7 'regon9 = 8,9,2,3,4,5,6,7 'regon14 = 2,4,8,5,0,9,7,3,6,1,2,4,8 If (dlugoscRegon 14) Then If (dlugoscRegon 9) Then If (dlug...
W poprzednim poście przedstawiłem zasadę działania generacji w GC. Dowiedzieliśmy się, że zwalnianie zasobów z generacji 0 jest bardzo szybkie z kolei z GEN 2 wolne. Healthy GC to reguła określająca optymalny (zdrowy) stan GC: gen0 : gen1 : gen2 => 100 : 10 : 1 W Internecie można również znaleźć nieco inne wartości ale ogólna zasada jest taka sama: GEN0 powinna zawierać dużo więcej obiektów niż GEN2. Jeśli obiekty nie są zwalniane, wtedy promowane są do generacji pierwszej i drugiej. Z poprzedniego po...
Może nie tylko w Polsce, ale na pewno nie w Stanach Zjednoczonych czy Wielkiej Brytanii. Kiedy decydujemy się na wystawienie naszej aplikacji na rynek międzynarodowy podejmujemy podstawową decyzję: czy nasza aplikacja będzie lokalizowana, czy „sztywno” anglojęzyczna. W drugim przypadku jesteśmy zwolnieni z tłumaczenia tekstów interfejsu oraz wyświetlania danych (takich jak data, czas, waluta) w formacie charakterystycznym dla danego ...
Tworząc aplikację, która operuje na jakichkolwiek danych, które mają być dostępne również w przyszłości, szybko dochodzimy do momentu, kiedy to musimy wybrać odpowiedni sposób składowania tych danych. Po szybkim namyśle, przyjdzie Wam z pewnością kilka propozycji: Tekstowy plik danych o określonej strukturze Plik XML (można korzystać z serializacji) Baza danych Każde z tych rozwiązań ma swoje określone wady i zalety, a wszystko zależy również od skali projektu. W moim przypadku miałem właśnie do czy...
Bazy danych i XML 4662 dni, 9 godzin, 29 minut temu 349 źrodło rozwiń
W poprzednim poście przedstawiłem ogólne zasady działania GC w zarządzanych językach. Dziś przyjrzymy się bardziej na konstrukcję rozwiązania Microsoft’owego. Zakładam, że czytelnik zna już algorytm Mark&Sweep. Pamięć alokowana w .NET jest przechowywana w tzw. generacjach. Istnieją 3 generacje:Generation 0 – zwolnienie obiektu z GEN0 jest szybkie i mało kosztowne. Przechowywane są w niej obiekty używane tylko przez krótki czas. Generation 1 – obiekty, które awansowały z GEN0. Zwolnienie zasobów w GE...
Analiza logów to nieodłączna część poprawiania, naprawiania, optymalizacji… W IIS również gromadzone są logi operacji. Zapisywane są w katalogu, którego ścieżkę – jak i wiele opcji dotyczących logowania – można sprawdzić we właściwościach sekcji „Logging”. Każda aplikacja stworzona na serwerze www posiada identyfikator. Domyślnie pliki loga tworzone są w trybie „jeden plik dziennika na witrynę dziennie” i zapisywane w katalogu: %SystemDrive%\inetpub\logs\LogFiles. Microsoft udostępnia sprytne narzędz...
Niniejszy post jest kontynuacją cyklu o Reactive Extensions dla .NET ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5], [RX 6], [RX 7], [RX 8], [RX9], [RX10], [RX11]) stanowi on kontynuację przykładu z poprzedniego wpisu i skupia się na kompozycji zdarzeń.Przejdźmy może do ciekawszego przykładu, w którym będziemy rysować linie. Linia będzie rysowana poprzez wskazanie przyciśnięciem lewego klawisza myszki jej początku, przesunięcie myszki i wskazanie końca linii poprzez zwolnienie lewego przycisku. Wymaga to złożen...
W poprzednim wpisie chciałem pokazać jak w dłuższej perspektywie opasłe obiekty repozytoriów są mało użyteczne i nie spełniają swoich teoretycznych założeń. Mimo to jednak postanowiłem zostawić w swojej infrastrukturze interfejs IRepository
Architektura 4665 dni, 20 godzin, 49 minut temu 218 źrodło rozwiń