Strona głównaUżytkownik

pzielinski | użytkownik

pzielinski
pzielinski
27 178,29
4089 dni, 16 godzin, 1 minutę temu
21 lutego, 2010
dotnetomaniak.pl

NULL Object Pattern (Special Case)

Dziel się z innymi:
NULL Object Pattern (Special Case)

Architektura 4731 dni, 6 godzin, 52 minuty temu pzielinski 186 źrodło rozwiń

W kodzie często używamy klasy Stirng do przechowywania poufnych informacji takich jak np. hasło. Niestety często nie zdajemy sobie sprawy jak niebezpieczne jest takie rozwiązanie. String jest specjalnie zoptymalizowaną klasą przeznaczoną do przechowywania łańcucha znaków, która jednak nie jest odporna na wszelkie ataki związane z podglądaniem pamięci operacyjnej. W skrócie pisząc, wszelkie informacje klasa String trzyma w postaci jawnej. Korzystając więc z odpowiedniego oprogramowania, intruz może bez pr...

Tagi: securestring
Dziel się z innymi:
Piotr Zieliński » Przechowywanie poufnych informacji

Architektura 4731 dni, 6 godzin, 52 minuty temu pzielinski 313 źrodło rozwiń

Z klasami częściowymi większość programistów c# prawdopodobnie miała już styczność. Klasycznym przykładem jest rozbicie klasy Form na część wygenerowaną przez Visual Studio oraz na część przeznaczoną do modyfikacji przez programistę. Metody częściowe są bardzo podobnym mechanizmem. W skrócie są to metody, które można definiować w dwóch różnych plikach. Zdecydowałem się o nich napisać ponieważ wydaje mi się, że są mniej znane, a czasami mogą okazać się przydatne. Sama deklaracja jest analogiczna do klas ...

Dziel się z innymi:
Piotr Zieliński » Metody częściowe(partial methods)

Inne 4734 dni, 7 godzin, 27 minut temu pzielinski 139 źrodło rozwiń

Na blogu oraz MSDN pisałem niejednokrotnie o testach jednostkowych oraz integracyjnych. Ostatnio jednak zastanawiałem się nad podstawowym problemem – jak zorganizować to od strony struktury katalogowej? Musimy rozważyć następujące problemy:Testy powinny być w każdej chwili dostępnie do odpalenia i weryfikacji.Wykonując prostą refaktoryzację (zmiana nazwy klasy), automatycznie nazwa powinna zaktualizować się w testach.Testy jednostkowe stanowią dobrą dokumentację oraz instrukcję używania zaimplementowanej...

Tagi: testy, unit-tests
Dziel się z innymi:
Piotr Zieliński » Testy jednostkowe–struktura folderów

Inne 4733 dni, 15 godzin, 21 minut temu pzielinski 115 źrodło rozwiń

Aby móc korzystać z rozszerzeń RX należy najpierw je pobrać i zainstalować. Przed przeczytaniem tego posta, koniecznie należy zapoznać się z interfejsami IObservable oraz IObserver – prezentowałem je w ostatnim wpisie. Po instalacji dodajemy referencję do System.Reactive:   RX dodaje metodę ToObservable konwertującą kolekcję do IObservable, interfejsu który wspiera wzorzec obserwator. Napiszmy przykładowy obserwator:class SampleObserver : IObserver

Tagi: Rx
Dziel się z innymi:
Piotr Zieliński » Reactive Extensions I – instalacja oraz kolekcje danych

Programowanie rozproszone 4737 dni, 5 godzin, 57 minut temu pzielinski 116 źrodło rozwiń

Poprawnie zaprojektowana aplikacja powinna weryfikować dane w każdej warstwie systemu. Oczywiście najważniejszym miejscem jest warstwa biznesowa ale dobrym zwyczajem jest walidacja również w warstwie prezentacji. W idealnym interfejsie użytkownik nie jest w stanie wprowadzić błędnych danych. Podstawowym przykładem są pola edycyjne w których powinno się wpisać np. ilość sprzedanego produktu. Użytkownik nie powinien mieć możliwości wprowadzenia tekstu w takie pole. Zacznijmy od prostej sprawy – akceptacja...

Tagi: weryfikacja
Dziel się z innymi:
Piotr Zieliński » IntTextBox oraz RealTextBox w WPF

Windows 4738 dni, 28 minut temu pzielinski 82 źrodło rozwiń

W przyszłych postach chcę zająć się Reactive Extensions, jednak zanim zacznę cykl postów o tym, najpierw przedstawię dwa interfejsy wprowadzone w .NET 4.0. Interfejsy umożliwiają implementację wzorca obserwator. IObserver powinien zostać zaimplementowany dla klasy, która chcę być powiadamiana o zmianach dokonywanych na klasie implementującej IObservable. Przyjrzyjmy się najpierw metodom IObserver:OnCompleted – obserwacja wszelkich zmian zakończona.OnError – wystąpił błąd.OnNext – Nowa zmiana np. dodano e...

Dziel się z innymi:
Piotr Zieliński » Interfejsy IObservable oraz IObserver

Inne 4734 dni, 6 godzin, 35 minut temu pzielinski 209 źrodło rozwiń

W języku c# obiekt, którego zasobami chcemy sami zarządzać, powinien implementować interfejs IDisposable. Sporo osób aby zwolnić zasoby pisze następujący kod:publicclass MyClass : IDisposable { #region IDisposable Memberspublicvoid Dispose() { // zwalnianie zasobow } #endregion } Interfejs niestety wymusza nam tylko implementację metody Dispose. Powyższe rozwiązanie jest zdecydowanie nieprawidłowe. Zanim  jednak przejdę do omawia co w kodzie jest niepoprawnego, podam prawidłową ...

Tagi: dispose, zasoby
Dziel się z innymi:
Piotr Zieliński » Prawidłowe zwalnianie zasobów

Inne 4737 dni, 15 godzin, 24 minuty temu pzielinski 340 źrodło rozwiń

Czasami typ ENUM znajduje zastosowanie(czasami ponieważ często ogranicza on modułowość aplikacji). W wielu przypadkach potrzebujemy jednak skojarzyć pewien opis z każdą wartością enum’a. Jako praktyczny scenariusz można wymienić implementację menedżera dźwięków. Dla przykładu w pewnej grze, którą współtworzyłem aby uatrakcyjnić interfejs dla programisty zdefiniowałem sobie typ enumeryczny SOUNDTYPE:publicenum SOUNDTYPE { ROCKETLAUNCH, MACHINEGUN_LAUNCH } Programista zatem chcąc wykorzystać d...

Tagi: Enum
Dziel się z innymi:
Piotr Zieliński » Jak dodać opis wartości ENUM?

Inne 4740 dni, 21 godzin, 44 minuty temu pzielinski 363 źrodło rozwiń

Słowo lock służy do synchronizacji  kodu między wątkami. Często jednak przeglądając kod widzę niepoprawne użycie. Rozważmy następujący przykład:publicclass OrderManager { publicvoid Submit() { lock(this) { //... } } } Przedstawiona konstrukcja może spowodować wiele trudnych do wykrycia problemów. Co jeśli użytkownik naszej biblioteki również wykorzysta źle lock i napisze:OrderManager orderManager=new OrderManager(); //...lock(orderManager) { orderManage...

Tagi: lock
Dziel się z innymi:
Piotr Zieliński » Jak nie używać blokad lock

Programowanie rozproszone 4740 dni, 23 godziny, 35 minut temu pzielinski 224 źrodło rozwiń

Domyślne wartości bardzo łatwo ustawić za pomocą wizualnego edytora EntityFramework. Wystarczy ustawić właściwość Default w oknie properties: Co jednak gdy chcemy ustawić wartość wyliczoną na podstawie jakieś funkcji? Dla przykładu może być to DateTime.Now bądź też Guid.NewGuid()?Wpisując w te same okienko dostaniemy błąd podczas kompilacji: Error 1 Error 54: Default value (System.Guid.NewGuid()) is not valid for GUID. The value must be enclosed in single quotes in the form 'dddddddd-dddd-dddd-ddd...

Dziel się z innymi:
Piotr Zieliński » EntityFramework i wartość domyślna wyliczana na podstawie funkcji

Bazy danych i XML 4740 dni, 23 godziny, 35 minut temu pzielinski 198 źrodło rozwiń

Programując własne biblioteki, często potrzebujemy zdefiniować własny typ wyjątku. Przeglądając różnego rodzaju kody źródłowe nierzadko spotykam błędną deklarację własnych wyjątków:publicclass MyException : Exception { // specyfikacja } Co prawa kompilator nie zgłosi błędu ale już np. CodeAnalysis zwróci nam uwagę o błędnej deklaracji. Najprościej korzystać w Visual Studio z tzw. snippet’ów czyli gotowych fragmentów kodu. Naciskając klawisze ctrl+space pojawi nam się lista dostępnych snippetów w VS...

Tagi: wyjątki
Dziel się z innymi:
Piotr Zieliński » Prawidłowe definiowanie wyjątków w c#

Inne 4741 dni, 3 godziny, 44 minuty temu pzielinski 369 źrodło rozwiń

O wielowątkowości pisałem już niejednokrotnie. Niestety w żadnym z moich postów, nie wyjaśniłem podstawowych pojęć związanych z współbieżnością. Oczywiście jeśli wykorzystujemy wątki do prostych zadań typu asynchroniczne połączenie z usługą, poważniejszych problemów nie doświadczymy. W przypadku jednak nieco bardziej zaawansowanych algorytmów, musimy zawsze badać nasz kod pod kątem: 1. Zakleszczenie (deadlock) – występuję gdy wątek A czeka aż wątek B skończy swoją operację a wątek B czeka aż wątek A zako...

Dziel się z innymi:
Piotr Zieliński » Wielowątkowość: podstawowe pojęcia – deadlock, livelock, starvation.

Inne 4741 dni, 3 godziny, 44 minuty temu pzielinski 390 źrodło rozwiń

Na różnych forach często użytkownicy mają problem z aktualizacją kontrolek z innego wątku. Załóżmy, że odpaliliśmy sobie BackgroundWorker lub po prostu Thread. Wykonujemy jakieś operację, np. łączymy się ze zdalnymi zasobami. Stworzenie osobnego wątku w takim scenariuszu jest bardzo pożądane ponieważ nie blokujemy wtedy aktualizacji interfejsu. W trakcie pobierania informacji z Internetu chcemy aktualizować interfejs aby informować użytkownika o postępach np.progressBar.Value = progessValue; Jeśli powyż...

Dziel się z innymi:
Piotr Zieliński » Aktualizacja interfejsu z drugiego wątku(windows forms i WPF)

Windows 4741 dni, 17 godzin, 45 minut temu pzielinski 408 źrodło rozwiń

Na pierwszy rzut oka, TextBlock oraz Label są bardzo podobne. Obydwie kontrolki(?)  wyświetlają tekst. Różnice są jednak spore i postaram się je wyjaśnić. Sprawdźmy co następujący kod wyświetli: Kontrolka Label jest lekko przesunięta w prawo. Jest to spowodowane faktem, że Padding dla Label domyślnie ma wartość 5. W przypadku TextBlock jest to 0, dlatego też na powyższym screenie TextBlock przylega do krawędzi. Ustawmy IsEnabled StackPanel’a na false i sprawdźmy jak zachowają się kontrolki: Lab...

Tagi: Label, TextBlock
Dziel się z innymi:
Piotr Zieliński » WPF: TextBlock vs. Label

Windows 4745 dni, 14 godzin, 42 minuty temu pzielinski 165 źrodło rozwiń

Często musimy implementować interfejs INotifyPropertyChanged. Szczególnie w przypadku wykorzystania wzorca MVVM oraz WPF. Najczęściej programiści wykorzystują podstawową implementację i przekazują nazwę parametru jako czysty string np:if(PropertyChanged!=null) { PropertyChanged(this,new PropertyChangedEventArgs("propName")); } Wszystko działa bardzo dobrze, dopóki nie zmienimy nazwy właściwości. Przede wszystkim należy wtedy pamiętać o zaktualizowaniu wszystkich wywołań ProperyChanged. Nie możemy po...

Dziel się z innymi:
Piotr Zieliński » PropertyChanged bez przekazywania string’a

Windows 4747 dni, 2 godziny, 56 minut temu pzielinski 471 źrodło rozwiń

Ostatnio napotkałem problem stworzenia menu zawierającego zarówno dynamiczne elementy (binding) jak i statyczne. Okazało się, że wcale nie jest to takie proste jak to jest w przypadku większości rzeczy w WPF. Zacznijmy jednak od przedstawienia sposobów tworzenia menu w WPF. Pierwszy to oczywiste statyczne menu, w całości zdefiniowane w XAML: W powyższym kodzie nie ma nic nadzwyczajnego. Sytuacja jest również łatwa gdy chcemy w całości zdefiniować menu jako dynamiczne: Gdzie pojedynczy item to:publiccl...

Tagi: menu
Dziel się z innymi:
Piotr Zieliński » WPF, dynamiczne i statyczne menu

Windows 4751 dni, 7 godzin, 44 minuty temu pzielinski 194 źrodło rozwiń

Dzisiaj króciutki post. Wchodząc we właściwości projektu jako Target Platform można zauważyć .NET Framework 4 Client profile oraz .NET Framework 4. Jaka jest różnica? Client profile to taka mocno uproszczona wersja .NET framework przeznaczona dla aplikacji klienckich. Dzięki temu użytkownik nie musi instalować pełnego .NET Framework a uproszczony i mniej ważący Microsoft .NET Framework 4 Client Profile. Wersja kliencka zawiera między innymi wsparcie dla WPF, WCF, WWF, Entity Framework, Linq To SQL, MEF. ...

Dziel się z innymi:
Piotr Zieliński » .NET Framework 4 Client Profile vs .NET Framework 4

Inne 4754 dni, 16 godzin, 3 minuty temu pzielinski 273 źrodło rozwiń

Code Contracts stanowią kolejny mechanizm ułatwiający programowanie defensywne – sposób wytwarzania oprogramowania odporny na wszelkie niespodziewane wartości (NULL, dzielenie przez zero, wartości skrajne itd.) Rozważmy klasyczny przykład – funkcja dzielenia:privatefloat Divide(float dividend, float divisor) { if (divisor ==0) thrownew DivideByZeroException(); return dividend / divisor; } Funkcja jest zaimplementowana poprawnie – sprawdza czy divisor nie jest zerem. Są jeszcze inne skra...

Piotr Zieliński » Code Contracts–programowanie defensywne

Architektura 4757 dni, 18 godzin, 18 minut temu pzielinski 240 źrodło rozwiń

Czytając różne książki lub artykuły można się zgubić w terminologii. Szczególnie Mock oraz Stub często są używane zamiennie a ich różnica jest jednak znacząca. Nie tłumaczyłem na język polski powyższych terminów aby nie wprowadzać jeszcze większego zamieszania Zacznijmy od terminu najbardziej ogólnego – Double. Nazwa określa dowolny obiekt  naśladujący realną klasę. Zatem obiektem double może być Fake, Dummy, Stub lub Mock. Innymi słowy double można podzielić na wspomniane 4 obiekty. Termin stanowi po pr...

Tagi: fake, mock, Stub
Dziel się z innymi:
Piotr Zieliński » Fake, Dummy, Stub, Mock, Test Double–krótkie wyjaśnienie terminologii używanej w testach jednostkowych

Inne 4763 dni, 12 godzin, 56 minut temu pzielinski 278 źrodło rozwiń

1 2... 10 11 12 13 14 15... 19 20