Opisywałem już mechanizm konwersji zdarzeń .NET do IObservable. W RX istnieje dodatkowo nowy mechanizm, mający na celu zastąpić standardowe zdarzenia .NET – przynajmniej w części przypadków. Zastanówmy się, co jest złego tak naprawdę w obsłudze zdarzeń w .NET? 1. Dość często programiści zapominają usunąć zdarzenie co może skutkować memory leak. Czasami jest ciężko zdefiniować moment, w którym należy usunąć zdarzenie. Pewnym rozwiązaniem problemu może być zastosowanie wzorca weak event pattern ale jak w...
Sztuka programowania 3780 dni, 21 godzin, 29 minut temu 41 źrodło rozwiń
Niedawno tworząc szablon kontrolki w WPF natknąłem się na pewien problem. Chcąc odwołać się z szablonu do właściwości kontrolki standardowo użyłem rozszerzenia TemplateBinding. Kod się skompilował ale po uruchomieniu aplikacji pojawił się wyjątek. Oto uproszczona postać szablonu...
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
Sztuka programowania 3780 dni, 21 godzin, 29 minut temu 30 źrodło rozwiń
Tworząc duże projekty niejednokrotnie musiałem stworzyć szereg małych klas, których głównym zadaniem było chwilowe przechowywanie określonych danych i przekazywanie ich pomiędzy obiektami. Nie niosły one więc ze sobą żadnej wartości dodanej, a sam ich żywot był raczej krótki. Kilka, kilkanaście klas tego typu, potrafi dość w skuteczny sposób zabałaganić nawet najlepiej zorganizowany projekt. Jeśli wrócimy do niego za jakiś czas, zaczniemy sobie z pewnością zadawać pytanie - po co ta, czy tamta klasa? ...
Architektura 3781 dni, 15 godzin, 37 minut temu 149 źrodło rozwiń
Kilka tygodni temu na devPytaniach pojawiło się pytanie “Jak motywować programistę?“. Wtedy się nie udzieliłem, ale właśnie naszły mnie refleksje poniekąd w tym temacie. Opiszę na swoim przykładzie.
There is one nice ‘feature’ of git that i found recently : creating git custom commands. It is useful, when I want to automate some repetetive tasks.
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ł...
Sztuka programowania 3782 dni, 21 godzin, 15 minut temu 37 źrodło rozwiń
W poprzednim poście - ASP.NET MVC - zabezpieczenie przed Cross-Site Request Forgery - opisałem podstawowy mechanizm zabezpieczania się przed Cross-Site Request Forgery. Ma on jednak pewne ograniczenia. Zwykle 'AntiForgeryToken' przesyłany jest tylko razem z żądaniem typu POST - raczej nie stosuje się żądań typu GET do zatwierdzania formularzy. Typowy kontroler posiada najczęściej wiele akcji POST, jeśli więc chcielibyśmy aby w naszej aplikacji wszystkie formularze były zabezpieczone przed CSRF, musieliby...
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...
Sztuka programowania 3784 dni, 17 godzin, 15 minut temu 314 źrodło rozwiń
Mads Kristensen odwalił kawał dobrej roboty tworząc Web Essentials. Jest to pierwsze narzędzie wspierające analizę JS, kompilowanie LESS, minimalizację CSS i JS i wiele innych rzeczy, które naprawdę mnie nie wkurza. I w większości przypadków działa. No właśnie, w większości. Dwa dni temu zacząłem przepisywać swój nowy projekt z CSS na LESS – by się go nauczyć, pobawić i w ogóle. Jednak z miejsca natrafiłem na problem, którego za nic nie mogłem obejść – przynajmniej do póki się nie zorientowałem, dlaczego...
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...
Sztuka programowania 3785 dni, 10 godzin, 17 minut temu 101 źrodło rozwiń
Ostatnio zetknąłem się z problemem dotyczącym wykorzystania transakcji natywnych SQL Servera z poziomu pakietu SQL Server Integration Services (SSIS). Abstrahując od tego, czy jestem zwolennikiem zaszywania kodu T-SQL w pakietach SSIS, czy nie, problem wydał mi się dobrym materiałem na wpis na blogu :-)
Bazy danych i XML 3785 dni, 10 godzin, 17 minut temu 51 źrodło rozwiń
autor: "New year. New certifications. New you." - przeczytałem wczoraj w emailu. Dlaczego ? Ano w zeszłym roku zostało wydane Visual Studio 2012 (a z nim .NET 4.5), Windows 8 z nowym App Store'm, pojawił się więc idealny moment na zmiany w dotychczasowych ścieżkach Microsoft'u. Przyjrzyjmy się więc, co się zmieniło... Nadeszła kolejna certyfikatowa rewolucja. Microsoft postanowił odejść od przyznawanego od kilku lat tytułu Microsoft Certified Professional Developer (MCPD) i powrócił do tytułu podobnego...
Jako osoba często prezentująca postanowiłem co jakiś czas dzielić się interesującym tip&trickiem usprawniającym proces prezentacji Dzisiejszy wpis będzie dotyczył prezentowania kodu, co dzieje się najczęściej w obecności Visual Studio. Problem jaki się pojawia to wielkość czcionki, którą wykorzystujemy. Na co dzień podczas pisania aplikacji pewnie mało osób wykorzystuje dużą czcionkę bo niewiele kodu zmieści się wtedy na ekranie. Jednak podczas prezentacji sytuacja ta jest zupełnie inna. Musimy zape...
autor Git jest the best – to wie chyba każdy kto czyta tego bloga. Może niekoniecznie się z tym zgadza, ale przynajmniej wie:). Wydaje mi się, że to jedyny kawałek softu, na który nigdy nie narzekałem… Aż do niedawna. Przyszło mi pracować przy wieloletnim projekcie, którego repozytorium liczone było w gigabajtach. Za pomocą Git-TFS ściągnąłem sobie historię, a tam, jak się można domyślić, cały TfuFSowy syf. Czyli na przykła...
Introduction In the company I'm currently working for, it is a common practice to use Devexpress XtraReports to create all kind of reports. Usually these reports are embedded into html page and used along with DevexpressReportViewer. However, lately I have been asked to open a report as a PDF file, without putting a viewer into a html page. 1. First approach After some digging, I created an action in controller which looks like this public void ExportToPdf() { using (MemorySt...
I think all Resharper users are familiar with snippets. Resharper's snippet basically generates a piece of code, which can be easily customised on the fly. All you have to do is to press TAB, and you can change names of auto-generated variables etc. Today, I decided to write my own snippet, which would make writing unit tests easier. In general, all my unit test methods looks like this [Test] public void MethodNameScenarioExpectedResult_Test() { //test logic goes in here } So let's writ...
autor: Ponownie wrócę do tematyki kompilowania C# w locie. Pisałem wcześniej, że potrzebowałem takiej funkcji aby użytkownicy mojej aplikacji mogli w dowolnym momencie zdefiniować własny algorytm obliczania odległości między dwoma wektorami. Po kilku próbach już wiedziałem jak to zrobić, a chwilę później miałem już zaimplementowaną pierwszą wersję rozwiązania. Przyszła pora wypróbowania nowej zabawki na prawdziwych danych. Uruchomiłem więc aplikację, napisałem krótki skrypt i wystartowałem ...
ReadOnlyCollection jest wraperem na kolekcję zabezpieczającym ją przed modyfikacjami. Nie tworzy on ponownie elementów a jedynie przechowuje oryginalną kolekcję, dzięki czemu wszelkie wykonywane bezpośrednio na niej operacje są w nim odzwierciedlane. Zasada działania ReadOnlyCollection jest bardzo prosta: jeżeli wywołana zostanie na nim metoda modyfikująca kolekcję pojawi się wyjątek, w przeciwnym wypadku ta sama metoda zostanie wywołana na oryginalnej kolekcji.
In almost every enterprise scale system there are some tree structures to be held in the database. It could be a system menu structure, an enterprise organisation structure or a user hierarchy. Lets assume that we need to model insurance agents hierarchy for insurance policies processing system. Thinking about agents as children and parents and creating such structures seems to be natural: Agents tableColumnTypeIDInt, not nullParentIDInt, nullRole/RangeSome example attribute Structure...
Bazy danych i XML 3788 dni, 20 godzin, 56 minut temu 23 źrodło rozwiń