Programowanie jest nierozerwalnie związane z rozwiązywaniem rzeczywistych problemów. Stosując różne techniki, jesteśmy w stanie zamodelować skomplikowane procesy, wyszukiwać relacje między obiektami oraz przetwarzać gromadzone dane z ogromną szybkością. Jednak co zrobić, gdy nie istnieje optymalny przepis na rozwiązanie danego problemu? Gdy ograniczone zasoby nie pozwalają na sprawdzenie wszystkich możliwości, jak mieć pewność, że wyznaczone rozwiązanie jest prawidłowe? Pomocne mogą okazać się algorytmy ewolucyjne oraz sieci neuronowe.
Python w służbie sprzętu i układów FPGA
Zastosowania Pythona są niepoliczalne. Można długo wymieniać przykłady pakietów, bibliotek i innych przypadków użycia tego języka (a raczej powinniśmy mówić środowiska/ekosystemu). Nie powinno zatem dziwić, iż w Pythonie można także projektować rozwiązania dla sprzętu z generacją kodu dla języków VHDL lub Verilog.
Rzecz o mierzeniu wydajności programów
Znajdowanie problemów z wydajnością programów wydaje się bardziej sztuką, niż nauką, ale to nie jest prawda. W tym artykule postaram się przybliżyć ilościowe, empiryczne podejście do tego skomplikowanego zagadnienia.
Jeszcze jakiś czas temu mówienie o czymkolwiek w chmurze świadczyło o byciu na czasie. Był to swoisty buzzword sprzedażowy, który miał mówić naszym klientom i partnerom biznesowym, że wiemy, co dzieje się w branży i podążamy nieustannie za jej rozwojem. Obecnie mamy do czynienia z sytuacjami, w których niemalże połowa Internetu przestaje funkcjonować i zostaje sparaliżowana, gdy „skromną” wpadkę zalicza jeden z kilku wiodących dostawców rozwiązań chmurowych. Uzależniamy się od chmury. Nie jest to jednak nic złego. Grunt to kontrolować to uzależnienie i czerpać z niego jak największe korzyści.
Tworzenie inteligentnych kanałów komunikacyjnych
Nie da się ukryć, że dzięki wynikom wielu lat prac badawczych nad sztuczną inteligencją oraz zaawansowanymi metodami przetwarzania sygnałów i obrazów jesteśmy teraz beneficjentami nowoczesnych kanałów komunikacyjnych. Przestaje już dziwić fakt, że urządzenia mobilne mogą być sterowane głosem, a odczytanie swojej lokalizacji czy wyszukanie informacji realizuje się po wypowiedzeniu odpowiedniej komendy poprzedzonej frazą „Hey, Siri”. Z kolei zarezerwowanie biletu lotniczego można wykonać za pomocą kilku wiadomości wysłanych za pośrednictwem Skype czy Messengera do odpowiedniego bota. W tym artykule zostanie przedstawione, w jaki sposób utworzyć tego typu kanał komunikacyjny w oparciu o Microsoft Bot Framework.
W tym artykule pokażę, jak wykorzystać dostępne dla Pythona narzędzia, aby maksymalnie rozproszyć aplikację Django na wiele mniejszych i tańszych maszyn, korzystając na przykład z budżetowych serwerów dedykowanych lub kolokowanych serwerów “refurbished”. Równie dobrze będziemy mogli wykorzystać wirtualne maszyny od sprawdzonego usługodawcy.
Część 2: Web Audio API
W pierwszej części artykułu (numer 8/2016) poznaliśmy od podstaw zagadnienie Dyskretnej Transformaty Fouriera z punktu widzenia programisty. Do realizacji prostej wymiany danych dźwiękiem w JavaScript potrzebujemy jednak czegoś więcej. Następnym klockiem w układance jest Web Audio API. Postaramy się wykorzystać z niego tylko te elementy, które będą przydatne do realizacji naszego celu. Pozwoli nam to zaimplementować własną klasę AudioMonoIO, która opakuje wspomniane API do postaci prostego interfejsu. Na końcu stworzymy aplikację, będącą wirtualnym pianinem, za pomocą której będziemy mogli przesyłać dźwięki pomiędzy dwoma urządzeniami.
Kariera w zawodzie programisty ma niewątpliwie wiele zalet, ale korzyściami, które mają najbardziej długofalowy charakter i przyczyniają się do wysokiego współczynnika zadowolenia z wykonywanej pracy przez programistów, są różnorodność wykonywanych zadań i mnogość otwartych perspektyw.
Zaskakująco refaktoryzacja nie jest często wyzwaniem technicznym. Zespoły zazwyczaj trafnie diagnozują nieefektywny design kodu. Z reguły również mają pomysły, co należy z tym zrobić, jakich narzędzi użyć, jakich przekształceń refaktoryzacyjnych. Gdyby mieli do dyspozycji wystarczającą ilość czasu oraz wystarczający budżet, to prawdopodobnie doprowadziliby sprawy do końca.
Drugi weekend lutego spowodował, że zacząłem wątpić w regułę „jeden CTF na dwa tygodnie”, bo między 10 a 14 lutego odbywały się aż trzy. W tym CTF towarzyszący konferencji BSides San Francisco 2017.
Przedstawiam drugą lekcję minikursu angielskiego dla programistów. Odpowiedzi do ćwiczeń zamieściłem w Internecie, aby nikogo nie kusiło do nich zaglądać podczas nauki :)