Mobirise Web Site Maker

Łukasz Culer M.Sc.



Ph.D. student @ Department of Computer Engineering
Wrocław University of Science and Technology

Contact:
lukasz{dot}culer{at}pwr.edu.pl
P2.3 in C-16 (Technopolis)
My timetable

Publications



  • 2016 Dyrka, W., Coste, F., Unold, O., Culer, Ł., Kaczmarek, A. (2016). How to measure the topological quality of protein grammars? The 13th International Conference on Grammatical Inference (ICGI 2016).
  • 2016 Unold, O., Culer, Ł., Kaczmarek, A. (2016). Visualizing context-free grammar induction with grammar-based classifier system. The 13th International Conference on Grammatical Inference (ICGI 2016).
  • 2016 Culer, Ł., Unold, O. (2016, September). Sentiment Analysis of Social Networks Statements for the Polish Language. In Network Intelligence Conference (ENIC), 2016 Third European (pp. 134-139). IEEE.
  • 2016 Markowska-Kaczmar, U., Szymańska, A., Culer, Ł. (2016). Adaptation of Automatic Information Extraction Method for Environmental Heatmaps to U-Matrices of Self Organising Maps. In Intelligent Computing Systems (pp. 247-270). Springer Berlin Heidelberg.
  • 2015 Markowska-Kaczmar, U., Szymańska, A., Culer, Ł. (2015). Automatic indication of heat loss in thermograms of buildings. International Journal of Computer Science & Applications, 12(2).
  • 2014 Markowska-Kaczmar, U., Szymańska, A., Culer, Ł. (2014, July). Automatic information extraction from heatmaps. In Information, Intelligence, Systems and Applications, IISA 2014, The 5th International Conference on (pp. 267-272). IEEE.

BAZY DANYCH


Celem zajęć jest zaprojektowanie, implementacja i udokumentowanie systemu bazodanowego, opartego o relacyjną bazę danych.

Projektowanie obejmuje wykonanie analizy funkcjonalnej jak i niefunkcjonalnej systemu oraz stworzenie odpowiednich modeli. Może być wykonany przy użyciu dowolnych narzędzi.
Implementacją systemu jest stworzenie zarówno bazy danych wraz z jej strukturą, jak też wykonaniem aplikacji klienta.

Zalecane systemy zarządzania bazą danych:
  • Oracle Database (Wersja darmowa - express edition)
  • MS SQL Server (Wersja darmowa - express edition)
  • MySQL
  • ...inne za wyłączeniem MS Access i SQLite.

Baza danych musi zawierać minimalnie 4-5 tabel. Możliwie jak największa część logiki powinna być zawarta po stronie bazy danych.

Klient może być wykonany w dowolnej technologii - może być to aplikacja webowa (zalecane), desktopowa lub mobilna. Możliwe jest także wykorzystanie (w przypadku bazy danych Oracle) Oracle APEX.

Aplikacja klienta nie musi być atrakcyjna graficznie, jednakże powinna być intuicyjna, pozbawiona błędów związanych z tzw. "User Experience" i w jak największym stopniu w działaniu przypominać profesjonalne aplikacje.

Dokumentacja również możne przyjąć dowolną formę, jednakże zalecane jest jej stworzenie przy użyciu MS Word / OpenOffice / LaTeX.

Zawartość dokumentacji:
  1. Wstęp - zawierający cel i zakres projektu
  2. Analizę systemu - krótki opis działania, wymagania funkcjonalne i niefunkcjonalne, a także techniczne wymagania (technologia czy bezpieczeństwo)
  3. Projekt systemu - bazy danych (modele: konceptualny, logiczny i fizyczny + ewentualne inne elementy), aplikacji (architektura - przykładowo struktura nawigacji pomiedzy ekranami, planowane zabezpieczenia, integracja z bazą danych)
  4. Opis techniczny - bazy danych (struktura tabel, sposób autoryzacji, replikacji) i aplikacji (diagram i opis poszczególnych klas, opis funkcjonowania programu)
  5. Opis funkcjonalny - instalacja i konfiguracja systemu, opis wszystkich dostępnych funkcjonalności
  6. Literatura
  7. Spisy tabel, obrazów


Projekt powinien być realizowany w grupach dwuosobowych.

Na ocenę końcową składają się wszystkie elementy - dokumentacja, baza danych i aplikacja klienta.
Grupa w celu uzyskania oceny prezentuje aplikację klienta i bazę danych, sposób jej implementacji (prezentacja multimedialna nie jest wymagana), a także krótko omawia stworzoną dokumentację.

Przykładowe tematy projektu:
  • System przyjmowania i obsługi gości w hotelu
  • System rezerwacji biletów w kinie
  • System wypożyczalni książek
  • System obsługi klienta w restauracji (na miejscu / telefonicznie / internetowo)


Możliwe (a nawet zalecane ;)) jest zaproponowane własnego tematu, przy zachowaniu jednak pewnej minimalnej złożoności (przykładowo implementacja kilku relacji jeden do wielu czy wiele do wielu). Temat powinien być krótko omówiony i zatwierdzony na drugich zajęciach.

Zajęcia:
Zajęcia mają charakter konsultacji. Poza pierwszymi dwoma, dzielą się na dwa etapy, podczas których konieczna jest jednokrotna prezentacja aktualnego postępu.
  1. Zajęcia wstępne (03.10.17)
  2. Deklaracja grup i wybór tematów (10.10.17)
  3. Opracowanie wstępnego projektu i implementacji systemu (10.10.17-21.11.17)
  4. Prezentacja pełnej implementacji projektu i w pełni ukończonej dokumentacji (21.11.17-16.01.18). Prosiłbym, w miarę możliwości, nie czekać z oddaniem projektu do ostatnich zajęć, ze względu na istnienie konieczności wprowadzenia poprawek.



Materiały:
Tworzenie aplikacji z wykorzystaniem APEX
Instrukcja tworzenia aplikacji bazodanowej opartej o technologię Oracle i platformę.NET
Inne propozycje tematów (dr inż. Roman Ptak)

PROGRAMOWANIE W JĘZYKU JAVA 
TECHNIKI ZAAWANSOWANE

Celem zajęć jest zapoznanie z zaawansowanymi technikami programowania w języku Java.

Przebieg zajęć:
Zajęcia odbywają się co tydzień. Przewidują one realizację zadań, na których wykonanie jest jeden lub dwa tygodnie.
Rozpoczynają się one krótkim wprowadzeniem do obecnych zajęć. Następnie studenci prezentują poprzednie zadanie, za które otrzymują ocenę cząstkową.
Można pracować na swoich komputerach.
Wykorzystywane IDE jest również dowolne.

Zasady zaliczenia:
Warunkiem zaliczenia zajęć jest oddanie wszystkich prac i uzyskanie z nich ocen co najmniej 3.0.

Ocena końcowa:
Ocenę końcową stanowi średnia ważona ocen cząstkowych. Zadania o tygodniowym czasie realizacji posiadają wagę 1, dwutygodniowe - 2.
Za każdy tydzień opóźnienia ocena obniżana jest o 0.5 w dół do minimalnego pułapu 3.0.

Materiały ogólne:
Bruce Eckel: Thinking in Java. Edycja polska, Helion.
Cay Horstmann, Gary Cornell: Java 2. Podstawy, Helion.
Cay Horstmann, Gary Cornell: Java 2. Techniki zaawansowane, Helion.


Temat:
Szkolenie stanowiskowe BHP. Sprawy organizacyjne. Uruchomienie środowiska programowania i kompilacja przykładowego programu.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o środowisku programowania, sposobie kompilacji i uruchamiania aplikacji.

Zadanie:
Napisz program umożliwiający opracowanie wyników testów wyboru (przeprowadzonych np. podczas kolokwium). Opracowanie ma polegać na załadowaniu dwóch plików - szablonu testu (format dowolny) zawierającego pytania i odpowiedzi, ze wskazaniem na prawidłowe, a także zbioru kart odpowiedzi (proponowany format .csv) z odpowiedziami udzielonymi przez studentów. Wczytane dane powinny zostać przetworzone, a rezultaty wyświetlone w przystępnej formie.

Aplikacja powinna posiadać własną ikonę, ekran powitalny, dokumentację (javadoc).

Przykładowe statystyki obliczane przez program:
  • Histogram wyników (dla każdej karty odpowiedzi weryfikuje się liczbę zdobytych punktów, a następnie robi się histogram tych punktów)
  • Liczby przypadków wpadających w zadane przedziały ocen
  • Rozkład poprawnych odpowiedzi wg klucza
  • i inne

Program powinien być podzielony na dwie części:
  • Bibliotekę pomocniczą
  • Właściwą aplikację

Biblioteka powinna zapewniać modele danych powiązanych z testami (szablon, karta odpowiedzi) oraz logikę ich przetwarzania (wyliczanie statystyk), aplikacja natomiast obsługę UI i ładowania danych.

Biblioteka powinna być spakowana za pomocą narzędzia jar, a następnie dołączona do aplikacji, która również ma zostać spakowana przy pomocy narzędzia jar.

Zadanie dodatkowe:
  • Opracuj ekran ręcznego wprowadzania wyników testu
  • Dodaj przykładowe testy jednostkowe (JUnit)

Temat:
Stworzenie aplikacji okienkowej z możliwością zmiany ustawień lokalizacyjnych

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o wsparciu internacjonalizacji w aplikacjach Java oraz budowaniu interfejsów o zwiększonej dostępności

Zadanie:
Napisz program zarządzający listą posiadanych przedmiotów / przedmiotów na magazynie (domowo - długopisy, książki, mąka, cukier itd. albo przemysłowo - silniki, olej, tworzywa sztuczne).

Program powinien pozwalać na dodawanie / usuwanie przedmiotów zdefiniowanych w aplikacji przedmiotów.

Dane powinny być zapamiętywane - przykładowo, w pliku xml na dysku.

Każdy przedmiot powinien być opisany kilkoma atrybutami (nazwa, cena) oraz mieć graficzną reprezentację - np. zdjęcie, stronę tytułową.

Interfejs użytkownika powinien pozwalać na zmianę lokalizacji (wybór języka prezentacji informacji).

Należy skorzystać z pakietów zawierających tłumaczenie etykiet (ang. bundles). W pakietach tych powinny być uwzględnione warianty (warianty są potrzebne do zmiany sposobu wyświetlania etykiety w zależności np. od liczby opisywanych atrybutów: 1 opis, 2 opisy, 5 opisów).

Powinno też być uwzględnione właściwe formatowanie jednostek.


Materiały: Trail: Internationalization

Temat:
Implementacja wielowątkowej aplikacji o rozszerzalnej funkcjonalności z własnym ładowaczem klas i wykorzystaniem miękkich referencji

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o:
  • Zastosowaniu i własnościach miękkich referencji
  • Programowaniu współbieżnym i klasach pomocniczych
  • Implementacji własnego ładowacza klas
  • Mechanizmach refleksji

Zadanie:
Zadaniem jest stworzenie eksploratora plików graficznych - aplikacja ma umożliwiać nawigację pomiędzy katalogami i wyświetlanie miniaturek zawartych w nich plików graficznych (mogą być jednego typu). Aplikacja powinna też umożliwiać manipulację tymi obrazami - obracanie, robienie negatywu, rozmycie itd.
Słabe referencje powinny być wykorzystane do przechowywania wygenerowanych miniaturek obrazów - w razie potrzeby pamięć ta zostanie zwolniona.
Miniaturki powinny być generowane w osobnym wątku / wątkach - można do tego wykorzystać zarówno podstawowe mechanizmy, jak i klasę SwingWorker, z pomocą klas z pakietu java.util.concurrent (ConcurrentMap itd.)
Wykorzystanie własnego ładowacza klas obejmuje ładowanie "pluginów" do transformacji obrazów - pluginy te powinny być umieszczane w określonym katalogu i wylistowane w stosownym menu w aplikacji. Przynajmniej jedna z ładowanych klas powinna być zależna od innej ładowanej klasy (Rozwijanie klas (resolve)). Typami atrybutów metod mogą być typy podstawowe i typ String oraz tablice jednowymiarowe typów podstawowych i typu String. Wywoływane mogą być metody klasy oraz metody instancyjne (w tym drugim przypadku trzeba wywoływać konstruktor tworzący odpowiedni obiekt, aby było łatwiej można przyjąć założenie, że istnieje konstruktor bezargumentowy). Załadowane klasy powinno dać się także wyładować

Materiały:
Różnego rodzaju referencje (Łukasz Dembiński)
Wątki (dr Tomasz Kubik)
SwingWorker (dr Tomasz Kubik)
ClassLoader (JournalDev)
ClassLoader (Oracle Tutorial)
ClassLoader (dr Tomasz Kubik)
Reflection API (dr Tomasz Kubik)

Temat:
Projekt aplikacji rozproszonej o zadanej funkcjonalności z aplikacjami wykorzystującymi ziarna Javy.

Wymagania:
  • Wiedza o wzorcach projektowych wykorzystywanych przy tworzeniu ziaren Javy, mechanizmie introspekcji i tworzeniu włączanych do projektów paczek jar z odpowiednim manifestem
  • Umiejętność tworzenia aplikacji rozproszonych z wykorzystaniem RMI

Zadanie:
Ogólny opis aplikacji:
Swtórz grę polegającą na zarządzaniu załogą statku kosmicznego (pomysł oparty na grze Spaceteam).
W grze występują dwie role graczy:
  • kapitan - jego rolę może pełnić tylko jedna osoba
  • załoga - może (a nawet powinna ;)) pełnić ją więcej niż jedna osoba

Kapitan posiada odrębny, w stosunku do załogi, ekran gry. Na jego panelu wyświetlają się polecenia, które musi wydać załodze (np. ustaw moc silników na 3). Posiada także pole informujące o aktualnej liczbie punktów, a także przyciski pozwalające na rozpoczęcie lub zakończenie gry. Załoga posiada ekran gry reprezentujący panel sterowniczy złożony z przyrządów różnego typu reprezentowanych za pomocą suwaka, listy, radio buttonów, pola tekstowego. Panel posiada swoją nazwę (np. Sterownia silnika), podobnie jak i każdy przyrząd (np. moc silników). Część z przyrządów może być aktywna, a część nie.
Każdy gracz posiada swój indywidualny panel.

Gra polega na głosowym wydawaniu poleceń wyświetlonych na panelu przez kapitana załodze po rozpoczęciu rozgrywki. Polecenia te dotyczą ustawienia wartości konkretnego przyrządu na zadaną wartość. Z racji, że każdy członek załogi powinien posiadać indywidualny zbiór przyrządów, są one skierowane do konkretnego członka załogi.
Za poprawne wykonanie polecenia (ustawienie danego przyrządu na określoną wartość) przyznawany jest jeden punkt, za niepoprawne (zły przyrząd / zła wartość) odejmowany jest jeden.
Po poprawnym lub niepoprawnym wykonaniu polecenia pojawia się nowe do czasu zakończenia gry przez kapitana. Można wprowadzić ograniczenie czasowe na wykonanie polecenia.

Implementacja:
Gra powinna składać się z 3 części:
  • Pojedynczej aplikacji dla kapitana
  • Pojedynczej aplikacji serwera
  • Kilu wariacji aplikacji załogi

Komunikację pomiędzy aplikacjami należy zrealizować za pomocą mechanizmu RMI.

Aplikacja kapitana powinna pobierać listę graczy z serwera, umożliwiać rozpoczęcie i kończenie gry, zbierać informacje o działaniu aplikacji załogi podlicząc punkty, a także generować kolejne (wykonywalne) komendy.

Serwer powinien przyjmować połączenia kolejnych graczy, wyświetlać ich listę i umożliwić wyrzucenie ich z gry ("wykickowanie").

Aplikacje załogi, każda reprezentująca osobny panel, powinny być do siebie podobne - zawierać te same typy przyrządów (niektóre niedostępne - zablokowane), ale odpowiadających za równe funkcje, o różnych możliwych wartościach. Dobrym pomysłem byłaby realizacja ogólnej reprezentacji panelu, którą możnaby w zależności od aplikacji, dowolnie dostosowywać. Można to zrealizować przy pomocy zaimplementowanego jednorazowo komponentu Java Beans. Komponent powinien być zbudowany z nazwy panelu, kilku typów przyrządów (wspomniany suwak, lista, radio buttony, pola tekstowe) wraz z ich nazwami.
Ziarno powinno posiadać: właściwości wszystkich możliwych typów (proste, ograniczone, wiązane), graficzną reprezentację oraz klasę opisową BeanInfo z klasami pomocniczymi edytorów (należy zwrócić uwagę na metodę getJavaInitializationString) i customizera (należy zwrócić uwagę na metodę setObject), służącymi do zmian właściwości ziarenka.

Właściwościami panelu powinny być co najmniej:
  • nazwa panelu (właściwość prosta)
  • nazwy poszczególnych przyrządów
  • informacja o włączeniu / wyłączeniu poszczególnych przyrządów
  • rozmiar pola tekstowego (właściwość wiązana)
  • graniczne wartości przyrządów (właściwość ograniczona)

Ziarno powinno być zastosowane dla kolejnych aplikacji poprzez uprzednie utworzenie paczki jar ze wszystkimi klasami niezbędnymi do jego funkcjonowania, włączeniu do każdej z aplikacji, a następnie wstawienie na wybrany panel z pomocą wizarda i odpowiednie dostosowanie go.

Materiały:
Java Beans (dr Tomasz Kubik)
przykłady ziaren (dr Tomasz Kubik)
RMI (Oracle Java Tutorial)
RMI (dr Tomasz Kubik)
RMI (Jay Sridhar)

Temat:
Wykorzystanie bazy danych w aplikacji przeznaczonej do przetwarzania dużych zbiorów danych.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o sposobach komunikacji z bazami danych za pomocą JDBC (choć istnieją frameworki ORM pozwalające na tworzenie aplikacji z warstwą danych, jednak nie będą one wykorzystane - chodzi tu o stworzenie aplikacji korzystającej bezpośrednio z JDBC). Ponadto wymagana będzie znajomość sposobów przetwarzania plików XML w języku Java za pomocą JAXB.

Zadanie:
Ogólny opis aplikacji:
Zaimplementowana aplikacja powinna służyć do klasyfikowania bakterii o zadanym genotypie.

Genotyp bakterii stanowić będzie ciąg 6 cyfr, przykładowo:

351244

Genotyp ten koduje trzy geny:
  • 34 - alpha
  • 54 - beta
  • 12 - gamma


Geny alfa i beta odpowiadają za kodowanie liczby wici (1, 2, 3...) , natomiast beta i gamma - klasę twardości błony komórkowej (a, b, c...).

Aplikacja ma za zadanie służyć do klasyfikacji nieznanych wcześniej osobników na podstawie ich genotypów i zapisywać pomiar do bazy do odpowiedniej tabeli - w przypadku istnienia pomiaru dla danego genotypu ma być aktualizowany.

Do klasyfikacji posłużyć ma algorytm 1-NN wraz z bazą przebadanych wcześniej (można wygenerować dane losowo, ale postaram się zamieścić też jakieś przykładowe dane).

Przykładowy fragment bazy danych, zawierajacy informacje o pomiarach liczby wici, klasie twardości dla różnych wartości genów i klasyfikacji badanych został przedstawiony ponizej.




Należy wykorzystać dokładnie wskazane nazwy tabel i atrybutów.
Do realizacji zadania można wykorzystać dowolną bazę danych (MS SQL, Oracle, a także plikowe - SQLite itd.)

Aplikacja powinna:
  • Umożliwić podłączenie do bazy danych pod dowolnym adresem / nazwą pliku
  • Wyświetlać listę historii przebadanych osobników wraz z klasyfikacją (wykorzystać procedury zapisane)
  • Zapisywać listę przebadanych osobników do pliku XML
  • Pozwalać na klasyfikację pojedynczego osobnika (wraz z natychmiastową informacją o klasyfikacji i zapisaniu do historii)
  • Pozwalać na klasyfikację wielu osobników (wykorzystanie transakcji przy zapisywaniu do historii)
  • Minimalizować liczbę zapytań do bazy danych.
  • Wykorzystywać zapytania parametryzowane

Materiały:
JDBC (dr Tomasz Kubik)
Algorytm k-nn (Wikipedia)
JAXB (Vogella)

Temat:
Implementacja prostej aplikacji sieciowej i serwerowej.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o gniazdach, protokole HTTP, SOAP, XML i wdrażaniu aplikacji serwerowych. Choć kurs dotyczy głównie stosu technologii JAVA SE podczas realizacji zadania można posiłkować się wiedzą z zakresu Java EE, w szczególności wiedzą o frameworku Apache Axis2 (http://axis.apache.org/axis2/java/core/).

Zadanie:
Zaprojektuj architekturę rozproszonego systemu, w którym wymiana informacji bazuje na wykorzystaniu SOAP. Architektura ta może przyjąć formę "pierścienia", "gwiazdy", "łańcucha" lub ich kombinacji. Zaimplementuj węzły takiego systemu. Implementację można oprzeć się na gniazdach TCP/IP lub na frameworku Apache Axis/Axis2. System może służyć do rozsyłania komunikatów pomiędzy węzłami (adresowanych bezpośrednio do jakiegoś węzła lub rozsyłanych do wszystkich węzłów). Węzły uruchamiane są jako osobne aplikacje, na interfejsie których wyświetlane są wiadomości przychodzące oraz redagowane są wiadomości wychodzące. Do realizacji logiki przesyłania komunikatów należy wykorzystać możliwości, jakie dostarcza protokół SOAP (a więc pola części head), zaś sama treść komunikatów powinna być przenoszona w części transportowej (a więc w części body). Do realizacji zadania (gdy wykorzystuje się gniazda TCP/IP) można użyć pakiet javax.xml.soap.*.

W szczególności architektura systemu może przyjąć postać jak na schemacie poniżej (strzałki pokazują kierunek przepływu komunikatów).




Każdy z węzłów powinien być parametryzowany nazwą, numerami portów, oraz atrybutem mówiącym o jego umiejscowieniu w architekturze (tu: numerem warstwy). W tym konkretnym przypadku wiadomości wychodzące można adresować do wszystkich węzłów w tej sieci, do węzłów danej warstwy, do konkretnych węzłów.

Materiały:
Rozwiązania sieciowe (dr Tomasz Kubik)
SOAP (Wikipedia)

Temat:
Wykorzystanie szyfrowania oraz polityki bezpieczeństwa przy ładowaniu klas.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o kluczach, cyfrowym podpisywaniem paczek jar, weryfikacji podpisów.

Zadanie:
Napisz program, który pozwoli użytkownikowi zaszyfrować i rozszyfrować dany plik. Program powinien korzystać z klasy, która została dostarczona w podpisanej cyfrowo paczce jar. Podczas realizacji zadania należy wygenerować klucz prywatny i publiczny. Należy podpisać cyfrowo jar zawierający skompilowane klasy. Należy wykorzystać pliki polityki i zezwolenia (permissions).

Materiały:
Security Features in Java SE (Oracle)
Signed Classes (JavaSecurity)

Temat:
Przygotowanie wdrożenia aplikacji Java.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o JavaWS oraz JNLP.

Zadanie:
Napisz program, który można będzie uruchomić poprzez JavaWS. Podczas realizacji zadania należy wygenerować plik JNLP i skorzystać z lokalnej instacji serwera Apache Tomcat (na nim opublikowane powinny być plik JNLP oraz jar z aplikacją). Program powinien być aplikacją okienkową (Swing / JavaFX) realizującą dowolną funkcjonalność - przykładowo prosty kalkulator.

Temat:
Rozbudowa wybranej aplikacji Java o funkcje zaimplementowane w kodzie natywnym.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o sposobie implementacji i wykorzystaniu metod natywnych (JNI). Niezbędna będzie znajomość tematu tworzenia bibliotek ładowanych dynamicznie w języku C/C++.

Zadanie:
Napisz program z wykorzystaniem JNI, w którym zostanie wykorzystana klasa posiadająca metody natywne służące do obliczania iloczynu skalarnego dwóch wektorów. Schemat implementacji tej klasy powinien być taki, jak pokazano poniżej. W trakcie implementacji należy zwrócić uwagę na właściwą alokację i zwalnianie pamięci po stronie kodu natywnego oraz na zgodność bitową JVM oraz bibliteki ładowanej dynamicznie (32/64 bit). Do realizacji zadania można wykorzystać dowolne kompilatory języka C/C++ (niezbędne do wygenerowania biblioteki ładowanej dynamicznie).


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class DotProduct {
    private Double[] a;
    private Double[] b;
    private Double c;

    public Double[] getA(){}
    public Double[] getB(){}
    public double getC(){}

    public void setA(Double[] a){}
    public void setB(Double[] b){}
    public void setC(double c){}

    /*
    zakładamy, że po stronie kodu natywnego wyliczony zostanie iloczyn skalarny dwóch wektorów
     */
    public native Double multi01(Double[] a, Double[] b);

    /*
    zakładamy, że drugi atrybut będzie pobrany z obiektu przekazanego do metody natywnej
     */
    public native Double multi02(Double[] a);

    /*
    zakładamy, że po stronie natywnej utworzone zostanie okienko na atrybuty,
    a po ich wczytaniu i przepisaniu do a,b obliczony zostanie wynik.
    Wynik powinna wyliczać metoda Javy multi04
    (korzystająca z parametrów a,b i wpisująca wynik do c).
     */
    public native void multi03();

    private void multi04(){
        // mnoży a i b, wynik wpisuje do c
    }
}


Materiały:
Java Native Interface (JNI) (Chua Hock-Chuan (ehchua@ntu.edu.sg))

Temat:
Projekt aplikacji do testowania algorytmów w problemach sztucznej inteligencji poprzez wykorzystanie skryptów.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o wykorzystaniu silnika Nashorn interpretującego JavaScript razem z aplikacjami Java.

Zadanie:
Napisz program służący do gry w kółko i krzyżyk człowieka z komputerem na planszy o zadanym rozmiarze (wygrywa zawodnik, który ustawi 5 sąsiadujących ze sobą znaków w rzędzie/kolumnie/po ukosie). Program powinien korzystać z rozszerzeń - skryptów JavaScript dostarczających metod do generowania kolejnych ruchów według jakiejś strategii oraz z odpowiednim poziomem trudności. Skrypty powinny być wczytywane ze wskazanego katalogu w sposób dynamiczny (powinno dać się zmienić strategię i poziom trudności - a więc skrypt i metodę w nim zdefiniowaną w trakcie gry). Można założyć, że metody generujące kolejne ruchy mają taką samą listę atrybutów oraz zwracają wartości takiego samego typu - np. pobierają "planszę" a zwracają współrzędne "strzału". W szczególności w załadowanych skryptach można wykorzystać klasy Java.

Materiały:
Java 8 Nashorn Tutorial (Benjamin Winterberg)

Temat:
Implementacja i uruchomienie aplikacji bazującej na JavaFX.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza o tworzeniu aplikacji z wykorzystaniem JavaFX.

Zadanie:
Zaimplementuj aplikację z Laboratorium 2 korzystając z JavaFX.

Materiały:
Getting Started with JavaFX (Oracle)

Zadanie dodatkowe przewidziane jest dla osób, które posiadają średnią ocen z laboratoriów większą od 5.0 i chciałyby otrzymać ocenę końcową 5.5.

Temat:
Aplikacja na platformę Android.

Wymagania:
Do realizacji zadania potrzebna będzie wiedza na temat programowania na platformę Android, bibliotek RxJava oraz Retrofit.

Zadanie:
Aplikacja, funkcjonująca na platformie Android, powinna móc pobrać dane (sformatowane jako JSON) z API za pomocą biblioteki Retrofit (wykorzystując przykładowo paremetry typu GET) i RxJava, przetworzyć je (np. wykorzystując mapowanie) i wyświetlić.

Przykładowo, aplikacja może pobrać listę postów danego użytkownika z przykładowego API zamieszczonego w materiałach, wyfiltrować te o zadanej długości a następnie zmapować na wyświetlone później w postaci listy tytuły.

Termin oddania:
27.06.18

Materiały:
Getting started with Android development
RxJava
Retrofit
Przykładowe API