Inne - Programowanie
Testy jednostkowe. Zasady, praktyki i wzorce
Vladimir Khorikov
Każdy inżynier oprogramowania zna teoretyczne podstawy testowania. O tym, że sumienne przeprowadzenie testów ma podstawowe znaczenie dla jakości gotowego produktu, nie trzeba nikogo przekonywać. A jednak wciąż zbyt często okazuje się, że zaplanowanie, napisanie i przeprowadzenie testów jednostkowych w praktyce nie jest łatwym zadaniem. Co gorsza, niewłaściwe testy psują kod, mnożą błędy i zabierają mnóstwo cennego czasu i pieniędzy. Okazuje się, że dla uzyskania maksymalnej jakości projektu, który trzeba dostarczyć w krótkim czasie, konieczne jest nauczenie się praktycznego stosowania zasad i wzorców testowania jednostkowego. Jeśli znasz już podstawy testowania jednostkowego, dzięki tej książce nauczysz się projektowania i pisania testów, które obierają za cel model domeny i pozostałe kluczowe obszary kodu. Ten przejrzyście napisany przewodnik poprowadzi Cię przez proces tworzenia zestawów testowych o optymalnej wartości, bezpiecznej automatyzacji testowania i umiejętnego włączania go w cykl życia oprogramowania. W książce znalazły się uniwersalne wskazówki dotyczące analizy dowolnych testów jednostkowych oraz porady odnoszące się do zmian testów następujących wraz ze zmianami kodu produkcyjnego. Nie zabrakło również informacji, dzięki którym sprawnie zidentyfikujesz i wykluczysz ewentualne antywzorce testowania. Materiał został bogato zilustrowany przejrzystymi przykładami kodu napisanego w C#. Naturalnie, mają one zastosowanie także dla innych języków programowania. W książce między innymi: cel testowania jednostkowego i cechy dobrych testów fundamenty porządnego testowania jednostkowego wpływ zaślepek i sterowników na stabilność testów style testowania jednostkowego zalety i ograniczenia testowania integracyjnego Przed wdrożeniem dobrze przetestuj swój kod!
Fedor G. Pikus
The great free lunch of performance taking care of itself is over. Until recently, programs got faster by themselves as CPUs were upgraded, but that doesn't happen anymore. The clock frequency of new processors has almost peaked, and while new architectures provide small improvements to existing programs, this only helps slightly. To write efficient software, you now have to know how to program by making good use of the available computing resources, and this book will teach you how to do that.The Art of Efficient Programming covers all the major aspects of writing efficient programs, such as using CPU resources and memory efficiently, avoiding unnecessary computations, measuring performance, and how to put concurrency and multithreading to good use. You'll also learn about compiler optimizations and how to use the programming language (C++) more efficiently. Finally, you'll understand how design decisions impact performance.By the end of this book, you'll not only have enough knowledge of processors and compilers to write efficient programs, but you'll also be able to understand which techniques to use and what to measure while improving performance. At its core, this book is about learning how to learn.
Jim Cooling
From air traffic control systems to network multimedia systems, real-time systems are everywhere. The correctness of the real-time system depends on the physical instant and the logical results of the computations. This book provides an elaborate introduction to software engineering for real-time systems, including a range of activities and methods required to produce a great real-time system.The book kicks off by describing real-time systems, their applications, and their impact on software design. You will learn the concepts of software and program design, as well as the different types of programming, software errors, and software life cycles, and how a multitasking structure benefits a system design.Moving ahead, you will learn why diagrams and diagramming plays a critical role in the software development process. You will practice documenting code-related work using Unified Modeling Language (UML), and analyze and test source code in both host and target systems to understand why performance is a key design-driver in applications.Next, you will develop a design strategy to overcome critical and fault-tolerant systems, and learn the importance of documentation in system design.By the end of this book, you will have sound knowledge and skills for developing real-time embedded systems.
Rahul Sharma, Vesa Kaihlavirta, Claus Matzinger
Rust is a powerful language with a rare combination of safety, speed, and zero-cost abstractions. This Learning Path is filled with clear and simple explanations of its features along with real-world examples, demonstrating how you can build robust, scalable, and reliable programs.You’ll get started with an introduction to Rust data structures, algorithms, and essential language constructs. Next, you will understand how to store data using linked lists, arrays, stacks, and queues. You’ll also learn to implement sorting and searching algorithms, such as Brute Force algorithms, Greedy algorithms, Dynamic Programming, and Backtracking. As you progress, you’ll pick up on using Rust for systems programming, network programming, and the web. You’ll then move on to discover a variety of techniques, right from writing memory-safe code, to building idiomatic Rust libraries, and even advanced macros. By the end of this Learning Path, you’ll be able to implement Rust for enterprise projects, writing better tests and documentation, designing for performance, and creating idiomatic Rust code.This Learning Path includes content from the following Packt products:• Mastering Rust - Second Edition by Rahul Sharma and Vesa Kaihlavirta• Hands-On Data Structures and Algorithms with Rust by Claus Matzinger
Viktor Farcic
Building on The DevOps 2.0 Toolkit, The DevOps 2.1 Toolkit: Docker Swarm, and The DevOps 2.2 Toolkit: Self-Sufficient Docker Clusters, Viktor Farcic brings his latest exploration of the DevOps Toolkit as he takes you on a journey to explore the features of Kubernetes.The DevOps 2.3 Toolkit: Kubernetes is a book in the series that helps you build a full DevOps Toolkit. This book in the series looks at Kubernetes, the tool designed to, among other roles, make it easier in the creation and deployment of highly available and fault-tolerant applications at scale, with zero downtime.Within this book, Viktor will cover a wide range of emerging topics, including what exactly Kubernetes is, how to use both first and third-party add-ons for projects, and how to get the skills to be able to call yourself a “Kubernetes ninja.” Work with Viktor and dive into the creation and exploration of Kubernetes with a series of hands-on guides.
Alessandro Palmas, Emanuele Ghelfi, Dr. Alexandra Galina...
Various intelligent applications such as video games, inventory management software, warehouse robots, and translation tools use reinforcement learning (RL) to make decisions and perform actions that maximize the probability of the desired outcome. This book will help you to get to grips with the techniques and the algorithms for implementing RL in your machine learning models.Starting with an introduction to RL, youÔÇÖll be guided through different RL environments and frameworks. YouÔÇÖll learn how to implement your own custom environments and use OpenAI baselines to run RL algorithms. Once youÔÇÖve explored classic RL techniques such as Dynamic Programming, Monte Carlo, and TD Learning, youÔÇÖll understand when to apply the different deep learning methods in RL and advance to deep Q-learning. The book will even help you understand the different stages of machine-based problem-solving by using DARQN on a popular video game Breakout. Finally, youÔÇÖll find out when to use a policy-based method to tackle an RL problem.By the end of The Reinforcement Learning Workshop, youÔÇÖll be equipped with the knowledge and skills needed to solve challenging problems using reinforcement learning.
The Rust Programming Handbook. An end-to-end guide to mastering Rust fundamentals
Francesco Ciulla
The Rust Programming Handbook is a deeply engaging and meticulously crafted book designed to immerse programmers into the intricate world of Rust’s core principles and sophisticated features. This book not only enhances your coding skills but also prepares you to tackle complex challenges in software development, optimizing your code for better performance and reliability.You will explore Rust’s powerful concurrency models, rigorous memory safety guarantees, and its versatile trait system. Discover the foundational elements that make Rust a standout language for developing safe and efficient applications. The book will show you how these core principles can seamlessly transition into real-world applications. You will learn how to apply Rust's capabilities to systems programming and web development, extending the reach of its safety and efficiency benefits across different programming domains. Whether it's creating low-level system components or high-performance web services, the book provides practical examples to integrate Rust effectively into a variety of projects.Elevate your coding skills and become a sought-after professional in the tech industry with this essential guide. Rust from Beginner to Professional is your definitive toolkit for mastering advanced Rust programming techniques and writing high-quality code.
Trino Profesjonalny przewodnik. SQL w dowolnej skali, w dowolnym magazynie i w dowolnym środowisku
Matt Fuller, Manfred Moser, Martin Traverso
Za pomocą Trino, wysoce wydajnego, rozproszonego silnika zapytań SQL, przeprowadzisz szybkie, interaktywne analizy różnorodnych źródeł danych. W drugim wydaniu tego praktycznego przewodnika dowiesz się, jak analizować dane w miejscu, w którym się znajdują, niezależnie czy jest to jezioro danych obsługiwane przez system Hive, nowoczesny lakehouse obsługiwany przez tabele Iceberg lub usługę Delta Lake, inny system, taki jak Cassandra, Kafka lub SingleStore, czy może relacyjna baza danych, taka jak PostgreSQL lub Oracle. Analitycy, inżynierowie oprogramowania i produkcji dowiedzą się, jak zarządzać Trino, jak go używać i tworzyć za jego pomocą nowe rozwiązania, a także jak uczynić to narzędzie kluczowym elementem swojej platformy danych. Autorzy, Matt Fuller, Manfred Moser i Martin Traverso pokazują, jak w jednym zapytaniu Trino połączyć dane z wielu źródeł, aby dokonać analizy danych z całej organizacji. - Poznasz przypadki użycia Trino i narzędzia, za pomocą których połączysz się z Trino, aby przeszukiwać i przetwarzać ogromne ilości danych. - Dowiesz się, jak działa Trino, uwzględniając sposoby łączenia się ze źródłami danych i ich przeszukiwania za pomocą instrukcji SQL, operatorów, funkcji i innych mechanizmów - Wdrożysz i zadbasz o zabezpieczenie Trino na dużą skalę, będziesz monitorować obciążenie, dostrajać zapytania i dołączać dodatkowe aplikacje - Dowiesz się, jak inne organizacje z powodzeniem wykorzystują Trino "Trino odgrywa kluczową rolę w analizie danych w witrynie Pinterest. Ta książka opisuje najważniejsze aspekty Trino, począwszy od przypadków użycia, po wykorzystanie Trino w wielkoskalowych projektach." -Ashish Kumar Singh Lider techniczny, Big Data Query Processing Platform, Pinterest "Ta książka jest obowiązkową lekturą dla firm, które chcą unowocześnić swój stos technologiczny do analizy danych." -Jay Kreps Współtwórca Apache Kafka oraz współzałożyciel firmy Confluent i jej dyrektor ds. technicznych Matt Fuller jest współzałożycielem firmy Starburst, zajmującej się analizą danych. Manfred Moser jest rzecznikiem społeczności, pisarzem, szkoleniowcem i inżynierem oprogramowania w firmie Starbust. Martin Traverso jest współzałożycielem fundacji Trino Software Foundation, dyrektorem ds. technicznych w firmie Starburst i współtwórcą Trino.
Twilio Best Practices. Learn how to build powerful real-time voice and SMS applications with Twilio
Timothy Rogers, Tim Rogers
Tworzenie aplikacji dla systemu Windows 8. Zaprojektuj, napisz i opublikuj swoją aplikację
Rafał Madycki, Michał Guzowski, Maciej Jaskólski
Aplikacje dla systemu Windows 8 - podejmij wyzwanie! Jak pisać aplikacje dla systemu Windows 8 z wykorzystaniem API Windows Runtime? Jak stworzyć pożądane opcje i nadać aplikacji wygląd zgodny z zasadami nowoczesnego stylu projektu Microsoft? Jak wykorzystać usługi online i opublikować aplikację w sieci? Tworzenie aplikacji dla nowego systemu operacyjnego firmy Microsoft to całkiem ciekawa (a czasem także intratna) perspektywa dla programistów chcących dotrzymać kroku zmieniającym się technologiom i wyjść naprzeciw potrzebom użytkowników. Platforma Windows 8, z zupełnie odmienionym interfejsem, oferuje nowe możliwości, m.in. w zakresie wykorzystania ekranów dotykowych czy integracji między aplikacją i systemem, ale jednocześnie wymaga od projektantów dostosowania się do nowych reguł gry, by pisane przez nich aplikacje nie odbiegały jakością, wyglądem i sposobem działania od reszty elementów charakterystycznych dla tej wersji systemu Windows. Jeśli chcesz pisać takie programy i umieszczać je w Sklepie Windows, koniecznie musisz zacząć od tej książki. Dzięki niej zbudujesz od podstaw własną aplikację! Znajdziesz tu informacje na temat platformy tworzenia aplikacji dla systemu Windows 8, nauczysz się budować układ aplikacji, projektować jej wygląd i zapewniać funkcjonalność. Zrozumiesz, jak ważne są kwestie zarządzania danymi i ich wymiany, jak wykorzystać potęgę internetu do wspomagania pracy Twojej aplikacji, jak działają zadania w tle. Dowiesz się także, jak opublikować gotową aplikację w Sklepie Windows. Prawda, że warto? Platforma tworzenia aplikacji w systemie Windows 8 Wymagania certyfikacyjne aplikacji dla systemu Windows 8 Tworzenie aplikacji dla systemu Windows 8 Wygląd aplikacji Możliwości aplikacji dla systemu Windows 8 Zarządzanie danymi i synchronizacja z chmurą Współpraca z usługami online Powiadomienia Zadania w tle Publikacja w Sklepie Windows Bądź na bieżąco, twórz aplikacje dla systemu Windows 8!
Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
Paweł Borkowski
Poznaj tajniki tworzenia aplikacji dla Windows Jak określić położenie, rozmiar i styl okna? Jak tworzyć wątki aplikacji za pomocą funkcji CreateThread? Jak definiować biblioteki? Dev-C++ to zintegrowane środowisko programistyczne, którego niewątpliwym atutem są tzw. DevPaki, czyli rozszerzenia programu, pozwalające korzystać z różnych bibliotek, szablonów i narzędzi. Środowisko Dev-C++ wspomaga także pracę nad nowym projektem Windows -- gotowym kodem tworzącym okno z obsługą podstawowych komunikatów. Wszystko to sprawia, że mamy do czynienia z wygodnym i funkcjonalnym środowiskiem, zarówno dla początkujących, jak i zaawansowanych programistów. Z książki "Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych" może skorzystać każdy, kto chce nauczyć się programowania: zarówno studenci kierunków informatycznych, jak i osoby, które nie mają takiego przygotowania. Podręcznik kolejno odsłania poszczególne elementy wiedzy programistycznej -- od najprostszych po najbardziej zaawansowane. Dowiesz się więc, jak wprowadzać niewielkie zmiany w kodzie, jak projektować aplikacje wielowątkowe i definiować biblioteki, jak budować duże, składające się z kilku plików projekty, aby na koniec samodzielnie stworzyć grę komputerową. Instalacja środowiska Dev-C++ Tworzenie narzędzia pióro Obsługa map bitowych Obsługa komunikatów myszy i klawiatury Obiekty sterujące w oknie Menu i plik zasobów Projektowanie aplikacji wielowątkowych Biblioteki statyczne i dynamiczne Multimedia Programowanie gier Naucz się programowania i twórz własne gry!
Tworzenie architektury oprogramowania. Wspieranie zespołów w podejmowaniu trafnych decyzji
Andrew Harmel-Law
Rola architekta oprogramowania się zmienia. W miarę jak systemy stają się coraz bardziej złożone, tradycyjny model działania architekta przestaje wystarczać. Zadań jest zbyt wiele, a ich zaniedbanie w końcu doprowadzi do punktu krytycznego. Kluczowe staje się współdziałanie architekta z zespołem projektowym - tylko wtedy możliwe jest tworzenie trwałej, elastycznej i efektywnej architektury. Oto książka pełna praktycznej mądrości, trafiająca w sedno tego, czym jest architektura. Grady Booch, IBM Fellow Tę książkę doceni każdy, kto praktykuje architekturę w ramach i na rzecz zespołu. Dzięki niej zrozumiesz wady scentralizowanych praktyk architektury w zdecentralizowanym świecie. Poznasz też kluczowe aspekty zdecentralizowanego podejścia do architektury opartego na informacji zwrotnej i zasady wdrażania takiego podejścia. Znajdziesz tu omówienie czynników wpływających na efektywność decyzji architektonicznych, a także ich społeczny wymiar - dobra architektura bowiem to nie tylko struktura kodu, ale również jakość współpracy. Dzięki opisanym metodom rozwiniesz sposób myślenia, który pozwala każdemu w zespole praktykować architekturę i budować lepsze systemy. Najciekawsze zagadnienia: jak się zmienia nowoczesny proces dostarczania oprogramowania metodologia łączenia architektury oprogramowania z jego rozwojem współzależność decyzji, architektury i informacji zwrotnej z działających systemów wprowadzanie praktyk maksymalizacji korzyści i minimalizacji ryzyka dostrajanie podejścia do architektury, umiejętności osób w zespole i kultury firmy Najlepsza architektura oprogramowania ewoluuje dzięki zaangażowaniu wszystkich. Martin Fowler, główny badacz w Thoughtworks
Tworzenie gier dla początkujących
Tomasz Błaszczyk
Książka „Tworzenie gier dla początkujących” dedykowana jest wszystkim osobom chcącym wgłębić się w świat programowania gier 3D oraz zaznajomić się i wykorzystać możliwości środowiska Unity. Celem książki jest przekazanie początkującym twórcom wiedzy z zakresu: obsługi podstawowych funkcjonalności, pisania i implementacji skryptów, tworzenia obiektów fizycznych, animacji, teksturowania i optymalizacji. Książka adresowana jest również dla każdego, już nieco bardziej doświadczonego programisty, który szuka nowych, rozbudowanych narzędzi, pozwalających poszerzyć swoją dotychczas zdobytą wiedzę o coś zupełnie odmiennego i niezwykle kreatywnego. Dzięki tej książce: Stworzysz swój własny trójwymiarowy świat wraz z postacią głównego bohatera. Zapoznasz się z wieloma istotnymi pojęciami dotyczącymi fizyki w grach. Nauczysz się tworzyć proste animacje, dodawać muzykę i dźwięki, a następnie wszystko to łączyć z rozbudowanymi skryptami. Dowiesz się, czym jest Asset Store, w którym czeka na Ciebie niezliczona ilość możliwych do wykorzystania zasobów. Stworzysz prosty system walki, wskaźnik punktów życia i podążających za graczem przeciwników. Zbudujesz system zbierania punktów oraz ich zliczania • temat tworzenia prostych interfejsów oraz menu nie będzie dla Ciebie niczym obcym. Dowiesz się, jak wbrew teorii heliocentrycznej poruszyć słońce, tworząc zjawiskowy cykl dnia i nocy w swoim świecie gry. Zbudujesz od podstaw mechanizm zapisu stanu gry oraz jego późniejszego wczytania. Wyrobisz sobie (mam nadzieję) nawyk porządkowania utworzonych obiektów oraz ich intuicyjnego nazywania.
Luca Mezzalira
Mikrousługi stały się odpowiedzią na rosnącą złożoność aplikacji internetowych. Do niedawna pojęcie mikrousług dotyczyło wyłącznie backendu, jednak idea ta zainspirowała projektantów do budowania na podobnych zasadach architektury frontendu. Dzięki temu interfejs użytkownika można podzielić na osobne funkcjonalności zarządzane w odrębny sposób przez różne zespoły programistów. Mikrofrontendy zapewniają elastyczność i skalowalność aplikacji ― a to zalety doceniane przez najważniejszych dostawców oprogramowania na rynku. Ta książka jest praktycznym przewodnikiem dla programistów aplikacji internetowych, architektów oprogramowania, menedżerów technicznych i inżynierów. Wyjaśniono w niej, w jaki sposób stosować architekturę mikrousług do frontendu aplikacji. Pokazano najważniejsze zalety mikrofrontendów, takie jak elastyczność, skalowalność i swoboda w dobieraniu bibliotek i platform programistycznych. Omówiono też takie zagadnienia jak wzorce projektowe dla mikrofrontendów, zasady przeprowadzania migracji z frontendu monolitycznego do mikrofrontendów, a także praktyczne aspekty wdrażania architektury mikrofrontendowej w organizacji. Ciekawą kwestią jest również prezentacja dobrych praktyk, na przykład sprawdzonych strategii automatyzacji i wdrażania mikrofrontendów w środowisku produkcyjnym. Najważniejsze zagadnienia: czym się charakteryzują architektury frontendowe jak stosować ideę mikrousług podczas tworzenia frontendu cztery filary tworzenia architektury mikrofrontendowej zasady i najlepsze praktyki ustalania strategii automatyzacji wzorce integracji architektury mikrofrontendowej Mikrofrontendy: nowy wymiar niezawodności frontendu!
TypeScript na warsztacie. Praktyczny przewodnik pisania efektywnego kodu
Ben Grynhaus, Jordan Hudgens, Rayon Hunte, Matt...
TypeScript szybko stał się ulubionym językiem programowania zawodowców. Pozwala na tworzenie czystego, efektywnego i łatwego w utrzymaniu kodu, a także zastosowanie zaawansowanych konstrukcji programistycznych. Co więcej, pracę w tym języku uprzyjemniają liczne frameworki i biblioteki, które pozwalają na sprawną budowę dojrzałych aplikacji. Jednak z punktu widzenia początkującego programisty TypeScript ma inną ogromną zaletę: jest świetnym punktem startu dla każdego, kto chce pisać czytelny, łatwy do zrozumienia i mniej podatny na błędy kod. Dzięki tej książce Twoja nauka programowania w TypeScripcie przebiegnie w maksymalnie sprawny i efektywny sposób. Położono w niej nacisk na praktykę, a objaśnienia teoretyczne ograniczono do faktycznie ważnych i przydatnych zagadnień, które ułatwią ugruntowanie najlepszych podstaw programowania. W licznych ćwiczeniach pokazano, jak stosować kluczowe koncepcje w aplikacjach produkcyjnych, używanych w rzeczywistości. Każdy rozdział kończy się zadaniem do samodzielnego wykonania, opracowanym tak, by umożliwić wypróbowanie poznanych treści w praktyce. Jeśli chcesz pisać kod w TypeScripcie na profesjonalnym poziomie, a równocześnie odczuwasz onieśmielenie na myśl o nauce nowego języka, dzięki temu podręcznikowi szybko osiągniesz swój cel! W książce między innymi: gruntowne podstawy języka TypeScript i pliki deklaracji funkcje, klasy i obiekty w TypeScripcie wstrzykiwanie zależności i zachowania asynchroniczne obietnice i programowanie asynchroniczne biblioteka React i jej zastosowanie TypeScript: sprawdź, czy umiesz napisać lepszy kod!
TypeScript: Skuteczne programowanie
Dan Vanderkam
TypeScript jest typowanym nadzbiorem języka JavaScript, stanowiącym potencjalne rozwiązanie wielu słynnych bolączek, z którymi borykają się programiści JavaScript. Aby skutecznie programować w TypeScript, musimy poświęcić czas na naukę i praktykę. Niniejsza praktyczna książka, wykorzystująca metody spopularyzowane w książkach Skuteczny nowoczesny C++ (APN Promise) i Java. Efektywne programowanie (Helion), zawiera omówienie 62 zagadnień wraz z konkretnymi zaleceniami jak należy korzystać z języka, czego należy unikać, a także jak powinno się go postrzegać. Autor, Dan Vanderkam, główny programista w Sidewalk Labs, prezentuje praktyczne przykłady zastosowania każdej porady. Dzięki tej książce początkujący i średniozaawansowani programiści znający podstawy TypeScript osiągną poziom ekspertów, doskonale posługujących się tym językiem. Poznaj praktyczne aspekty systemu typowania w języku TypeScript Definiuj typy, dzięki którym kod będzie bezpieczniejszy i bardziej zrozumiały Używaj inferencji typów, aby uzyskać pełne bezpieczeństwo przy minimalnej liczbie oznaczeń typów Korzystaj w taktyczny sposób z typu any Poznaj mechanizm zależności i skorzystaj z plików deklaracji typów w TypeScript Z powodzeniem przenieś swój kod JavaScript do TypeScript Dan Vanderkam jest głównym programistą w Sidewalk Labs i współorganizatorem spotkań społeczności TypeScript NYC. Od dawna uczestniczy w projektach typu Open Source. Wcześniej pracował na uniwersytecie Icahn School of Medicine at Mount Sinai, a także uczestniczył w rozwijaniu funkcji wyszukiwania, wykorzystywanych przez miliardy użytkowników Google. TypeScript. Skuteczne programowanie odpowiada na większość najczęstszych pytań, jakie nasuwają się podczas pracy z TypeScript, a także oferuje porady praktyczne, ukierunkowane na wyniki. Niezależnie od poziomu znajomości TypeScript, z pewnością każdy znajdzie w tej książce coś dla siebie. Ryan Cavanaugh Główny inżynier ds. TypeScript w firmie Microsoft Ta książka obfituje w praktyczne przepisy i powinna się znaleźć na biurku każdego programisty TypeScript. Nawet jeśli uważasz, że znasz już TypeScript, koniecznie ją przeczytaj. Z pewnością tego nie pożałujesz. Yakov Fain Java Champion