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 ...