The dynamic keyword has been part of the C# language for quite a while now. I thought I know it well, yet I stumbled upon an interesting case that surprised me.The code that works Here's a piece of code that I started with. This code works like you would expect.
Sztuka programowania 3171 dni, 17 godzin, 35 minut temu 113 źrodło rozwiń
Zrównoleglenie danego algorytmu to jeszcze nie koniec wyzwań. Pytanie jakie należy postawić, to jak wiele stworzyć wątków? Musimy wziąć pod uwagę synchronizacje i problemy z tym związane. Jeśli mamy tylko 4 procesory, wtedy tworzenie więcej niż 4 wątków nie przyśpieszy obliczeń, jeśli wszystkie one zawsze będą zajęte. Tworzenie większej liczy wątków niż CPU, ma sens wyłącznie jak część z nich musi czekać na jakieś dane i tym samym, nie wykorzystują one w pełni cykli CPU. Liczba wątków, zależy od tego j...
Sztuka programowania 3171 dni, 17 godzin, 35 minut temu 96 źrodło rozwiń
Po ponad miesiącu od ostatniego wpisu (niestety, mimo chęci, nie mogłem znaleźć chwili wolnego czasu) poruszę dzisiaj temat jednego z najczęściej używanych wzorców projektowych – Factory Method. Przy użyciu tego wzorca, możemy w prosty sposób zaimplementować funkcjonalność związaną z wytwarzaniem konkretnych “produktów” przez konkretne “fabryki”.
Sztuka programowania 3174 dni, 7 godzin, 58 minut temu 386 źrodło rozwiń
Niedawno w projekcie pisałem małą apkę która wykonywała pewne działanie, które muszą być uruchamiane cyklicznie. W celu uzyskania dostępu do katalogu aplikacji użyłem zmiennej System.Environment.CurrentDirectory . Wszystko działało podczas debugowania. Jakies było moje zdziwienie, gdy okazało się, że zmienna ta wskazuje na katalog C:\Windows\System32\ podczas uruchamiania procesu przez Task Scheluder, zamiast katalogu aplikacji. Po długich lecz owocnych :) poszukiwaniach udało mi się znaleźć rozwi...
Sztuka programowania 3174 dni, 18 godzin, 29 minut temu 327 źrodło rozwiń
W poprzednim poście pisałem o statycznej dekompozycji tablicy na kilka wątków. Główną wadą podejścia było przypuszczenie, że wszystkie iteracje są tak samo skomplikowane. W niektórych algorytmach należy znaleźć element spełniający podane wymagania. Wyobraźmy sobie, że mamy 100 elementową tablicę i dzielimy ją na 10 wątków. Ponadto element szukany znajduje się pod indeksem 9. Wniosek taki, że NIC nie zyskamy ze zrównoleglenia. Dziewięć wątków będzie szukało w złym miejscu, a pierwszy z nich będzie wyko...
Sztuka programowania 3178 dni, 8 godzin, 8 minut temu 120 źrodło rozwiń
Kiedyś przeczytałem o antypaternie jakim jest tworzenie nowego typu wyjątku, który jest per aktualny projekt, czyli np. GitHubException, ktory dziedziczy z System.Exception i nie dodaje własnych pól ani zachowania. Tworzymy go ponieważ wszystko co już jest nie pasuje nam, a wiadomo, że rzucanie Exception też jest złem. Taki wyjątek nic nie wnosi. Łatwo powiedzi...
Sztuka programowania 3178 dni, 8 godzin, 8 minut temu 265 źrodło rozwiń
Pokazany sposób tworzenia prostego kontenera IoC w C#.
Sztuka programowania 3180 dni, 16 godzin, 49 minut temu 874 źrodło rozwiń
Chciałem przypomnieć prezentację Pawła Łukasika zatytułowaną Kurs programowania w C# – 24. Wzorce projektowe, która została nagrana 1,5 roku temu na VirtualStudy. Dużo się z niej nauczyłem zwłaszcza o antyzworcach. Ostatecznie pytanie o wzorce na pewno pojawi się na rozmowie o pracę, jeśli ktoś ma wątpliwości czy warto. Chociaż fakt lepszego zrozumienia jednego z najważniejszych pojęć powinien wystarczyć. Poniższy ry...
Sztuka programowania 3180 dni, 16 godzin, 49 minut temu 651 źrodło rozwiń
Czasy kiedy wszystkie komunikaty błędów wyrzucaliśmy z kodu przez okno modalne alert mam nadzieje, że już dawno minęły. Dzisiaj mamy narzędzia dla programistów, które w mniej inwazyjny sposób potrafią zaadresować potrzebę sprawdzenia co w programie się dzieje na bieżąco.
Sztuka programowania 3181 dni, 7 godzin, 52 minuty temu 93 źrodło rozwiń
KLOC (ang. Kilo Lines Of Code) to bardzo stara miara złożoności programów na podstawie liczby linii kodu. Z pewnością ma wiele wad, bo jak porównywać kod w C/C++ z kodem w Java czy C#. Czy jako linie kody powinno liczyć się komentarze lub importy przestrzeni nazw, co z kodem generowanym automatycznie itd. Wszystko to prawda, ale osobiście uważam, że ta miara jednak coś mówi. Ostatnio natknąłem się na bardzo ciekawe dane dotyczące liczby błędów/KLOC.
Sztuka programowania 3182 dni, 6 godzin, 14 minut temu 139 źrodło rozwiń
W tej części opisane zostaną dobre i złe praktyki stosowane przy pisaniu testów jednostkowych. Co ciekawe, praktyki te odbiegają niekiedy od ogólnie przyjętych założeń i standardów kodowania. Przykładem może być zasada DRY—Don’t Repeat Yourself. W TDD kopiuj-wklej to niemal chleb powszedni; w TDD możemy stosować zasadę zgoła odwrotną—Do Repeat Yourself! Taka odrębność wynika z tego, że w kodzie testowym musimy zminimalizować prawdopodobieństwo pojawienia się błędu. Kod tes...
Sztuka programowania 3184 dni, 4 godziny, 58 minut temu 405 źrodło rozwiń
W .NET istnieje metoda do wykonywania pętli równolegle. Pisałem ogólne o niej kilka miesięcy temu. Temat jest jednak dużo bardziej skomplikowany i z pewnością należy zrozumieć różne podejścia do problemu. Przed zrównolegleniem pętli, należy zastanowić się czy na prawdę przyniesie to pozytywne efekty. Złe rozpoznanie przypadku spowoduje znaczącą degradację wydajności. Zastanówmy się na co należy zwracać uwagę:Czy poszczególne elementy tablicy można przetwarzać w sposób bezpieczny (thread-safe). Jeśli nie...
Sztuka programowania 3184 dni, 4 godziny, 58 minut temu 168 źrodło rozwiń
W .NET można anulować wątki za pomocą tokena. Oczywiście nie należy używać metody Abort czy Cancel, ale o tym już wiele razy pisałem – w skrócie nie wiadomo kiedy taki wątek zostanie przerwany. Użycie tokena jest proste tzn. (przykład MSDN):class Program { staticvoid Main() { var tokenSource2 =new CancellationTokenSource(); CancellationToken ct = tokenSource2.Token; var task = Task.Factory.StartNew(() => { // Were we already canceled? ct.T...
Sztuka programowania 3186 dni, 18 godzin, 27 minut temu 140 źrodło rozwiń
Nie wszystko co kwacze to kaczka Czasem rzeczy są podobne ale jest to przypadkowe podobieństwo. To są w rzeczywistości różne rzeczy Przykład z życia, akurat bardzo niskopoziomowy. Potrzebowałem posklejać takie jakby “ścieżki”, separatorem był underscore (najlepsze polskie tłumaczenie to podłoga) “”. Przykładowo contentcolors_red. Rzuciło mi się, że mamy już napisany kod metody System.IO.Path.Combine(). Mo...
Sztuka programowania 3189 dni, 5 godzin, 19 minut temu 293 źrodło rozwiń
Kiedyś pisałem już o false sharing. Jeśli problem nie jest znany, najpierw zachęcam do przeczytania tego wpisu, ponieważ nie będę tutaj pisał o teoretycznych zagadnieniach: http://www.pzielinski.com/?p=1489 Oprócz wyjaśnienia podstaw, podałem przykład struktury danych składających się z dwóch Int32. Pokazałem również jakie pułapki czekają nas przy pracy z tablicami. To zadziwiające, że kolejność w jakiej przeglądamy tablicę ma tak ogromne znaczenie w wydajności (kod może być nawet kilkakrotnie wolniejs...
Sztuka programowania 3189 dni, 17 godzin, 18 minut temu 121 źrodło rozwiń
Sztuka programowania 3189 dni, 17 godzin, 18 minut temu 53 źrodło rozwiń
Sztuka programowania 3191 dni, 14 godzin, 57 minut temu 75 źrodło rozwiń
Nie mam zamiaru nikogo indoktrynować. Nie mam zamiaru dyskutować o wyższości tego nad tym i owego nad tamtym. Zamierzam natomiast przedstawić parę zalet regionów oraz powód, dla którego podobają się właśnie mi. A skoro już zdradziłem, że wpis jest subiektywny i tendencyjny, to zacznę właśnie od tego powodu. Z urodzenia jestem ...
Sztuka programowania 3203 dni, 11 godzin, 11 minut temu 199 źrodło rozwiń
Zapewne każdy profesjonalny programista zna zasadę DRY, której nazwa jest zarazem skrótem jej treści Don’t Repeat Yourself czyli zalecenia Nie Powtarzaj Się. Najczęściej stosuje się ją, by przeciwdziałać powielaniu kodu wykonującemu tę samą czynność (czy to przez jego niepotrzebne, ponowne napisanie czy też przez zwykłe przeklejanie). To co ciekawego w tej regule, to fakt, że w swej treści skierowana jest ona do ...
Sztuka programowania 3203 dni, 11 godzin, 11 minut temu 209 źrodło rozwiń
Tło problemu - jest wystawiony opasły Windows Service po remotingu. Implementacja to wielka klasa z dziesiątkami metod, typowe legacy code. Z pewnych architektonicznych przyczyn zostało postanowione, że cykl życia komponentów rejestrowanych w Castle, wykorzystywanych w wyżej wymienionych, dziesiątkach metod, musi by...
Sztuka programowania 3203 dni, 11 godzin, 11 minut temu 131 źrodło rozwiń