Pora po raz kolejny napisać testy dla uzyskanego kodu. Zapewne niektórzy zaczynają być znużeni tą ciągłą potrzebą pisania testów. Cóż – jest to jedyny sposób na zapewnienie odpowiedniej jakości kodu. A pisząc „odpowiedniej” mam na myśli jedynie jego poprawność. Na pocieszenie uchylę rąbka tajemnicy – nasz kod jest coraz lepszy, coraz bardziej elastyczny, a to przekłada się także na pisanie testów. W poprzednich testach udało się wykorzystać jedynie dane użyte w testach wcześniejszych. Obecnie uda się ...
Sztuka programowania 3636 dni, 6 godzin, 14 minut temu 38 źrodło rozwiń
Zgodnie z zapowiedzią z poprzedniego wpisu, dziś zaznajomimy się z funkcjonalnością "cache'owania" aplikacji - w HTML5 wprowadzone zostało do tego celu specjalne API, które w znaczny sposób ułatwia sprawę. Cache'owanie aplikacji pozwala na przetrzymywanie elementów strony www na komputerze użytkownika (oczywiście po pierwszych odwiedzinach strony). Dzięki temu możliwe jest:przeglądanie strony w trybie offlineprzyspieszenie ładowania strony - elementy które się nie zmieniły od ostatnich odwiedzin nie mus...
“Ciągły rozwój” jest, zdawałoby się, charakterystyczną cechą dla naszego zawodu. Nie tylko naszego oczywiście, ale my, programiści, szczególnie lubimy myśleć o sobie jako o tych, którzy nigdy nie stoją w miejscu i ciągle poznają nowe/lepsze techniki, rozwiązania, praktyki. Warto jednak zatrzymać się czasem na chwilę i zastanowić: czy ja sam nie odstaję od tego au...
W poprzedniej części cyklu utworzyliśmy klasę realizującą wzorzec metody szablonowej. Obecnie będziemy tworzyć klasy potomne, implementujące konkretne typy importu. Warto zauważyć, że w toku dotychczasowych rozważań – czego właściwie nie podkreśliłem – zarysował się ciekawy schemat. Wszystkie pliki tekstowe (o wartościach rozdzielonych separatorem czy o ustalonej długości) są obsługiwane tak samo – inaczej są jedynie interpretowane ich zawartości. Można skorzystać z tej obserwacji i wykorzystać ją ...
Sztuka programowania 3636 dni, 20 godzin temu 50 źrodło rozwiń
W dzisiejszym poście przechodzimy do następnego celu egzaminu MCSD 70-480. W najbliższych trzech postach zajmiemy się dostępnymi API dostępnymi w HTML5. Będą to kolejno: HTML5 Web Storage, czyli temat niniejszego posta; a także HTML5 AppCache API, oraz Geolocation API.
Refaktoryzacja – ot kolejne popularne słowo…. nie zupełnie. Pisząc software nie zawsze dokładnie wiemy jak on będzie wyglądał i co finalnie będzie robił – tzn. w danej chwili (zdefiniowanym kwancie czasu, żeby brzmieć mądrzej) zawsze wiemy co będzie robił, tylko z dalszej perspektywy mentalnej – tj. po dłuższym okresie może się okazać, że robi coś zupełnie innego niż początkowo zakładaliśmy. Oczywiście nie ma w tym nic złego, przecież wszyscy jesteśmy teraz agile jednak nie wiedząc co fina...
Jedną z ogromnych zalet programowania obiektowego jest to, że raz napisany kod możemy łatwo rozszerzyć o dowolne konstrukcje, lub stworzyć zupełnie coś nowego na jego podstawie. W tym przypadku chodzi mi głównie o kwestię dziedziczenia, która ma swoje wady i zalety. W tym przypadku bardziej chciałbym skupić się na tych pierwszych. Dziedziczenie nie zawsze jest do końca dobrym rozwiązaniem, ponieważ w C# możemy rozszerzać tylko jedną klasę (ale za to na szczęście możemy implementować dowolną ilość interf...
Architektura 3637 dni, 23 godziny, 52 minuty temu 165 źrodło rozwiń
O destruktorach pisałem już kilka razy na blogu. W wielkim skrócie – zawsze należy przemyśleć decyzje o implementacji Finalize ponieważ wiąże to się z spadkiem wydajności (obiekt może być nawet “wypromowany” do drugiej generacji GC). Czasami jednak zachodzi taka potrzeba – głównie w przypadku użycia niezarządzanych zasobów. CriticalFinalizerObject daje nam jeszcze kilka dodatkowych gwarancji. Przed przeczytaniem tego wpisu, polecam zapoznanie się z poprzednim postem o CER. Co zatem da nam dziedziczenie ...
Sztuka programowania 3638 dni, 6 godzin, 1 minutę temu 81 źrodło rozwiń
Do tej pory udało nam się zrefaktoryzować dwie metody sprowadzając je do jednej i koniec końców uczynić składową dedykowanej klasy. Pozostały jeszcze dwie: odczytująca pliki tekstowe, w których wartości mają ściśle określone położenie w linii oraz odczytująca pliki binarne o dedykowanym formacie. Przyjrzyjmy się jeszcze raz metodzie unifikującej odczyt z plików rozdzielanych dowolnym separatorem ...
Sztuka programowania 3638 dni, 18 godzin, 4 minuty temu 53 źrodło rozwiń
W zeszłym tygodniu internety obiegła wiadomość, jakich mało: Microsoft oficjalnie uznał przewspaniałość Gita! Może jednak przyjdzie kiedyś czas, gdy nie będę musiał się wykłócać ze zwolennikami TfuFSa i tłumaczyć po milion razy jak to narzędzie, a szczególnie jego utrata kontroli nad wersją, jest bardzo, bardzo złe, słabe i szkodliwe?
Kolejna cześć artykułu o wydajności w C#. Zapraszam do lektury!
Sztuka programowania 3639 dni, 4 godziny, 9 minut temu 201 źrodło rozwiń
Tak jak obiecałem, dziś kolejna część "kursu" przygotowującego do egzaminu MCSD: 70-480. W niniejszym poście, zajmiemy się wprowadzoną w CSS3, możliwością dokonywania transformacji elementów HTML. Dziś skupimy się tylko podstawowych możliwościach tego "ficzera" CSS3 (konkretnie na transformacjach 2D), ponieważ temat ten, będzie dużo dokładniej omówiony później, w części poświęconej animacjom. Większość swojego wpisu oparłem na tym co można znaleźć na stronach w3schools.com. A więc zaczynamy!Transformacj...
tl;tr; How to reset migrations in Entity Framework
Bazy danych i XML 3641 dni, 1 godzinę, 33 minuty temu 110 źrodło rozwiń
Nie, nie nawiązuje tutaj to wspaniałego meczu Polska – Irlandia gdzie Polacy pokazali po raz kolejny, że są piłkarzami… wannabe. Modern.ie to projekt ms, a, że tyczy on IE to stwierdzili, że wykupią domenę irlandzką. I tyle zależności. Kropka :)
W ostatnim poście marudziłem na management. Zwalanie na management ma tą zaletę, że zwalnia nas programistów z odpowiedzialności. To jest ICH wina, to ONI doprowadzili do takiego a nie innego stanu i tak dalej i tak dalej. Pułapką takiego zachowania jest “wymówka”. Wymówka przenosi naszą odpowiedzialność na kogoś lub coś innego. Wymówka jest świetna bo wybiela nas. Na konferencji 33 degree trafiłem ciasteczko z wróżbą o takiej treści: W życiu ma się albo wymówki albo wyniki Dlatego pora ...
Zadanie jest następujące: Na podstawie poniższego schematu (baza AdventureWorksLT) wyznaczyć wartość zamówienia. Dodać kolumny z id klienta i zamówienia (bez uwzględnienia podatku, obniżek itp). W zapytaniu wykorzystamy GroupJoin. Zapytanie to zapiszemy w dwóch postaciach LINQ2SQ: metodowej oraz SQLo podobnej...
Na początek kod: [TestClass] public class CPU_Pipelining_tests { const int DATALENGTH = 1024 * 1024 * 50; const int REPEATS = 3; ...
Kolega przeprowadzał kiedyś zdalne interview z programistą. W teorii wszystko było jak należy – ziomek interesował się zagadnieniami spoza pracy czysto zawodowej, prowadził bloga, używał Resharpera… No i właśnie przy Resharperze pojawiło się pierwsze zaskoczenie: używał go za pomocą MYSZKI! WTF? Normalnie Mouse Driven Development I...
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 9.
Tak jak obiecałem zajmiemy się teraz przetestowaniem powstałej klasy. Również tym razem wykorzystamy mechanizm automatycznych testów Visual Studio 2010. Czy możemy skorzystać z poprzedniego zestawu testów? Niespecjalnie, nie testujemy już metod, ale konkretną klasę. Poza tym – proszę zauważyć, że nie tworzymy już XML-a, zatem porównanie z plikiem zawierającym XML nie ma szans na pozytywny wynik...
Sztuka programowania 3643 dni, 19 godzin, 49 minut temu 55 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 8.
Oto nadszedł moment, aby zająć się refaktoryzacją samego importu danych. Sprawa się jednak komplikuje, albowiem fragmenty kodu odpowiedzialnego za odczyt i interpretację zawartości nie są we wszystkich metodach takie same. Ale dwie z metod są praktycznie identyczne – co stwierdziliśmy przygotowując listę funkcjonalności realizowanych przez metody. Zaczniemy więc od tych metod, być może po ich zunifikowaniu do jednej i w konsekwencji zredukowaniu liczby wszystkich metod do trzech, uda się ...
Sztuka programowania 3644 dni, 1 godzinę, 20 minut temu 63 źrodło rozwiń