Odpowiednie rozbicie historii na taski ma kluczowy czynnik w powodzeniu projektu. Jeśli ta czynność jest źle wykonana – czas realizacji projektu się wydłuża, a w zespole rośnie frustracja bo nikt nie wie gdzie leży problem. Developerzy pracują w pocie czoła, PM skrupulatnie trzyma się metodologii prowadzenia projektu, a mimo to są opóźnienia (które niestety najczę...
Sztuka programowania 2439 dni, 17 godzin, 23 minuty temu 412 źrodło rozwiń
Przemysław Walkowski Słowo kluczowe var wprowadzone w C# 3.0 pozwala w codziennej pracy programisty .NET unikać definiowania typów danych, zrzucając odpowiedzialność na ustalenie typu kompilatorowi. W większość przypadków kompilator domyśla się jaki typ ma mieć dana zmienna i życie toczy się dalej. Jednak z czasem można zauważyć pewne efekty uboczne w czytelności kodu. Poniżej moje przemyślenia na temat var. Wstęp Słowa kluczowe var powst...
Sztuka programowania 2448 dni, 22 godziny, 17 minut temu 370 źrodło rozwiń
Dług technologiczny jest zaciągany wtedy, gdy mając na szali krótszy czas developmentu i jakość kodu – świadomie wybieramy szybsze/tańsze ukończenie projektu kosztem jakości. Warto powiedzieć, że jeśli ta droga nie jest świadoma to nie mamy do czynienia z długiem technologicznym tylko niekompetencją :)
Sztuka programowania 2448 dni, 22 godziny, 17 minut temu 314 źrodło rozwiń
Resharper daję naprawdę cenne wskazówki. Nie wszystkie są oczywiste i czasami należy zagłębić się w temat. Jedną z takich wskazówek jest używanie IndexOf wraz z StringComparison.Ordinal. Załóżmy, że mamy następujący kod: string text = "test"; Console.WriteLine(text.IndexOf("est")); Resharper zasugeruje konwersję do: string text = "test"; Console.WriteLine(text.IndexOf("est", StringComparison.Ordinal)); Dlaczego? Jeśli nie przekażemy ustawień regionalnych jawnie, wtedy domyślnie aktualna zost...
Sztuka programowania 2451 dni, 22 godziny, 16 minut temu 163 źrodło rozwiń
Ten błąd jest konsekwencją architektury providera SQL Server dla linq to entities, który całe zapytanie konwertuje na SQL...
Sztuka programowania 2463 dni, 15 godzin, 12 minut temu 178 źrodło rozwiń
C# 5.0 wniósł wiele dobroci, m.in. obsługę wywołań asynchronicznych za pomocą słów kluczowych async i await. Rozwiązanie, ze względu na prostotę obsługi i skuteczność, cieszy się do dziś sporą popularnością. Jak testować wywołania asynchroniczne? Tego dowiemy się w tym odcinku!
Sztuka programowania 2478 dni, 19 godzin, 31 minut temu 330 źrodło rozwiń
Bardzo ciekawa inicjatywa - Programistok - pojawiła się na horyzoncie. Jeśli ktoś jeszcze nie zwrócił uwagi, zachęcam do poczytania oficjalnej strony tego wydarzenia. Idea jednej konferencji na temat C#, Ruby, Pythona i JavaScript zdaje się świetna, bo pozwala poszerzać horyzonty...
Sztuka programowania 2484 dni, 22 godziny, 10 minut temu 220 źrodło rozwiń
Po dość znacznej przerwie powracamy jeszcze na chwilę do tematu Dependency Injection. Pamiętacie cykl i moment, do którego dotarliśmy? Zastosowaliśmy SRP by uprościć kod. Wprowadziliśmy jawne zależności między komponentami i ubraliśmy je w interfejsy. Spróbowaliśmy napisać własny kontener Dependency Injection, a potem zobaczyliśmy dlaczego lepiej użyć jednak czegoś gotowego. I stanęło na Autofac, kiedy to obiecałem “kilka finalnych refleksji”.
Sztuka programowania 2487 dni, 19 godzin, 28 minut temu 253 źrodło rozwiń
Wiele osób pewnie już od dawna korzysta LINQPad. Osobiście nigdy nie miałem okazji korzystać z tego narzędzia i zawsze myślałem, że w przypadku TDD jest ono po prostu zbędne. Ostatnio jednak zainstalowałem z ciekawości i okazało się bardzo przydatne w przypadku testowania krótkich snippet’ów. Czasami chcę sprawdzić tylko np. formatowanie daty i wtedy zwykle uruchamiałem osobną instancję Visual Studio, immediate windows w VS albo po prostu pisałem konkretny test. Nie zawsze jednak jest to wygodne i prak...
Sztuka programowania 2497 dni, 1 minutę temu 369 źrodło rozwiń
Trochę scruma i agile widziałem w swojej karierze. I to chyba by było tyle w temacie pozytywnych elementów tego wpisu, ponieważ chciałbym opisać te złe podejścia do scruma jakich doświadczyłem. Myślę, że moje doświadczenie jest naprawdę nikłe, ale podzielę się nim z opinią publiczną. Na wstępie zaznaczam, że nigdy nie używałem scruma. Były to jedynie elementy scruma, lub nawet gorzej elementy agile (bo wstyd to scrumem nazywać). Wynikało to na pewno z tego, że osoby wyrażające scruma w tych zespołach ...
Sztuka programowania 2502 dni, 22 godziny, 7 minut temu 664 źrodło rozwiń
W Visual Studio jest parę sposobów aby szybciej kodować oprócz skrótów klawiszowych opisanych tutaj - jednym ze sposobów są wstawki kodu. Jest ich sporo i od czasu do czasu warto sobie je przypomnieć. Dużą zaletą jest to, że nie potrzeba ReSharpera czy innych narzędzi aby móc cieszyć się tymi skrótami. Wystarczy Visual Studio w wersji od 2010. Z tego posta dowiesz się:Co to...
Sztuka programowania 2507 dni, 13 godzin, 46 minut temu 480 źrodło rozwiń
Przemysław Walkowski Większość programistów w pewnym momencie odkrywa, że ich IDE posiada skróty klawiszowe i dzięki używaniu ich może przyspieszyć swoją pracę. Inni dowiadują się, że kodowanie przy pomocy myszki jest raczej objawem braku profesjonalizmu. Poniżej lista skrótów klawiszowych, których używam codziennie w mojej pracy. Cześć skrótów jest oferowana przez ReSharpera ale w większość są to skróty, które o...
Sztuka programowania 2515 dni, 16 godzin, 49 minut temu 537 źrodło rozwiń
Testy jednostkowe z natury muszą być wykonywane w izolacji. Wykonanie np. pierwszego testu nie powinno mieć żadnego znaczenia dla pozostałych. Analogicznie, kolejność ich wykonywania nie ma znaczenia. Zwykle jest to bardzo proste i osiąga się to poprzez np. mock’i. Czasami jednak może zajść potrzeba całkowitej izolacji poprzez wykonywanie każdego testu w osobnej AppDomain. Myślę, że w 99% przypadków jednak, można bez tego obyć się. Ostatnio jednak, pisząc pewne narzędzie do Visual Studio, musiałem odiz...
Sztuka programowania 2525 dni, 8 godzin, 25 minut temu 153 źrodło rozwiń
Technologie typu WPF, czy Universal Apps aż proszą się o zastosowanie MVVM, jednak wsparcie dla tej architektury po stronie tych rozwiązań, jest umówmy się - co najwyżej średnie. Bardzo mało kontrolek posiada wbudowaną obsługę komend. I nawet jeśli się ona pojawia, to i tak nie dotyczy ona wszystkich dostępnych w kontrolce zdarzeń. Poza tym, nie ma jawnego wsparcia dla ViewModeli. Standardowo zbudowana aplikacja składa się ze stron wykorzystujących code-behind. Na szczęścia oba te problemy można w pewnym...
Sztuka programowania 2526 dni, 22 godziny, 55 minut temu 199 źrodło rozwiń
From procedural to functional – an example in F# Posted on by Michal Franc In this blog post, I show little code review of a code sent to me by friend. The code is quite simple example on how to read XML file using XmlProvider. My friend’s biggest concern was that his code is still procedural and not ‘functional’. I was asked if this code can be refactored to be more functional, whatever it means. First of all, the code that I got, is fine and most importantly it works. Even when you are using F# to ...
Sztuka programowania 2541 dni, 23 godziny, 2 minuty temu 103 źrodło rozwiń
Tworzenie instrukcji warunkowych jest czymś naturalnym w praktycznie każdym języku programowania. Trudno sobie jest wyobrazić kod źródłowy nawet najprostszej aplikacji, który byłby pozbawiony konstrukcji IF - w pewnym sensie tego rodzaju instrukcje, kontrolują przepływ sterowania. Warto wiedzieć, że w C# nasze możliwości na tym polu są jeszcze większe m.in. dzięki dyrektywom preprocesora. Dyrektywy preprocesora wpływają na to co zostanie skompilowane. Możemy np. inny fragment kodu przeznaczyć dla kompila...
Sztuka programowania 2555 dni, 20 godzin, 14 minut temu 362 źrodło rozwiń
W ostatnim poście pokazałem jak za pomocą LINQ można przeglądać drzewo kodu. Czasami jest to jednak niewygodne. Załóżmy, że piszemy konwerter z C# na jakiś inny język. W takiej sytuacji, prawdopodobnie chcemy mieć dostęp do każdego elementu kodu. Możemy to zrobić za pomocą LINQ, ale jest to mało wygodne. Musielibyśmy pisać kod rekurencyjny, który dla skomplikowanych kodów jest jak wiadomo mało wydajny, a nawet może zakończyć się wyjątkiem OutOfMemory. Do dyspozycji jednak mamy klasę CSharpSyntaxWalker. ...
Sztuka programowania 2555 dni, 20 godzin, 14 minut temu 129 źrodło rozwiń
W poprzednim wpisie przedstawiłem różnice pomiędzy logiką aplikacji, a logiką biznesową. Taki podział doskonale ilustruje zasadę podziału odpowiedzialności, tzw. Separation of Concerns, w skrócie SoC. Cofnijmy się do wspomnianego artykułu na moment i przypomnijmy sobie główne różnice pomiędzy logiką aplikacji, a logiką biznesową...
Sztuka programowania 2560 dni, 9 godzin, 55 minut temu 353 źrodło rozwiń
W architekturze WinRT możemy korzystać z dwóch bardzo przyjemnych kontrolek do prezentacji danych - ListView oraz GridView. Obie te kontrolki mają duże możliwości konfiguracyjne, posiadają sporo zdarzeń i można je również fajnie ostylować. Jednym słowem jest naprawdę dobrze;-) Naszą piękną, idealistyczną sielankę może jednak w łatwy sposób zakłócić, pewien dość prozaiczny problem, który nazywa się nadmiar danych. Tego rodzaju sytuacja zasadniczo nie ma żadnych pozytywów. Nasza aplikacja pochłonie duże il...
Sztuka programowania 2564 dni, 20 godzin, 57 minut temu 167 źrodło rozwiń
Have you ever written a program with such a complex algorithm that despite of using all processor cores the implementation wasn’t efficient enough? If yes, this is the moment you should consider using a more efficient device than CPU.
Sztuka programowania 2573 dni, 21 godzin, 2 minuty temu 208 źrodło rozwiń