Języki i narzędzia programowania II

W cyklu 2021L:

*** Grupa 1: C# i .NET - Mateusz Gienieczko

C# to nowoczesny, wieloparadygmatowy język programowania oparty na multiplatformowym środowisku .NET. Skupia się na wygodzie i produktywności programisty, nie poświęcając przy tym bezpieczeństwa dzięki automatycznemu zarządzaniu pamięcią i rozbudowanej statycznej analizie.

Celem zajęć będzie zapoznanie studentów z językiem C# i platformą .NET w praktyce, skupiając się na przykładowych programach i aplikacjach oraz ideach przyświecających projektantom C#-a. Porównane zostanie programowanie w C# do innych popularnych języków (Python, Java, C++, Rust, Go).

Kurs będzie warsztatowy, oparty w dużej mierze na kodzie oraz interaktywnych notebookach, dzięki czemu studenci będą mogli własnoręcznie uruchamiać programy z zajęć i eksperymentować z językiem.

Poglądowy program przedmiotu:

- Podstawy języka, architektura platformy .NET

- Typy referencyjne i wartości

- Wyjątki

- Testowanie z xUnit

- Typy generyczne w .NET-cie

- Nullability, Nullable Reference Types

- Rekordy

- Kolekcje

- LINQ i extension methods

- Pattern matching

- Iterator methods (generatory)

- Asynchroniczność z async/await

- Parallelizm z PLINQ

- Bazy danych - Entity Framework

- Aplikacje webowe - Blazor i ASP.NET Core

- Dynamiczne typowanie

- Zaawansowane programowanie zorientowane na wydajność - ref structs, szczegóły Garbage Collectora, minimalizowanie alokacji, benchmarki

- Przyszłość C#-a - proces tworzenia nowych feature'ów, static abstracts, discriminated unions, span params, pattern matching improvements, required properties

Zasady zaliczania:

Po zajęciach studenci dostaną małe zadanie domowe utrwalające materiał z ćwiczeń. Zadania będą udostępniane i sprawdzane przez GitHub Classroom. Dodatkowo, jedno zadanie będzie duże i będzie polegało na stworzeniu od zera małej aplikacji w C#.

Orientacyjna punktacja:

- 10 mikrozadań po 2 punkty, razem 20pkt.

- Duże zadanie za 20pkt.

Ocena dostateczna od 21pkt.

Zasoby:

- Dokumentacja .NET-a:

- Podręcznik C#-a:

- Podręcznik Blazora:

- Podręcznik Entity Framework:

Literatura:

- J. Albahari, C# 9.0 in a Nutshell (2021)

- J. Skeet, C# in Depth, 4th Edition (2019)

*** 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: * - Tomasz Waleń

Grupa jest częścią projektu TAG. Ocena z przedmiotu jest oceną z tego projektu. Szczegóły:

*** Grupy 4 i 9 - Andrzej Głuszak i Piotr Wojtczak

Rust jest nowoczesnym kompilowanym językiem programowania o szerokim spektrum zastosowań. Cechuje go wydajność zbliżona do C czy C++, bezpieczeństwo w zarządzaniu pamięcią mimo braku garbage collectora, bogaty system typów i wygodne programowanie współbieżne. Rust jest uwielbiany przez programistów, o czym świadczy zajmowana od 6 lat pozycja lidera w rankingach StackOverflow

Zagadnienia

* Wprowadzenie. Ekosystem języka Rust. Rustup, Cargo, Clippy, Rustfmt. “Hello world”.

* Własność. Borrow checker - najważniejsza innowacja Rusta. String vs &str, Vec vs &[T].

* Typy danych. Struktury i enumeracje. Pattern matching.

* Crate i moduły. Obsługa zależności.

* Eksplicytna obsługa błędów. Typ Result zamiast wyjątków, typ Option zamiast nulla.

* Typy generyczne. Trait. Lifetime.

* Wbudowane narzędzia do testowania kodu.

* Programowanie funkcyjne. Iteratory i domknięcia (closures).

* Własność cz. 2. Smart pointery. Analogie i różnice z C++.

* Wprowadzenie do współbieżności w Ruście. “Fearless Concurrency”. Wątki. Biblioteka Rayon. Iteratory równoległe.

* Programowanie asynchroniczne w Ruście. Biblioteka Tokio.

* Przegląd popularnych bibliotek (clap - parsowanie argumentów linii komend, bevy - silnik gier wykorzystujący Entity Component System, iced - biblioteka do budowania GUI, serde - biblioteka do serializacji i deserializacji danych, anyhow - obsługa błędów w aplikacjach)

*** Grupa 5: 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 6: 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 przedmioty mogą być realizowane w dowolnym porządku chronologicznym, jak również jako odrębne moduły funkcjonalne.

Program:

1. Wprowadzenie do architektury 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 7: 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 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 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.

Dostawca oprogramowania dla firm i organizacji każdej wielkości. » Narzędzia programistyczne

Narzędzia programistyczne

Aby cieszyć się dobrym oprogramowaniem potrzebne są narzędzia programistyczne. Wykorzystując najlepsze aplikacje programistyczne i najnowocześniejsze funkcje zarządzania pracami nad produktami można dostarczać rozwiązania wspomagające rozmaite aspekty działalności biznesowej. Niezależnie od tego, czy transformowana jest architektura przedsiębiorstwa, projektowane są całkowicie nowe systemy, czy tworzone oprogramowanie korporacyjne, Twojej firmie zależy, by projekty się udawały. Tak będzie, jeśli wybierzesz właściwe narzędzia.

W tej kategorii prezentujemy wszystkie narzędzia, programy oraz dodatki wykorzystywane w codziennej pracy przez programistów do tworzenia, modyfikowania, testowania lub konserowania aplikacji. Przykładem programów w tej kategorii są wszelakie kompilatory, asemblery, debuggery i zintegrowane środowiska programistyczne. W naszej ofercie znajdują się między innymi silniki baz danych przeznaczone dla deweloperów do tworzonych przez nich aplikacji, dekompilatory aplikacji z platformy .NET a także narzędzia usprawniające funkcjonalność systemu Microsoft Sharepoint.

Centrum Kompetencji – narzędzia programistyczne i testowe

Klient

Firma NXP Semiconductors N.V. zapewnia bezpieczeństwo połączeń i infrastruktury inteligentnych systemów i promuje rozwiązania, dzięki którym życie staje się lepsze, łatwiejsze i bezpieczniejsze. Jako światowy leader w dziedzinie bezpiecznych produktów łączeniowych przedsiębiorstwo wprowadza innowacje w bezpiecznych pojazdach podłączonych do sieci, kompleksowych systemach zabezpieczeń i ochrony prywatności oraz w branży inteligentnych rozwiązań sieciowych.

Wyzwanie

Zespół o szerokim zakresie funkcjonalnym, który wspiera projekty w zakresie rozwoju i walidacji narzędzi testowych.

Co zrobiliśmy

Rozwój środowiska testowego:

Środowisko testowe realizowane w językach obiektowych

Weryfikacja:

Rozwój środowiska testowego i jego utrzymanie

Tworzenie przypadków testowych

Automatyzacja testów interfejsu użytkownika

Debugowanie, analiza i dogłębne badanie błędów

Utrzymanie testaliów

Zarządzanie konfiguracjami:

Jarosław Kułak
Jarosław Kułak

Leave a Comment