Może słyszeliście o takim ptaszku Fody. Ostatnim czasem ptaszek ten podbił moje serce. Korzystam z jego usług tak często jak się tylko da. Ogólnie muszę podziękować Pawłowi Łukasikowi za prezentacje na KGD.NET, która otworzyła mi oczy PropertyChanged.Fody To chyba mój ulubiony pakiet, ale zanim go opiszę muszę zrobić drobne wprowadzenie. Od początku mojej przygody z WPFem ( i ogólnie XAMLem) strasznie żmudnym procesem było bindowanie pomiędzy DataModelem a widokiem (niech zasłona milczenia zakryje fak...
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
Ponieważ popełniłem kiedyś coś co nazwałem Fody ciekawa ptaszyna – część 1 to w związku z tym należało zrobić coś co nazywa się Fody cz2 co też obecnie czynie. Fody ma wiele pakietów, ale opiszę teraz tylko te wybrane z których kiedyś korzystałem (lub widziałem sens ich zastosowania). Tworząc aplikacje okienkowe musimy również przemyśleć sposób ich dystrybucji. Należy go dostosować do poziomu zaawansowania klienta oraz do nakładów pracy związanych z danym sposobem. Pisząc dużą aplikację wymaga...
Pętle i warunki, naturalnie są z jednym z podstawowych elementów każdego programu. Języki wysokiego poziomu umożliwiają realizację tego za pomocą słów If, for, foreach,while. W językach niskiego poziomu, takich jak IL Assembly, wszystkie powyższe czynności wykonuje się za pomocą skoków warunkowych i bezwarunkowych. Działają one analogicznie do słowa kluczowego GOTO. W IL, najprostsza instrukcja skoku to BR:br jump1 // jakas logika tutajjump1: //... br nie zawiera żadnego warunku. Można ją porównać do...
W poprzednim poście opisałem jak działa stos w IL. Wiemy, że jest on kluczowy dla wszelkich operacji. Jedną z ważniejszych instrukcji, wprowadzonych w tamtym poście jest ldc.i4. Służy ona do załadowania liczby 4 bajtowej na stos. Oprócz niej, istnieje wiele innych instrukcji, które pełnią analogiczną rolę. Rozważmy następujący kod c#: float floatNumber =533.3f; double doubleNumber =5454.14; string text ="text"; int[] array =newint[] {21, 3}; Console.WriteLine(floatNumber); Console.WriteLine(doubl...
Bardzo często na blogu poruszam tematykę c# internals. Bez nich, praktycznie niemożliwe jest pisanie optymalnego kodu. Jeśli ktoś np. nie wie jak async\await jest zaimplementowany wewnętrznie, bardzo łatwo może popełnić błędy podczas pisania kodu c#. Niedawno ktoś zasugerował mi, abym wyjaśnił bardziej IL. Bardzo często wklejam fragmentu kodu z Reflector’ora i nie wyjaśniam szczegółów. Z tego względu, przez kilka kolejnych wpisów zajmiemy się CLR internals oraz IL. Na początek podstawowe pytanie, co to...
Istnieje wiele framework’ow ułatwiających izolację danych w testach jednostkowych. Nie opisuje ich na blogu, bo nie wiele od siebie różnią się . Microsoft Fakes jednak ma kilka ciekawych rzeczy i dlatego nim dzisiaj zajmiemy się. Niestety jest dostępny on wyłącznie w wersji Visual Studio Ultimate. Pierwszą wyróżniającą go cechą jest możliwość izolacji metod statycznych, które oczywiście nie mogą być w łatwy sposób mock’owane. Rozważmy klasyczny przykład:publicclass Person { publicvoid Method() ...
Historia zaczyna się od prostego fragmentu kodu pokazanego poniżej. Kod ten to fragment walidatora, ktory ma za zadanie określić, czy dane są prawidłowe. Jeśli nie, to zmienna isValid powinna zostać ustawiona na false. var isValid = true; if (condition_1) isValid = false; if (condition_2) isValid = false; Kod ten działał do momentu, kiedy wprowadzono do niego małą zmianę pokazaną poniżej. Było to pewne uszczegółowienie logiki walidacji danych wejściowych. var isValid= true; i...
Sztuka programowania 3784 dni, 40 minut temu 366 źrodło rozwiń
Extension is available for other Visual Studio versions: GoToTest macro for VisualStudio 2008NavigateToTest VS2010 extensionNavigateToTest VS2012 extensionNavigateToTest VS2013 extension You can download the extension here: NavigateToTest Visual Studio 2013 extension Here’s the latest version that supports Visual Studio 2013. Extension is convention based. It matches ClassName file with ClassNameTest or ClassNameTests and vice-versa, so you can easily navigate to the test file and back. Here are so...
Wiele razy pisałem już o słowach async\await i z pewnością ułatwiają one życie. Dla przypomnienia rozważmy kod:private async void DownloadAndSortAsync() { int[] allNumbers = await DownloadNumbersAsync(); int[] sortedNumbers = await SortNumbersAsync(allNumbers); MessageBox.Show(string.Join(“,”,sortedNumbers)); } private Task
Sztuka programowania 3792 dni, 20 godzin, 33 minuty temu 194 źrodło rozwiń
W Visual Studio istnieje pewna opcja, która umożliwia sprawdzenie wartości obiektu, do którego nie ma się jawnej referencji. Spójrzmy na następujący przykład:class Program { staticvoid Main(string[] args) { DoSomething(); } privatestaticvoid DoSomething() { var person=new Person(); person.FirstName ="Piotr"; person.LastName ="Zielinski"; } } Jeśli ustawimy breakpoint w metodzie DoSomething naturalnie zobaczymy wartość obiektu person w oknie watch:...
W ostatnim poście było o SpecsFor, jako alternatywy dla SpecsFlow. Pokazane przykłady były ogólne i nie dotyczyły konkretnej technologii. Z BDD bardzo często korzysta się w celu przetestowania UI. W końcu wpisywane scenariusze, odzwierciedlają typową interakcję użytkownika z aplikacją. Osoby nietechniczne zwykle definiują wymagania z punktu widzenia użytkownika a nie wewnętrznej infrastruktury, która oczywiście nie jest im znana w szczegółach. Dla aplikacji ASP.NET MVC powstał SpecsFor MVC. Dobra wiadom...
Sztuka programowania 3796 dni, 14 godzin, 54 minuty temu 120 źrodło rozwiń
Po bardzo gorącym okresie ostatniego miesiąca i totalnym braku czasu, przyszedł czas na nowy, mogący budzić kontrowersje, niechęć do autora itp. post :) Język angielski. Jakże świetnie znany...
Recently I step upon an issue of compiling a project using Mono. Mono itself comes with nice tool called xbuild which is a msbuild brother in Mono world. Xbuild can be used to compile a project from command line. I wanted to compile my project targeting Mono under Visual Studio 2012. Unfortunately, targeting for Mono (profile=Mono) does not exists in Visual Studio. Following instructions will add new profile and then new target – Mono – will be available.Downloa...
Przez kilka ostatnich wpisów poruszałem temat BDD, a konkretniej jednego z framework’ow – SpecFlow. Dzisiaj o kolejnym rozwiązaniu, które jest przydatne, gdy programiści definiują specyfikacje. SpecsFor można zainstalować standardowo z NuGet: Załóżmy, że będziemy rozpatrywać następujący kod...
Sztuka programowania 3800 dni, 10 godzin, 30 minut temu 162 źrodło rozwiń
W następnym poście mam zamiar napisać o SpecsFor, kolejnym framework’u ułatwiającym pisanie testów BDD. Najpierw jednak chciałbym przedstawić expectedObjects oraz Should Assertion Library, które są składowymi SpecsFlow. Wszystkie z wymienionych bibliotek można zainstalować przez NuGet. Should Assertion Library to mała biblioteka ułatwiająca asercje danych. W standardowych unit testach zwykle piszemy coś w stylu:Assert.IsTrue(value); Assert.IsNull(value); Assert.AreEqual(actualValue,expectedValue) Jes...
Scenka1 Facet idzie sobie przez las i napotyka gościa wycinającego siekierą choinki - Panie co pan robisz! Dlaczego dewastujesz las? Nie dewastuję lasu tylko zaciągam dług leśny. Będą święta, na choince powieszę bombki to rodzina będzie zadowolona. No a później posadzę nowe choinki w to miejsce. A kiedy to zrobisz? no za trzy sprinty... Scenka2 Facet idzie sobie przez osiedle i spotyka gościa, który wywala gruz do piaskownicy - Dlaczego dewastujesz plac zabaw? Nie dewastuję placu zab...
Sztuka programowania 3803 dni, 11 godzin, 15 minut temu 422 źrodło rozwiń
JSON.NET to darmowa i naprawdę prosta w użyciu biblioteka, która umożliwia parsowanie JSON z poziomu c#. Instalujemy ją oczywiście z NuGet: Następnie API jest na tyle proste, że wystarczy tak naprawdę nam tylko IntelliSense:var person =new Person() {FirstName ="Piotr", LastName ="Zielinski"}; string content = JsonConvert.SerializeObject(person); Console.WriteLine(content); Efektem będzie konwersja obiektu c# do JSON czyli: {"FirstName":"Piotr","LastName":"Zielinski"} Podobnie można dokonać deseri...
Mamy sezon ogórkowy, słoneczko przygrzewa, klimatyzacja ledwo dyszy z każdej dyszy, zarząd i kadra średniego szczebla udała się na zasłużony odpoczynek i tylko pasjonaci wolą spędzać ten czas w pracy. Ci pasjonaci to my. W tych ekstremalnych okolicznościach przyrody ...
Ostatnio dodawałem prostą funkcję do pewnej aplikacji webowej: umożliwienie ściągnięcia pliku z dysku. Były to pliki Excela i znajdowały się w katalogu ~/App_Data/reports. Siłą rzeczy takie pliki nie mają ID. Mają nazwę. I po nazwie właśnie je się ściągało. Kod otwierający plik do ściągnięcia można by napisać tak: public Stream OpenFile(string fileName) { string reportsdir = HttpContext.Current.Server.MapPath("~/AppData/reports...
Obiekty Hub mają z góry określony czas życia. Ten sam obiekt nie jest współdzielony pomiędzy różne wywołania. Jeśli klient wywołuje metodę, instancja huba jest tworzona od nowa. Oznacza to, że nie możemy przechować stanu między zapytaniami w następujący sposób