Debugowanie w Visual Studio jest nieocenionym narzędziem w pracy programisty, pozwalającym na szczegółowe monitorowanie działania kodu i zrozumienie, jak zmieniają się wartości zmiennych w trakcie jego wykonywania. Jednak dla bardziej zaawansowanych scenariuszy debugowania, takich jak praca z dużymi zbiorami danych, skomplikowanymi strukturami lub kodem zewnętrznym, dostępnych jest kilka zaawansowanych funkcji, które znacząco ułatwiają pracę.
Wśród nich wyróżniają się funkcje takie jak DataTips, Pinnable Properties oraz możliwość debugowania kodu zewnętrznego za pomocą auto-dekompilacji i Źródeł Zewnętrznych. Te narzędzia pozwalają na precyzyjne śledzenie wartości zmiennych oraz analizowanie działania kodu w czasie rzeczywistym, a także na debugowanie bibliotek zewnętrznych, których źródła nie są dostępne.
DataTips to jedno z najwygodniejszych narzędzi debugowania w Visual Studio. Dzięki niemu programista może monitorować wartości zmiennych wprost w edytorze kodu, bez konieczności przełączania się do okna Watch. Wystarczy najechać kursorem na nazwę zmiennej, by wyświetlić jej bieżącą wartość. To rozwiązanie szczególnie przydaje się, gdy chcemy szybko sprawdzić stan zmiennych w kontekście wykonywanego kodu, bez przerywania pracy. Dodatkowo, jeśli potrzebujemy skupić się na konkretnej właściwości obiektu, możemy „przypiąć” ją w oknie Watch, co pozwala na łatwy dostęp do interesujących nas danych. Przypinanie właściwości jest szczególnie pomocne, gdy mamy do czynienia z obiektami zawierającymi dużą ilość danych.
Edytowanie wartości zmiennych to kolejna przydatna funkcja, którą oferują DataTips. Jeśli zmienna nie jest tylko do odczytu, możemy bezpośrednio w edytorze zmienić jej wartość, co bywa przydatne przy testowaniu różnych scenariuszy, w tym przy symulowaniu błędów lub sprawdzaniu, jak zmiany w danych wpłyną na dalsze działanie programu. Takie interaktywne podejście do debugowania pozwala zaoszczędzić czas i uprościć proces weryfikacji zachowań aplikacji w określonych warunkach.
Jednak narzędzia do analizy danych w Visual Studio to nie tylko opcje do pracy z kodem, który piszemy samodzielnie. Często napotykamy na trudności związane z debugowaniem kodu pochodzącego z bibliotek zewnętrznych, takich jak pakiety NuGet czy standardowe biblioteki .NET. W takich przypadkach, Visual Studio oferuje funkcję auto-dekompilacji, która pozwala na automatyczne przekształcenie skompilowanego kodu w wyższy język programowania, taki jak C#, umożliwiając tym samym analizowanie kodu zewnętrznego jakby był to nasz własny kod źródłowy. Dzięki auto-dekompilacji możemy nie tylko prześledzić działanie kodu, ale także zrozumieć, jak zewnętrzne biblioteki wpływają na działanie aplikacji.
Warto jednak pamiętać, że dekompilacja nie jest rozwiązaniem idealnym. Zdarza się, że w procesie dekompilacji tracimy informacje o nazwach zmiennych, co może utrudniać analizowanie działania kodu. Dodatkowo, w przypadku dekompilacji kodu optymalizowanego, nie zawsze możemy liczyć na pełną zgodność między dekompilowanym kodem a oryginalnym źródłem. Niemniej jednak, w wielu przypadkach auto-dekompilacja jest bardzo pomocnym narzędziem, które znacząco ułatwia debugowanie, zwłaszcza gdy kod zewnętrzny stanowi istotną część aplikacji.
Wspomniana wcześniej funkcja Źródeł Zewnętrznych to kolejna ważna opcja w Visual Studio, która pozwala na debugowanie i śledzenie kodu z bibliotek NuGet oraz innych zależności zewnętrznych. Dzięki tej funkcji możemy uzyskać dostęp do kodu źródłowego załadowanych modułów, co umożliwia pełną analizę ich działania. Visual Studio organizuje te źródła w specjalnym węźle w Eksploratorze rozwiązań, co ułatwia poruszanie się po zewnętrznych bibliotekach i debugowanie kodu, który nie znajduje się bezpośrednio w naszym projekcie. Opcja ta jest szczególnie przydatna, gdy mamy do czynienia z zewnętrznymi pakietami, które mogą zawierać błędy, a ich poprawne rozwiązanie wymaga wglądu w kod.
Warto również zwrócić uwagę na wsparcie Visual Studio w zakresie debugowania aplikacji wielowątkowych. Multitasking, czyli rozdzielanie procesów na wiele wątków, jest popularną techniką w programowaniu, mającą na celu poprawę wydajności aplikacji. Niemniej jednak, synchronizacja dostępu do współdzielonych zasobów pomiędzy wątkami jest jednym z najbardziej skomplikowanych problemów w programowaniu. Debugowanie takich aplikacji wymaga odpowiednich narzędzi, takich jak okno Wątki, które pozwala na kontrolowanie i monitorowanie wszystkich aktywnych wątków. Dzięki tym funkcjom programista ma możliwość wglądu w stan każdego wątku i analizowania ewentualnych problemów, takich jak zakleszczenia, które mogą uniemożliwić poprawne działanie aplikacji.
Podsumowując, w pracy programisty niezwykle istotne jest posiadanie narzędzi, które pozwalają na dokładne zrozumienie i monitorowanie działania kodu. Funkcje takie jak DataTips, Pinnable Properties, auto-dekompilacja czy Źródła Zewnętrzne w Visual Studio pozwalają na precyzyjne debugowanie, które znacznie upraszcza identyfikowanie błędów, nawet w złożonych aplikacjach korzystających z zewnętrznych bibliotek. Dzięki tym narzędziom, proces debugowania staje się bardziej intuicyjny i efektywny, co pozwala zaoszczędzić czas i skupić się na rozwiązywaniu problemów, a nie na walce z narzędziami.
Jak wykorzystać Live Visual Tree i debugowanie aplikacji na urządzeniach w MAUI?
Live Visual Tree to funkcjonalność w Visual Studio, która umożliwia przeglądanie i modyfikowanie struktury interfejsu użytkownika aplikacji w czasie rzeczywistym. Jest to szczególnie przydatne podczas debugowania problemów z układem aplikacji oraz w procesie zrozumienia wizualnej struktury aplikacji. Używając tej funkcji, możemy natychmiastowo wchodzić w interakcję z drzewem wizualnym, co pozwala na dynamiczną analizę oraz edytowanie układu podczas samego procesu tworzenia aplikacji.
Aby w pełni wykorzystać funkcjonalności Live Visual Tree, nasza aplikacja musi być w trybie debugowania. W domyślnym ustawieniu, okno Live Visual Tree znajduje się po lewej stronie IDE na systemie Windows i po prawej na macOS. Jeśli nie widzimy okna, możemy je wyświetlić, przechodząc do górnego menu Debug | Okno | Live Visual Tree. Po otwarciu tego okna, widzimy hierarchię elementów interfejsu użytkownika, którą możemy łatwo przeglądać, analizować i śledzić układ naszej aplikacji.
Interfejs Live Visual Tree zawiera szereg narzędzi, które wspierają nas w debugowaniu układu naszej aplikacji. Pierwszą z takich funkcji jest możliwość wyboru elementów w działającej aplikacji. Po wybraniu konkretnego elementu, Live Visual Tree automatycznie aktualizuje się, pokazując odpowiedni węzeł w drzewie wizualnym, razem z jego właściwościami. Dzięki temu możemy szybko zidentyfikować i przeanalizować interesujący nas element. Kolejną przydatną funkcją jest możliwość wyświetlania tzw. "Layout Adorners". Są to poziome i pionowe linie wyznaczające granice wybranego obiektu, wraz z prostokątami oznaczającymi marginesy. Takie wizualne oznaczenia pomagają przy układaniu i wyrównywaniu elementów UI, a także umożliwiają szybkie zlokalizowanie ewentualnych problemów z układem.
Dodatkowo, w trybie "Preview Selection" możemy zobaczyć deklarację XAML wybranego elementu, co ułatwia przejście do odpowiedniej części kodu aplikacji. Warto zaznaczyć, że funkcjonalność "Just My XAML" umożliwia ukrywanie elementów, które nie są istotne w danym momencie, upraszczając poruszanie się po drzewie wizualnym. Niestety, ta funkcja nie jest dostępna w wersji Visual Studio dla Maca.
Wszystkie funkcje Live Visual Tree w połączeniu z Hot Reload w Visual Studio 2022 oferują niesamowite możliwości. Hot Reload monitoruje zmiany w źródłach kodu aplikacji i natychmiastowo wprowadza je do działającej aplikacji, bez konieczności ponownego kompilowania. Dzięki temu zmiany są widoczne natychmiastowo, co pozwala na szybkie iterowanie i testowanie aplikacji bez utraty jej bieżącego stanu.
Debugowanie aplikacji na urządzeniach to kolejny istotny aspekt rozwoju aplikacji w MAUI. Umożliwia ono testowanie aplikacji na rzeczywistych urządzeniach, co jest szczególnie przydatne w przypadku testowania funkcji wymagających specyficznych możliwości sprzętowych lub w celu przeprowadzenia testów wydajnościowych. Aby rozpocząć debugowanie na urządzeniu, należy najpierw włączyć tryb deweloperski na danym urządzeniu. Na przykład na urządzeniach z systemem Windows należy przejść do ustawień, w sekcji "Aktualizacje i zabezpieczenia", a następnie wybrać "Tryb deweloperski". Dla urządzeń z systemem Android, w ustawieniach należy odblokować opcję "Opcje programistyczne", a następnie włączyć debugowanie USB. W przypadku urządzeń Apple, konieczne jest posiadanie komputera Mac z zainstalowanym Xcode i aktywowanie opcji "Połączenie przez sieć" w Xcode.
Po włączeniu trybu deweloperskiego, kolejnym krokiem jest połączenie urządzenia z komputerem. W przypadku urządzeń z systemem Android, najlepszym rozwiązaniem jest połączenie przez USB, które jest najbardziej stabilne i niezawodne. Alternatywnie, można skorzystać z debugowania przez Wi-Fi, co jest przydatne, gdy urządzenie znajduje się zbyt daleko od komputera lub gdy stałe połączenie kablowe jest niewygodne.
W przypadku urządzeń z systemem iOS, Visual Studio 2022 oferuje funkcję Hot Restart, która pozwala na szybkie ponowne uruchomienie aplikacji na urządzeniu iOS bez konieczności pełnej kompilacji. Aby skorzystać z Hot Restart, należy w Visual Studio wybrać odpowiednią opcję w menu debugowania, podłączyć urządzenie iOS, a następnie skonfigurować odpowiednie ustawienia. Hot Restart pozwala na szybsze testowanie aplikacji na urządzeniach iOS, co znacznie przyspiesza cały proces deweloperski.
Każdy z tych kroków wymaga precyzyjnego działania, ale po odpowiedniej konfiguracji może znacząco uprościć proces debugowania aplikacji na rzeczywistych urządzeniach, co w efekcie poprawia jakość końcowego produktu. Testowanie na urządzeniach daje nieocenioną wiedzę o zachowaniu aplikacji w rzeczywistych warunkach, co pozwala wykryć problemy, które mogłyby umknąć podczas testów na emulatorach.
Jak wykorzystać narzędzia kontenerowe Docker w Visual Studio do usprawnienia procesu deweloperskiego?
Integracja technologii konteneryzacji, takich jak Docker, z potężnymi zintegrowanymi środowiskami programistycznymi (IDE), jak Visual Studio, staje się niezbędnym elementem współczesnego rozwoju aplikacji. Docker, wprowadzony w 2013 roku, zrewolucjonizował sposób, w jaki aplikacje są tworzone, wdrażane i skalowane. Połączenie Dockera z Visual Studio nie tylko przyspiesza procesy deweloperskie, ale także oferuje szereg narzędzi, które umożliwiają zarządzanie aplikacjami w kontenerach w prosty sposób.
Podstawy Docker i integracja z Visual Studio
Docker to platforma open source, która automatyzuje wdrażanie, skalowanie i zarządzanie aplikacjami. Dzięki kontenerom, Docker pozwala zapakować aplikację i wszystkie jej zależności (w tym kod, środowisko wykonawcze, biblioteki i narzędzia systemowe) w jedną jednostkę, znaną jako kontener. Kontenery są lekkimi, samodzielnymi pakietami, które zapewniają spójne środowisko aplikacji, niezależnie od miejsca, w którym są uruchamiane. Ich główną zaletą jest izolowanie procesów aplikacji od reszty systemu operacyjnego, co pozwala na optymalizację wykorzystania zasobów systemowych oraz uproszczenie procesu wdrażania i skalowania aplikacji.
Docker działa w modelu klient-serwer, z trzema głównymi komponentami: klientem Docker, hostem Docker i rejestrem Docker. Klient Docker jest głównym interfejsem użytkownika, umożliwiającym wykonywanie komend, takich jak budowanie obrazów, uruchamianie kontenerów, zarządzanie sieciami i woluminami. Host Docker to środowisko wykonawcze dla kontenerów, które składa się z kilku kluczowych elementów, takich jak demon Docker, kontenery, obrazy, sieci i storage. Rejestr Docker to centralne repozytorium, w którym przechowywane są obrazy, umożliwiając ich łatwe dzielenie się między różnymi hostami.
Korzyści z integracji Docker w Visual Studio
Integracja Docker z Visual Studio pozwala na łatwe tworzenie, testowanie i wdrażanie aplikacji kontenerowych bez wychodzenia z ulubionego IDE. Visual Studio zapewnia pełną obsługę Docker, umożliwiając programistom konteneryzację aplikacji, zarządzanie orkiestracją kontenerów i efektywne wdrażanie aplikacji przeznaczonych do uruchamiania na różnych platformach, takich jak .NET Framework, .NET Core, ASP.NET i ASP.NET Core.
Dzięki integracji z Docker, Visual Studio umożliwia tworzenie projektów z obsługą kontenerów już na etapie ich tworzenia, a także dodawanie wsparcia dla kontenerów do istniejących projektów. Opcja dodania obsługi Docker jest dostępna w prosty sposób: wystarczy kliknąć prawym przyciskiem myszy na projekt w Solution Explorer i wybrać „Add | Docker Support”. Możemy wybrać, czy nasza aplikacja będzie działać na systemie Windows, czy Linux, w zależności od wymagań projektu.
Konfiguracja środowiska Docker w Visual Studio
Aby rozpocząć pracę z Docker w Visual Studio, pierwszym krokiem jest zapewnienie, że Docker Desktop jest zainstalowany i uruchomiony. Następnie możemy stworzyć nowy projekt, wybierając opcję "Enable container support", co pozwala na konfigurację środowiska Docker w naszym projekcie. W przypadku aplikacji ASP.NET Core, będziemy mogli wybrać typ systemu operacyjnego kontenera (Windows lub Linux) oraz typ budowy kontenera – Dockerfile lub .NET SDK.
Wybór Dockerfile daje pełną kontrolę nad tym, jak będzie zbudowany obraz kontenera, pozwalając na ręczne zdefiniowanie środowiska aplikacji i wszystkich jej zależności. Z kolei opcja .NET SDK upraszcza proces, wykorzystując wbudowaną obsługę kontenerów w Visual Studio, co jest wygodnym rozwiązaniem, zwłaszcza w przypadku mniej skomplikowanych aplikacji.
Dockerfile i jego rola w procesie tworzenia aplikacji
Dockerfile to skrypt zawierający instrukcje określające, jak powinien wyglądać obraz kontenera. Umożliwia on zautomatyzowanie procesu tworzenia obrazów, co jest szczególnie przydatne w większych projektach, gdzie wymagana jest spójność środowisk deweloperskich. Instrukcje Dockerfile, takie jak „FROM” (określająca bazowy obraz), „RUN” (uruchamiająca komendy w obrazie) oraz „CMD” (określająca domyślne polecenia uruchomienia kontenera), pozwalają na precyzyjne dostosowanie konfiguracji kontenera. Dzięki Dockerfile, aplikacje mogą być uruchamiane na różnych maszynach w spójny sposób, co znacznie upraszcza proces wdrażania i skalowania.
Praktyczne zastosowanie Docker w Visual Studio
Dodanie wsparcia Docker do projektu w Visual Studio znacząco upraszcza proces deweloperski, umożliwiając programistom skupienie się na tworzeniu aplikacji, a nie na zarządzaniu środowiskami uruchomieniowymi. W Visual Studio, proces dodawania Docker do projektu odbywa się poprzez standardowy interfejs użytkownika, a narzędzia Docker są bezpośrednio zintegrowane z IDE. Dzięki temu, developerzy mogą tworzyć i testować aplikacje w kontenerach, bez konieczności przechodzenia do zewnętrznych narzędzi.
Po skonfigurowaniu Docker w projekcie, możemy łatwo uruchomić kontener, testować aplikację, debugować ją, a także zintegrować proces ciągłej integracji (CI) i ciągłego dostarczania (CD) za pomocą popularnych platform, takich jak Azure, AWS czy Google Cloud.
Wdrażanie aplikacji kontenerowych
Po zakończeniu procesu konteneryzacji, kolejnym krokiem jest wdrożenie aplikacji do środowiska produkcyjnego. Docker umożliwia elastyczne wdrażanie aplikacji w różnych środowiskach, w tym na lokalnym hoście Docker, serwerze zdalnym, czy w chmurze. Dobrze skonfigurowane kontenery zapewniają, że aplikacja będzie działać w sposób spójny na wszystkich etapach od deweloperki po produkcję.
Ważne jest również, by zrozumieć rolę Docker Compose, narzędzia umożliwiającego definiowanie i uruchamianie wielu kontenerów aplikacji. Docker Compose ułatwia zarządzanie złożonymi aplikacjami, które składają się z kilku usług, np. bazy danych i serwera aplikacji.
Prawidłowe wdrożenie i zarządzanie kontenerami wymaga również zrozumienia zasad skalowania aplikacji w kontenerach oraz strategii monitorowania ich pracy. Dlatego warto poznać metody monitorowania kontenerów oraz integracji z narzędziami do orkiestracji, takimi jak Kubernetes, które mogą wspomóc proces zarządzania większymi aplikacjami.
Jak efektywnie zarządzać środowiskami deweloperskimi w Visual Studio: narzędzia i techniki
W procesie tworzenia oprogramowania istotną rolę odgrywają odpowiednie narzędzia i techniki wspomagające debugowanie, optymalizację oraz zarządzanie środowiskami programistycznymi. Visual Studio, jako jedno z najpopularniejszych środowisk IDE, oferuje szeroką gamę funkcji umożliwiających efektywne zarządzanie projektem i rozwiązywanie problemów w kodzie. Wśród tych funkcji warto wyróżnić te, które wspierają pracę z kontenerami, maszynami wirtualnymi, narzędziami do analizy kodu czy testowaniem jednostkowym.
Korzystanie z Google Kubernetes Engine (GKE) i Google Container Registry (GCR) to doskonałe rozwiązanie do zarządzania środowiskami opartymi na kontenerach. Dzięki integracji z tymi technologiami w Visual Studio deweloperzy mogą łatwo tworzyć, uruchamiać i debugować aplikacje w kontenerach, co pozwala na szybsze testowanie i wdrażanie. Dzięki wsparciu dla kontenerów w Visual Studio, proces deploymentu staje się bardziej zautomatyzowany, co zmniejsza ryzyko błędów wynikających z ręcznych konfiguracji. Istotnym elementem tego procesu jest również automatyzacja przy użyciu takich narzędzi jak Docker, co pozwala na łatwe zarządzanie środowiskami i ujednolicenie konfiguracji między różnymi etapami cyklu życia aplikacji.
W przypadku bardziej zaawansowanego debugowania, Visual Studio oferuje szereg narzędzi takich jak Hot Reload i Hot Restart, które umożliwiają dynamiczną modyfikację aplikacji bez konieczności jej ponownego uruchamiania. Funkcja Hot Reload pozwala na wprowadzenie zmian w kodzie i ich natychmiastowe wprowadzenie w działanie, co znacząco przyspiesza proces debugowania. Dodatkowo, narzędzia takie jak Memory Usage i Performance Profiler pozwalają na dokładną analizę wykorzystania pamięci oraz optymalizację wydajności aplikacji, co jest kluczowe w przypadku pracy nad aplikacjami o dużej skali.
Warto także zwrócić uwagę na wykorzystanie narzędzi do analizy statycznej, takich jak Roslynator czy FxCop. Dzięki nim możliwe jest automatyczne wykrywanie błędów i niezgodności w kodzie, co pozwala na utrzymanie wysokiej jakości aplikacji. Integracja z systemami takimi jak SonarQube czy StyleCop umożliwia również monitorowanie przestrzegania standardów kodowania, co wpływa na poprawność i czytelność kodu. Narzędzia do analizy kodu są szczególnie przydatne w kontekście pracy w większych zespołach, gdzie przestrzeganie jednolitych zasad kodowania jest kluczowe.
Innym interesującym narzędziem, które warto rozważyć, jest IntelliTest – funkcja, która umożliwia generowanie i uruchamianie testów jednostkowych bezpośrednio w środowisku Visual Studio. Umożliwia to szybkie sprawdzanie poprawności poszczególnych fragmentów kodu, co jest nieocenioną pomocą w procesie refaktoryzacji. Testy jednostkowe generowane przez IntelliTest można dostosować do różnych scenariuszy, co zwiększa ich użyteczność w różnych kontekstach aplikacji. Współpraca z narzędziami do automatyzacji testów, takimi jak NUnit, xUnit czy MSTest, zapewnia kompleksową obsługę testowania, w tym testy integracyjne, jednostkowe oraz funkcjonalne.
Nie mniej istotnym aspektem pracy w Visual Studio jest jego integracja z narzędziami do analizy wydajności. Dzięki takim funkcjom jak Performance Profiler, deweloperzy mogą monitorować, jak aplikacja wykorzystuje zasoby systemowe, co pozwala na optymalizację kodu pod kątem zarówno zużycia pamięci, jak i wydajności procesora. Szczególnie przydatne w tym kontekście są narzędzia umożliwiające analizę obiektów pamięci (Memory Usage) oraz narzędzia do śledzenia wycieków pamięci (Memory Leak Detection), które pomagają w identyfikowaniu problemów, które mogą pojawić się w dużych, złożonych aplikacjach.
Z kolei integracja z narzędziami do pracy z chmurą, takimi jak Azure Functions czy Google Cloud, pozwala na łatwiejsze wdrażanie aplikacji w środowiskach produkcyjnych. Wsparcie dla takich usług jak Google Cloud Platform (GCP) umożliwia deweloperom wykorzystanie zaawansowanych funkcji chmurowych do tworzenia aplikacji opartej na mikroserwisach i kontenerach. Dzięki integracji z tymi platformami, proces tworzenia aplikacji staje się bardziej elastyczny, a zarządzanie środowiskami chmurowymi jest w pełni zintegrowane z codzienną pracą w Visual Studio.
Nie można zapominać o roli narzędzi do pracy z systemami kontroli wersji, takimi jak Git, oraz platformami do zarządzania kodem źródłowym, jak GitHub. Visual Studio wspiera zarówno integrację z Git, jak i korzystanie z narzędzi takich jak GitHub Actions do automatyzacji procesów build i deployment. Integracja z systemami kontroli wersji sprawia, że zarządzanie kodem jest prostsze i bardziej transparentne, a zautomatyzowane procesy CI/CD pozwalają na łatwiejsze zarządzanie cyklem życia aplikacji.
Warto również podkreślić znaczenie konfiguracji i dostosowywania środowiska deweloperskiego w Visual Studio do własnych potrzeb. Możliwości te obejmują nie tylko wybór odpowiednich rozszerzeń (np. Visual Studio Extensions), ale także dostosowanie ustawień IDE do preferencji programisty, co może znacznie poprawić komfort pracy. Korzystając z funkcji takich jak Live Unit Testing czy Live Visual Tree, deweloperzy mogą na bieżąco analizować działanie aplikacji, co znacząco poprawia szybkość iteracji w procesie tworzenia oprogramowania.
Efektywne wykorzystanie tych narzędzi i funkcji w Visual Studio pozwala nie tylko na szybsze wykrywanie błędów i optymalizację kodu, ale także na automatyzację wielu procesów, co oszczędza czas i zasoby. Zintegrowane środowisko programistyczne staje się kluczowym elementem w budowaniu jakościowego, wydajnego oprogramowania. Właściwe zarządzanie środowiskami deweloperskimi w Visual Studio to fundament sukcesu w nowoczesnym procesie tworzenia aplikacji.
Jak stworzyć nową konstytucję: demokracja, uczestnictwo obywatelskie i obrona przed autorytaryzmem
Jakie nowoczesne materiały fotopolimeryczne umożliwiają tworzenie biodegradowalnych struktur w druku 3D i 4D?
Jak działa interpreter – od analizy składniowej do wykonania programu
Czy pojęcie prawdy w demokracji stało się reliktem przeszłości?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский