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 4231 dni, 8 godzin, 51 minut temu 227 ź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 4231 dni, 8 godzin, 51 minut temu 65 ź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 4234 dni, 37 minut temu 172 ź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 4234 dni, 37 minut temu 149 ź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 4235 dni, 6 godzin, 29 minut temu 168 ź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 4235 dni, 6 godzin, 29 minut temu 102 ź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 4237 dni, 10 godzin, 28 minut temu 153 źrodło rozwiń
Świat się zmienia. Obecnie moc obliczeniowa nie jest takim problem jak kiedyś, co chyba najlepiej odzwierciedla pewnego rodzaju stagnacja na rynku komputerowym. Podobnie sprawa ma się z przestrzenią dyskową. Kiedy sobie przypomnę mój pierwszy komputer, w którym dysk miał 20MB, to pamiętam że miałem dylemat - instalować Windowsa 3.1, czy zainstalować więcej gier;-) Trochę inne były wtedy to czasy. Pamiętam również, że gdzieś pod koniec lat 90-siątych na dobre rozpoczęła się walka formatów do kompresji. P...
Architektura 4238 dni, 9 godzin, 27 minut temu 252 źrodło rozwiń
Kilka wpisów wcześniej pisałem, dlaczego należy unikać funkcji Suspend. Dzisiaj przyszła kolej na metodę Abort, która również jest sygnałem, że zaprojektowana architektura jest po prostu zła. Aby zrozumieć, dlaczego Abort jest tak niebezpieczny, należy poznać najpierw zasadę jego działania. Wywołując Abort, wyrzucany jest tzw. asynchroniczny wyjątek ThreadAbortException. Dlaczego asynchroniczny? Ponieważ może on zostać wstrzyknięty w “dowolne” miejsce w kodzie. Istnieją pewne zasady, kiedy dokładnie może...
Sztuka programowania 4240 dni, 3 godziny, 42 minuty temu 136 źrodło rozwiń
Czasem, gdy walczymy o jak najszybszy czas odpowiedzi naszej strony musimy optymalizować jej dość dziwne elementy. W najnowszym magazynie .Net Curry autor, Omar AL Zabir w artykule zatytułowanym "Essential it admin skills for .net developers" w jednym z punktów pokazuje jak pozbyć się dodatkowych nagłówków wysyłanych przez IIS a dodawanych czy to przez niego samego czy też ASP.NET. Idea szczytna - każdy dodatkowy bajt kosztuje nas jakiś tam ułamek czasu zarówno po stronie serwera jak i przegląd...
Long long time ago in one of the posts … I briefly described CouchDB installation process on the local machine.IrisCouch If you don’t want to configure local database you can use IrisCouch hosting. You can get free database for basic tests. I am using this database hosting for one of the projects hosted in heroku. It is free for really basic usage. Now we can play with our new toy. Let’s start with some general concepts.Where are my tables ? Quick answer there are no tables. Data is stored in a form...
Bazy danych i XML 4242 dni, 9 godzin, 23 minuty temu 112 źrodło rozwiń
Dziś będzie krótko - zetknąłem się ostatnio z tytułowym problemem (w ramach prac nad moim projektem "after working hours" - pisałem o tym poprzednio), postanowiłem więc na szybko napisać mały tutorialik jak poradzić sobie z tym zadaniem.
Ostatnio musiałem napisać autoryzację z jednym z serwisów w który używa OAuth w wersji 1 i muszę powiedzieć, że tyle przecinków ile się posypało przy tym dawno nie wydobyło się z moich ust. OAuth2 jest dość przyjemnym protokołem – da się z niego normalnie korzystać, jednak z OAuth1 tak prosto i fajnie już nie jest. Pierwszy zgrzyt na jaki natrafiłem to tak zwane podpisywanie requestów. Niby wszystko prosto, jeżeli chcemy zrobić request do http://www.flickr.com/services/oauth/request_token (plus query p...
W Visual Studio wersji Ultimate są narzędzia do analizowania architektury. Jednak są ludzie, którzy zamiast wydawać pieniądze na ultimate-a wolą iść do salonu i kupić sobie auto albo dwa. Jak jednak poradzić sobie bez diagramu warstw? Wystarczy pooglądać usingi. Single Responsibility Principle mówi, że klasa powinna robić jedną rzecz, mieć jedną odpowiedzialność. Jeśli ma jedną odpowiedzialność to nie powinna raczej grzebać we wszystkich warstwach. Wątpliwe jest aby klasa, która ma jedną ...
Sztuka programowania 4243 dni, 9 godzin, 58 minut temu 275 źrodło rozwiń