Technologie typu WPF, czy Universal Apps aż proszą się o zastosowanie MVVM, jednak wsparcie dla tej architektury po stronie tych rozwiązań, jest umówmy się - co najwyżej średnie. Bardzo mało kontrolek posiada wbudowaną obsługę komend. I nawet jeśli się ona pojawia, to i tak nie dotyczy ona wszystkich dostępnych w kontrolce zdarzeń. Poza tym, nie ma jawnego wsparcia dla ViewModeli. Standardowo zbudowana aplikacja składa się ze stron wykorzystujących code-behind. Na szczęścia oba te problemy można w pewnym...
Sztuka programowania 2037 dni, 6 godzin, 57 minut temu 199 źrodło rozwiń
Dzisiaj chciałbym rozpocząć nowy cykl o bezpieczeństwie aplikacji webowych. Niejednokrotnie o tym pisałem już, ale były to luźno powiązane ze sobą wpisy. Od tego wpisu chciałbym to zmienić i przedstawić bardziej dogłębnie tą tematykę. Pierwsze wpisy będą stanowiły całkowite podstawy, ale mam nadzieję, że również bardziej zaawansowani programiści znajdą coś ciekawego w tym (np. wykorzystywane narzędzia). Na końcu mam zamiar przedstaw...
Semantyczny model dostarcza nam wiele informacji o kodzie, które zwykle uzyskuje się po kompilacji. Na przykład przeładowanie metod jest dużo łatwiejsze do określenia już po kompilacji. Oznacza to, że nie jest już to klasyczna, statyczna analiza kodu. Z tego względu, najpierw danych kod należy skompilować za pomocą...
Standardowy player Microsoftu (kontrolka MediaElement), z którego możemy korzystać m.in. w Universal Apps, ma wiele zalet i funkcjonalności, ale ma też niestety dwie poważne wady. Po pierwsze - nie jest do końca zgodny z MVVM. Nie mamy tutaj wsparcia dla komend, czy ViewModeli. Po drugie, jest bardzo słabo rozszerzalny. Jakakolwiek modyfikacja w większości przypadków jest bardzo trudna, a przecież przy kontrolkach tego typu, rozszerzalność, czy skalowalność to wręcz podstawa. Czy jest zatem jakieś wyjści...
Roslyn to nie tylko parsowanie kodu, ale również zarządzanie projektem\solucją za pomocą WorkspaceAPI. Pisząc różne narzędzia dla programistów, oprócz analizy kodu, zwykle chcemy mieć informacje o kontekście danego kodu – np. nazwie pliku czy projekcie w którym znajduje się dana klasa. Workspace API, jak nie trudno domyślić się, opiera się na abstrakcyjnej klasie Workspace. Zwykle jednak pracować będziemy z MSBuildWorkspace, która pozwala nam zarządzać .sln czy .csproj:MSBuildWorkspace msWorkspace = M...
W poprzednim wpisie przedstawiłem klasę CSharpSyntaxWalker – przydatną przy analizie drzewa kodu. Dzięki niej, automatycznie bez pisania kodu rekurencyjnego jesteśmy w stanie przejść przez każdy element kodu. Dzisiaj o analogicznym rozwiązaniu ale służącym do przepisywania kodu a nie tylko jego analizowania. Mechanizm działa bardzo podobnie do CSharpSyntaxWalker. Wystarczy, że stworzymy klasę dziedziczącą po CSharpSyntaxRewriter:publicclass CustomRewriter : CSharpSyntaxRewriter { publicoverride Synt...
Tworzenie instrukcji warunkowych jest czymś naturalnym w praktycznie każdym języku programowania. Trudno sobie jest wyobrazić kod źródłowy nawet najprostszej aplikacji, który byłby pozbawiony konstrukcji IF - w pewnym sensie tego rodzaju instrukcje, kontrolują przepływ sterowania. Warto wiedzieć, że w C# nasze możliwości na tym polu są jeszcze większe m.in. dzięki dyrektywom preprocesora. Dyrektywy preprocesora wpływają na to co zostanie skompilowane. Możemy np. inny fragment kodu przeznaczyć dla kompila...
Sztuka programowania 2066 dni, 4 godziny, 16 minut temu 362 źrodło rozwiń
W ostatnim poście pokazałem jak za pomocą LINQ można przeglądać drzewo kodu. Czasami jest to jednak niewygodne. Załóżmy, że piszemy konwerter z C# na jakiś inny język. W takiej sytuacji, prawdopodobnie chcemy mieć dostęp do każdego elementu kodu. Możemy to zrobić za pomocą LINQ, ale jest to mało wygodne. Musielibyśmy pisać kod rekurencyjny, który dla skomplikowanych kodów jest jak wiadomo mało wydajny, a nawet może zakończyć się wyjątkiem OutOfMemory. Do dyspozycji jednak mamy klasę CSharpSyntaxWalker. ...
Sztuka programowania 2066 dni, 4 godziny, 16 minut temu 129 źrodło rozwiń
Analiza kodu za pomocą LINQ to chyba esencja Roslyn. Bez Roslyn, kod był dla nas jak zwykły tekst (string) i w przypadku jakiejkolwiek analizy, musieliśmy sami parsować tekst i rozpoznawać odpowiednie fragmenty....
W poprzednim wpisie, w dużym skrócie przedstawiłem po co powstał Roslyn i komu może przydać się. W kilku kolejnych postach, zaprezentuję w praktyce jego najważniejsze funkcje. Zaczynami od scripting API. APi szczególnie przydatne w przypadku edytorów do gier czy bardziej zaawansowanych reguł biznesowych. Zacznijmy od klasycznego “hello world”...
O projekcie Roslyn od dawna już słychać, ale jeszcze nigdy nie miałem okazji z niego poważnie korzystać, ani wspomnieć o tym na blogu. Czym jest więc Roslyn? W skrócie pisząc jest to “compiler as service”. Roslyn dostarcza API za pomocą, którego możemy komunikować się kompilatorem. Możemy zatem pisać programy, które rozpoznają kod (C#) i mogą go dynamicznie wykonywać. Innymi słowy, dzięki Roslyn jesteśmy w stanie załadować kod w formie czystego tekstu i w pamięci analizować go już jako strukturę dany...
W architekturze WinRT możemy korzystać z dwóch bardzo przyjemnych kontrolek do prezentacji danych - ListView oraz GridView. Obie te kontrolki mają duże możliwości konfiguracyjne, posiadają sporo zdarzeń i można je również fajnie ostylować. Jednym słowem jest naprawdę dobrze;-) Naszą piękną, idealistyczną sielankę może jednak w łatwy sposób zakłócić, pewien dość prozaiczny problem, który nazywa się nadmiar danych. Tego rodzaju sytuacja zasadniczo nie ma żadnych pozytywów. Nasza aplikacja pochłonie duże il...
Sztuka programowania 2075 dni, 4 godziny, 59 minut temu 167 źrodło rozwiń
In this article we focus on sample service based on WCF (Windows Communication Foundation), as we will only try to build sample service with claims-based authentication and authorization. All technical aspects connected with security e.g. configuration, certificates, encryption, signature or CRL will be described in details in the next posts.
Architektura 2078 dni, 6 godzin, 44 minuty temu 144 źrodło rozwiń
Bardzo często tworzymy osobne usługi, które dostarczają jakieś dane. Pisząc aplikacje ASP.NET Web nierzadko chcemy korzystać z zewnętrznych usług, zamiast hostować dane w tym samym projekcie. Niestety może to spowodować problemy, jeśli chcemy skonsumować usługę w JavaScript, a należy ona do innej domeny. Załóżmy, że mamy jakąś usługę REST. Dla testów posłużyłem się http://www.mocky.io. Polecam tą stronę, można generować tam własne “mocki”. Dla tego wpisu stworzyłem mock, który zwraca następującą treść ...
Programowanie rozproszone 2082 dni, 20 godzin, 33 minuty temu 186 źrodło rozwiń
Aplikacje na telefon pełnią różne funkcje, ale z założenia często są one mobilnym odpowiednikiem stron WWW. I choć w dzisiejszych czasach coraz więcej mamy w sieci stron responsywnych, to i tak komfort pracy z dedykowanym programem wciąż często bywa znacznie wyższy. Nie oznacza to oczywiście, że strony WWW na przeglądarce telefonu są czymś złym.. czasem jest to naprawdę dobra opcja na start. Okazuje się również, że dzięki RWD możliwe jest również łatwe osadzanie pewnych fragmentów witryn bezpośrednio w a...
Mobile development 2082 dni, 20 godzin, 33 minuty temu 212 źrodło rozwiń
Have you ever written a program with such a complex algorithm that despite of using all processor cores the implementation wasn’t efficient enough? If yes, this is the moment you should consider using a more efficient device than CPU.
Sztuka programowania 2084 dni, 5 godzin, 5 minut temu 208 źrodło rozwiń
Rynek aplikacji mobilnych rozwija się niezwykle dynamicznie w ostatnich latach. Programy na telefony dotykają dzisiaj naprawdę wielu ważnych i istotnych obszarów naszego codziennego życia. Coraz częściej tego rodzaju aplikacje funkcjonują w chmurze, dzięki czemu mamy łatwy dostęp do wszystkich niezbędnych nam informacji, niezależnie od tego gdzie jesteśmy i z jakiego urządzenia aktualnie korzystamy. Wykorzystanie chmury wiąże się najczęściej z użyciem odpowiedniego API, do którego podłączają się wszystki...
Mobile development 2090 dni, 5 godzin, 58 minut temu 341 źrodło rozwiń
My motivation for writing this article is to show that even a small new feature can have impact on the overall site availability. You can try to use right technology. How to do this? The answer is as usual ‘it all depends’. What I would like to do, in this article, is not to provide the final answer, but to show you options, solutions and ideas for a given use case.
Dekorator to jeden se strukturalnych wzorców projektowych, dzięki któremu możemy wykorzystać kompozycję w alternatywie do dziedziczenia w celu rozszerzenia zachowania klasy. W przypadku dziedziczenia klasa rozszerzana jest w trakcie kompilacji w przeciwieństwie do dekoratorów, które rozszerzają klasy w trakcie działania programu. Wzorzec projektowy Dekorator pozwala na dynamiczne przydzielanie danemu obiektowi nowych zachowań. Dekoratory dają elastyczność podobną do tej, jaką daje dziedziczenie, o...
Sztuka programowania 2101 dni, 23 godziny, 29 minut temu 473 źrodło rozwiń
Ponad dwa lata temu polskim Internetem wstrząsnęła ustawa o ciasteczkach, która nakazuje właścicielom stron informować użytkowników, że na ich witrynie mogą być oni śledzeni za pomocą cookies. Denerwujące popupy i divy informujące o ciasteczkach, zaczęły wyrastać jak grzyby po deszczu. Nowa regulacja nazwała po imieniu to o czym wiedzieli wszyscy internauci - jesteśmy śledzeni. O ile jeszcze śledzenie zarobkowe może być denerwujące (ciekawe skąd cały Internet nagle wie, że szukałem przed chwilą wakacji?)...