dotnetomaniak.pl - Najnowsze artykuły o .NET w dziale Sztuka programowania - Strona 69

Kilka postów wcześniej, pokazałem jak narysować linię za pomocą RX oraz przechwytywania zdarzeń. Dla przypomnienia udało nam się narysować prostą linie z punktu (0,0) do aktualnej pozycji kursora:publicclass MyCanvas : Canvas { private Point _endPoint; public MyCanvas() { var eventsSource = Observable.FromEventPattern

Dziel się z innymi:
Piotr Zieliński » Reactive Extensions: TakeUntil, Repeat, dalsza cześć przykładu obsługi zdarzeń

Sztuka programowania 4313 dni, 16 godzin, 53 minuty temu pzielinski 31 źrodło rozwiń

W dzisiejszym wpisie znów wracamy do tematu RX. Postaram się wyjaśnić jak można ze sobą połączyć kilka IObservable. W RX istnieje naprawdę wiele metod umożliwiających wykonanie tego i na początku może wydawać się to dość skomplikowane, ze względu na liczbę sposobów w jaki można to wykonać. 1. Observable.Amb – zawsze zwraca wyłącznie tą sekwencje, która została jako pierwsza wygenerowana. Jeśli zatem mamy MouseMove i MouseUp wtedy zostanie zwrócone te zdarzenie, które jako pierwsze miało miejsce. Przykł...

Tagi: Rx
Dziel się z innymi:
Piotr Zieliński » Reactive Extensions: Scalanie źródeł danych

Sztuka programowania 4315 dni, 16 godzin, 38 minut temu pzielinski 38 źrodło rozwiń

Programiści niskopoziomowi często narzekają na brak pewnych możliwości w C# znanych im z C++ (często ze względu na brak znajomości ich odpowiedników w C#. Po dzisiejszej rozmowie z kolegą na ten temat stwierdziłem, że pokażę jak wykorzystać takie funkcje jak memset, a przy okazji jak pisać biblioteki DLL w C++ dla C# i jak z nich korzystać. Sprawdzimy także, czy zastosowanie takich bibliotek przyśpieszy działanie...

Dziel się z innymi:
Budowanie (w C++) i dynamiczne linkowanie bibliotek DLL w C#

Sztuka programowania 4317 dni, 12 godzin, 38 minut temu bari 317 źrodło rozwiń

Co wyświetli poniższy fragment kodu?internalclass Program { publicstaticvoid Main() { var timer =new Timer(TimerCallback, null, 0, 1000); Console.ReadLine(); } privatestaticvoid TimerCallback(Object o) { Console.WriteLine("Callback: "+ DateTime.Now); } } Powyższy konstruktor uruchamia timer i spodziewalibyśmy się, że na ekranie po prostu będą wyświetlane kolejne callbacki. W praktyce jednak dokonywana jest pewna optymalizacja, która ma fatalne efekty. Można zauwa...

Tagi: .Net, C#
Dziel się z innymi:
Piotr Zieliński » Code Review: Garbage Collector a zmienne lokalne w metodach

Sztuka programowania 4318 dni, 5 godzin, 40 minut temu pzielinski 102 źrodło rozwiń

In previous post, I defined a good unit test as one that:tests single unit of workcontains only one assertis self contained Presented sample of code with one unit test, unfortunately had two asserts. Clear violation of the second rule. One of the fellow bloggers MJ pointed out this mistake. It is time to “fix” it and talk about “Only one assert per test” rule.Why only One Assert There are couple of problems with multiple asserts.Unit Test Misinformation Frameworks like NUnit do notify about failing un...

Tagi: unit-tests
Źródło: www.mfranc.com
Dziel się z innymi:
[EN]Good unit test - One Assert | Passionate Programmer

Sztuka programowania 4321 dni, 16 godzin, 19 minut temu michalfranc 37 źrodło rozwiń

Pod jednym z ostatnich postów wywiązała się krótka dyskusja na temat komentowania kodu i postanowiłem poczynić follow-up w postaci osobnej notki. Mam cały czas na myśli oczywiście komentarze wyjaśniające działanie kodu a nie zakomentowany kod. Zakomentowany kod powinien być usuwany na poziomie repozytorium w momencie check-ina i problem mielibyśmy z głowy. Na ten temat nawet nie będę się rozwodził.

Kilka słów komentarza o… komentarzach | Maciej Aniserowicz o programowaniu

Sztuka programowania 4322 dni, 5 godzin, 16 minut temu psz750 172 źrodło rozwiń

W poprzednim poście pokazałem jak korzystać z funkcji FromAsyncPattern na przykładzie usługi sieciowej. Dzisiaj zaprezentuję kilka dodatkowych funkcji. Najpierw zdefiniujmy co chcemy uzyskać:Użytkownik może wpisać szukaną frazę w pole edycyjne. Usługa sieciowa ma za zadanie wyszukanie fraz wpisanych w pole zdefiniowane w punkcie 1. Wyłącznie frazy dłuższe niż 3 znaki mają być przetwarzane. Jeśli użytkownik wpisze dwa razy tą samą frazę to tylko pierwsza ma zostać wysłana do usługi (optymalizacja). Zdarze...

Tagi: .Net, C#, Re
Dziel się z innymi:
Piotr Zieliński » Reactive Extensions– Observable.FromAsyncPattern, dalsza część przykładu

Sztuka programowania 4323 dni, 23 godziny, 54 minuty temu pzielinski 17 źrodło rozwiń

This post is based on my answer on the Stack Overflow – “How to unit test this function?” The original question is about writing unit test for a code that uses Console methods inside its body. This problem is more general and in this post, I want to show one of the ways to unit test code with static method.Example of code with static methods This example is from the Stack Overflow quest...

Tagi: unit testing
Źródło: www.mfranc.com
Dziel się z innymi:
[EN] Unit Test code with static method Console.Write | Passionate Programmer

Sztuka programowania 4327 dni, 23 godziny, 44 minuty temu michalfranc 67 źrodło rozwiń

W ostatnim poście pisałem o konwersji zdarzeń .NET do RX. Dziś chciałbym zaprezentować przydatną funkcję, dostępną w rozszerzeniach Observable – Buffer. Służy ona do podzielenia danych w bufory. Załóżmy, że mamy źródło, które generuje dane co 1 sekundę. W każdej sekundzie zatem otrzymujemy jedno powiadomione OnNext. Co w przypadku jednak gdybyśmy chcieli dostawać w każdym powiadomieniu kilka wartości (tablicę elementów) ? Na przykład zamiast 10 OnNext, chcemy dwa powiadomienia, w którym każde zawiera lis...

Tagi: C#, Rx
Dziel się z innymi:
Piotr Zieliński » Reactive Extensions: Observable.Buffer

Sztuka programowania 4328 dni, 11 godzin, 29 minut temu pzielinski 38 źrodło rozwiń

W wcześniejszych wersjach .NET Framework metody asynchroniczne implementujące wzorzec Begin\End były bardzo powszechne w użyciu. RX posiada metody pomocnicze, umożliwiające konwersję asynchronicznego źródła danych do IObservable. Rozważmy to na przykładzie. Załóżmy, że mamy web service, zawierający jakieś metody. Można oczywiście dla takiego serwisu wygenerować asynchroniczne metody. Jeśli chcecie popraktykować możecie skorzystać z tej, darmowej usługi: http://services.aonaware.com/DictService/DictServ...

Dziel się z innymi:
Piotr Zieliński » Reactive Extensions–Observable.FromAsyncPattern

Sztuka programowania 4328 dni, 11 godzin, 29 minut temu pzielinski 31 źrodło rozwiń

Artykuł w sposób przystępny opisuje te trzy powiązane ze sobą mechanizmy. Zaczynamy od delegacji, potem opis anonimowych metod, a na deser wyrażenia lambda. Wszystkie opisy zostały oparte o proste przykłady, które pozwalają lepiej zrozumieć działanie tych mechanizmów oraz sposoby ich wykorzystania, a także screenshoty ze skompilowanych kodów.

Delegacje, metody anonimowe i wyrażenia lambda

Sztuka programowania 4330 dni, 11 godzin, 22 minuty temu bari 183 źrodło rozwiń

Po przeczytaniu poprzednich wpisów, zasada działania i zastosowanie RX powinny być już jasne. Jeśli tak nie jest, koniecznie zachęcam do przeczytania tamtych postów. Jak wspomniałem, RX to ujednolicony model, umożliwiający korzystanie z kolekcji typu “push-based” w jednakowy sposób. Dzisiaj pokażę jak sprawa wygląda dla zdarzeń czyli jak skonwertować EventHandler do IObervable. Oczywiście kluczem do rozwiązania jest klasa Observable, która zawiera mnóstwo rozszerzeń dla interfejsów IObservable\IObserver...

Tagi: Rx, zdarzenia
Dziel się z innymi:
Piotr Zieliński » Reactive Extensions: Konwersja zdarzeń .NET do RX

Sztuka programowania 4330 dni, 11 godzin, 22 minuty temu pzielinski 48 źrodło rozwiń

W poprzednim poście pokazałem jak dokonać subskrypcji aby otrzymywać powiadomienia o nowych danych oraz jak skonwertować IEnumerable to IObservable. Dzisiaj chciałbym pokazać kilka metod klasy Observable, które są szczególnie ważne przy pisaniu testów jednostkowych oraz przy nauce RX.  Muszę przyznać, że na co dzień korzystam wyłącznie tylko z kilku z nich ale w przypadku UnitTest’ów są już bardzo praktyczne. Observable to zbiór statycznych metod (często rozszerzających) usprawniających pracę z IOb...

Dziel się z innymi:
Piotr Zieliński » Reactive Extensions–jak wygenerować proste źródła danych

Sztuka programowania 4333 dni, 14 godzin, 39 minut temu pzielinski 93 źrodło rozwiń

Kiedyś już chciałem poprowadzić cykl wpisów o Reactive Extensions i nawet napisałem pierwszy post wprowadzający do interfejsów IObservable, IObserver. Niestety po drodze przytrafiły się tematy które chciałem najpierw opisać i na końcu zrezygnowałem z tego. W między czasie kilka osób pytało o ten cykl ale nie widziałem sensu ponieważ Maciej Zbrzezny już wykonał kawał dobrej roboty i  opisał to na swoim blogu w bardzo szczegółowy sposób. Dzisiaj postanowiłem jednak napisać kilka postów o RX po swojemu, z t...

Dziel się z innymi:
Piotr Zieliński » Reactive Extensions–wprowadzenie

Sztuka programowania 4339 dni, 15 godzin, 7 minut temu pzielinski 111 źrodło rozwiń

W zeszłym tygodniu pisałem o zastosowaniu dynamicznych zmiennych. W dzisiejszym wpisie zastanowimy się co dokładnie CLR robi z dynamic i jak to wpływa na wydajność aplikacji. Pierwszy test polega na porównaniu wydajności dodawania dwóch liczb:privatestaticvoid TestStatic() { var stopwatch = Stopwatch.StartNew(); int a =10; int b =45; int c = a + b; stopwatch.Stop(); Console.WriteLine("Static:{0}", stopwatch.ElapsedTicks); } privatestaticvoid TestDynamic() { var stopwatch = Stopwatch...

Dziel się z innymi:
Piotr Zieliński » Słowo kluczowe dynamic: wydajność

Sztuka programowania 4342 dni, 23 godziny, 6 minut temu pzielinski 97 źrodło rozwiń

Już kiedyś pisałem jak obsługiwać prawidłowe wyjątki ale dzisiaj jeszcze raz chciałbym rozwinąć temat. Zacznijmy od:privatestring GetData(int id) { string result=null; try { result = _service.GetData(id); } catch(Exception e) { } return result; } Jest to oczywiście skrajnie złe rozwiązanie ponieważ wszystko ignorujemy. Na szczęście programiści rzadko popełniają powyższy błąd. Niestety dużo częściej popełnianym błędem jest:privatestring GetData(int id) { stri...

Dziel się z innymi:
Piotr Zieliński » Code review: zła obsługa wyjątków

Dzisiaj chciałbym przedstawić jedną z podstawowych rzeczy w języku C#, którą osoby mające za sobą już kilka programów w tym języku zapewne doskonale znają. Mam na myśli trzy słowa kluczowe, które sprawiają, że dostosowywanie funkcji składowych do naszych potrzeb jest jeszcze prostsze. Pierwszym z nich jest słowo out. Pozwala na zwrócenie w prost...

Tagi: out, params, Ref
Dziel się z innymi:
Słowa kluczowe: out, ref i params

Sztuka programowania 4347 dni, 1 godzinę, 14 minut temu bari 144 źrodło rozwiń

Wszyscy dążymy do oprogramowania, które zawsze działa ale oczywiście musimy przygotować się na przypadki w których wystąpił wyjątek i nie wiadomo jak go obsłużyć. Najgorszą reakcją jest oczywiście pozwolenie aplikacji dalej działać co może spowodować nieoczekiwane efekty oraz popsuć po prostu dane. Musimy wszystko zrobić aby nie dopuścić do niespójności danych. W przypadku gdy wiemy, że aplikacja nie może kontynuować swojego działania musimy bezwzględnie zakończyć cały proces albo AppDomain. Należy po pr...

Dziel się z innymi:
Piotr Zieliński » Zamykanie aplikacji w przypadku awarii: Environment.FailFast

Sztuka programowania 4348 dni, 15 godzin, 28 minut temu pzielinski 128 źrodło rozwiń

Dziś będzie opowieść… Co sądzą ludzie, którzy nie testują? Ja, dla przykładu, wierzę w Unit Testy. Kontrastowałem (podpytywałem) to ze stanowiskiem wielu osób. Niektóre osoby odpowiadały, że to nie działa. Następnie podały powody dlaczego tak uważają i od tych powodów chciałbym zacząć...

Tagi: .Net, unit tests
Dziel się z innymi:
Moje Unit Testy | Show me the code

Sztuka programowania 4348 dni, 15 godzin, 28 minut temu psz750 167 źrodło rozwiń

Dziś kolejny post z cyklu zastosowanie słowa kluczowego dynamic. Ostatnio pisałem o ExpandoObjet, który jest dynamicznym kontenerem na metody i dane. DynamicObject pozwala z kolei tworzyć wrappery na różne klasy. Zacznijmy od przykładu:internalclass Program { publicclass CustomWrapper : DynamicObject { publicoverridebool TryGetMember(GetMemberBinder binder, outobject result) { result ="Hello World"; returntrue; } publicoverridebool TrySetMem...

Tagi: C#, dynamicobject
Dziel się z innymi:
Piotr Zieliński » Zastosowanie dynamic: DynamicObject

Sztuka programowania 4355 dni, 5 godzin, 29 minut temu pzielinski 94 źrodło rozwiń

1 2... 67 68 69 70 71 72 73 74