piątek, 21 grudnia 2007

WPF: DIGGING DEEPER - post długi, dłuuuugi !

Ostatnio z kolegami bawiliśmy się w zgadywanie zagadek z soków "Tarczyn", więc zagadkowa atmosfera udzieliła mi się na dobre i postanowiłem również na swoim blogu od czasu do czasu ją wykorzystywać, by nie było monotonnie. Poniżej pierwsza partia różnych problemów i zagadnień z WPF, które sformułowałem dla odmiany w postaci pytań (a dlaczego tak, a dlaczego by nie? o gustach nie dyskutuje sie). Źródło odpowiedzi na nie wszystkie ujawnię w jednym z następnych postów.

1. Różnice w wykonywaniu aplikacji WPF na Windows Vista a Windows XP/2003
2. Jakie metody faktycznie są wywoływane, gdy ustawiamy w XAML dependency property?
3. Jakie są piorytety przy ustalaniu wartości dependency property?
4. Istota "działania" attached properties
5. Co to są komendy i jakie komendy są wbudowane w TextBox?
6. Czy zawartością Tooltip-a musi być tekst?
7. Czy hostowanego HTML-a w kontrolce Frame można obrócić?
8. Co TextBox w WPF zaczerpnął z MS Word?
9. Zasadnicza różnica między LayoutTransform a RenderTransform
10. Czy wszystkie elementy FrameworkElement wspierają transformacje?
11. Czy Grid może sam pilnować, aby dwie kolumny miały zawsze taką samą szerokość, nawet gdy użytkownik będzie jedną z nich zmieniać?
12. Co się stanie jak WrapPanel umieścimy w ViewBox?
13. Jak tworzymy w Visual Studio aplikację WPF standalone, to gdzie ukryła się metoda Main?
14. Trzy sposoby nawigowania w aplikacji WPF
15. Która z kombinacji przejścia WPF->WPF, WPF->HTML, HTML->HTML, HTML->WPF nie powoduje odnotowania w dzienniku nawigacji?
16. Jaki jest związek między PageFunction a Page?
17. Czy w WPF-ie możemy bezpośrednio korzystać z Task Dialog i Aero Glass?
18. Jaka kombinacja wartości propercji Window: AllowsTransparency, WindowStyle i Background pozwoli stworzyć nam okno o dowolnym kształcie zamiast prostokątnego?
19. Jaki proces odpala XBAP?
20. Dwa sposoby przekazywania parametrów do XBAP
21. W jakim elemencie HTML możemy hostować luźny XAML?
22. Do czego może być przydatny LocBaml?
23. Czy element z logicznych zasobów użyty w wielu miejscach, może w każdym z nich wystąpić w innej instancji?
24. W jakiej kolejności (w drzewie logicznym, aplikacji, systemie) poszukiwany jest zasób o danym kluczu?
25. Co to jest PropertyPath i gdzie znajduje zastosowanie?
26. W przypadku jakiego bindingu 1 czy 2-kierunkowego nie zadziała odłączenie bindingu przy jawnym ustawieniu propercji?
27. Czy możemy zrobić binding do swojej propercji i propercji rodzica?
28. Co jest niezwykłego w kolekcji ObservableCollection?
29. Czym różnią się propercje Items i ItemsSource w ListBox? Czy można z nich jednocześnie korzystać?
30. Czy źródłem bindingu może być propercja niebędąca dependency property?
31. Czy celem bindingu może być propercja niebędąca dependency property?
32. Do czego może być przydatna w ListBox propercja DisplayMemberPath?
34. Co może ułatwić developerowi propercja IsSynchronizedWithCurrentItem w przypadku korzystania z kilku ListBox-ów i tego samego źródła bindingu?
35. Sytuacja z pytania 34: Jeśli wszystkie kontrolki ListBox są z wielokrotnym wyborem, to gdy w pierwszej z nich wybierzemy dwa elementy, to czy również dwa elementy zostaną automatycznie wybrane w pozostałych listach?

CDN (ciąg dalszy nastąpi?)

czwartek, 13 grudnia 2007

ASP.NET 3.5 Extensions Preview - z bliska (2)

Pozostałe nowości może nie są tak rewolucyjne, ale z pewnością przydatne i ułatwiające życie:

ASP.NET AJAX - dodana możliwość tworzenia punktów historii w przeglądarce po asynchronicznym wywołaniu, zarządzanie historią po stronie serwera i klienta

ASP.NET Silverlight - dwie kontrolki:
- MediaPlayer - player z predefiniowanym interfejsem w XAML i code-behind w JavaScript (z szeroką możliwością customizacji)
- Silverlight - do łatwego osadzania XAML-a z JavaScriptem lub kodem zarządzanym

środa, 12 grudnia 2007

ASP.NET 3.5 Extensions Preview - z bliska

Pod adresem http://quickstarts.asp.net/3-5-extensions/ jest dostępna dokumentacja do ASP.NET 3.5 Extensions Preview. Całkiem przystępna. Pierwsze wrażenia po lekturze trzech pierwszych rozdziałów ...

ADO.NET Data Services (dawniej codename "ASTORIA") - specjalizowane usługi WCF pozwalające na dostęp do danych z encji, z przekazywaniem parametrów w adresach URL (np. http://site/data.svc/Customers('ALFKI')/Orders - wszystkie zamówienia klienta o id 'ALFKI'). Protokołem jest zwykły HTTP, a dane są przesyłane w formacie JSON lub AtomPub. Z usług tych można korzystać z poziomu JavaScript (ASP.NET AJAX) lub zarządzanego klienta.

ASP.NET Dynamic Data - równie ciekawy feature, pozwala na dynamiczne generowanie stron na podstawie metadanych z bazy. Na podstawie typów bazodanowych generowane są tabelki z odpowiednimi kontrolkami (do widoku i edycji) i walidatorami. Oczywiście bardzo wiele szablonów można customizować ...

ASP.NET MVC - gwóźdź programu, praktyczna realizacja znanego wszystkim ze studiów wzorca projektowego model-view-controller. Modelem tutaj jest klasa komunikująca się ze źródłem danych, widokiem - moduł renderujący interfejs usera w HTML (strony ASP.NET), a kontrolerem klasa dziedzicząca po klasie Controller z akcjami (metody z atrybutem [ControllerAction]). Każda interakcja jest przychwytywana przez kontroler, każdy URL zapytania jest mapowany na klasę kontrolera i daną akcję (reguły są umieszczone w tablicy routingu). W tym procesie istotną rolę odgrywa UrlRoutingModule (moduł HTTP) i MvcHandler (handler HTTP). W akcji kontrolera można przekazać dane do widoku. Stosując podejście z MVC zdecydowanie łatwiej testować aplikację. Dlaczego dopiero teraz MVC pojawia się w ASP.NET?

c. d. n

wtorek, 11 grudnia 2007

Microsoft zasypuje wciąż ...

Microsoft zasypuje wciąż nowymi frameworkami i rozszerzeniami. Właśnie ukazała się wstępna wersja rozszerzeń do ASP.NET 3.5 - jest dostępna pod adresem http://asp.net/downloads/3.5-extensions/. W skład ASP.NET 3.5 Extensions wchodzą następujące elementy:
- ASP.NET AJAX Improvements
- ASP.NET MVC
- ASP.NET Dynamic Data Support
- ASP.NET Silverlight Support
- ADO.NET Data Services

Tak więc nie można się nudzić ...

poniedziałek, 10 grudnia 2007

WCF 3.5 i WPF 3.5 - skok w bok

W weekend zrobiłem jednak skok w bok i poczytałem sobie dokładniej o zmianach w WCF i WPF w .NET 3.5.

Wprowadzone do WCF nowe elementy takie jak workflow services, durable services, web programming model, wcf syndication (Atom 1.0, RSS 2.0), integracja z ASP.NET AJAX czy obsługa nowych specyfikacji WS-* z pewnością zasługują na poświęcenie im należytej uwagi.

Również w WPF spotkamy kilka nowych ciekawostek, z czego najbardziej zainteresowała mnie możliwość tworzenia wtyczek (add-ins). Niestety nic nie jest idealne, istnieją pewne ograniczenia dla WPF w tych wtyczkach, wynikające z przyjętej architektury. Niemniej jednak sprawą na pewno warto się zainteresować.

piątek, 7 grudnia 2007

ADO.NET Entity Framework Beta 3 na Mikołaja

Dziś grudnia dnia szóstego Microsoft zrobił prezent i udostępnił ADO.NET Entity Framework w wersji beta 3 wraz z narzędziami dla Visual Studio 2008, dokumentacją i przykładami (oryginalne ogłoszenie znajduje się tu). No cóż, w takim razie w praktyce przyjrzę się już nowej wersji ...

czwartek, 6 grudnia 2007

LINQ: oddalenie

Książka Introducing Microsoft LINQ napisana przez P. Pialorsi i M. Russo niewątpliwie stanowi dobre wprowadzenie do technologii LINQ (na bazie wydania beta). Jedynie pierwszy rozdział IMHO powinien być dedykowany nowym elementom C# 3.0 i VB 9.0. Po zapoznaniu się z nimi każde zapytanie LINQ nabiera od razu sensu.

Następne rozdziały to oczywiście opis różnych odmian LINQ:
- LINQ to Objects
- LINQ to ADO.NET (LINQ to SQL, LINQ to DataSet, LINQ to Entities)
- LINQ to XML (z wspomnieniem o LINQ to XSD)
a także ADO.NET Entity Framework.

Poszczególne rodzaje LINQ wydają się całkiem dokładnie przedstawione, w tym różne pułapki i zachowania mające wpływ na wydajność. IMHO jedynie opis ADO.NET Entity Framework i LINQ to Entities wydaje się miejscami trochę ogólny.

No cóż, trzeba się tym wszystkim jeszcze trochę więcej "pobawić" w praktyce, ale to uczynię posługując się już finalną wersją Visual Studio 2008 i .NET 3.5. Może wyjdą przy okazji jakieś różnice, więc będzie ciekawiej -:)

niedziela, 2 grudnia 2007

LINQ: VB.NET 9 lepszy niż C# 3.0 ?

C# zawsze był traktowany jako flagowy język platformy .NET. Jednak w przypadku LINQ to Visual Basic w wersji 9 zawiera więcej innowacji w zakresie składni. Sprawa dotyczy LINQ to XML. Otóż w najnowszym Visual Basic możemy posługiwać się danymi XML zapisanymi w ... postaci XML (patrz kod powyżej).

W weźle drugiego albumu możemy zaobserwować podstawianie wartości zmiennej t, XML jest budowany w czasie wykonania. Wizualnie kojarzy mi się to z osadzaniem kodu na stronach ASP.NET bez code-behind.

W przedstawionym kodzie widzimy wybranie wszystkich wezłów potomnych Album za pomocą nawiasów "< >" oraz atrybutu z pojedynczego węzła przy użyciu @. Czyż nie jest to fajne udogodnienie?

Również tutaj nie ma żadnych cudów -:) Kompilator zamienia XML na odpowiednie obiekty XDocument, XElement i XAttribute, a "< >" i @ odpowiednio na wywołania metod Elements i Attribute. Lecz czy właśnie rzeczy osiągnięte takimi prostymi sposobami nie są piękne?

sobota, 1 grudnia 2007

Druga część mojego artykułu o Cardspace na codeguru.pl

Na portalu codeguru.pl został zamieszczony artykuł mojego autorstwa Wprowadzenie do Cardspace – cz.II. Zachęcam do jego przeczytania.

Silverlight: gra niczym "Milionerzy"

...
Nie będzie już Silverlight 1.1
...
Ponieważ będzie ... Silverlight 2.0 !!!


Tytuł jednego z newsów na jednym z portali był tak sformułowany, że zapowiadał niebyt Silverlight 1.1. Zanim przyczytałem treść newsa pomyślałem, że to może koniec rozwoju tej technologii. Na szczęście wszystko się wyjaśniło i będziemy mieć od razu Silverlight 2.0 (sytuacja dla mnie zupełnie jak swego czasu w "Milionerach" Urbańskiego - sic!). Zmiana numeru wersji wydaje się sensowna, bo w następnym wydaniu planowane jest wiele nowych "features". Publiczna beta ma się ukazać w pierwszym kwartale 2008 i ma zawierać:
- WPF UI Framework: rozszerzalne kontrolki, zarządzanie layout'em, 2-way binding, wsparcie dla szablonów i skórek (ma być zachowana kompatybilność z podzbiorem WPF 3.5)
- nowe kontrolki: typowe znane z formularzy (textbox, checkbox, radiobutton, itd), zarządzające layout'em (StackPanel, Grid, itd), o częstej funkcjonalności (TabControl, Slider, ScrollViewer, ProgressBar, itd), do obsługi danych (DataGrid, itd)
- bogatą komunikację sieciową: REST, POX, RSS, WS-*, wsparcie dla dostępu cross domain
- bogatą bibliotekę klas: klasy podstawowe (kolekcje, IO, generyki, wątki, globalizacja, XML, local storage, itd), LINQ for XML i integracja z HTML DOM API

Spośród wymienionych elementów, najbardziej się cieszę z kontrolek (do tej pory prawie ich nie było!), paneli, gridów oraz szablonów i skórek. To jest to czego wyraźnie brakowało w dotychczasowych wersjach Silverlight, w tym 1.1 Alpha. Dzięki kontrolkom Silverlight będzie użyteczny do budowy formatek w aplikacjach o biznesowej funkcjonalności, dla różnych przeglądarek i bez potrzeby instalowania frameworka przez klientów. I będzie to - jak się wydaje - znacznie lepsza opcja od dotychczasowych rozwiązań Microsoftu w zakresie "smart client" (stare niebezpieczne ActiveX, zarządzane kontrolki Windows Forms .NET hostowane w IE i wymagające instalacji frameworka po stronie klienta, WPF XBAP hostowane w IE i Firefox (od .NET 3.5) - jednak wciąż wymagające frameworka u klienta)

piątek, 30 listopada 2007

Cardspace 3.5 - obsługa specyfikacji WS-SX

W codeguru.pl naprawiono upload plików, więc zfinalizowałem prace nad drugą częścią artykułu o Cardspace. W międzyczasie został wydany .NET 3.5 z Visual Studio 2008 i pojawiły się też nowe informacje o samym Cardspace 3.5.

Dla odmiany cytuję dziś samego siebie z pracy swojej. W poniższych kawałkach starałem się streścić w dużym skrócie nowe infomacje -:)

Jedną z ważniejszych zmian w Cardspace w wersji 3.5 jest wprowadzenie obsługi nowych standartów WS-SX (ang. Web Services Secure Exchange) opracowanych przez OASIS . Obecnie obok starej specyfikacji WS-Trust (Trust10) możemy korzystać z jej nowej wersji WS-SX (Trust13). Dotyczy to m.in wystawcy tożsamości IP i serwisu RP. Na podstawie otrzymanej polityki Cardspace ustala wersję specyfikacji. Gdy budujemy STS w technologii WCF, należy zastosować nowy binding WS2007FederationHttpBinding lub CustomBinding z odpowiednimi ustawieniami. Sposób przetwarzania komunikatów RST/RSTR również ulega pewnym zmianom. W przypadku web serwisu RP budowanego w WCF użyteczne są bindingi: Ws2007HttpBinding, WS2007FederationHttpBinding lub CustomBinding.

Microsoft udostępnił również witrynę http://www.federatedidentity.net/, na której możemy przetestować uwierzytelnianie za pomocą kart zarządzanych.

czwartek, 29 listopada 2007

LINQ: sztuczki składniowe C# 3.0 (2)

Kontynuacja poprzedniego postu ...

4. Wyrażenia inicjalizujące obiekty. Zamiast pisać:

Address a = new Address();
a.City = "Cracow";
a.Street = "Nowa";

zapiszmy to krócej (a kompilator wykona za nas resztę):

Address a = new Address() { City = "Cracow , Street = "Nowa" };

5. Typy anonimowe - w wyrażeniu inicjalizującym nie podajemy ... nazwy klasy:

var a = new { City = "Cracow , Street = "Nowa" };

6. Wyrażenia pytające - ta sztuczka powstaje jako ... uproszczenie zapisu wielokrotnego złożenia wyżej wymienionych sztuczek. Zapytania dotyczą wszystkich obiektów implementujących generyczny interfejs IEnumerable. Przykładowo może wyglądać to tak:

List list = new List {
new Point {M = "AAA", K = "BBB"},
new Point {M = "CCC", K = "DDD"},
new Point {M = "EEE", K = "FFF"},
};

var result = from c in list
where (c.M == "AAA" || c.M == "EEE")
select new { c.K };


Kompilator zamienia to na postać:

var result = list
.Where(c => (c.M == "AAA" || c.M == "EEE"))
.Select(c => new { c.K });


Czyli select to nic innego jak ciąg wywołań metod rozszerzających dla generycznego typu IEnumerable (zdefiniowanych w odpowiedniej przestrzeni nazw LinQ), których argumentami są delegacje zapisane w postaci wyrażeń lambda, a wynik wyrażony jest za pomocą anonimowego typu.

Korzystając również z var w prosty bardzo sposób możemy iterować wynik zapytania, np:

foreach (var s in result)
{
Console.WriteLine(s.K);
}

LINQ: sztuczki składniowe C# 3.0 (1)

Dziś dla odmiany postanowiłem zacząć porządnie zgłębiać wiedzę na temat LINQ - wszak to kluczowy element .NET 3.5. Poczytałem trochę i pobawiłem się w Visual Studio. W oglądanych wcześniej przeze mnie przykładach / prezentacjach (z wyjątkiem jednej) zasadniczo brakowało mi głębszego wyjaśnienia dlaczego składnia zapytań taka a nie inna. Trzeba to powiedzieć, że po dokładnym zapoznaniu się z wprowadzonymi "cukierkami składniowymi" C# 3.0 i ich przetwarzaniem przez kompilator od razu lepiej mi się patrzy na te zapytania (w VB 9.0 jest podobnie, choć są pewne różnice, niektórych rzeczy więcej a innych mniej w stosunku do C#). W sumie nie ma w tym wszystkim magii... Jakie to sztuczki? Oto one - w skrócie:

1. Wnioskowanie typów lokalnych zmiennych (local type inference) - nie tracimy tutaj silnego typowania, kompilator na podstawie wyrażenia inicjującego, wstawia odpowiedni typ dla zmiennej lokalnej. Dla klasy Address z propercjami City i Street wygląda to tak:

var a = new Address();
a.City = "Cracow";
a.Street = "Nowa";

2. Wyrażenia lambda - upraszczają składnię metod anonimowych wprowadzonych z C# 2.0, gdzie można było definiować delegację w stylu:

delegate( int a, int b ) { return a + b; }

Teraz możemy uprocić to do postaci:

(int a, int b ) => { return a + b; } czy też
(a, b) => a + b

3. Metody rozszerzające (Extension Methods) - są odpowiedzią na zagadkę: "W jaki sposób dodać nowe publiczne metody do istniejącej już klasy bez dziedziczenia i rekompilacji?" W zasadzie jest to przekombinowana sztuczka składniowa, bo nie jest to cud -:). W klasie statycznej definiujemy publiczną statyczną metodę, której pierwszy argument jest typu, który chcemy rozszerzyć. Stawiamy przed nim słowo this:

public static class MyExtensions
{
public static bool IsElDupa(this string s)
{
return s != "ElDupa";
}
}

Po takiej definicji zamiast pisać:

string str = "test";
bool b = MyExtensions.IsElDupa(str);

możemy zapisać to tak:

string str = "test";
bool b = str.IsElDupa();

Przy czym w tak zdefiniowanej metodzie możemy odwoływać się tylko do publicznych składowych klasy.

ciąg dalszy nastąpi ...

środa, 28 listopada 2007

ASP.NET 3.5 - ASP.NET AJAX & WCF

W ASP.NET 3.5 można wywoływać serwisy WCF z poziomu klienta JavaScript (JSON zamiast SOAP). W MSDN dostępna jest dokumentacja na ten temat z przykładami: Web Services in ASP.NET AJAX / Exposing Web Services to Client Script. Na bazie zawartych tam informacji zbudowałem sobie praktyczny przykład. Podsumowując, do udostępnienia serwisu WCF dla klienta JS, trzeba:
- dodać do serwisu atrybut AspNetCompatibilityRequirements
- w konfiguracji zdefiniować zachowania: dla endpointa z elementem enableWebScript i dla serwisu z dostępem do metadanych httpGetEnabled oraz webHttpBinding,
- w elemencie serviceHostingEnvironment ustawić atrybut aspNetCompatibilityEnabled na true.

Jeszcze ze dwa słowa o działaniu. Na stronce generowana jest linijka z adresem do generowanego kodu JS proxy (na podstawie podanej przez nas referencji do serwisu w obiekcie ScriptManager). Na stronce w swojej funkcji JS tworzymy instancję proxy (interfejsu) i wywołujemy jego metody.

ASP.NET AJAX - zabawa?

Otóż pozwoliłem sobie sprawdzić w praktyce co poniektóre zagadniernia z ASP.NET AJAX - na razie w wersji 1.0. Metody statyczne statyczne i webserwisy AJAX faktycznie wywołują się z JavaScriptu, updatePanel robi to co ma robić, a kontrolki z toolkita zachowują się tak jak się miały zachowywać. Przy czym w ostatniej wersji toolkita zauważyłem dodatkowo extendery: SlideShow (jak się łatwo domyślić - wyświetla obrazki zmieniając je co jakiś czas) oraz ListSearch (pozwalający wyszukiwać elementy w listach).

wtorek, 27 listopada 2007

ASP.NET AJAX czas zacząć ...

Przyglądając się Silverlightowi, dobrze również zapoznać się z rozszerzeniami AJAX w ASP.NET. Pozwoli to mieć lepsze rozeznanie w aktualnym stosie technologii, jakie Microsoft oferuje do budowy aplikacji webowych.

Książka Dino Esposito Introducing Microsoft ASP.NET AJAX stanowi dość dobry przegląd możliwości ASP.NET AJAX 1.0 (samodzielny framework będący rozszerzeniem ASP.NET 2.0), przynajmniej na początek. Co prawda obecnie mamy już nowszą wersję AJAX-a, zintegrowaną z ASP.NET 3.5, jednak stosunkowo niewielkie powinny być różnice między nimi (m.in w 3.5 dołożono możliwość korzystania z serwisów WCF z poziomu klienta JavaScript). Przynajmniej od czegoś trzeba zacząć ...

Patrząc na AJAX-a w wydaniu MS można wyróżnić w nim kilka zagadnień:
- Microsoft AJAX library - biblioteka ułatwiająca pisanie skryptów
- ScriptManager - podstawa wszystkiego
- częściowe renderowanie stron, m.in UpdatePanel, triggery, Timer, UpdateProgress
- AJAX Control Toolkit - pobierany oddzielnie, rozwijany razem ze społecznością, zestaw różnych zachowań do kontrolek tzw. extenderów (różne bajery, np. animacje, przesuwanie, cienie, wyskakujące okienka; ulepszone kontrolki o bardziej wypaśnych właściwościach np. textbox z podpowiedziami czy suwak) + kilka dodatkowych kontrolek
- korzystanie w JavaScript z usług ASP.NET AJAX WebService w obrębie hostującej je aplikacji lub wywoływanie statycznych metod z code-behind w obrębie danej strony
- ASP.NET Futures - ewoluacyjny zbiór rozszerzeń do ASP.NET

poniedziałek, 26 listopada 2007

Article prohibition -:(

Z przyczyn ode mnie niezależnych nie mogę od kilkunastu dni już opublikować drugiej części artykułu o Cardspace na portalu codeguru.pl z prozaicznej przyczyny: przestał działać tam mechanizm do uploadu obrazków, które w moim przypadku stanowią integralną część całej kompozycji.

niedziela, 25 listopada 2007

wtorek, 20 listopada 2007

Visual Studio 2008 Release

W zasobach MSDN pojawiła się finalna wersja Visual Studio 2008 - fakt godny odnotowania

poniedziałek, 19 listopada 2007

Silverlight - esencja i nowa wersja SDK

Ostatnio przeczytałem książkę Essential Silverlight autorstwa Christiana Wenz'a. Zawarty jest w niej opis Silverlight 1.0 w wersji release oraz krótki opis - aktualnej wciąż - wersji 1.1 Alpha z września roku tego. W porównaniu z dostepną dokumentacją i przykładami książka może nie zaskakuje, ale zbiera wszystkie informacje w sensowną, uporządkowaną całość.

Skoro już pisze dziś posta o Silverlight, to może warto dodać, że 16 listopada ukazała się nowa wersja SDK do Silverlight 1.0

wtorek, 6 listopada 2007

Cardspace 3.5 c.d.n - post mniej popularny

W cieniu prasowych doniesień o planowanych premierach, twórcy Cardspace niestrudzenie dostarczają nowych informacji na temat tej technologii w .NET 3.5.

Najważniejszą informację stanowi fakt, że aktualizacja przeglądarki Internet Explorer - pozwalająca korzystać z Cardspace na stronach Web bez SSL - jest już dostępna. Można ją pobrać z biuletynu bezpieczeństwa lub w ramach Windows Update (Cumulative Security Update for Internet Explorer 7)

Jeśli chodzi o nową funkcjonalność, to należy wspomnieć o możliwości umieszczenia przez wystawców tożsamości w pliku .crd dodatkowych informacji o sobie np. danych do kontaktu. Takie informacje nie są do niczego wykorzystywane, jedynie są wyświetlane użytkownikowi. Zapisuje się je w postaci listy typu nazwa-wartość (maksymalna długość nazw pól i ich wartości – 255 znaków, maksymalna ilość par – 20)

.NET 3.5 i VS 2008 tuż tuż - post mało oryginalny

Z pewnością informacja ta nie jest bardzo odkrywcza, niemniej uznałem ją za wartą do odnotowania za portalami z branży:

"Visual Studio 2008 oraz .Net Framework 3.5 zostaną wydane jeszcze w tym miesiącu" (TechEd 2007, Barcelona)

Powyższy rysunek pozwoliłem sobie "pożyczyć" z plakatu ze strony Microsoftu. Patrząc na niego naszła mnie pewna refleksja... Jak widać .NET rozrasta się w bardzo szybkim tempie i zaczyna się składać z wielu technologii z wydzielonymi frameworkami...
"Przyrosty" pomiędzy wersją 2 i 3 oraz 3 i 3.5 są znacznie większe od "przyrostu" między wersją 1.1 a 2.0. Powstaje pytanie, czy w niedalekiej przyszłości ogólnikowe stwierdzenie, że ktoś "zna .NET-a / C#" będzie miało sens.

poniedziałek, 29 października 2007

Debiut na codeguru.pl

W pewnym momencie postanowiłem zacząć dzielić się swoją wiedzą z innymi i "przelewać" ją w formę ogólnodostępnych publikacji. A dlaczego nie ? Czyż to nie fajnie poszerzać swoją wiedzę na temat nowych technologii i udostępniać zdobyte informacje szerszej publice?

Na portalu codeguru.pl została opublikowana pierwsza część mojego artykułu "Wprowadzenie do Cardspace"

piątek, 19 października 2007

Cardspace .NET 3.5 - "user experience" (2)

Znów kolejna porcja informacji o ulepszonym interfejsie użytkownika w Cardspace w .NET 3.5 na blogu twórców. Z jednej strony interfejs ma ulec "odchudzeniu", by prezentować jedynie potrzebne okna i informacje. Z drugiej strony zostaną dodane niektóre opcje, by usprawnić korzystanie z selektora kart.
A teraz już konkretnie do rzeczy:
- okno "Out of Box Experience" zostanie usunięte, jako niewiele wnoszące
- zmianie ulegnie okno do tworzenia/edycji karty, gdy użytkownik chce skorzystać z usługi wybranego RP. Użytkownikowi zostaną pokazane do uzupełnienia tylko wymagane pola, a pola opcjonalne będą domyślnie nieaktywne (można je włączyć checkboxem). Zostanie dodany też przycisk "Send", by od razu po stworzeniu karty można było ją wysłać (obecnie trzeba ją najpierw zapisać)
- jeśli żadna z kart nie spełnia wymogów polityki RP, wyświetlenie możliwości utworzenia nowej karty bądź instalacji zarządzanej (obecnie albo pojawia się okienko bez kart albo z wyszarzonymi wszystkimi kartami)
- jeśli RP wymaga karty osobistej i żadna karta użytkownika nie spełnia wymagań, to karta osobista z niepełnym zakresem danych zostanie podświetlona z adnotacją, że trzeba ją uzupełnić (obecnie wszystkie karty są wyszarzane)

wtorek, 9 października 2007

Cardspace 3.5 - nowe informacje

Na blogu twórców Cardspace zostały umieszczone nowe informacje. Wraz z .NET 3.5 otrzymamy możliwość wyświetlania użytkownikowi własnych informacji o błędach zwracanych przez wystawcę tożsamości (np. można umieścić tam poradę i dane kontaktowe supportu).

czwartek, 4 października 2007

Cardspace 3.5 - zmiany w "user experience"

Twórcy Cardspace jak na razie dotrzymują słowa i w swoim blogu zamieszczają nowe informacje na temat zmian w .NET 3.5.

Modyfikacji wizualnej ulegnie okno dialogowe, które jest wyświetlane, gdy użytkownik chce nawiązać komunikację z daną witryną po raz pierwszy. Informacje o podmiocie będą teraz prezentowane w trzech trybach :
- certyfikatu Extended Validation (EV) SSL (kolor tła zielony i kłódka, na zdjęciu)
- zwyczajnego certyfikatu SSL (kłódka, informacja co jest, a co nie jest weryfikowane)
- bez certyfikatu (żółta tarcza z wykrzyknikiem, informacja o braku weryfikacji)

Jak pamiętamy, trzeci tryb zostanie dodany wraz .NET 3.5

środa, 3 października 2007

Cardspace - czy jednak takie wspaniałe?

Badając w praktyce możliwości Cardspace można odnieść wrażenie, że przynajmniej część implementacji w przykładach MS powinna wchodzić w zakres frameworka lub jego narzędzi. Nie za bardzo mogę zgodzić się z tezą, że technologia nie wymaga dużego wkładu programisty. Owszem zintegrowanie ze stroną HTML czy klientem WCF może nie musi być pracochłonne, ale już stworzenie pełnego systemu wymaga napisania wcale niemałej ilości kodu. Wydaje się, że przetwarzanie tokenu na stronie ASP.NET, generowanie kart zarządzanych (przykład MS to w zasadzie narzędzie z linii komend czytające parametry karty z plików konfiguracyjnych .ini), budowanie STS-a mogłoby zostać jeszcze bardziej uproszczone (przykład MS będący prostym STS-em wystarczy do eksperymentów, ale nie obejmuje wszystkich możliwości).

Konieczność konfigurowania m.in certyfikatów w magazynie, certyfikatów z SSL-em, praw odczytu klucza prywatnego, domen (w Windows Vista ponadto uprawnień do hostowania pod adresem o danej masce) powoduje, że uzyskiwanie tożsamości za pomocą karty może nie działać z różnych powodów. Do swoich przykładów MS porobił dość złożone skrypty konfiguracyjne, co trochę ratuje sprawę -:)

Korzystanie z kart zarządzanych wymaga również pewnego zakresu wiedzy i praktyki:
- karty wymagające karty osobistej: PPID nie jest zawsze ten sam, zależy od klucza publicznego bądź danych RP. Tak więc PPID należy odczytać na stronie legitymującej się takim certyfikatem jak wystawca tożsamości.
- karty wymagające certyfikatu X.509: certyfikat powinien być zainstalowany w gałęzi Current User/ Personal (jeśli nie wkładamy karty inteligentnej do czytnika)
- karty wymagające hasła - tu po prostu wpisujemy hasło
- karty wymagające Kerberosa - nic się nie podaje (MS w przykładowym STS-ie tego przypadku nie uwzględnia)

Do Cardspace nie ma zbyt wiele przykładów. Np. nie znalazłem przykładu MS z WCF i kartami zarządzanymi (wszyscy podają przykłady na WCF z kartami osobistymi i karty zarządzane ze stroną WWW). Próbowałem uzyskiwać token do serwisu WCF z przykładowego STS-a. Na blogu Martin'a Parry jest parę wskazówek. Niestety poza plikiem konfiguracyjnym serwisu kod projektu nie został tam udostępniony. W rozwiązaniu problemu posunąłem się jednak krok do przodu: STS parsuje token RST i generuje token RSTR. Autor bloga daje cenną wskazówkę: przykładowy STS akceptuje tylko klucze asymetryczne (w innym przypadku nie może sparsować przychodzącego tokenu, czego doświadczyłem na własnej skórze - ustaliłem to po zdebugowaniu STS-a). Jednak przy próbie wysłania przez STS tokenu do klienta, ten ostatni się wykrzacza. W logach klienta WCF można znaleźć info: At least one security token in the message could not be validated. Po wielu próbach skonfigurowania klienta WCF (przynajmniej na razie) poddałem się -:(( Jakby ktoś jednak znalazł gdzieś w Internecie działający przykład lub wiedział jak to skonfigurować, to proszę o kontakt

czwartek, 27 września 2007

Cardspace - Windows Live ID Beta + zmiany w .NET 3.5

Ostatnio dosyć intensywnie zgłębiam swoją wiedzę na temat Cardspace. Z czterech nowych elementów .NET 3.0 Cardspace wydaje się trochę stać w cieniu WPF, WCF i WF, a jest to bardzo interesujące zagadnienie -:)

Całkiem niedawno Microsoft udostępnił w wersji beta możliwość powiązania swojego Windows LiveID z kartą. W tym celu trzeba wejść na stronę testową.

Również niedawno twórcy Cardspace założyli bloga http://blogs.msdn.com/card/, w którym będą opisywać zmiany jakie wprowadzą w .NET 3.5. Zmiany zajdą również w elemencie icardie.dll (module IE7 odpowiedzialnym za komunikację przeglądarki z Cardspace), którego nowa wersja zostanie udostępniona wraz z Windows Vista SP1 i uaktualnieniem IE7. Na razie najważniejszą zmianą w stosunku do ostatniego wydania Cardspace jest możliwość współpracy ze stronami Web wymagającymi tożsamości za pomocą protokołu http. Tak więc strona z https i SSL przestaje być ograniczeniem Cardspace przy obsłudze witryn internetowych. Złagodzenie tej restrykcji pozwoli zwiększyć zakres zastosowań omawianej technologii.

poniedziałek, 17 września 2007

Sejmik Młodych Informatyków - III część tryptyku






W dniach od 13-15 września miałem przyjemność uczestniczenia w konferencji naukowej Sejmik Młodych Informatyków w Świnoujściu, na której wygłosiłem prezentację na temat swoich osiągnięć.

Miało to głównie związek z moją pracą magisterską Komunikacja i bezpieczeństwo w rozproszonych, interaktywnych i multimedialnych systemach telemedycznych, obronioną w zeszłym roku na AGH w katedrze Informatyki. Została stworzona platforma do budowania bezpiecznych usług z wykorzystaniem .NET 2.0 (.NET Remoting) i WSE 3.0. Znalazła zastosowanie w systemie do przeprowadzania konsultacji telemedycznych TELEDICOM.

Został zamknięty więc tryptyk, jaki powstał wokół tej pracy:
1. Wyróżnienie na XXIII Ogólnopolskim Konkursie na najlepsze prace magisterskie z informatyki (Polskie Towarzystwo Informatyczne)
2. Udział w konferencji naukowej Metody i narzędzia wytwarzania oprogramowania w Szklarskiej Porębie (Microsoft Research i PTI):
- artykuł "Konstrukcja platformy bezpieczeństwa w środowiskach .NET Framework 2.0 i Web Services Enhancements 3.0"
- prezentacja
- artykuł w PWN
3. Udział w SMI w Świnoujściu - prezentacja

wtorek, 11 września 2007

WCF, WF, Cardspace - książka

Ostatnio czytanie książek mi się spodobało. Postanowiłem ugruntować i uzupełnić swoją wiedzę o WCF. Spośród różnych pozycji wybrałem Windows Communication Foundation Unleashed autorstwa Craig McMurtry, Marc Mercuri, Nigel Watling, Matt Winkler.

Książka nie jest prostym spisem wyliczanek przepisanych wprost z dokumentacji, tylko pokazuje w sposób praktyczny wiele interesujących zagadnień. W dodatku nie ogranicza się tylko i wyłącznie do WCF-a, ale poświęca miejsce także technologiom WF i CardSpace. Ma to swoje uzasadnienie, ponieważ te technologie są ze sobą powiązane. Opisano również integrację WF-a z WCF-em w .NET 3.5 (co prawda w VS "Orcas" z marca tego roku, ale zazwyczaj książki nie są aż tak na bieżąco, więc i tak zaskoczyło mnie to pozytywnie) oraz zagadnienia związane z Windows Vista (np. rozszerzenia WCF-a dla MSMQ dostępne tylko w tym systemie operacyjnym czy kwestie konfiguracji i uprawnień)

Spośród wielu interesujących rzeczy, które zwróciły moją uwagę to:
- Reliable Sessions (behavior zapobiegający złej kolejności pakietów, ich gubieniu czy duplikowaniu oraz powodujący ponowne nawiązywanie zerwanych połączeń)
- integracja WF-a z WCF-em w .NET 3.5
- XSI (daje możliwość zapewnienia wygodniejszego sposobu autoryzacji niż ten oparty na PrincipalPermission)
- CardSpace (bardzo ciekawe zagadnienie i bardzo szczegółowo i kompleksowo opisane w 2 rozdziałach, należy zwrócić uwagę, że programiści po stronie klienta są odciążeni - selector kart jest automatycznie wołany albo przez WCF-a na podstawie konfiguracji klienta albo przez przeglądarkę wspierającą CardSpace, np. Internet Explorer 7)
- bogate możliwości budowania własnych rozszerzeń dla WCF-a (własne zachowania i bindingi - kanały i protokoły transportowe)
- możliwość strumieniowania, gdy rozmiar wiadomości utrudnia jej buforowanie
- budowanie systemów typu publish/subscribe (kontrakty typu callback, multicast w MSMQ, strumieniowanie z customowym strumieniem)
- budowanie aplikacji peer-to-peer: predefiniowany NetPeerTcpBinding (na Windows XP SP2 i Windows Vista wykorzystujący komponent systemowy Peer-to-Peer Networking, w Windows 2003 trzeba dostarczyć swojego resolvera)
- możliwość budowania serwisów REST POX (np. RSS) obsługujących zwykły XML zamiast SOAP
- zapowiedź komunikacji klienta przez JSON z serwisem WCF w .NET 3.5 (co pokazuje jak bardzo jest to aktualna książka)

piątek, 7 września 2007

WCF - hostowanie na IIS7 i Windows Vista

Ostatnio hostowałem serwis WCF na Windows Vista -:) Aby wszystko było ok, należy:

Primo: Po doinstalowaniu IIS 7, nie należy zapomnieć o doinstalowaniu pewnych elementów WCF. W Windows Vista są to składowe systemowe w gałęzi Microsoft .NET Framework 3.0:
- Windows Communication Foundation HTTP Activation
- Windows Communication Foundation Non-HTTP Activation

Secundo: powinna być stworzona aplikacja (sam katalog virtualny nie wystarczy)

czwartek, 6 września 2007

WCF - svcutil na VS 2008 Beta2

Chciałem wygenerować proxy serwisu WCF dla klienta. Okazało się, że svcutil jest uszkodzony w Visual Studio 2008 Beta2. Ale na szczęście to jedno z wielu Known Issues, opisanych w pliku ReadMe. Zgodnie z zaleceniami wpisałem komendę w konsoli VS (z powodu uprawnień Visty w trybie administratora, inaczej wypisuje, że nie ma uprawnień do rejestru -:)):

sn -Vr "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcUtil.exe"

No i pomyślnie wygenerowałem klasę w C# i plik konfiguracyjny XML.

WCF - rejestracja adresu HTTP na Windows Vista

Podczas odpalania aplikacji hostującej serwis WCF na podanym adresie HTTP (http://localhost:8000/Derivatives/Calculator) na Windows Vista wyskoczył mi wyjątek następującej treści:

HTTP could not register URL http://+:8000/Derivatives/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).

Uh, znowu kwestia braku uprawnień -:)
Najpierw intuicja podpowiedziała mi, by odpalić skompilowany program w trybie administratora (Run As Administrator) i wtedy było ok.

Jednak nie poprzestałem na tym i postanowiłem rozeznać sprawę. Otóż okazuje się, że trzeba nadać uprawnienia dla konta do rejestracji odpowiedniego HTTP URL. W Windows 2003 służyło do tego narzędzie Httpcfg.exe. Jednak w Viście to narzędzie nie jest tak prosto dostępne. Zamiast niego lepiej użyć programu netsh.exe. Zgodnie z podawanymi opisami wpisałem dla swojej aplikacji:

netsh>http add urlacl url=http://+:8000/ user=Marcin

Teraz powinno zadziałać. I ... nie zadziałało (z powodu braku uprawnień - sic!). Odpaliłem netsh w trybie administratora, powtórzyłem komendę i nareszcie poszło.

Jak widać kwestia uprawnień Visty pojawia się niemal na każdym kroku (inny przykład z mej autopsji - aby zarejestrować ASP.NET na IIS-ie też trzeba odpalić konsolę w trybie administratora).

Silverlight - MS wciąż do przodu ....

Spożywając kolację spostrzegłem, że dnia września piątego roku bieżącego Microsoft wydał ostateczną wersję Silverlight 1.0. Natomiast aktualną eksperymentalną wersją edycji 1.1 jest Silverlight 1.1 Alpha September Refresh. Najbardziej jednak zwraca uwagę fakt, że na oficjalnej stronie Microsoftu dotyczącej Silverlight zamieszczone jest info, że wspólnie z Novellem pracują nad wersją dla Linuksa Moonlight ! Po zapewnieniu wsparcia dla różnych platform systemowych, sukces Silverlighta wydaje się całkiem prawdopodobny.

środa, 5 września 2007

WWF w .NET 3.0 - książka do poduszki -:)

Aby dobrze zrozumieć różnice między .NET 3.0 a .NET 3.5, nie trudno dojść do wniosku, że najpierw trza dobrze ugruntować wiedzę o .NET 3.0. Co może dać nam solidną wiedzę?

Na początek owszem można pobawić się samplami i poczytać fragmentami dokumnetację. Jednak czytanie szczegółowe dokumentacji najlepiej się sprawdza, gdy chcemy zgłębić jakiś szczegół, który jest nam w danym momencie potrzebny, natomiast jak technologia jest zupełnie nowa... Może jest to mało odkrywcze, ale gdy chcemy poznać całościowo jakąś technologię i mieć kompleksowe i jednocześnie dość wnikliwe spojrzenie, co można w niej zdziałać, nieraz szybciej i wygodniej można to osiągnąć siegając po książkę. Oczywiście, nie rezygnując z praktycznych prób podczas czytania jej. Takie przynajmniej jest moje osobiste zdanie (pod warunkiem, że zdążono wydać książkę do danej technologii).

I oto ok. 2 tygodnie temu natrafiłem na książkę Kenn Scribner Microsoft Windows Workflow Foundation Step by Step. Po jej przyczytaniu mogę powiedzieć, że bardzo mi się podoba sposób jej napisania. Konkretne omówienie aspektów WWF w logicznym ciągu myślowym z konkretnymi praktycznymi przykładami aplikacji.
Sporą część tych przykładów stworzyłem sobie w Visual Studio i sprawdziłem w praktyce. Co prawda przykłady w książce stworzone były z myślą o VS 2005 + WF extensions, ale ja użyłem do tego VS Studio 2008 Beta2 (z projektami ustawionymi na frameworka 3.0 - możliwość wyboru frameworka pomiędzy 2.0, 3.0 a 3.5 to użyteczna cecha nowego VS)

Natomiast nawiązując do tytułu posta, książkę czyta się bez zmęczenia, jednak niektóre jej treści lepiej jednak nie czytać w łóżku, bo wymagają pewnej koncentracji (np. korelacja instancji workflow, omówienie transakcji, itd). Nawet udostępnianie worklflow jako ASP.NET Web Service - chociaż zaumatyzowane w pewnym stopniu przez Visual Studio - rownież wymaga zachowania czujności w związku z użyciem dedykowanych aktywności i odpowiedniego ich skonfigurowania (sic!)

wtorek, 4 września 2007

Pierwszy post

Witam wszystkich.

Otóż postanowiłem swoje zainteresowania "przelać" w końcu na bloga, w którym od dzisiejszego dnia będę chciał się dzielić swoją wiedzą i "odkryciami" związanymi z najnowszymi technologiami firmy Microsoft, skupiając się głównie na platformie .NET.

Od końca 2006 na rynku obecny jest .NET 3.0, bazujący na .NET 2.0 i wprowadzający aż cztery nowe frameworki: WPF (nowy sposób tworzenia bogatego interfejsu użytkownika), WCF (nowe podejście do tworzenia systemów rozproszonych - unifikacja wszystkich dotychczasowych technologii Microsoftu w jedną), WF (po raz pierwszy w .NET framework do modelowania procesów biznesowych tzw.workflow), CardSpace (mechanizm typu meta identity dla usług webservice i stron www). Jak widać .NET 3.0 wprowadza bardzo dużo nowych rzeczy w stosunku do poprzednich wersji frameworka.

Jednak Microsoft nie zasypuje gruszek w popiele i już pracuje nad .NET 3.5 (obecnie beta2), który zostanie zaprezentowany na początku 2008 roku wraz z nowym Visual Studio 2008. .NET 3.5 wprowadza dwa istotne elementy: LINQ (zapytania SQL-a i XPatha na poziomie skladni C# 3.0 !) oraz AJAX (znany wcześniej jako oddzielny framework na bazie .NET 2.0). Oprócz tego 3.5 wprowadza m.in integrację WF-a z WCF-em oraz dodatkowe elementy i ulepszenia do WPF-a.

Jakby tego było mało powstaje też Silverlight (konkurent dla Flasha), ktory wykorzystuje podzbiór .NET 3.5 (elementy WPF-a, LINQ i nie tylko)

Podsumowując więc, z pewnością nie zabraknie tematów w tym blogu! Nie wykluczam poza tym zamieszczania informacji na temat ciekawych zagadnień z zakresu wcześniejszych edycji .NET, interesujących bibliotek, istotnych wydarzeń, itp ...

Do tej pory - jeśli chodzi o .NET 3.0 i wzwyż - rozpoznawałem głównie możliwości:
- WPF (November CTP 2004, Beta2, RC, RTM - Visual Studio 2005 + Expression Blend)
- WCF (CTP lato 2005, RTM)
- Silverlight (1.1 Alpha + Visual Studio Orcas Beta1 + Expression Blend 2 May Preview)
- trochę LINQ dla SQL-a i XML-a

Ostatnio zainstalowałem sobie na Windows Vista Visual Studio 2008 Beta2 (skończyło się to reinstalką Visty, bo nie mogłem odinstalować 2 poprawek - SP1 dla .NET 2.0 i SP1 dla .NET 3.0, a instalka .NET 3.5 beta2 chciała wgrać te łatki, a one już były)

Dołożę starań, by blog ten zawierał ciekawe i użyteczne informacje dla osób zainteresowanych technologią .NET