Us, developers, are a bit like that comic strip (from always great xkcd): We can endlessly debate over tabs versus spaces (don't even get me started), whether to use optional semicolon or not, and other seemingly irrelevant topics. We can have heated, informed debates with a lot of merit, or (much more often) not very constructive exchanges of opinions. I mention that to explicitly point out, while this post might be per...
Sztuka programowania 4461 dni, 21 godzin, 17 minut temu 88 źrodło rozwiń
Implementując w danej klasie kilka interfejsów możemy spotkać się z sytuacją, w której różne interfejsy będą posiadały składowe o tych samych nazwach. A co jeżeli metoda jednego z interfejsów ma inne przeznaczenie niż metoda innego i ich kod powinien być różny? Rozwiązaniem tego problemu jest jawna implementacja interfejsów.
Sztuka programowania 4473 dni, 21 godzin, 51 minut temu 103 źrodło rozwiń
Lematyzacja - pojęcie to a oznacza sprowadzenie grupy wyrazów stanowiących odmianę danego zwrotu do wspólnej postaci, umożliwiającej traktowanie ich wszystkich jako te samo słowo. W artykule omówię sposoby lematyzacji słów z języka angielskiego oraz przedstawię przykładową implementację algorytmu.
Sztuka programowania 4474 dni, 23 godziny, 51 minut temu 333 źrodło rozwiń
Kolejna cześć artykułu z cyklu “Dobre i złe praktyki”: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-4.aspx
Sztuka programowania 4476 dni, 9 godzin, 10 minut temu 112 źrodło rozwiń
Kolejna część artykułu z cyklu dobre i złe praktyki. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-3.aspx
Sztuka programowania 4477 dni, 11 godzin, 43 minuty temu 175 źrodło rozwiń
Od kilku dni można rejestrować się na darmowe egzaminy z Visual Studio 2012. Oczywiście są to egzaminy w wersji beta. Nie zmienia to jednak faktu, że w przypadku ich zdania otrzymamy pełnoprawny certyfikat. Można wybierać wśród następujących egzaminów....
Sztuka programowania 4484 dni, 11 godzin, 13 minut temu 955 źrodło rozwiń
Niniejsze rozważania zacznę od następującej anegdoty, która doskonale oddaje ich sedno. Pewna mała dziewczynka przyglądała się mamie przygotowującej pieczeń: - Mamo, dlaczego gdy robisz pieczeń, to zawsze odcinasz końcówki mięsa i wkładasz je po bokach brytfanny? - Bo tak się piecze kochanie. - Ale dlaczego tak się piecze? - Końcówki obcina się, aby mięso lepiej się upiekło. - Mamo, ale przecież i bez tego mięso by się upiekło. - Córeczko, twoja babcia tak piekła, ciocia tak piecze i ...
Sztuka programowania 4485 dni, 17 godzin, 39 minut temu 163 źrodło rozwiń
W dzisiejszym temacie poruszę pewien problem na jaki można natknąć się podczas używania kolekcji obiektów typu wartościowego. Aby pokazać o co dokładnie chodzi zacznijmy od zdefiniowania przykładowej klasy opisującej prostokąt.
Sztuka programowania 4488 dni, 4 godziny, 18 minut temu 323 źrodło rozwiń
Dziś podstawy języka c#. Wszyscy znają modyfikatory public, protected, private i chętnie z nich korzystają. Modyfikator protected internal jest zdecydowanie mniej popularny a scenariusze użycia jeszcze rzadziej są prawidłowo identyfikowane. Jak sama nazwa mówi protected internal składa się z dwóch poziomów dostępności. W obrębie tego samego assembly zachowuje się jak czysty internal i mamy dostęp do pola tak jakby było one public. Załóżmy, że projekt składa się z dwóch bibliotek. W bibliotece numer A d...
Sztuka programowania 4491 dni, 21 godzin, 5 minut temu 219 źrodło rozwiń
W ostatnim poście pisałem o barierze jako rozwiązaniu na uniknięcie problemów z związanych z optymalizacją dokonywaną przez CPU (re-ordering). Kilka postów wcześniej pisałem z kolei o buforowaniu danych i słowie kluczowym volatile. Jeśli nie wiedzie co to jest MemoryBarrier oraz Volatile zachęcam do przeczytania tych wpisów najpierw – bez nich dzisiejszy post będzie kompletnie niezrozumiały. Wiemy, że caching oraz re-ordering może na niektórych architekturach spowodować trudne w analizie błędy. Dziś chc...
Sztuka programowania 4494 dni, 4 godziny, 51 minut temu 81 źrodło rozwiń
W .NET istnieje metoda Thread.MemoryBarrier(). W użyciu jest bardzo prosta – nie wymaga przekazania żadnych parametrów. Strona teoretyczna jest jednak bardziej skomplikowana. Przed wyjaśnieniem czym jest Memory Barrier w świecie współbieżnym musimy zrozumieć jak wykonywane są instrukcje przez procesor. Załóżmy, że mamy następujące operacje:a = b +1 c = a +1 d = e +1; W jakiej kolejności zostaną wykonane powyższe operacje? Naturalne wydaje się, że procesor wykona je po kolei. Jednak ze względu na różn...
Sztuka programowania 4497 dni, 10 godzin, 41 minut temu 134 źrodło rozwiń
Dziś trochę dla odmiany, nie będę pisał o wielowątkowości a o jednym z podstawowych słów kluczowych w c#, które na szczęście nie jest bardzo popularne – bazując na moim doświadczeniu z różnymi projektami, rzadko widuje je w kodzie. Global przydaje się gdy mamy konflikty z przestrzeniami nazw. Wyobraźmy sobie, że mamy następujący kod (kod bazuje na dokumentacji MSDN):class Program { publicclass System { } constint Console =7; staticvoid Main() { } } Następnie chcemy w metodzie Co...
Sztuka programowania 4500 dni, 18 godzin, 29 minut temu 242 źrodło rozwiń
Witam kolejna cześć artykułu z cyklu “dobre i złe praktyki w c#”. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-2.aspx
Sztuka programowania 4503 dni, 16 godzin, 27 minut temu 391 źrodło rozwiń
Kiedyś na blogu opisywałem kilka implementacji singleton’a przystosowanych do pracy w środowisku wielowątkowym. Jedna z nich opierała się na tzw. double checked locking:publicsealedclass Singleton { privatestatic Singleton mInstance =null; privatestaticreadonlyobject mSync =newobject(); private Singleton() { } publicstatic Singleton Instance { get { if(m_Instance ==null ) { lock(m_Sync) { i...
Sztuka programowania 4506 dni, 6 godzin, 20 minut temu 212 źrodło rozwiń
To będzie króciutki wpis, niemniej traktujący o dość istotniej zasadzie programowania obiektowego, tj. zasadzie jednolitego dostępu. Jej treść brzmi następująco: Wszystkie usługi oferowane przez moduł powinny być dostępne za pośrednictwem jednolitej notacji, która nie zdradza, czy zostały one zaimplementowane z wykorzystaniem danych przechowywanych statycznie, czy też obliczanych na bieżąco w razie potrzeby. Jakie są zalety ze stosowania tej zasady? Otóż...
Sztuka programowania 4509 dni, 3 godziny, 57 minut temu 195 źrodło rozwiń
Na moim blogu co jakiś czas można znaleźć informacje dotyczące pisania dobrego oraz złego kodu w c#. Oprócz tego zacząłem pisać serie artykułów związanych z tą tematyką. Wiele informacji w tych artykułach można było znaleźć już wcześniej na moim blogu ale myślę, że ten cykl stanowi dobre dopełnienie i podsumowanie tego wszystkiego co piszę tutaj. Oczywiście artykuły rozszerzają tematykę, oraz zawierają więcej przykładów więc tym bardziej zachęcam do lektury. Dziś została opublikowana pierwsza część: ht...
Sztuka programowania 4512 dni, 11 godzin, 27 minut temu 630 źrodło rozwiń
Dodanie animacji w WPF w stylu funkcyjnym.
Sztuka programowania 4514 dni, 5 godzin, 27 minut temu 229 źrodło rozwiń
Dziś czas na kolejną metrykę badania kodu – TypeRank. Wartość metryki jest liczona za pomocą algorytmu Google Page Rank, który jest wykorzystywany przez wyszukiwarki do indeksowania stron. W świecie wyszukiwarek internetowych im większa wartość tym strona znajdzie się wyżej podczas prezentowania wyników. Algorytm bada powiązania między stronami internetowymi. Strona dostaje wyższą ocenę, gdy więcej innych stron wskazuje na nią. Stwierdzono, że skoro do danej strony odwołuje się więcej innych witryn to ...
Sztuka programowania 4515 dni, 12 godzin, 16 minut temu 70 źrodło rozwiń
Dziś trochę o matematycznej walidacji kodu czyli o metrykach. LCOM (lack cohesion of methods) umożliwia obliczenie jak bardzo nasze metody są spójne. Do obliczania tej wartości istnieją gotowe narzędzia takie jak nDepend, ale aby w pełni zrozumieć znaczenie metryki obliczymy sami jej wartość dla prostej klasy. Powinno dążyć się do jak największej spójności a tym samym do jak najniższej wartości LCOM. Przed wyjaśnieniem czym jest metryka LCOM wprowadźmy następujące pojęcia: M – zbiór metod danej klasy...
Sztuka programowania 4518 dni, 12 godzin, 4 minuty temu 219 źrodło rozwiń
Jak każdemu porządnemu developerowi zdarza mi się czasem napisać testy. Jak każdemu porządnemu developerowi, czasem zdarza mi się wykorzystać mechanizm metod rozszerzających (jeśli nie wiesz o czym mówię sprawdź na msdn). Jak każdy prawdziwy developer, chciałem przetestować logikę, która była wykorzystywana w jednej z takich metod. W zasadzie to nie w samej metodzie, chciałem sprawdzić czy zostanie wywołana z wartościami, które są dla mnie ważne. Zacznę od metod rozszerzających, a testowanie przyjdzie ...
Sztuka programowania 4521 dni, 17 godzin, 46 minut temu 207 źrodło rozwiń