Zapraszamy do zamówienia magazynu w >>prenumeracie<<. Miesięcznik jest dostępny w formie papierowej, PDF, EPUB i MOBI oraz AZW3. Do prenumeraty papierowej zawsze dołączamy wydania elektroniczne.
Magazyn do 20 maja 2016 r. dostępny jest też w salonach Empik.
BIBLIOTEKI I NARZĘDZIA
Disruptor. Wysokowydajna implementacja zagadnienia producent-konsument w Javie
Disruptor to biblioteka napisana przez firmę LMAX na potrzeby projektu związanego z mikrotransakcjami bankowymi. Głównym celem takiej aplikacji jest przetworzenie jak największej liczby zapytań w jednostce czasu. Z tego powodu opóźnienia wprowadzane przez konieczność synchronizacji danych muszą być jak najmniejsze. Wymóg ten spowodował powstanie powyższej biblioteki, która rozwiązuje problem producenta – konsumenta.
Tomasz Pawlak
JĘZYKI PROGRAMOWANIA
Pony – język aktorów (>>więcej o tym artykule<<)
Pony to język programowania wyróżniający się natywną obsługą tzw. modelu aktorów. Choć model ten jest dostępny dla wielu innych języków programowania zazwyczaj jako dodatkowe biblioteki, to w języku Pony mamy bezpośrednią obsługę aktorów. Podobnie jak wiele ostatnio powstałych języków, Pony oferuje nieco inną syntaktykę np. względem Javy czy C#, mimo to jest on bliższy właśnie Javie, C# czy Scali niż językom funkcyjnym, jak np. F#. Dzięki temu łatwiej opanować podstawowe konstrukcje Pony, które pozwolą na tworzenie równoległych i współbieżnych programów w ramach modelu aktorów. Jest on niewątpliwie łatwiejszy niż bezpośrednie posługiwanie się wątkami, co, mamy nadzieję, uda się pokazać w tym artykule.
Marek Sawerwain
C++ != C – problemy, rozwiązania i możliwości. Część 2
Artykuł ten stanowi rozszerzenie materiałów zawartych w części pierwszej, opublikowanej w poprzednim numerze („Programista 2/2016), i skupia się na zaawansowanych technikach programowania generycznego. Przedstawione rozwiązania kładą nacisk na wygodę użycia oraz niezawodność. Przykłady zawarte w tym artykule przedstawiają zaś praktyczne rozwiązania konkretnych problemów projektowych.
Dawid Bedła
PROGRAMOWANIE URZĄDZEŃ MOBILNYCH
Project Oxford. Algorytmy sztucznej inteligencji dla aplikacji mobilnych
W dużym stopniu sztuczna inteligencji opiera się na rozpoznawaniu, dopasowywaniu oraz identyfikacji wzorców. Coraz bardziej popularnym sposobem implementacji automatycznego rozpoznawania wzorców są algorytmy uczenia maszynowego, w których system komputerowy podejmuje decyzje na podstawie złożonych modeli oraz cech charakterystycznych danych wejściowych. Uczenie maszynowe nie jest jednak zadaniem trywialnym. Aby ułatwić jego wykorzystanie, Microsoft uruchomił projekt Oxford, pozwalający w stosunkowo szybki sposób uzupełnić projektowaną aplikację o algorytmy uczenia maszynowego. W tym artykule przedstawię wybrane zastosowania tego projektu w kontekście cyfrowej analizy obrazów na potrzeby rozpoznawania ludzkich emocji, pisma, oraz opisu zawartości obrazu.
Dawid Borycki
PROGRAMOWANIE SYSTEMOWE
Masz wiadomość. Komunikacja wieloprocesorowa w praktyce (>>więcej o tym artykule<<)
Obecny trend technologiczny w produkcji procesorów nieodzownie stawia na wielordzeniowość i, choć nie jest to zjawisko nowe, powszechne wyobrażenia na temat funkcjonowania tych maszyn znacznie odbiegają od rzeczywistości. Widać to już na przykładzie terminów używanych w programowaniu, takich jak „pamięć współdzielona”, sugerujących, że poszczególnie rdzenie coś ze sobą „współdzielą”. Tymczasem wielordzeniowe procesory przypominają bardziej sieci LAN, a wspomniane współdzielenie jest złudzeniem realizowanym za pomocą wymiany komunikatów.
Maciej Czekaj
PROGRAMOWANIE W CHMURZE
Algorytmy w chmurach. Część 3: MapReduce
Zadanie niemal każdego programu komputerowego można sprowadzić do przetwarzania danych – sortowania, filtrowania, wyszukiwania, przekształcania itp. To samo powiedzieć można o „życiu w konsoli” – ciężko wyobrazić sobie pracę bez poleceń typu: grep, find, sort itp. Przez wiele lat stworzonych zostało wiele algorytmów i struktur danych adresujących te fundamentalne problemy. Co jednak w przypadku, gdy zbiór danych jest tak ogromny (np. terabajty danych), że pomimo sensownej złożoności obliczeniowej gwarantowanej przez dany algorytm obliczenia trwałyby dni albo tygodnie?
Sławomir Zborowski
PYTHON HAS POWER
Django plus docker, czyli idealne środowisko developerskie
W niniejszym artykule postaram się przybliżyć konfigurację środowiska developerskiego dla Django z wykorzystaniem narzędzia docker. Dlaczego właśnie docker? Ponieważ pozwala on nam w kilku prostych krokach utworzyć odizolowany kontener, zawierający wszystko, co aplikacja potrzebuje do działania: od kodu aplikacji, poprzez systemowe biblioteki, aż do instrukcji uruchamiania dla danej aplikacji.
Patryk Szymański
LABORATORIUM BOTTEGA
Jak przetrwać prezentację. Część 1: przygotowanie
W życiu każdego programisty lub programistki pojawia się prędzej czy później smutny dzień, gdy dostaje od przełożonego propozycję nie do odrzucenia: zrób prezentację. Bez względu na to, czy jest to prezentacja funkcjonalności, nad którą pracujemy, szkolenie wewnętrzne z tematu, w jakim się specjalizujemy, lansowanie w społeczności firmy, w której pracujemy, nawracanie niewiernych na nasz ulubiony ezoteryczny język czy framework, to twoje ciało i umysł chętnie wybawią Cię z tej opresji, załatwiając piękną reakcję psychosomatyczną typu syndrom jelita drażliwego, drgawki czy przejście w tryb prokastynacji.
Sławomir Sobótka, Dorota Pawelec-Sobótka
FELIETON
Charles Darwin a optymalizacja numeryczna
W styczniu minęło 50 lat od wydania „Artificial Intelligence Through Simulated Evolution”, czyli książki, która dla programowania ewolucyjnego uważana jest za to, czym „O powstawaniu gatunków” jest dla teorii ewolucji. Przypomnijmy, czym jest programowanie ewolucyjne oraz dlaczego warto o nim wspominać w 2016 roku.
Jacek Hoła
PRAWO
Na ile Bitcoin jest popularny?
W dniach 12 luty 2016r. – 14 marca 2016r. na portalu cyberlaw.pl została przeprowadzona ankieta dla fanów Bitcoina. Celem było znalezienie odpowiedzi na pytanie, jaką popularnością cieszy się Bitcoin i w jakie biznesy oparte o tę wirtualną walutę warto zainwestować.
Beata Marek
ZARZĄDZANIE PROJEKTAMI
Scrum – łączenie ról
Od kilku lat możemy zaobserwować rosnące zainteresowanie metodykami zwinnymi zarówno w małych, jak i wielkich przedsiębiorstwach. Przez ten czas wypracowano wiele rozwiązań, które odpowiadają na potrzeby organizacji. W poniższym artykule przeczytać możemy o jednym z nich. Celem nie jest jego krytykowanie, a zwrócenie uwagi, jakie trudności możemy napotkać, jeśli go zastosujemy.
Michał Cichy
STREFA CTF
BCTF 2016 – toooooo many switches
Ilość CTFów w tym sezonie jest zadziwiająco duża. Mając na swoim koncie już 3-cyfrową liczbę rozwiązanych zadań, zdecydowaliśmy się na zabawę tymi najciekawszymi – taką szansę dał nam zorganizowany niedawno przez chińską drużynę Blue Lotus – BCTF. Niewątpliwie należał on do trudnych i niebanalnych zawodów. W trakcie ich trwania udało nam się rozwiązać najwyżej punktowany problem, który początkowo oceniony zostały przez organizatorów na 500 punktów, a po ponad 24 godzinach bez żadnej zgłoszonej flagi punktacja została podniesiona do 700. Chcielibyśmy podzielić się jego rozwiązaniem z czytelnikami.
Michał "Z" Żuberek
PLANETA IT
Grzebanie w śmieciach
W angielskiej terminologii programistycznej jest sporo terminów, które teoretycznie nie powinny sprawiać problemów w tłumaczeniu na język polski, a mimo to panuje wokół nich wielkie zamieszenie. W artykule tym próbuję uporządkować wiedzę na temat kilku z nich.
Łukasz Piwko
Pracuję tam, gdzie chcę
Na temat tego, czy lepiej pracować zdalnie, czy w biurze, zdania są podzielone zarówno wśród pracowników, jak i pracodawców. Wielkie firmy IT w Dolinie Krzemowej prześcigają się pomysłowymi rozwiązaniami przestrzeni biurowych, które mają zwiększać efektywność pracowników. Programiści nad Wisłą cenią sobie jednak możliwość dostosowania miejsca pracy do swoich preferencji, co szczęśliwie nie jest ignorowane przez pracodawców.
Andrzej Wolf
KLUB DOBREJ KSIĄŻKI\
Od matematyki do programowania uogólnionego
Marek Sawerwain