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