6 grudnia 2014 -------------------- Odtworzenie aplikacji "Choinka" w WPF i wzbogacenie jej o najwięcej elementów (np. animacja, dźwięk itp). Termin: pierwsze spotkanie po Nowym Roku Nagroda: +1/2 do oceny dla dwóch najlepszych projektów Laureaci: D. Masłowska, M. Rogulski, A. Kulbicka 25 stycznia 2015 -------------------- Konkurs na uważne czytanie skryptu. Skrypt dostępny jest pod adresem przesłanym w liście. Bardzo proszę go nie udostępniać dalej! Konkurs polega na znajdywaniu błędów merytorycznych. Za każdy nowy błąd merytoryczny lub nową lukę w opisie znalezioną w skrypcie: +0.25 do oceny Błędy proszę do mnie przesyłać jak, najszybciej. Na tej stronie będzie publikowana ich lista razem z opisem, nazwiskiem osoby, która go znalazła i poprawionym opisem. Punktowane będą tylko te błędy, których na liście jeszcze nie ma. Konkurs jest bezterminowy, co w praktyce oznacza, że punkty będą przyznawane do końca trwania Państwa nauki. ----------------- Uwagi: Tomasz Czapski (2015-01-31 18:39) Rozdział 1. Tworzenie projektu Informuje Pan, że używa Visual Studio 2015 (na stronie Microsoft znalazłem informację że jest to wersja CPT Community Preview) co na wstępie sugeruje, że fragmenty kodu będą pochodziły właśnie z tej wersji VS, natomiast Listing 1.1 i fragment pokolorowany na żółto ("ZWERYFIKOWAĆ W VS2015...") sugeruje, że kod XAML nie pochodzi z VS 2015 ale z innej... wcześniej wersji??? Odpowiedź: Do awarii komputera kod powstawał w VS2015 Preview 4, a po awarii w VS2013 Update 4. W nowej wersji skryptu, wszystkie listingi zostały skopiowane z VS2015 Preview 4. Nagroda: +1/4 do oceny -------------------------------- Tomasz Czapski (2015-01-31 18:39) Listing 3.1 Przy tak zadeklarowanych włanościach (automatycznie implementowanych), w kontruktorze chyba można pominąć słowo this przy przypisaniach. Odpowiedź: Można je pominąć, ponieważ własności pisane są dużymu, a argumenty konstruktora - małymi literami. Referencji "this" użyłem tak naprawdę dlatego, że uruchamia Intelli Sence. -------------------------------- Tomasz Czapski (2015-01-31 18:39) Listing 3.2 (tytuł sugeruje że "Klasa Ustawienia przeniesiona zostaje do przestrzeni nazw warstwy modelu") a dalej na listingu jest namespace koloryWPF a przestrzeń nazw warstwy modelu - KoloryWPF.Model jest zadeklarowana w sekcji using co sugeruje że klasa będzie korzystać z tej przestrzeni nazw a nie jest do niej przeniesiona (tak mi się wydaje). Odpowiedź: Racja. Mój błąd bierze się stąd, że DAL powinno stanowić część warstwy modelu, ale ponieważ korzysta z dodatkowych klas niezdefiniowanych w modelu (Properties.Settings), mam opór, żeby wstawić ją do przestrzeni nazw modelu domenowego. Nagroda: +1/4 do oceny -------------------------------- Tomasz Czapski (2015-02-01 18:43) s. 4 skryptu Pierwszy akapit a w nim zdanie: "Brak separacji poszczególnych modułów wprawdzie utrudnia testowanie kodu." mam wrażenie, że brakuje części zdania (wskazuje na to słowo "wprawdzie" - chyba po frazie "testowanie kodu" powinien być przecinek, a następnie "ale .... coś tam" --> "Brak separacji poszczególnych modułów wprawdzie utrudnia testowanie kodu, ale (lecz) ....." Ewentualnie złączyć trzy zdania w jedno: "Brak separacji poszczególnych modułów wprawdzie utrudnia testowanie kodu i praktyce możliwe jest tylko testowanie funkcjonalne całego produktu, ale nie musi to oznaczać złego rozwiązanie". Odpowiedź: Słowo "wprawdzie" zostało z wcześniejszej wersji zdania, w której kontastowałem szybkość pisania kodu we wzorcu AV i brak możliwości jego testowania. Nagroda: +0.1 do oceny (uwaga niemerytoryczna) -------------------------------- Tomasz Czapski (2015-02-01 18:43) Rysunek 1.1 W podpisie Zbiór projektów dostępnych w Visual Studio 2015 (to samo w tekście w akapicie poniżej rysunku - podana ścieżka dostępu ) natomiast na rysunku w polu Location wpis c:\users\jacek\documents\visual studio 14\Projects Odpowiedź: VS2015 ma numer wersji 14.* -------------------------------- Tomasz Czapski (2015-02-01 18:43) Na listingu 1.1 zawartość znacznika Window jest bogatsza o kilka deklaracji niż w rzeczywistości po wykonaniu czynności opisanych w tekście (załączony zrzut ekranu) - wykonywane na Visual Studio 2013 Ultimate z DreamSpark Odpowiedź: To jest kod generowany w VS 2015. Deklaruje dodatkowo m.in. przestrzenie nazw local i d. Poprawione w nowej wersji skryptu -------------------------------- Tomasz Czapski (2015-02-01 18:43) Podrozdział Zapisywanie i odtwarzanie stanu aplikacji W tekście na s. 14 jest (kolumna Scope w tabeli widocznej na rysunku 9.18) a chyba powinno - na rysunku 1.9??? Dalej w tekście już są prawidłowe odwołania do rys. 1.9. Odpowiedź: Słusznie. Nagroda: +0.1 do oceny (uwaga niemerytoryczna) -------------------------------- Małgorzata Bednarczuk (2015-02-01 23:22) Na stronie 11 jest tekst "W tym celu do konstruktora klasy Main Window należy przenieść polecenie tworzące obiekt: rectangle.Fill = new SolidColorBrush(Colors.Black); " Jeżeli do konstruktora wpiszę to polecenie a następnie tekst z Listingu 1.7 to pojawia się Wyjątek. Aby nie było tego błędu trzeba usunąć (zakomentować) wcześniej w konstruktorze tekst z Listingu 1.6 sliderR_ValueChanged(null, null); --------------------------------- Małgorzata Bednarczuk (2015-02-01 23:45) Na stronie 14 jest tekst "kolumna Scope w tabeli widocznej na rysunku 9.18)" Rysunku 9.18 nie ma, aczkolwiek ja nie znalzałam :-). Chodziło tu raczej o rysunek 1.9. Odpowiedź: Słusznie. Nagroda: +0.1 do oceny (uwaga niemerytoryczna) --------------------------------- Małgorzata Bednarczuk (2015-02-01 23:57) Wszędzie Pan pisze (chodzi mi o stronę 14) app.config z małej litery. Mi ten plik wygenerowało z dużej. Dalej w tekście używa pan Proporties, Settings z dużej litery czy już nie konsekwentnie napisać App.config. Widzę na rysunku (1.9), że u Pana również jest App.config. Odpowiedź: W przypadku nazw klas wielkość liter ma znaczenie, w przypadku nazw plików - nie, ale poprawiłem w tekście. Nagroda: +0.1 do oceny (uwaga niemerytoryczna) --------------------------------- Przemysław Grzesiek (2015-02-03 19:01) Na stronie 8 jest: "Zniknęły atrybuty VerticalAlignment..." a powinno być "Zniknęły atrybuty HorizontalAlignment". Można też opisać zmianę VerticalAlignment z "Top" na "Bottom" Odpowiedź: Słusznie. Nagroda: +1/4 do oceny --------------------------------- Przemysław Grzesiek (2015-02-03 19:01) Na stronie 8 jest: "Zniknęły atrybuty VerticalAlignment..." a powinno być "Zniknęły atrybuty HorizontalAlignment". Można też opisać zmianę VerticalAlignment z "Top" na "Bottom" Odpowiedź: Słusznie. Nagroda: +1/4 do oceny --------------------------------- Przemysław Grzesiek (2015-02-03 21:12) 1. Na listingu 1.1 element jest wiele atrybutów xmlns. Może wynika to z innej wersji Visual Studia a może z zainstalowanych dodatków (np. Resharper) ale u mnie na VS 2013 Pro i VS 2012 Pro - bez Resharpera - są tylko atrybuty: x:Class="KoloryWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Odpowiedź: Zob. Uwaga: Tomasz Czapski (2015-02-01 18:43) --------------------------------- Przemysław Grzesiek (2015-02-03 21:12) 2. Na stronie 10 jest: "My jednak wybierzmy z tej listy istniejącą metodę slider1_ValueChanged". Powinno być sliderR_ValueChanged. Podobna zmiana na stronie 11 "Aby zsynchronizować początkowy kolor prostokąta z pozycją suwaków, po uruchomieniu programu wywołajmy metodę slider1_ValueChanged" zmienić na sliderR_ValueChanged. I jeszcze raz na stronie 12: "W metodzie slider1_ValueChanged należy natomiast zastąpić obecne polecenie, przez polecenie modyfikujące własność Color (listing 1.7)." I jeszcze raz na stronie 9: "[...]dodany został atrybut ValueChanged, którego wartość ustalona zostaje na nazwę metody slider1_ValueChanged". Wszędzie powinno być sliderR_ValueChanged Odpowiedź: Słusznie. Nagroda: +1/4 do oceny --------------------------------- Przemysław Grzesiek (2015-02-03 21:12) 3. Na listingach 1.5 i 1.7 niepotrzebne są nawiasy po rzutowaniu, np zamiast (byte)(slideR.Value) wystarczy (byte)slideR.Value Odpowiedź: Słusznie, choć użyłem ich świadomie, żeby zwiększyć czytelność kodu. Jednak skoro to jest oczywiste, usunąłem też ze skryptu. --------------------------------- Przemysław Grzesiek (2015-02-03 21:12) 4. Znalazłem małe literówki zamiast słowa "przez" jest "przed" na stronach 8 i 9. --------------------------------- Przemysław Grzesiek (2015-02-04 11:52) w Rozdziale 1 w zadaniu do wykonania jest "W ustawieniach zastąp trzy wartości R, G i B typu byte, jedną własnością typu System.Media.Color." powinno być System.Windows.Media.Color Odpowiedź: Słusznie. Nagroda: +1/4 do oceny --------------------------------- Małgorzata Bednarczuk (2015-02-05 08:43) W listingu 3.3 miałam problem z skompilowaniem projektu - pojawił się error ('KoloryWPF.Model.Kolor' does not contain a definition for 'ToColor' and no extension method 'ToColor' accepting a first argument of type 'KoloryWPF_nauka.Model.Kolor' could be found (are you missing a using directive or an assembly reference?) Linia 27 47). Dopiero porawnie skompilowało mi się jeśli strukturę Rozszerzenia przeniosłam do nowej klasy. Odpowiedź: Podejrzewam, że klasę Rozszerzenia umieściła Pani w klasie EdycjaKoloru (w skrypcie jest bezpośrednio w przestrzeni nazw). Rozszerzenia (method extensions) powinny być definiowane w niezagnieżdżonej klasie statycznej. --------------------------------- Małgorzata Bednarczuk (2015-02-05 08:43) Na str 17 po słowie wymagane jest kropka a powinien być przecinek. (screen w załączniku). Nagroda: +0.1 do oceny (uwaga niemerytoryczna) --------------------------------- Tomasz Czapski (2015-02-09 00:20) Listing 5.1 W sekcji wiązania pozycji suwaków mamy: a wcześniej oczyszczając XAML i code-behind skasowaliśmy wpisy: x:Name="sliderR", x:Name="sliderG", x:Name="sliderB" w poszczególnych suwakach więc ten kawałek jest zbędny. Odpowiedź: W R4 jest napisane, że nazwy _można_ usunąć, ale ja ich nie usunąłem. Dodałem "nawet" do tekstu --------------------------------- Tomasz Czapski (2015-02-09 00:20) Ponadto bindowanie do składowych kolorów prawdopodobnie poprzez zmiany kodu w trakcie implementacji 3 różnych wersji ModeluWidoku zmieniały się jak poniżej: ... Value={Binding Path=R..... [EdycjaKoloru] ... Value={Binding Kolor.R.... [EdycjaKoloru3] do ... Value={Binding R, na listingu 5.1 - zagubiło się słówko Path - ale nie wpływa to na działanie programu, natomiast mogłoby znaleźć się wyjaśnienie czy jest ono potrzebne czy nie. Odpowiedź: Rzeczywiście usunąłem Path, bo nie ma znaczenia, a linia kodu nie mieściła mi się w wierszu dokumentu. Dodałem komentarz w R4. Nagroda: +1/4 do oceny --------------------------------- Tomasz Czapski (2015-02-09 00:20) Listing 5.4 Znowu pojawiają się wpisy dla poszczególnych sliderów x:Name="sliderR".... ale tu już są potrzebne żeby związać je z własnością Text kontrolki TextBlock po ElementName - dobrze byłoby o tym wspomnieć w tekście Odpowiedź: Zmieniłem tekst w R4. Nagroda: +0.1 do oceny