Wprowadzenie do teorii muzyki

Na początek kilka pojęć. Omówię, czym jest harmoniaakord, oraz oktawa.

Harmonia – jest dyscypliną teoretyczną traktującą o budowie i łączeniu akordów.

Akord – jest współbrzmieniem co najmniej trzech dźwięków o różnej wysokości i nazwie. Współbrzmienie wielu dźwięków oddalonych o oktawę nie jest akordem, tylko wzmocnieniem i wzbogaceniem barwy najniższego dźwięku. Dwudźwięki (interwały) traktowane są jako akordy niepełne.

Interwał – oznacza odległość między dwoma dźwiękami. Ich nazwy określają liczbę stopni zawartych między dźwiękami:

  1. Pryma – interwał oznaczający ten sam dźwięk,
  2. Sekunda – odległość między sąsiadującymi dźwiękami skali. Posiada jeden lub dwa półtony,
  3. Tercja – posiada trzy lub cztery półtony,
  4. Kwarta – pięć półtonów,
  5. Tryton – sześć półtonów (traktowany też jako kwarta zwiększona, lub kwinta zmniejszona)
  6. Kwinta – siedem półtonów,
  7. Seksta – osiem lub dziewięć półtonów,
  8. Septyma – dziesięć lub jedenaście półtonów,
  9. Oktawa – dwanaście półtonów.

Interwały dzielą się na czyste (pryma, kwarta, kwinta, oktawa) oraz wielkie i małe (sekunda, tercja, seksta, septyma).

Ponadto interwały mogą być:

  1. Konsonansowe – zgodnie brzmiące, dzielące się na:
    1. Doskonałe – zawierające same interwały czyste
    2. Niedoskonałe – zawierające tercje i seksty małe i wielkie.
  2. Dysonansowe – czyli nie brzmiące zgodnie. Zawierają one sekundy i septymy małe i wielkie, oraz tryton.
Opublikowano Muzyka | Skomentuj

Scrum – zwinna metodyka prowadzenia projektów

Scrum jest iteracyjną (występują w niej sprinty) i przyrostową metodyką należącą do grupy metodyk zwinnych (Agile).

Role w Scrumie:

Jeśli chodzi o pojęcie ról w Scrumie, myślimy głównie o Scrum Team – osobach bezpośrednio poświęcające się w pracę w Scrumie. Są to Product OwnerScrum Master oraz Development Team.

  • Product Owner – reprezentuje interesariuszy i użytkowników projektowanego systemu. Jest odpowiedzialny za definiowanie zakresu prac, pilnowanie opłacalności biznesowej, wyznacza też priorytety zadań.
  • Scrum Master – broni Zespół przed zewnętrznymi wydarzeniami, mającymi wpływ na pracę zespołu.
  • Development Team – samoorganizujący się zespół, którego celem jest realizacja zadań zawartych w Sprint Backlogu. Przyjmuje się, że każdy z członków zespołu bierze zadania według zdefiniowanego przez Product Ownera priorytetu, a następnie własnych preferencji.

Pamiętać trzeba też o otoczeniu zespołu Scrumowego – pojawiają się tutaj osoby, które są zaangażowane w projekt.

  • Others – osoby zainteresowane projektem, ale nie mające na niego bezpośredniego wpływu. To przed nimi Scrum Master chroni Development Team. Są to w szczególności członkowie zarządu, eksperci firmowi, członkowie innych zespołów, czy przyszli użytkownicy systemu.

Ciekawym zobrazowaniem podziału pomiędzy Scrum Teamem a Innymi w projekcie, jest historia o prosiaku i kurczaku. Dotyczy ona pomysłu założenia knajpy o nazwie „Jajka na bekonie”. W takiej sytuacji, prosiak, aby osiągnąć cel, musi się poświęcić, kiedy kurczak jest tylko zaangażowany.

Scrumowe artefakty:

  • User Story – wymaganie biznesowe, odpowiednio zdekomponowana funkcja systemu, zapisana w postaci zrozumiałej historyjki użytkownika.
  • Product Backlog – zbiór wszystkich User Stories zorganizowanych w zadania.
  • Sprint Backlog – zbiór zadań stanowiących zakres przypisanego im Sprintu. Wykonanie wszystkich zadań ze SB jest celem poszczególnych Sprintów.

Wydarzenia, procesy Scruma

  • Sprint – jest to jedna iteracja tworzenia systemu, ograniczona czasowo (od 1 tygodnia do 1 miesiąca). Każdy z nich ma swój Sprint Backlog, z którego Development Team bierze i realizuje zadania.
  • Sprint Planning – każdy Sprint zaczyna się od planowania zadań – zespół wycenia pracochłonność poszczególnych User Stories, a Product Owner decyduje, które z nich trafią do Sprint Backlogu.
  • Daily Scrum – codzienne, maksymalnie 15 minutowe spotkanie członków Scrum Team’u, podczas którego opowiadają oni, co zrobili w ramach realizacji celu Sprintu, co będą robić, oraz jakie napotkali przeszkody w realizacji zadań.
  • Sprint Review – Przegląd stanu systemu na koniec Sprintu zakończone prezentacją (demo) wyniku Sprintu przed klientem.
  • Sprint Retrospective – spotkanie prowadzone po Sprint Review, mające na celu podsumowanie minionego Sprintu, wskazanie jego słabych i mocnych stron, z uwzględnieniem pomysłów mających na celu usprawnienie prac w przyszłym Sprincie.

Best practices

  • Rozmiar zespołu Scrumowego – od 3 do 9 osób.
  • Długość Sprintu – od 1 tygodnia do 1 miesiąca.
  • Scrum of Scrums – technika, w której każdy zespół scrumowy.
  • Głosowanie nad różnymi usprawnieniami na Sprint Retrospective.
  • Wyznaczenie ścieżki krytycznej sprintu i priorytetyzacja zadań
Opublikowano Zarządzanie projektami | Skomentuj

Kwarteniony (Quaternions) w kosmicznym trójwymiarze

Teoria

Kwartenionów (z ang. Quaternion) można użyć do zapobieżenia utraty stopnia swobody (tzw. Gimbal Lock).

Każdy Kwartenion składa się z dwóch elementów – wektora w przestrzeni urojonej, służącego do określenia osi obrotu w trzech wymiarach, oraz skalara oznaczającego kąt obrotu wokół zdefiniowanej osi.

Poniżej znajduje się rysunek obrazujący ideę użycia Kwartenionu do przeprowadzenia rotacji w trójwymiarowym świecie.

quaternion

Kolejne kolorowe osie (czerwona, zielona i niebieska) reprezentują poszczególne kierunki trójwymiarowego świata. Czarna strzałka jest wektorem w przestrzeni urojonej, i jest zarazem osią obrotu (rotation axis). Kąt obrotu (rotation angle) określany jest przez rzeczywisty skalar Kwartenionu.

Praktyka

Użyjmy Kwartenionów do przeprowadzenia rotacji w trójwymiarowym świecie. Jako wejście posłuży nam ruch myszki – odbywa się on w dwóch kierunkach, tzn. na boki, i z góry na dół. Przyjmijmy zatem, że odległość od środka ekranu będzie wartością zmiany położenia kamery:

dx = mouse.getX()
dy = mouse.getY()

Można założyć, że dx i dy to zmiany w poziomie i w pionie w przestrzeni Eulerowskiej. Jeśli użylibyśmy bezpośrednio tych zmiennych do rotacji utracilibyśmy stopień swobody przy osiągnięciu rotacji 90′:

glRotated(dx, 1, 0, 0)
glRotated(dy, 0, 1, 0)

Sięgnijmy po Kwaterniony. Określmy najpierw jeden Kwaternion, będący naszym punktem w przestrzeni, którego będziemy obracać. Zacznijmy od Kwartenionu jednostkowego:

Quaternion position = new Quaternion(0, 0, 0, 1);

To on będzie wyznaczał nasze osie obrotu – nie Eulerowski układ współrzędnych. Weźmy nasze zmiany prędkości obrotu i stwórzmy odpowiedni Kwartenion:

Quaternion rotation = new Quaternion().fromEuler(dx, dy, 0)

Teraz zaaplikujmy naszą rotację do pozycji, którą określiliśmy wcześniej. Wykorzystamy mnożenie Kwartenionów:

position = rotation * position

Otrzymaliśmy przekształconą, niezależną pozycję naszego punktu w przestrzeni. Wykonajmy więc rotację macierzy obrotu przy pomocy naszego Kwaterniona. Aby to zrobić, musimy zamienić go na postać osi obrotu:

x, y, z
rotationAngle = position.toAxisAngle(x, y, z)

Czyli musimy uzyskać naszą oś i kąt obrotu. W takiej postaci możemy zaaplikować naszą rotację do macierzy obrotu:

glRotated(rotationAngle, x, y, z)

W ten sposób uwolniliśmy się od utraty stopni swobody przy pomocy niezależnego od osi obrotu Kwarteniona.

Opublikowano Bez kategorii | Skomentuj