Debugging is a lot like police forensics. You’re chasing the villain (bug) by analyzing eye-witness accounts (users’ reports), inspecting the crime scene (source code), and combing through often the most helpful resource: CCTV recordings (application logs), if only their quality allows. I got upset lately, looking for the needle in a stack of log spam: People who argue that it's "useful" to keep DEBUG level logging in produc...
Sztuka programowania 3872 dni, 16 godzin, 21 minut temu 208 źrodło rozwiń
Od jakiegoś czasu nosiłem się z zamiarem rozpoczęcia na tym blogu jakiegoś cyklu wpisów – od czasu kiedy popełniłem serię wpisów przygotowujących do egzaminu MCSD: 70-480 minęło już trochę czasu… Zastanawiałem się trochę nad tematem i ostatecznie postanowiłem, że będzie to implementacja różnych wzorców projektowych w C#. Wiem, wiem… Temat wzorców jest dość podstawowy, jednak moim zdaniem fajnie będzie zebrać je wszystkie w jednym miejscu, a przy okazji uporządkować sobie trochę wiedzę na ich temat. Posta...
Sztuka programowania 3880 dni, 13 godzin, 31 minut temu 435 źrodło rozwiń
2nd part of the serie about applied TDD with examples on commit by commit basis, with commentary about decision making process.. String Calculator TDD Kata.
Sztuka programowania 3880 dni, 13 godzin, 31 minut temu 100 źrodło rozwiń
There are a lot of discussions in the Internet about the sense of testing the code with private accessors. In my opinion all of the discussions coming from the wrong understanding of the topic. What is unit testing? It is a testing of units, not classes, not methods exposed by some API. The term private is supposed to be private to the consumer, not to unit tests. Let's have a look at it closer..
Sztuka programowania 3881 dni, 14 godzin, 38 minut temu 117 źrodło rozwiń
In my pervious post I described basic multithreading constructs in C#. Now, I would like to compare them to conforming constructs in Java. It might be useful for those of you, who has already created some multithreaded applications in Java, and would like to learn how to do the same in C#.
Sztuka programowania 3883 dni, 5 godzin, 17 minut temu 207 źrodło rozwiń
Extension Methods – metody rozszerzające, które pozwalają na wykorzystanie raz napisanego kodu w wielu miejscach bez naginania zasady DRY (Don’t Repeat Yourself). Metoda taka musi być statyczna...
Sztuka programowania 3887 dni, 22 godziny, 42 minuty temu 238 źrodło rozwiń
Najprościej definiując problem: Czy mamy tylko jeden return z metody, czy też mamy ich kilka w różnych miejscach. Mówię też o metodach, które nie zwracają wartości. Metodę void też można skończyć wcześniej...
Sztuka programowania 3887 dni, 22 godziny, 42 minuty temu 229 źrodło rozwiń
W ostatnich odcinkach serii wspominałem o tym jak można w łatwy sposób wyrzucić do konsoli informacje o stanie Naszej aplikacji. Dzisiaj pokazuję jak można formatować te dane, uzyskując większy porządek w danych. Umiętność formatowania danych, czy to pisanych ręcznie czy pochodzących ze zmiennych przydaj...
Sztuka programowania 3888 dni, 20 godzin, 10 minut temu 38 źrodło rozwiń
Dzisiaj chciałbym trochę opowiedzieć o tym jak logować do konsoli całe obiekty, tak byśmy mieli podgląd nie tylko na same zmienne co już prezentowałem w poprzednich artykułach, ale całe złożone elementy. Zaczniemy od prostego kodu z dwoma przyciskami: Kod realizuje następujące zadania:Mamy dwa przycis...
Sztuka programowania 3888 dni, 20 godzin, 10 minut temu 39 źrodło rozwiń
W tej części kursu zajmiemy się pojęciem inicjalizacji i czyszczenia danych. Wielkiej filozofii tutaj nie ma; w NUnit działa to tak:Jeśli chcemy, aby jedna z metod uruchamiała się przed każdym uruchomieniem naszego testu, aby np. inicjalizować dane, nakładamy na nią atrybut [SetUp].Jeśli zechcemy, aby metoda uruchamiała się po każdym uruchomieniu testu w celu np. czyszczenia danych — nakładamy atrybut [TearDown]...
Sztuka programowania 3890 dni, 22 godziny, 24 minuty temu 143 źrodło rozwiń
Ostatnio w sieci ukazało się wiele przykładów jak posprzątać kod w kontrolerach mvc. Sam podjąłem próbę walki z ciągle powtarzającym się kodem. Rozdmuchany kontroler z akcjami wypchanymi kodem wszelakiej maści, od walidacji po wywołania serwisów, repozytoriów, łapanie wyjątków i jak do tego jeszcze zaplącze się jakaś cząstka logiki biznesowej nie przyniesie nam nic dobrego.
Sztuka programowania 3892 dni, 4 godziny, 41 minut temu 315 źrodło rozwiń
Dzisiaj coś o Code Review, czyli przeglądaniu własnego kodu przez innego członka zespołu. Jak to działa? Wyjaśnię to na podstawie Scrum’a. Rozpoczyna się sprint, każdy backlog item ma w sobie różne taski. Każdy task ma wyestymowany czas potrzebny na wykonanie zadania, np. Handle operation documentsCreate database structure 4hPrepare model changes 2hCreate data structures 4hCode Review 2hRework 3h Jak widać, również Code Review oraz Rework jest wyestymowany. Jak wygląda to w praktyce? Robimy pełen dev...
Sztuka programowania 3895 dni, 4 godziny, 13 minut temu 193 źrodło rozwiń
Tuple. Dobro czy zło? Subiektywizm każe mi powiedzieć, że straszne zło. Obiektywizm – zło umiarkowane/neutralność. Zamysłem przy tworzeniu Tuple było ułatwienie zagnieżdżania struktur. Na papierze wygląda nieźle, natomiast jest bardzo nadużywane w projektach, co czyni je nieczytelnymi. Osobiście uważam, że Tuple może być wykorzystany przy tworzeniu prototypów, kiedy chcemy zobaczyć, czy dany kod robi dokładnie to, o co nam chodzi, inaczej mówiąc – do tworzenia działającej metody. Zaraz po tym, konieczn...
Sztuka programowania 3895 dni, 20 godzin, 44 minuty temu 282 źrodło rozwiń
Post Sławka z przemyśleniami na temat prezentacji Wujka Boba. Jeżeli myśleliście, że Uncle Bob skończył się na Kill'em All, to zachęcam do obejrzenia prezentacji na temat profesjonalizmu....
Sztuka programowania 3901 dni, 19 godzin, 43 minuty temu 344 źrodło rozwiń
Temat czytelności kodu jest bardzo dyskusyjny. Mam na myśli to, że jest tutaj wiele “zależy”. Funkcję, którą dziś opisuję, popełniłem kilka dni temu, nie myśląć specjalnie o tym, że będą ją tutaj omawiał. Spójrz najpierw na oryginalny kod poniżej krytycznym okiem, a później zapraszam do mojej analizy “dlaczego tak, a nie inaczej”.
Sztuka programowania 3904 dni, 14 godzin, 14 minut temu 467 źrodło rozwiń
TDD – commit by commit String Calculator (I) In this series I want to share my approach to TDD. I will do a simple TDD kata, sharing with you all my decision and thoughts. It’s called commit by commit beacuse you will find here links to github with each step. There will be a commentary to each one of these. I encourage you to comment and show me the flaws in my “style” of TDD coding. I also want to learn from you. I do know that my approach has its problems and there is allways a wayt to do something b...
Sztuka programowania 3904 dni, 14 godzin, 14 minut temu 100 źrodło rozwiń
Unit testing client-side of our web applications is a little bit cumbersome: we have Javascript but also move forward to TypeScript. We have plain code without modules or use requirejs to benefit from AMD. For each configuration the setup of unit test project is different. I think having all these samples in one place could help us to start TDD in client-side. All the sample are based on the sample application from my previous posts about unit testing JavaScript. Actually these are not 11 different sampl...
Sztuka programowania 3911 dni, 5 godzin, 9 minut temu 82 źrodło rozwiń
Zapewne większość z Was miała do czynienia z aplikacjami pisanymi przy wykorzystaniu ASP.NET MVC. Zapewne pracowaliście nad jakimś projektem, im bliżej końca, tym co raz częściej wkradają się błędy, aplikacja jest na tyle duża, że łatwo wstawić przez przypadek do widoku jakieś duperele, jest mnóstwo resource’ów, które bardzo ciężko ogarnąć, mapowanie view-model to jakiś koszmar. Brzmi źle? Wcale nie musi tak być. Oto kilka porad (subiektywnych), w jaki sposób możemy uniknąć bałaganu:
Sztuka programowania 3918 dni, 20 godzin, 47 minut temu 406 źrodło rozwiń
Trochę mnie ostatnio naszło na nietechniczne przemyślenia… Przyznam, że ten i poprzedni wpis o Code Review zainspirowane zostały trochę przez to, że do mojego zespołu w pracy dołączyło kilka nowych osób z kompletnie innymi doświadczeniami z poprzednim firm. Widzę to dobrze przy przeglądach kodu tych osób i widzę jak potrafią mieć odmienne nawyki dotyczące formatowania kodu, nazewnictwa zmiennych czy właśnie pewnych konwencji programistycznych. I właśnie przemyśleniami na ten temat chciałem się dziś z Wam...
Sztuka programowania 3918 dni, 20 godzin, 47 minut temu 310 źrodło rozwiń
Czyżbym wrócił do formy z blogiem? Niektórzy może pamiętają, a inni nie, ale walczę z takim tam sobie prywatnym projekcikiem. Otóż nastał tam etap refaktoringu i właśnie wtedy postanowiłem, że trzeba wreszcie przenieść rejestrację komponentów w IOC z kodu do configa. Używam Autofac, więc zerknełem w dokumentację i dociągnełem 'Autofac.Configuration' z NuGeta, jest to potrzebne aby móc grzebać z configu. Zaraz potem wziełem się do roboty,wycinek wygląda tak: Trzeba dodać informację o nowej sekcji: ...
Sztuka programowania 3923 dni, 17 minut temu 153 źrodło rozwiń