Programista 4/2017 (59)
Programista 4/2017 (59)
Blockchain, czyli łańcuch bloków, kojarzony jest głównie z Bitcoinem oraz innymi kryptowalutami. Pozwala on zabezpieczać dane poprzez budowanie rozproszonego, integralnego rejestru. Dzięki temu zapisy nie mogą być już nigdy zmienione, a co za tym idzie – zrealizowane transakcje są nieodwołalne. W takiej bazie można umieszczać nie tylko transakcje. Co się stanie, jeśli w rejestrze umieścimy aplikację, która w pewnym momencie umożliwi realizację tego, co w niej zaprogramowaliśmy? Może to być wypłata środków z ubezpieczenia czy lokaty, innymi słowy kontrakt, który już nie może być zmieniony. W poniższym artykule przedstawię, na jakich podstawowych zasadach opiera się blockchain jako struktura danych oraz jak stworzyć własny prywatny łańcuch, korzystając z projektu Ethereum.
Makra są jedną z najstarszych funkcjonalności języka C, a każdy programista napisał ich przynajmniej tuzin. To proste narzędzie, mimo że często przez nas niedoceniane, niesie ze sobą bardzo dużo możliwości. Z drugiej strony wiele makr napisanych jest niechlujnie, przez co ich wykorzystanie może przynieść nieoczekiwane rezultaty. W artykule postaramy się przedstawić dobre praktyki tworzenia makr, a także pokażemy nietypowe i czasem zaskakujące ich zastosowanie.
Aktywny rozwój pakietu LLVM, tj. pakietu niskopoziomowej maszyny wirtualnej, której przeznaczeniem jest budowa m.in. kompilatorów, bezpośrednio przekłada się na powstawanie nowych języków programowania. Nadmieńmy też, iż powstają także kompilatory dla istniejących języków, czego przykładem jest kompilator Clang. Jednakże ciekawsze są nowe języki programowania, tym bardziej iż LLVM pozwala na tworzenie kodu natywnego.
Logowanie zdarzeń zachodzących w działającym oprogramowaniu nie jest funkcjonalnością, którą dostrzega końcowy użytkownik. Ma ono jednak ogromne znaczenie dla jego jakości. Zarówno dla programistów i testerów jest to narzędzie, z którego korzystają w całym cyklu projektowym. W artykule omówię problemy związane z logowaniem występujące w systemach czasu rzeczywistego oraz propozycje ich rozwiązania. Zaprezentuję także system logowania Delphi Automotive, który jest wykorzystywany do analizy działania multimedialnych urządzeń samochodowych.
Projektowanie i implementacja platformy przeznaczonej do automatycznego oceniania wydajności algorytmów nie jest zadaniem trywialnym. Rozwiązania tego typu klasyfikuje się jako „online judge system”, czyli w dosłownym tłumaczeniu „sędzia internetowy”. Różnią się one zbiorem obsługiwanych języków, możliwościami oraz sposobem implementacji. W tym artykule zaprezentujemy architekturę naszego rozwiązania, podstawowe przypadki użycia i wyzwania inżynierskie, które za nim stoją.
W społecznościach tkwi niesamowita siła. Potwierdza to m.in. zwiększone tempo rozwoju projektów, które zdecydowały się w pewnym momencie na otwarcie swego kodu źródłowego. Potrzeba, pojawiająca się w kompletnych rozwiązaniach bądź pojedynczych zadaniach zlecanych przez klientów ich wykonawcom, jest często czymś, co znajduje się na liście poszukiwanych rozwiązań u dziesiątek innych osób. Tworząc zatem coś na swój użytek i udostępniając to innym, dodatkowo np. na zasadzie open-source, robimy swoisty „dobry uczynek” i sprawiamy, że praca innych, jak i również nas samych staje się prostsza i przyjemniejsza. W jaki sposób? Mamy setki programistycznych oczu patrzących na nasz kod! Za darmo. Do tego również wielu testerów oraz hejterów naszych rozwiązań. To wszystko w efekcie sprawia, że nasz kod staje się lepszy. Przynajmniej w teorii...
Część I: Wprowadzenie do uczenia maszynowego (Machine Learning)
Uczenie maszynowe (ang. Machine Learning) stało się w ostatnich latach modnym terminem. Coraz więcej firm chwali się, że do analizy danych wykorzystały ten mechanizm. W artykule zapoznamy się z podstawowymi pojęciami i „odczarujemy” ML. Przekonamy się, że chociaż ML to sztuczna inteligencja, to zrozumienie go nie wymaga doktoratu z matematyki.
Wywiad przeprowadzony podczas konferencji WeAreDevelopers 2017 w Wiedniu. Współautor takich gier jak Doom czy Quake i jeden z założycieli firmy id Software wygłosił prezentację pod tytułem „The Early Days of id Software: Programming principles”.
W ostatnim czasie odbyło się bardzo dużo dobrych eventów CTF-owych, między innym ASIS CTF Quals oraz Teaser CONFidence. Tradycyjnie zostały zorganizowane odpowiednio przez ASIS oraz Dragon Sector. Zadania przygotowane przez organizatorów CTF-ów były dość ciekawe i różnorodne. Rozwiązania dwóch z nich chcielibyśmy dziś przedstawić. Nasz wybór padł na najwyżej punktowane zadanie w kategorii inżynierii wstecznej o nazwie Ransomware (ransomware to dość aktualny temat w świecie malware) oraz bardzo ciekawe zadanie z dziedziny kryptografii – Public Key Infrastructure.
Zaawansowane metody sztucznej inteligencji, nowe urządzenia do rzeczywistości mieszanej (ang. mixed reality), lokalna platforma Azure, szybkie przetwarzanie strumieni danych i uruchamianie usług chmury Azure bezpośrednio na urządzeniach IoT, Visual Studio 2017 for Mac, .NET Core 2.0, XAML Standard, Xamarin Live Player i Embeddinator-4000 to wybrane zagadnienia zaprezentowane w Seattle na tegorocznej konferencji Microsoft Build. W tym artykule, będącym krótką relacją z mojego udziału w tym wydarzeniu, przedstawię wybrane nowości programistyczne dostarczone przez Microsoft.
Przedstawiam czwartą lekcję minikursu angielskiego dla programistów. Tym razem tematem przewodnim jest język CSS. Zachęcam do wielokrotnego wykonywania ćwiczeń, aby dobrze utrwalić sobie przyswojony materiał. Rozwiązania do ćwiczeń zamieszczono na stronie internetowej, której adres podano na dole artykułu.
Yin-Yang to koncepcja pochodząca ze starożytnej filozofii chińskiej opisująca pierwotne uzupełniające siebie, lecz przeciwne siły. Czemu o tym piszę? Bo mam nieodparte wrażenie, że wbrew pozorom filozofia ta ma bardzo duże odzwierciedlenie w naszym środowisku programistów. Początkowo może się to wydawać zaskakującym wnioskiem, jednak po przeczytaniu poniższego tekstu mam nadzieję, że czytelnik spojrzy na to zagadnienie troszkę z szerszej perspektywy i przekona się, że mimo abstrakcyjnego brzmienia coś w tym jednak jest.