wtorek, 29 lipca 2008

Drugi blog

Od dzisiaj zaczynam prowadzić drugiego bloga po angielsku, w którym zamierzam opisywać konkretne sprawy związane z aktualnie badaną przeze mnie technologią (aktualnie Silverlight). W moim założeniu ma to być blog typowo techniczny.

Natomiast w polskim blogu zamierzam kontynuować ciekawostki dotyczące różnych nowych technologii oraz komentować rzeczywistość ze świata IT.

Polskiemu i angielskiemu blogowi nadałem nowy ujednolicony wygląd.

sobota, 26 lipca 2008

Silverlight 2 Beta 2 w praktyce - ciąg dalszy

Pragnę wspomnieć o kilku zagadnieniach związanych z Silverlight, którymi się ostatnio zajmowałem:

1. Definiowanie obiektów w XAML

Robiąc binding do obiektów CLR, czasami jest wygodnie zdefiniować ich instancje z odpowiednimi parametrami w XAML, zamiast w code-behind. Pokazane to zostało m.in w webcaście http://channel9.msdn.com/posts/mtaulty/Silverlight-Custom-Types-in-XAML/. W praktyce również zrobiłem podobny przykład, przy czym sam obiekt bez parametrów w XAML wygenerowałem za pomocą Expression Blend przy okazji tworzenia bindingu.

2. Templates

Stworzyłem szablon, który następnie podpiąłem do 2 przycisków. Tym razem efekt pracy w Expression Blend działał poprawnie w czasie run-time (w przeciwieństwie do mojej wcześniejszej próby). Obecnie działałem z SP1 do VS i prostszy szablon odnosił się do przycisku, a nie do panelu ... Czyżby miało to jakieś znaczenie?

3. Resources

Bardzo dobry webcast o umieszczaniu zasobów w aplikacjach Silverlight: http://channel9.msdn.com/posts/mtaulty/Silverlight-Resources-from-XAPDLLSite-Of-Origin/. Obrazek wchodzący w skład projektu Silverlight w VS możemy umieścić w:
- assembly aplikacji (w Properties VS: Build Action = Resource, URI = 'obrazek.jpg')
- poza assembly w archiwum aplikacji .xap (Build Action = Content, URI = '/obrazek.jpg')
- poza plikiem .xap w aplikacji webowej
- w assembly biblioteki, z której korzysta aplikacja (URI = '/[nazwa assembly];component/obrazek.jpg)
Przy wczytywaniu zasobów obowiązuje pewna kolejność: jeśli zasób nie zostanie odnaleziony w assembly i w archiwum .xap, to szukany jest w katalogu aplikacji webowej.

4. Upload i download za pomocą klasy WebClient

Te zagadnienia dobrze ilustrują webcasty: http://channel9.msdn.com/posts/mtaulty/Silverlight-Uploads-with-WebClient/ oraz
http://channel9.msdn.com/posts/mtaulty/Silverlight-Downloads-with-WebClient/. Przydatne metody i eventy klasy WebClient:
- przy operacji upload: OpenWriteAsync / UploadStringAsync, OnUploadProgressChanged, OnOpenWriteCompleted / OnUploadStringCompleted
- przy operacji download: OpenReadAsync / DownloadStringAsync, OnDownloadProgressChanged, OnOpenReadCompleted / OnDownloadStringCompleted

5. WCF

http://msdn.microsoft.com/en-us/library/cc197959(VS.95).aspx - ograniczenia w obsłudze bindingów i protokołów WS-*
http://silverlight.net/forums/p/17733/74019.aspx - sprawa korzystania z aplikacji webowej i serwisu WCF na tym samym komputerze (localhost i adres domenowy komputera nie są traktowane za tożsame, aplikacja webowa nie może być uruchamiana przez ścieżkę plikową tylko przez adres webowy)

c.d.n

środa, 23 lipca 2008

Silverlight 2 Beta 2 w praktyce - ciąg dalszy

Kilka zagadnień, z którymi ostatnio miałem doczynienia:

1. The project type is not supported by this installation - gdy zainstalowałem narzędzia do Silverlight'a na maszynie z Visual Studio 2008 z SP1 (beta), to przy próbie otwarcia jakiekolwiek projektu VS konsekwentnie informował, że nie obsługuje takiego rodzaju projektu lub że referencja na obiekt jest nullem (!). Pomogło zresetowanie ustawień Visual Studio z linii komend.
http://www.microsoft.com/silverlight/resources/readme.aspx?v=2.0

2. Pobieranie bibliotek z kontrolkami na żądanie - przydatne, gdy:
- chcemy współdzielić kontrolki w różnych aplikacjach
- ze względów wydajnościowych, by ładować tylko potrzebne kontrolki, a pozostałe dociągać i ładować w razie potrzeby

Do projektu biblioteki pobieranej na żądanie umieszcza się referencję w taki sam sposób jak do biblioteki, która ma być powiązana w sposób statyczny. Jedyna różnica polega na tym, że we właściwościach referencji trzeba:
- w Visual Studio: propercję Copy Local ustawić na false
- w MSBuild: propercję Private ustawić na false
Wtedy assembly biblioteki nie zostanie włączone do archiwum .xap aplikacji.

http://msdn.microsoft.com/en-us/library/cc296243(VS.95).aspx. Zasugerowany podanym tu przykładem byłem przekonany, że biblioteki z kontrolkami należy pakować do archiwum .xap. Jednak jedynie projekt Silverlight Application pozawala na pakowanie do .xap, projekt Silverlight Class Library na to nie pozwala (nie pozwala też na linkowanie do aplikacji webowej za pomocą Visual Studio). Natrafiłem na stronę http://geekswithblogs.net/lbugnion/archive/2008/04/16/silverlight-packing-user-controls-in-separate-assemblies.aspx, gdzie autor umieszczał kontrolki w projekcie Silverlight Application po wyrzuceniu z niego niektórych plików. Ten pomysł w obecnym wydaniu Silverlight się nie sprawdził, co prawda strumień z .xap był odczytywany, ale ładowanie assembly kończyło się u mnie niepowodzeniem... Wtedy w adresie URI (parametr metody OpenReadAsync klasy WebClient) zamiast adresu do pliku .xap dałem adres do pliku .dll i ... zadziałało!

W obejrzanym przeze mnie później (niestety!) webcaście o dynamicznym ładowaniu bibliotek również w URI jest podawana ścieżka do pliku .dll, skopiowanego ręcznie do katalogu ClientBin aplikacji webowej.

3. W aplikacjach Windows mamy MessageBox, a co mamy w Silverlight?

HtmlPage.Windows.Alert('Message')

4. Jakiś czas temu pisałem o problemie z dodaniem referencji do serwisu WCF w Visual Studio. Gdy teraz korzystałem z Visual Studio 2008 z SP1 (beta) ten problem nie wystąpił.

Książka o Silverlight 2 (beta 2) już sprzedaży !

Laurence Moroney Introducing Microsoft Silverlight 2.0

piątek, 18 lipca 2008

ASP.NET MVC Preview 4

Ze stron CodePlex można już pobrać ASP.NET MVC Preview 4. Na blogu Scotta Guthrie można znaleźć informacje nt. najnowszej wersji.

czwartek, 17 lipca 2008

Silverlight 2 beta 2 vs. WPF - odcinek 4

Ograniczenia Silverlight 2 beta 2 w stosunku do WPF, które mi się ostatnio objawiły:

zdarzenia myszy: m.in brak obsługi prawego przycisku i kółka do przewijania, brak comboboxa (!), strona XAML w aplikacji jako UserControl, tekst: m.in brak FlowDocument i RichTextBox, brak DrawingBrush ...

GridSplitter: podobnie jak część kontrolek znajduje się w przestrzeni Windows.Controls.Extended, nie jest widoczny w Expression Blend, a jest pokazywany z poziomu Visual Studio 2008 ...

Nawigacja: działa ze stronami HTML, URI ze stroną XAML aplikacji nie wydaje się być dopuszczalne ...

TileBrush: w Expression Blend w panelu Properties w sekcji Brushes brakuje zakładki "Tile brush". Z kolei, gdy w panelu Resourses kliknie się prawym przyciskiem myszy na zdefiniowane przez nas wcześniej wypełnienie rodzaju ImageBrush, to pojawia się możliwość ustawienia "tile mode". Jednak przy próbie wyboru wypełnienie obiektu znikało... W końcu pojawił mi się nieoczekiwany błąd w programie Expression Blend, wskutek czego musiał zostać zamknięty (!)

Motion Path: wygenerowanie animacji po torze ścieżki nie jest możliwe (klasa DoubleAnimationUsingPath nie istnieje)

ciąg dalszy nastąpi ...

piątek, 11 lipca 2008

Silverlight 2 beta 2 vs. WPF - odcinek 3

Kolejne ograniczenia Silverlight 2 beta 2 w stosunku do WPF, które mi się ostatnio objawiły: brak efektów bitmapowych, LayoutTransform, elementów layout'u - m.in WrapPanel i DockPanel. Dodatkowo znowu udało mi się doprowadzić do UNKNOWN ERROR w runtime, gdy URL do pliku video wyeksportowałem w Expression Blend do postaci zasobu ...

Ciąg dalszy nastąpi ...

środa, 9 lipca 2008

Silverlight 2 beta 2 vs. WPF - odcinek 2

Różnice między Silverlight 2 a WPF wyliczone są m.in na stronach:
http://jimmangaly.blogspot.com/2008/04/differences-between-wpf-and-silverlight.html
http://jimmangaly.blogspot.com/2008/06/whats-new-in-silverlight-2-beta-2.html
http://blogs.msdn.com/silverlight_sdk/archive/2008/06/04/what-s-new-in-silverlight-2-beta-2.aspx

Z pewnością w Silverlight 2 przydałyby się takie elementy znane z WPF jak: możliwość podmiany stylu, dziedziczenie styli, triggery, dynamiczne resourcy (do łatwej zmiany skórki w locie), więcej możliwości w bindingu, itd.

Cieszyć mogą elementy, których nie spotkamy w dotychczasowych wydaniach WPF: Deep Zoom oraz Visual State Manager.

Jeśli chodzi o Deep Zoom, to koniecznie trzeba zapoznać się z narzędziem Deep Zoom Composer. Tworzy strukturę katalogów, w których są przechowywane w różnych jakościach poszczególne części dodanych wcześniej do galerii obrazków. Ta struktura opisana jest w specjalnym pliku XML, który wiążemy z odpowiednią kontrolką. DTC pozwala wygenerować gotowy projekt Silverlight z obsługą odpowiednich zdarzeń (wraz z aplikacją ASP.NET).

Visual State Manager znacznie ułatwia tworzenie szablonów dla kontrolek poprzez definicję stanów i tranzycji. Jest to wygodniejsze niż korzystanie z bardziej uniwersalnych triggerów w WPF.
http://www.interact-sw.co.uk/iangblog/2008/06/10/visual-state
http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx

poniedziałek, 7 lipca 2008

Silverlight 2 beta 2 vs. WPF - odcinek 1

Ile WPF-a mieści się w Silverlight 2 beta 2? Postanowiłem odpowiedzieć sobie na to pytanie badając to praktycznie i próbując zrealizować sztandarowe przykłady z WPF-a w Silverlight.

Jak do tej pory wyszły mi pewne niedostatki/bugi:

- brak propercji IsSynchronizedWithCurrentItem. W scenariuszu master-details korzystanie ze wspólnego DataContext jest utrudnione. Przy zmianie pozycji na liście master trzeba obsłużyć odpowiedniego eventa i ręcznie ustawić aktualnie wybraną pozycję jako kontekst danych w details.

- przy podpinaniu template'ów do kontrolek: w Expression Blend 2.5 June CTP podgląd w trakcie designu jest poprawnie generowany, natomiast w Visual Studio 2008 oraz w trakcie wykonania pokazywany jest UNKNOWN ERROR. Podpięcie szablonu do kontrolki z poziomu kodu rozwiązuje problem.

- w kontrolce Listbox ustawianie koloru tła oraz obwódki nie działa. Problem można obejść przez zdefiniowanie szablonu.

- przy tworzeniu efektu lustrzanego odbicia: brak klasy VisualBrush utrudnia odbijanie elementów GUI złożonego z kontrolek innych niż obrazki i elementy video.

- binding do XML oraz do propercji innego obiektu zdają się nie być dostępne (?) (w Expression Blend nie są aktywne).

- przy zastosowaniu transformacji Skew wypełnienie transformowanego obiektu staje się puste -;)

Ciąg dalszy nastąpi ...

wtorek, 1 lipca 2008

Microsoft.VisualStudio.ServicesProxy.dll a tworzenie referencji do serwisu WCF w Silverlight 2 Beta 2

Otóż próbowałem dziś skorzystać z WCF z poziomu Silverlight 2 Beta 2. Mimo że wzorowałem się na tutorialu, to w praktyce wystąpił problem z wygenerowaniem referencji w projekcie Silverlight do serwisu WCF znajdującego się w tym samym solution. Ponieważ zajęło mi ładną chwilę czasu, myślę że warto o tym napisać.

Po różnorakich próbach praktycznych i szukaniu przyczyny - w końcu na stronie http://www.itwriting.com/blog/665-more-silverlight-visual-studio-setup-hassles.html natrafiłem na informacje, że nie jestem z tym problemem odosobniony. Także wyskakujący błąd przy zamykaniu Visual Studio nie przydarzył się tylko mnie. Jak się okazuje, wystarczy przed instalacją Silverlight tools usunąć Microsoft.VisualStudio.ServicesProxy.dll, a instalator wgra nowszą wersję tej biblioteki i wtedy problemy znikną.