Przy dużych zbiorach danych prezentowanych w kontrolce DataGridView może pojawić się problem z płynnością ich przewijania. Sposobem na wyeliminowanie tego efektu jest ustawienie właściwości DoubleBuffered na true. Jest to właściwość protected więc mamy dwie możliwości...
YUI Compressor od Yahoo! to z pewnością narzędzie dobrze znane każdemu webmasterowi, który szanuje cierpliwość użytkowników swojej witryny;-) Dotychczas ta przydatna biblioteczka kojarzyła się głównie z JAVĄ, która ostatnimi czasy nie ma zbyt dobrej prasy. Warto jednak wiedzieć, że na szczęście istnieją całkiem przyjemne alternatywy. Jedną z nich jest właśnie port biblioteki YUI Compressor dla .Net. Zasadniczo jest to nieduże rozszerzenie, ale oferujące wszystkie potrzebne opcje kompresji oraz spore moż...
Architektura 3592 dni, 2 godziny, 30 minut temu 211 źrodło rozwiń
Klasa Monitor to chyba najpopularniejszy, najłatwiejszy i często najlepszy sposób synchronizacji danych w .NET. Większość programistów używa słowa kluczowego lock zamiast bezpośrednio Monitor.Enter. W większości przypadków jest to poprawne i zdecydowanie najbardziej przejrzyste. Dzisiaj chciałbym przyjrzeć się kilku sposobom konstrukcji Monitor.Enter\MonitorExit. Pierwszy, zdecydowanie najgorszy to:Monitor.Enter(_sync); // sekcja krytyczna tutaj Monitor.Exit(_sync); W powyższym kodzie brakuje obsługi...
Sztuka programowania 3592 dni, 2 godziny, 30 minut temu 142 źrodło rozwiń
Artykuł ten tworzę z dość prostego powodu. Wraz z mijającym czasem w każdym programiście rośnie opór oraz lenistwo wobec powtarzalnych czynności wykonywanych codziennie w pracy. Stąd też szukamy sposobów na zautomatyzowanie choć części z tych zadań. PowerShell może być jednym ze sposobów na osiągnięcie tego celu. Z tego powodu warto lepiej się z nim zapoznać.
Jakiś czas temu zapowiadałem drugą część artykułu o GC. Tym razem będzie o różnych trybach GC i kiedy z jakiego należy korzystać, tak, aby aplikacja zachowywała się płynnie oraz sprawiała wrażenie, że działa w czasie rzeczywistym. Zapraszam do lektury!
Sztuka programowania 3595 dni, 3 godziny, 30 minut temu 116 źrodło rozwiń
Niedawno Microsoft wypuścił bardzo interesującą bibliotekę: CLR Memory Diagnostics (w skrócie: ClrMD). Cudeńko to daje nam do rąk niemałą władzę: możemy z jej pomocą podpiąć się z kodu pod dowolny proces .NET i odczytać z niego masę interesujących informacji (jak chociażby wszystko co chcielibyśmy wiedzieć o aktualnym stanie sterty – Heap). Gdyby tego było mało, w ten sam sposób możemy z kodu analizować crash dumpy.
Microsoft z każdą wersją wprowadza pewne nowe elementy do języka, które teoretycznie powinny poprawić możliwości języka, jak komfort pracy programisty. Od wersji .net 4.0 wprowadzono nowy typ – dynamic. Jego użycie pozwala na wykonanie czynności, które będą dopiero znane w momencie wykonania aplikacji. W dużym skrócie oznacza to, że kompilator pozwoli na wywołanie dowolnej akcji na obiekcie bez zgłoszenia błędu. Kod zostanie bez problemu skompilowany, nawet, jeśli nie istnieje metoda do której się odwołu...
Resharper to świetne narzędzie ułatwiające życie programistom pracującym z Visual Studio. Część jego bogatej funkcjonalności stanowią ...
Pewnie każdy na swojej ścieżce programistycznej spotkał się z klasą abstrakcyjną. Wrzucamy tam kod, który zdaje się być domyślną implementacją pewnej grupy klas i szkoda nam kopiować tego zachowania do każdej z nich osobna. Skoro wszystkie zachowują się podobny sposób, czasem tylko dodając coś od siebie, to warto wykorzystać dziedziczenie i napisać mniej (DRY).
Sztuka programowania 3598 dni, 2 godziny, 9 minut temu 226 źrodło rozwiń
W Gicie możemy zlecić ignorowanie zmian zachodzących w plikach na kilka różnych sposobów. Na ten temat pisałem już w poście “Git a ignorowanie plików“. Dziś skupię się na jednym z nich, a mianowicie na fladze “assume-unchanged”. Służy ona do poinstruowania Gita, aby traktował wybrane pliki, które już zostały dodane do repozytorium, jako niezmodyfikowane. Dwa przykłady zastosowania: mamy plik konfiguracyjny, który w repozy...
W ostatnim poście zajęliśmy się wprowadzeniem do TPL Dataflows. Użyliśmy ActionBlock do implementacji wzorca producent\konsument. Dzisiaj dołączymy kolejne bloki, aby pokazać na czym polega tworzenie współbieżnych algorytmów w TPL. ActionBlock przetwarzał wyłącznie dane – nie zwracał żadnego rezultatu. Innymi słowy, przyjmował parametry wejściowe ale zwracał wyłącznie void. TransformBlock implementuje zarówno ITargetBlock jak i ISourceBlock – stanowi również źródło danych. Rozważmy przykład:privatestati...
Programowanie rozproszone 3598 dni, 2 godziny, 9 minut temu 64 źrodło rozwiń
Wieczór, umowa z klientem na biurku, a my wciąż myślimy czy na pewno dobrze robimy pozwalając na zapis "aplikacja internetowa będzie działała w przeglądarce X, Y, Z”… w głowie dwie sprzeczne myśli: jest dobrze, damy radę i druga jest źle, przecież jest tyle różnic… Jeżeli budując aplikacje dla siebie czyli zamówienie wewnątrz-firmowe czy na zamówienie klienta zewnętrznego zawsze należy pomyśleć nad wpisem dodającym jakie przeglądarki i najlepiej jakie wersje będziemy wspierać i przez jaki czas po oddani...
Biblioteka TPL istnieje już od jakiegoś czasu i raczej jest znana dla większości programistów. W .NET 4.5 Microsoft poszedł jednak o kilka kroków do przodu i dostarczył tzw. TPL DataFlows. Jest on oparty oczywiście na bibliotece TPL, dostarcza jednak kilka bardzo ciekawych klas, przydatnych do modelowania współbieżnego. Czasami algorytmy składają się z kilku “bloków”, które należy ze sobą synchronizować. TPL DataFlows służy do modelowania przepływu między różnymi wątkami. We wczesnych wersjach .NET byliś...
Sztuka programowania 3600 dni, 17 godzin, 54 minuty temu 169 źrodło rozwiń
W poprzednim wpisie pokazałem kilka sposobów na wygenerowanie zbioru kolejnych liczb całkowitych. Dzisiaj zaprezentuję wykorzystanie tych danych w kilku przypadkach. Zacznijmy od przygotowania tabeli zawierającej 100 liczb, będzie ona używana w każdym z prezentowanych przykładów.
Bazy danych i XML 3600 dni, 17 godzin, 54 minuty temu 145 źrodło rozwiń
Ostatnio wspomniałem o problemach, na jakie możemy natrafić bawiąc się OAuth w wersji 1. W sieci istnieje wiele różnych providerów, skracających nasze męki przy autoryzacji, jednak wcale nie ukracają one mąk jakie musimy przejść gdy chcemy coś więcej niż tylko autoryzację. Na szczęście mały projekt RestSharp przychodzi nam na ratunek. Dzięki niemu za pomocą kilku prostych metod, możemy dodać nagłówek authorization do zapytania z odpowiednimi parametrami jak iż z automatycznym podpisywaniem zapytań. Prz...
Często podczas programowania w T-SQL pojawia się potrzeba skorzystania ze zbioru kolejnych liczb całkowitych z określonego zakresu. SQL Server nie posiada gotowej tabeli zawierającej takie dane, pozostaje opracowanie własnego rozwiązania.
Bazy danych i XML 3601 dni, 23 godziny, 47 minut temu 165 źrodło rozwiń
Pisząc testy jednostkowe dość często spodziewamy się identycznego zachowania w różnych testowanych scenariuszach. “Gdy zajdzie X, ma wydarzyć się A, B i C”. Z kolei “gdy zajdzie Y, ma wydarzyć się A, B i D”. W takich przypadkach, wykorzystując standardowe biblioteki do unit testów, mamy do wyboru kilka rozwiązań: wspólna klasa bazowa współdzielone metody “asercji” w ramach jednej klasy copy/paste testów pomiędzy klasami … pewnie jeszcze coś i...
Sztuka programowania 3601 dni, 23 godziny, 47 minut temu 100 źrodło rozwiń
SignalR to bardzo sprytna biblioteczka pozwalająca na komunikację serwer->klient w aplikacjach internetowych. Sam jeszcze nie miałem okazji pobawić się nią w praktyce, ale pewnie już wkrótce… Póki co postanowiłem rozpowszechnić informację krążącą po sieci już od jakiegoś czasu. Jose M. Aguilar, ASP.NET MVP, napisał książkę o SignalR właśnie i udostępnił ją za friko. Wystarczy wejść na stronę http://www.campusmvp.net/signalr-ebook, podać swojego maila i c...
Konwertery – krótkie klasy i jednocześnie bardzo przydatne elementy, bez których bindowanie niektórych wartości w XAMLu byłoby bardzo kłopotliwe. Mają one zastosowanie w projektach typu Winodws Phone, Silverlight oraz WPF. Praktycznie w większości tego typu projektów mnożna od razu przekleić te najważniejsze.
Serialziacja jest dobrze znanym tematem. Jakiś czas temu pisałem, jak oddelegować serializację jednego obiektu do drugiego. Pokazałem to na przykładzie wzorca singleton – w tamtym przypadku chcieliśmy oddelegować serializację do IObjectReference, który zwracał po prostu zawsze tą samą instancję. Dziś trochę inny scenariusz. Załóżmy, że w plikach, zawsze chcemy trzymać czas w UTC a nie w konkretnej strefie. Ponadto nie mamy dostępu ani do kodu źródłowego DateTime ani nie chcemy korzystać z DateTimeOffset...
Sztuka programowania 3604 dni, 3 godziny, 45 minut temu 152 źrodło rozwiń