Był taki smutny czas, że struktura dziedziczenia w moich testach zdecydowanie przerastała stopniem skomplikowania dziedziczenie w testowanym kodzie. A bo jedna klasa bazowa dla testów umożliwiała na przykład kontakt z prawdziwą bazą. Inna – testy z bazą in-memory. Jeszcze inna – puszczanie requestów do systemu. I tak dalej. Efekt był taki, że de facto wszystkie testy dziedziczyły ze wszystkiego. Fuj na maxa, z pryszczem jeszcze ohydnym....
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
Sztuka programowania 4010 dni, 3 godziny, 6 minut temu 164 źrodło rozwiń
Książkę przeczytałem jeszcze na studiach (nawet dokładnie nie pamiętałem tytułu) z nudów. Bardzo lekka książka, czyta się jednym tchem. Traktuje o tym jak wygląda projekt, który się nie uda. Jak zachowują się poszczególni członkowie teamu, zarząd, kierownicy, itp. Jedni się domyślają wcześniej, jedni później. Opisane są próby, jakie podej...
Unikaj przekazywania nulli. Jeśli nie będziesz ich przekazywał nie będziesz musiał sprawdzać czy ich nie masz. Prosto powiedzieć – trudniej zrobić. Proste rzeczy to przekazywanie pustych kolekcji, Null Object Pattern. Jednak to drugie może dobrze działać dla serwisów, ale już gorzej dla Value Objects. Często pojawiającym się kodem jest wyciąganie obiektów z repozytorium. va...
Sztuka programowania 4010 dni, 3 godziny, 6 minut temu 274 źrodło rozwiń
Poprzednia część artykułu mówiła o infrastrukturze Event Tracing for Windows (ETW), ta zaś dotyczy monitorowania źródła zdarzeń. Można tego dokonać, umieszczając kod w tym samym procesie co źródło logów albo w procesie zupełnie odseparowanym od niego, co gwarantuje większą stabilność w przypadku krytycznych błędów.Hosting w tym samym procesie Najprostszą metodą jest zapisanie/odebranie wsz...
W tym artykule dowiesz się jak napisać prosty kontroler ruchu graczem. Dowiesz się również jak wykrywać proste kolizje pomiędzy obiektami. W tym artykule dowiesz się jak napisać prosty kontroler ruchu graczem. Dowiesz się również jak wykrywać proste kolizje pomiędzy obiektami. Kontroler będzie się aktywowa...
Dziś wpadł mi link http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated przekazany przez kolegę. Mimo, że na oficjalnych blogach nic nie znalazłem, o tyle natrafiłem na streszczenie jednej z rozmów z BUILD 2013: http://wesnerm.blogs.com/net_undocumented/2013/07/anders-on-c-60-at-build-2013.html. Jest to odpowiedź na wątpliwości na temat przyszłości C#, .NET i “Roslyn”. Jak wszystko dobrze pójdzie to .NET 5 będzie hulać na “Roslyn”, a C# nabierze nowych właści...
Semantic Logging Application nie stanowi kolejnej biblioteki do wykonywania logów, która po prostu zapisuje tekst we wskazanej lokalizacji (np. pliku tekstowym). Prezentuje bowiem zupełnie inne podejście niż Logging Application Block i pozostałe konkurencyjne biblioteki. Semantic Logging Application to rozwiązanie przydatne szczególnie w przypadku dużych i rozproszonych systemów. Biblioteka...
Until now we had many excuses for not writing integration tests:we prefer unit tests over integration testsour business logic (aka services) is separated and thoroughly testedwe keep our ontrollers on a dietUI consists mostly of standard elements (aka widgets) which are tested on their ownwe are lazy But there was still too much space for error. From time to time a seemingly innocent change in Razor view (or HTML helper, or filter, or “something completely irrelevant”) unexpectedly broke one of the page...
Sztuka programowania 4022 dni, 23 godziny, 8 minut temu 105 źrodło rozwiń
…humans make mistakes, but the answer is not to add additional humans to the process. Rather, the solution is that the entire deployment process should be automated, with automated deployment and automated acceptance tests. No właśnie, ludzie robią błędy, a jeśli dodamy więcej ludzi do procesu to szansa na zmniejszenie ilości błędów jest delikatnie mówiąc mała, bardzo mała, taka tyci tyci. Ostatnie dwa wpisy były poświęcone debugowaniu a dzisiaj – po przerwie – wrzucam arcy ciekawy artyk...
W dzisiejszym poście pokażę kilka błędów popełnianych podczas próby oszacowania efektów optymalizacji a raczej mikro-optymaliacji. Częściowo popełniałem te błędy na moim blogu, ale zawsze wykonywałem pomiary w pętli, co niwelowało te drobne różnice.
Sztuka programowania 4022 dni, 23 godziny, 8 minut temu 159 źrodło rozwiń
Pisząc aplikacje na Windows Phone często chcemy dać użytkownikowi możliwość przypnięcia jakiegoś elementu do menu start. Problem pojawia się, gdy chcemy to sformułowanie przetłumaczyć na inny język tak, aby było zgodne z obowiązujym nazewnictwem WP. Żywi lub automatyczni tłumacze nie do końca sobie z tym radzą, dlatego też zebrałem oficjalne określenia polecenia "przypnij do ekranu startowego" z kilku języków. Może się komuś przyda, mnie na pewno! Dopisujcie kolejne języki w komentarzach :) Angiel...
Mobile development 4022 dni, 23 godziny, 8 minut temu 135 źrodło rozwiń
List jest bardzo popularną kolekcją danych, niestety często źle używaną. Kiedyś pisałem, że jeśli ma się jakiekolwiek informację o rozmiarze kolekcji, warto w konstruktorze przekazać początkowy rozmiar. Temat jednak będzie dotyczył porównania List
Sztuka programowania 4025 dni, 23 godziny, 2 minuty temu 232 źrodło rozwiń
W ostatnich wpisach, pokazałem dwa różne podejścia wykonywania pętli równolegle. Każda z nich wciąż ma wady, głównie związane z sytuacją gdzie część logiki blokuje wątki. W tym poście, pokażę bardziej dynamiczne podejście. Żaden z wątków nie będzie miał z góry przydzielonych elementów na których musi pracować. Zacznijmy po prostu od kodu:privatestaticvoid For(Action
Sztuka programowania 4029 dni, 22 godziny, 42 minuty temu 122 ź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...
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 4041 dni, 4 godziny, 20 minut temu 186 ź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 4038 dni, 19 godzin, 40 minut temu 121 ź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 4038 dni, 19 godzin, 40 minut temu 266 ź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 4038 dni, 19 godzin, 40 minut temu 195 ź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 4041 dni, 4 godziny, 20 minut temu 658 źrodło rozwiń
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...