Serwisy internetowe Uniwersytetu Warszawskiego Nie jesteś zalogowany | zaloguj się
katalog przedmiotów - pomoc

Języki i narzędzia programowania II

Informacje ogólne

Kod przedmiotu: 1000-224bJNP2 Kod Erasmus / ISCED: 11.302 / (brak danych)
Nazwa przedmiotu: Języki i narzędzia programowania II
Jednostka: Wydział Matematyki, Informatyki i Mechaniki
Grupy: Przedmioty obowiązkowe dla II roku informatyki
Przedmioty obowiązkowe dla III roku JSIM - wariant 3I+4M
Przedmioty obowiązkowe dla IV roku JSIM - wariant 3M+4I
Punkty ECTS i inne: 2.00
Język prowadzenia: polski
Rodzaj przedmiotu:

obowiązkowe

Wymagania (lista przedmiotów):

Wstęp do programowania (podejście imperatywne) 1000-211bWPI

Skrócony opis:

Celem tego przedmiotu pokazanie studentom konkretnych języków i narzędzi programistycznych.

Pełny opis:

Celem tego przedmiotu pokazanie studentom konkretnych języków i narzędzi programistycznych. Dynamiczny rozwój informatyki pwoduje, że stale powstają nowe języki, środowiska i technologie informatyczne. Zestaw języków i narzędzi, o których warto by było opowiedzieć studentom, poszerza się z każdym rokiem. Są to zagadnienia bardzo ważne dla każdego, kto chce zajmować się praktycznymi zastosowanieami informatyki. Z drugiej strony program zajęć uniwersyteckich jest w naturany sposób nakierowany na przedstawianie tych zagadnień, które są ogólne i w małym stopniu zależne od aktualnych trendów. Nie ma też możliwości pomieszczenia w nim wszystkich pojawiających się nowości. Chcąc pogodzić ze sobą te dwie sprzeczne ze soba potrzeby (nowości i stabilności) wprowadzamy do naszego planu zajęć 30-godzinne kursy.

Literatura:

Specyficzna dla danego kursy (zwykle będzie to dokumentacja języka programowania i jego środowiska bądź dokumentacja przedstawianego narzędzia).

Efekty uczenia się:

Wiedza

* Zna szczegółowo wybrane narzędzie lub język programowania [K_W02, K_W09, K_W10].

Umiejętności

* Umie pozyskiwać informacje z literatury, baz wiedzy, Internetu oraz innych wiarygodnych źródeł, integrować je, dokonywać ich interpretacji oraz wyciągać wnioski i formułować opinie (K_U02)

* Umie samodzielnie planować i realizować własne uczenie się przez całe życie (K_U09).

* Umie ocenić, na podstawowym poziomie, przydatność rutynowych metod i narzędzi informatycznych oraz wybrać i zastosować właściwą metodę i narzędzia do typowych zadań informatycznych (K_U18).

* Umie planować i organizować pracę indywidualnie i w zespole, także o charakterze interdyscyplinarnym; zarządzać swoim czasem oraz podejmować zobowiązania i dotrzymywać terminów (K_U29).

Kompetencje społeczne:

* Student jest gotów do krytycznej oceny posiadanej wiedzy i odbieranych treści (K_K01).

* Student jest gotów do pracy z zachowaniem uczciwości intelektualnej w działaniach własnych i innych osób; przestrzegania zasad etyki zawodowej i wymagania tego od innych oraz dbałości o dorobek i tradycje zawodu informatyka (K_K02).

* Student jest gotów do uznawania znaczenia wiedzy w rozwiązywaniu problemów poznawczych i praktycznych oraz wyszukiwania informacji w literaturze oraz zasięgania opinii ekspertów (K_K03).

Metody i kryteria oceniania:

Praca zaliczeniowa. Szczegóły podane przez prowadzącego zajęcia w grupie.

Zajęcia w cyklu "Semestr letni 2020/21" (zakończony)

Okres: 2021-02-22 - 2021-06-13
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Ćwiczenia, 30 godzin więcej informacji
Koordynatorzy: Zbigniew Jurkiewicz
Prowadzący grup: Wojciech Dubiel, Paweł Gołąb, Michał Gruchała, Grzegorz Grudziński, Zbigniew Jurkiewicz, Paweł Kucharczyk, Paweł Rubach, Witold Rudnicki, Michał Sierakowski
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Pełny opis:

*** Grupa 1: Programowanie w języku Common Lisp - Zbigniew Jurkiewicz

Common Lisp jest standardem ANSI języka programowania Lisp, używanego m.in. w sztucznej inteligencji, lingwistyce obliczeniowej, semantyce języków programowania itp. Napisano w nim m.in. większość dużych programów opartych na wiedzy. Celem zajęć będzie zapoznanie uczestników z nowoczesnymi konstrukcjami tego języka oraz pokazanie zalecanego stylu programowania. Omówione też zostaną niektóre standardowe rozszerzenia, np. dla interfejsu graficznego (CLX itp.), sieci czy dostępu do baz danych.

Wśród omawianych tematów znajdą się:

• Uogólnione listy parametrów funkcji. Zwracanie wielu wartości. Funkcje wyższych rzędów.

• Uogólnione przypisanie. Zmienne leksykalne i dynamiczne.

• Konstrukcje sterujące jako makra — możliwość definiowania własnych. Rozszerzalność języka: makra lokalne, identyfikatory jako makra. Problemy higieny. Ciekawe konstrukcje standardowe: LOOP, FLET, LABELS.

• Wbudowane typy danych. Sekwencje: uogólnienie list, wektorów i napisów. Wektory rozszerzalne, wektory zmiennej długości. Listy i pary, DESTRUCTURING-BIND. Struktury hierarchiczne. Tablice haszujące, inne słowniki. Pojecie desygnatora obiektów danego typu.

• Pakiety i symbole. Symbole kluczowe. Organizacja przestrzeni nazw.

• Strumienie I/O. Nazwy ścieżkowe. Napisy jako strumienie. Konstrukcje WITH-...

• Konfigurowalne czytanie i pisanie (także systemowe). Makra czytania, readtables. PRINT-OBJECT.

• CLOS. Klasy, funkcje generyczne, metody. Wielodziedziczenie. Kombinacje metod.

• Meta Object Protocol. Metaklasy, prototypy klas. Rozszerzalność części obiektowej, próby uogólnienia dispatch.

• Warunki = uogólniony obiektowy system obsługi wyjątków. Trójstopniowa obsługa: sygnalizacja–>handling–>restart. Nielokalne wyjście: BLOCK + RETURN-FROM. Bezpieczne zwalnianie zasobów: UNWIND-PROTECT.

• Foreign Function Interface: CFFI, Swig. CLX i interfejsy graficzne (np. Gtk). Common Lisp Interface Manager.

• Infrastruktura: kompilacja warunkowa, obliczenia w trakcie kompilacji.

Automatyzacja ładowania pakietów: DEFPACKAGE, ASDF, Quicklisp. Zasoby sieciowe, Quickdoc, CLiki.

Przewidujemy używanie SBCL — publicznej implementacji Common Lispu, wywodzącej sie z CMU Common Lisp.

Kryterium oceniania:

- 3 zadania programistyczne po 10 pkt

- ocena dostateczna od 60%, czyli od 18 pkt

*** Grupa 2: Architektura i tworzenie współczesnych aplikacji webowych (+ programowanie reaktywne) Paweł Gołąb

Aplikacje webowe dawno przerosły rozmiarem proste liczniki odwiedzin i obecnie często stanowią pełnoprawne aplikacje, nieodróżnialne dla użytkowników od aplikacji na komputery stacjonarne.

Celem kursu jest zapoznanie się z trendami i pomysłami na efektywną odpowiedź na wyzwania pojawiające się wraz z ciągle rosnącą złożonością wymagań.

Kurs będzie związany z programowaniem w JavaScript, ale pojęcia takie jak zarządzanie stanem, czy programowanie reaktywne z powodzeniem przenoszą się na inne architektury.

Zagadnienia:

* Zarządzanie stanem aplikacji

* Selektory i Immutable

* Programowanie reaktywne na przykładzie RxJS

* Sagi

* React i React Native

* CSS-in-JS

Kryterium oceniania:

- za zadanie zaliczeniowe będzie można otrzymać maksymalnie 50 punktów

- progi ocen:

- 45-50 = 5

- 35-44 = 4

- 25-34 = 3

- 0-24 = 2

*** Grupa 3: Architektura i infrastruktura mikroserwisów w aplikacjach internetowych - Michał Gruchała

Celem zajęć będzie przedstawienie nowoczesnych technik budowy skalowalnych i wydajnych aplikacji internetowych, które składają się z wielu mikroserwisów, wykorzystują komunikację synchroniczną i operacje asynchroniczne. Jako przykład implementacji tych technik będziemy budować aplikację typu twitter, która zostanie zrealizowana w architekturze mikroserwisów, skonteneryzowana oraz wydana w środowisku Cloud.

W ramach zajęć będziemy używać technologii / poruszać następujące zagadnienia:

Architektura aplikacji www, z naciskiem na architekturę mikroserwisów

Konteneryzacja aplikacji (na przykładzie Kubernetes / Docker)

Komunikacja synchroniczna (http) i asynchroniczna (rabbitMQ)

Środowisko chmurowe

Zajęcia odbywać się będą w formie warsztatów, gdzie uczestnicy będą tworzyć własne rozwiązania oparte o prezentowane techniki.

Kryterium oceniania:

- za zadanie zaliczeniowe, polegające na napisaniu i zaprezentowaniu aplikacji sieciowej, będzie można otrzymać maksymalnie 10 punktów

- ocena dostateczna od 6 pkt

*** Grupa 4: Programowanie systemowe z/OS - Michał Sierakowski

Celem przedmiotu jest wprowadzenie słuchaczy w zagadnienia administracji i programowania systemu operacyjnego z/OS, a jego zamierzonym efektem jest umiejętność zarządzania prostymi instancjami z/OS w całym spektrum funkcjonalności. Program obejmuje ponadto wprowadzenie do architektury komputerów IBM Z i najważniejszych (poza z/OS) systemów operacyjnych tej platformy: z/VM i Linux (s390x). Jest to przedmiot komplementarny do prowadzonych w ramach JNPIII 1000-225bJNP3 zajęć Wstęp do programowania w z/OS (grupa 3). Obydwa przemioty mogą być realizowane w dowolnym porządku chronologicznym, jak również jako odrębne moduły funkcjonalne.

Program:

1. Wprowadzenie do architekruty i systemów operacyjnych serwerów rodziny IBM Z

2. Praca interaktywna w sesji TSO, procedury CLIST

3. ISPF/PDF, zarządzanie zadaniami (kolejki SDSF)

4. Model bezpieczeństwa systemu z/OS (RACF)

5. Język sterowania zadaniami JCL i język REXX

6. z/OS UNIX System Services

7. Komendy operatorskie, operacje konsoli sprzętowej i definiowanie konfiguracji IODF

8. Konfiguracja komunikacji międzysystemowej i zarządzanie stosem TCP/IP

9. Operacje instalacji, startu (IPL) i zatrzymania systemu

10. Zarządzanie podstawowymi usługami: DFSMS, CICS, DB2 w deweloperskiej wersji systemu (ADCD)

Efekty kształcenia:

1. Ma zaawansowaną wiedzę na temat architektury IBM Z oraz struktury systemu operacyjnego z/OS

2. Konfiguruje i posługuje się mechanizmami środowiska z/OS (zarządzanie sesją, sterowanie systemem i wybranymi podsystemami)

3. Potrafi interpretować komunikaty systemowe i diagnozować błędy środowiska związane ze stanem systemu operacyjnego

4. Zarządza deweloperską wersją systemu z/OS (ADCD)

Literatura:

A. Salla, P. Oughton, ABCs of z/OS System Programming Volume 10, IBM International Technical Support Organization, 2018

K. Singh et al., ABCs of z/OS System Programming Volume 6, IBM International Technical Support Organization, 2014

L. Parziale, L. Fadel, S. Jon, ABCs of z/OS System Programming Volume 1, IBM International Technical Support Organization, 2018

L. Parziale, G. Cosimo, L. Kuehner, ABCs of z/OS System Programming Volume 2, IBM International Technical Support Organization, 2018

Kryterium zaliczania:

- ocena końcowa na podstawie punktów z zadań realizowanych podczas zajęć (50%) oraz egzaminu (50%)

*** Grupa 5 i 6: Architektura i integracja systemów informatycznych - Paweł Rubach

Celem zajęć będzie zapoznanie studentów z szeroko rozumianą tematyką architektury i integracji systemów informatycznych. W ramach tego zagadnienia omówione zostaną następujące tematy:

- Przegląd historyczny architektur systemów informatycznych

- Rozwój rozwiązań typu middleware.

- Język XML i usługi sieciowe (Web Services), protokoły SOAP i REST

- Rozwiązania scentralizowane (Platformy integracyjne)

- Rozwiązania zdecentralizowane: szyny usługowe (Enterprise Service Bus).

- Transformacja wiadomości i adaptery w szynach usługowych

- Routing wiadomości w szynach usługowych.

- Język wykonywania procesów biznesowych (BPEL).

- Technologie zdalnego wywoływania procedur.

- Przetwarzanie asynchroniczne i systemy kolejkowe (JMS).

- Architektura mikrousługowa.

- Konteneryzacja (Docker/Kubernetes).

- Wirtualny metakomputer i Object Oriented Architecture (platforma SORCER).

- Zdecentralizowane platformy obliczeniowe (Golem Network).

Przedstawiane technologie będą demonstrowane a studenci będą mieli okazję do przećwiczenia instalacji/konfiguracji oraz stworzenia przepływów/programów w powyższych technologiach. Wskazana jest podstawowa znajomość języka Java. Zaliczenie będzie się opierać na indywidualnym lub grupowym projekcie zrealizowanym w oparciu o jedną z omawianych technologii.

Kryteria oceniania:

- na ocenę składają się 2 prace śródsemestralne, za które student może otrzymać po 10 punktów oraz projekt końcowy wart 20 punktów, razem do zdobycia jest 40 punktów,

- ocena dostateczna od 21 punktów.

*** Grupa 7: * - Wojciech Dubiel

Grupa jest częścią projektu TAG. Ocena z przedmiotu jest oceną z tego projektu. Szczegóły: ihttps://sio2project.mimuw.edu.pl/display/~accek/Zasady+zaliczania+TAG-a

*** Grupa 8: Pisanie narzędzi do Oracle przy użyciu C++ oraz QT - Paweł Kucharczyk

Studenci będą pracowali nad rozwojem narzędzia Tora, które może służyć do tworzenia kodu oraz administracji Oracle (i jeszcze kilkoma innymi bazami). Narzędzie jest pisane w C++, z wykorzystaniem Qt - stąd wymagania. Działa przede wszystkim pod Linuksem, ale może być kompilowane dla Windows i Maca. W trakcie zajęć będą omawiane zagadnienia dotyczące zarządzania Oraclem - zakres materiału będzie dopasowywany do tych fragmentów/narzędzi z narzędzia Tora, które studenci wybiorą do pracy. Studenci będą też - „w poszukiwaniu inspiracji” - oglądali konkurencyjne narzędzia jak SQL*Developer, Enterprise Manager, Toad.

Kryteria oceniania:

Ocena na podstawie dwu etapowego projektu zaliczeniowego, za który można dostać łącznie 15 pkt. (I etap - 5, II etap - 10). W czasie zajęć będzie też można uzyskać do 3 pkt. 'aktywność' - np. w przygotowania i wygłoszenia prezentacji na temat jakiś aspektów QT. Ocena dostateczna od 8pkt.

*** Grupa 9: Android - Grzegorz Grudziński

Tematem moich zajęć będzie środowisko Android, podstawowym językiem będzie Java. Będziemy omawiać budowę systemu, model budowy aplikacji dla niego, przejrzymy poszczególne API potrzebne przy budowie aplikacji o rozmaitej tematyce/funkcjonalności. Postaramy się zapoznać ze wszystkimi najważniejszymi obszarami funkcjonalnymi spotykanymi we współczesnych aplikacjach mobilnych: interfejsem użytkownika, pracą kodu w tle, komunikacją sieciową, API geolokalizacyjnym, obsługą czujników telefonu. Dla zaliczenia przedmiotu, studenci będą musieli (samodzielnie lub w grupach 2-3 osobowych) stworzyć jakieś ciekawe (choć niekoniecznie bardzo skomplikowane) aplikacje.

*** Grupa 10: Programowanie kart graficznych w technologii CUDA - Witold Rudnicki

Celem przedmiotu jest zapoznanie studentów z dynamicznie rozwijającym się obszarem informatyki czyli praktycznym wykorzystaniem masywnie równoległych procesorów graficznych. CUDA - technologia zaproponowana i rozwijana przez firmę NVIDIA dominuje w obliczeniach naukowych ponieważ pozwala na stosunkowo szybkie opracowanie wydajnych kodów obliczeniowych.

W ramach zajęć poruszone będą następujące zagadnienia:

* Omówienie architektury procesorów graficznych,

* Omówienie architektury sprzętowej komputerów realizujących obliczenia z wykorzystaniem kart graficznych,

* Model programowania na kartach graficznych,

* Implementacja modelu programowania GPU w CUDA

* Analiza równoległości problemów obliczeniowych

* Ograniczenia wydajności algorytmów równoległych

- pamięć (przepustowość i latencja)

- komunikacja (przepustowość i latencja)

- operacje GPU (wydajności różnych operacji)

- zapełnienie równoległych potoków przetwarzania

* Optymalizacja wydajności algorytmów

- identyfikacja wąskich gardeł

- analiza alternatywnych rozwiązań

- techniki optymalizacji.

Studenci zapoznają się z tymi problemami w praktyce, implementując

wybrane algorytmy obliczeniowe w języku CUDA C/C++.

Kryteria oceniania:

- zaliczenie na podstawie zadań wykonywanych w laboratorium w trakcie semestru,

- sześć zadań o wzrastającym stopniu trudności; zadania będą punktowane w następujący sposób: zadania 1,2 : 2 pkt, zadania 3,4: 3 pkt, zadanie 5: 4 pkt, zadanie 6: 5 pkt,

- do zaliczenia konieczne jest oddanie poprawnych rozwiązań wszystkich sześciu zadań (uzyskanie co najmniej połowy punktów za każde z nich),

- ocena dostateczna od 13 pkt, ocena dost+ 14-15 pkt, ocena dobra 16-17 pkt, ocena db+ 18pkt, ocena bdb 19-20 pkt.

Zajęcia w cyklu "Semestr letni 2021/22" (jeszcze nie rozpoczęty)

Okres: 2022-02-21 - 2022-06-15

Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Ćwiczenia, 30 godzin więcej informacji
Koordynatorzy: Zbigniew Jurkiewicz
Prowadzący grup: Paweł Gołąb, Grzegorz Grudziński, Zbigniew Jurkiewicz, Paweł Kucharczyk, Witold Rudnicki, Michał Sierakowski, Tomasz Waleń
Lista studentów: (nie masz dostępu)
Zaliczenie: Zaliczenie na ocenę
Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Uniwersytet Warszawski.