Programista 3/2016 (46)
Programista 3/2016 (46)
Wysokowydajna implementacja zagadnienia producent-konsument w Javie
Disruptor [1] 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 [2].
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.
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.
W dużym stopniu sztuczna inteligencja 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.
Komunikacja wieloprocesorowa w praktyce
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.
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 sensownej1 złożoności obliczeniowej gwarantowanej przez dany algorytm obliczenia trwałyby dni albo tygodnie?
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.
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.
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.
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ć.
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.
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.
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.
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.