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 3460 dni, 9 godzin, 32 minuty temu 388 źrodło rozwiń
Dzisiaj kilka rzeczy z Visual Studio, które przydają się a nie zawsze wszyscy mają świadomość, że są one dostępne. Zauważyłem, że często ustawiam breakpoint w jakimś miejscu a potem odpalam debugger, aby zacząć proces debugowania właśnie w tym miejscu. W VS istnieje coś takiego jak tymczasowy breakpoint. Wystarczy nacisnąć kombinację klawiszy CTRL+F10, a aplikacja uruchomi się i debugger przejdzie do danej linii (w zależności, w której był kursor podczas wykonywania tej operacji). Jedną kombinacją klaw...
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 3460 dni, 20 godzin, 3 minuty temu 327 źrodło rozwiń
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
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 3464 dni, 9 godzin, 42 minuty 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 3464 dni, 9 godzin, 42 minuty temu 265 źrodło rozwiń
Dzisiaj kilka rozważań na temat korzyści płynących z wielowątkowości. Zastanówmy się, jak bardzo może nam pomóc albo zaszkodzić wprowadzenie nowych wątków w aplikacji. Jeśli wykonanie danej pracy na jednym procesorze zajmuje T(1) a wykonanie jej na n procesorach zajmuje T(n) wtedy możemy oszacować korzyści płynące z nowych wątków. W przypadku gdy T(1)/T(n) daje wynik < n. oznacza to, że gdy praca na jednym rdzeniu zajęła 5 sekund, wtedy na 5 rdzeniach zajmie np. 1.2 sekundy. czyli wydajność ma chara...
Programowanie rozproszone 3464 dni, 9 godzin, 42 minuty temu 194 źrodło rozwiń
Pokazany sposób tworzenia prostego kontenera IoC w C#.
Sztuka programowania 3466 dni, 18 godzin, 23 minuty temu 882 źrodło rozwiń
Zapytano mnie wczoraj czego lepiej używać do konwersji typów w T-SQL, albowiem do wyboru są dwie konstrukcje cast i Convert. Zanim podzielę się odpowiedzią, jakiej udzieliłem ...
Bazy danych i XML 3466 dni, 18 godzin, 23 minuty temu 184 ź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 3466 dni, 18 godzin, 23 minuty temu 657 źrodło rozwiń
Today I would like to introduce you to Process Governor – a new tool I added to my .NET diagnostics toolkit. This application allows you to set a limit on a memory committed by a process. I wrote this tool to test my .NET applications (including web applications) for memory leaks. With it I can check if under heavy load they won’t throw OutOfMemoryException.
Quartz.NET to biblioteka, tzw. scheduler służący do cyklicznego wykonywania zadań. Z grubsza rzecz ujmując, konfiguracja pracy Quartz.NET sprowadzania się do tworzeniu obiektów job/trigger w celu uruchomienia określonego zadania (kodu) w zaplanowanym czasie. Do dyspozycji mamy pojedyncze (SimpleTriggerImpl dla danego DateTime) oraz cykliczne uruchamianie zadań (CronTriggerImpl w oparciu o wyrażenia cron, ang. cron expressions). Wizualizacja DateTime nie jest wyzwaniem. W Internecie można zna...
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 3467 dni, 9 godzin, 26 minut 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 3468 dni, 7 godzin, 48 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 3470 dni, 6 godzin, 33 minuty temu 405 źrodło rozwiń
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
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 3470 dni, 6 godzin, 33 minuty temu 168 źrodło rozwiń
Leave a reply W poprzednim poście opisałem jakie możliwości daje nam konfiguracja sesji w ASP.Net. Dziś opiszę w trzech prostych krokach, jak skonfigurować sesję tak, aby była ona współdzielona pomiędzy dwie (kilka) różnych aplikacji.Przygotowujemy bazę danych sql dla sesji przy pomocy aspnet_regsql.exe (opis). W moim przykładzie będzie to istniejąca baza danych o nazwie “northwind” na serwerze “localhost”: aspnet_regsql -d northwind -S localhost -U UserName -P Password -ssadd -sstype c Następnie...
Czasem w trakcie pracy zdarza się, że musimy przygotować dane testowe. Przyczyny mogą być różne, możemy potrzebować danych w celu przetestowania fragmentu aplikacji lub ...
Sporadycznie, podczas instalacji VS 2013 może nastąpić mały problem, o którym dowiemy się dopiero w trakcie tworzenia nowego projektu – nie każdego rodzaju, ale takiego, który polega na paczkach NuGet. Mianowicie, jak będziemy chcieli stworzyć nowe solution z projektem, otrzymamy taki o to błąd:The system cannot find the file specified. (Exception from HRESULT: 0x80070002) Jak zaś będziemy chcieli dodać projekt do istniejącego solution – lub pustego, założonego przy pierwszym błędzie, otrzymamy taki o ...