Programista 12/2018 (79)
Programista 12/2018 (79)
W roku 2006 Microsoft zaproponował jednolity format zapisu dokumentów biurowych – tekstowych, arkuszy oraz prezentacji – o nazwie Office Open XML. Został on przyjęty bardzo ciepło, bo już w grudniu 2006 został ratyfikowany przez stowarzyszenie firm ECMA International, zaś niecałe dwa lata później przegłosowany przez ISO jako norma i od tego czasu przez tę organizację zarządzany. Odejście od zamkniętych, binarnych formatów pakietu Microsoft Office otworzyło drogę do otwierania i generowania dokumentów Microsoft Office przez programy firm trzecich; dziś dowiemy się, w jaki sposób samodzielnie wygenerować dokument tekstowy w formacie docx w języku C#.
Przejście ze sposobu myślenia, postrzegania i rozwiązywania zadań z paradygmatu obiektowego na funkcyjny jest trudne, jednak wraz ze zrozumieniem modelu funkcyjnego otrzymujemy nowe wyobrażenie o sposobie rozwiązywania dotychczasowych problemów programistycznych. Uzyskujemy potężne narzędzia pozwalające na wykorzystanie abstrakcji bezpośrednio wynikających z definicji matematycznych – w szczególności z teorii zbiorów. Innymi słowy nasz warsztat programistyczny zyskuje wiele nowych walorów.
Branża rozwija się bardzo intensywnie, a pracownicy mogą liczyć na coraz lepsze propozycje pracy. Dotyczy to głównie seniorów, których zarobki w 2018 roku wzrosły aż o 8,8%1. Kompetencje programistów muszą podążać za pojawiającymi się stale innowacjami, a to z kolei duże pole możliwości dla rozwoju zawodowego. Czy trzeba dopasowywać się do nowych sytuacji w życiu zawodowym? Czy pracodawca zatrudniający tysiące pracowników potrafi podejść indywidualnie do każdego z nich? Ścieżki karier opartych na dużych zmianach prześledziliśmy na przykładzie globalnej firmy Luxoft, zajmującej się doradztwem w zakresie rozwiązań cyfrowych. Podobne mechanizmy można zauważyć u wielu pracodawców branży IT w Polsce.
Na niezawodność systemów informatycznych składa się wiele elementów. Jednym z nich jest sam język programowania, który poprzez swoją architekturę i możliwości bardzo ułatwia tworzenie takich systemów. Takimi językami są Erlang i jego młodszy brat Elixir. Niezmienność stanu, paradygmat funkcyjny i zaimplementowany model wielowątkowości to ich istotne cechy, które wpływają na dużą niezawodność stworzonych w nich programów.
W dzisiejszym świecie nieustannie słyszymy o pakietach przesyłanych przez sieć. Czym jest taki pakiet? W najprostszym ujęciu jest to odpowiednio sformatowana jednostka informacji. Co to znaczy? Otóż musi mieć w ściśle określony sposób wyszczególniony adres, dokąd ma trafić, a także mieć w odpowiednim miejscu zapisaną zawartość wiadomości. Aby został zrozumiany przez maszynę, musimy go przetłumaczyć z języka ludzkiego (jeśli wiadomość zawiera słowa) na liczby, a z kolei liczby te na ciągi bitów. To jednak nie wszystko: teraz należy pakiet wysłać, a z drugiej strony go odebrać. Za tę część odpowiedzialna jest karta sieciowa, działająca pomiędzy procesorem a fizycznym medium transferującym informacje – to oczywistość, jednak jak to się programuje? Gdzie i jaki software pomoże nam odebrać, odczytać lub wysłać takie pakiety? Odpowiedź brzmi: sterownik sieciowy.
Środowisko, silnik lub projekt Unity rozwija się nieustannie, minione miesiące przyniosły wiele nowości, w tym chyba najbardziej popularnym (oraz dzięki obecności wersji darmowej łatwo dostępnym) systemie do tworzenia gier. Jedną z większych zmian w API Unity jest wprowadzenie wzorca projektowego ECS – Entity Component System. Choć nadal jest to projekt o statusie beta, to jednak na tyle dojrzały, iż warto sprawdzić jego przydatność oraz zapoznać się z samym wzorcem projektowym ECS.
„Widzimy w ostatnich latach zwiększenie świadomości istnienia ogromnego obszaru wiedzy, który nie dotarł jeszcze do IT. Firmy inwestują w umiejętności miękkie, więc programiści i programistki, widząc efekty, chcą więcej. Mamy również grupę ludzi, którzy potrafią mówić o tematach miękkich w sposób przyswajalny dla branży IT” – mówi Sławomir Sobótka, założyciel Bottega IT Minds. Ze Sławkiem rozmawiamy o Soft Skillach i o tym, czy i dlaczego programiści oraz programistki powinni je rozwijać.
W poprzedniej części artykułu skupiliśmy się na pierwszej „dwuwymiarowej” strukturze danych, czyli na drzewie. Jego dwa podstawowe zastosowania: drzewa binarne i drzewa poszukiwań binarnych są jednak na tyle szerokim tematem, że w artykule udało się opisać tylko te dwa konkretne przypadki użycia wspomnianej struktury danych. Tym razem postaram się więc podać kilka innych przykładów zastosowania drzew.
Czy Twoje oprogramowanie jest bezpieczne? Być może. A czy Twój procesor również jest bezpieczny? Tak? Na pewno?
Jako programista i inżynier bezpieczeństwa koncentrujący się raczej na praktycznej stronie ataków i obrony przed nimi model ataku kojarzy mi się często z różnymi abstrakcyjnymi prezentacjami w PowerPoincie, które – zamiast informować – głównie ładnie wyglądają albo próbują sprzedać jakiś produkt.
Laska Jakuba, astrolabium, sekstant, radioodlogłościomierz czy busola przez wieki służyły ludziom do wyznaczenia kierunku podróży w mniej lub bardziej precyzyjny sposób. Czy ich prosta konstrukcja i genialne działanie to coś nadzwyczajnego? W obecnych czasach niekoniecznie. Więc jak nawigować w XXI w., gdzie horyzont kończy się 100 m dalej na bloku lub galerii handlowej? Jak znaleźć bezbłędnie właściwe okienko w gmachu urzędu albo stoisko na hali targowej liczącej kilka tysięcy m2? Na te i inne pytania dotyczące nawigacji znamy już odpowiedź dzięki technologii XXI w.