Przypomniałem sobie ostatnio 2001 rok, kiedy to po raz pierwszy zainstalowałem system FreeBSD i był to nie lada wyczynem. Podłączenie do łącza/internetu poprzez dialup/SDI również wyamgał czasu. Pomogła mi na pewno "salka internetowa", czyli taka mała kańcapa którą mieliśmy w Technikum Łączności nr. 2 w Lublinie i faktycznie tam terminal tekstowy na FreeBSD to była codzienność :-) Po kilku latach stabilnego działania serwerka/bramy do internetu postawionego na FreeBSD, nastał na czas na PLD, wiele Live CD distros, RedHat Linux a następnie w ok. 2008 roku na Ubuntu Linux.
Jestem użytkownikiem Ubuntu Linux ~9 lat i doceniam korzenie odziedziczone z Debian Linux w tym systemie. Jednak ciekawostki z DistroWatch są dla mnie codzinnością i w związku z pewnym kontrowersyjnym newsem czynię ten wpis.
Objawił się moim oczom pewnego dnia UbuntuBSD i pomyślałem, że diabełek z widłami oraz koło wsparcia dla wszystkich to moze być ciekwe połączenie :-)
Oczywiście jak każdy ciekawski dystrybucji Linuxa pobrałem ISO i zainstalowałem na dostępnym storagu. I tutaj niespodzianka, bo od razu moim oczom rzuciło się pomieszanie komend z dwóch systemów ... co spowodowało u mnie na początku zdziwienie. W sumie czegoś takiego mogłem się spodziewać, ale kiedy człowiek nie poczuje mixów w praktyce, nie zdaje sobie sprawy, jak artyści-programiści mieszają różne koncepty ;-)
Z jednej strony jądro FreeBSD a z drugiej shell/środowisko/komendy używane na codzień w Ubuntu.
Najważniejsze funkcje i właściwości oferowane przez UbuntuBSD:
– wsparcie dla technologi jail (wirtualizacja i zabezpieczenie dla jądra systemu)
– OSS jako domyślny system dźwięku
– OpenBSD Packet Filter (pf)
– wsparcie dla systemu plików ZFS (to jest mega wyczyn i moim zdaniem wielki plus)
– GNU userland
– nie zawiera żadnych pakietów własnościowych (non-free)
– używa pakietów Debuana "deb" do instalowania oprogramowania
– pakiety mogą być obsługiwane za pośrednictwem menadżera pkietów APT
– wsparcie dla maszyn wirtualnych, takich jak VMware oraz VirtualBox
Na ostatniej konferencji re:Invent organizowanej od kilku ładnych lat przez firmę Amazon pojawił się ciekawy smaczek Amazon EC2 F1 instances with field programmable gate arrays (FPGA). Chciałbym wypowiedzieć się na ten temat, bo uważam, że jest to kolejny krok milowy w dziejach rozwiązań dedykowanych, które dotyczą programowalnej elektroniki. A tam gdzie jest software oraz hardware jest też moje zainteresowanie ;-) szczególnie, kiedy jest wzmianka o develop, simulate, debug, and compile your hardware acceleration code
Tym wpisem chciałbym przybliżyć tych, którzy nie widzą co to FPGA i do czego można tego wynalazku użyć. Wspomnę też o płytkach rozwojowych, na których można ćwiczyć programowanie matryc programowalnych. Jako smaczek dnia zapodam swoją wizję użycia FPGA w chmurze - Amazon EC2 F1 a dokładnie jaką widzę przyszłość chmur internetowych wspieraną przez matryce programowalne.
Jakie rozwiązania poprzedzały FPGA ?
Jest to sprzęt w elektronice nazywany reprogramowalną macierzą, w której można odwzorować układy logiczno sekwencyjne bez specjalnego lutowania ich, czyli wykonywania projektowania obwodów drukowanych i montażu podzespołów bazowych, w tym układów z bramkami logicznymi. W latach 80-tych do późnych 90-tych poprzedniego wieku używało się układów TTL oraz w bogatszych wersjach MOS i CMOS, które miały określone bramki, poprzez ścieżki na płytce łączyło się bramki w układy sekwencyjno-logiczne i dawało to efekt jak poniżej prosta płyta główna CPU zbudowana z bramek:
Na drodze rozwoju matryc programowalnych były jeszcze układy PLD i CPLD, które były bardzo dobrym wstępem FPGA. Kiedyś używałem PLD do dekodowania adresów w systemach mikroprocesorowych MCS-51. Wyglądało to dość obiecująco, kiedy równanie logiczne można było wypalić w układzie wielokrotnie podczas dopracowywaania prototypu.
A tak wyglądał prototyp z układem CPLD, który umożliwiał eksperymentowanie i uruchamianie macierzy logicznych (1 układ scalony zamiast ~40 - patrz na drugi obrazek powyżej):
Czym jest FPGA ?
Prześledziliśmy historię i doszliśmy do FPGA, czyli układów charakteryzujących się strukturą, która jest prostokątną macierzą elementów składającą się z części logicznych nazywanych komórkami. Komórki umieszczone są w otoczeniu komutacyjnym kanałów połączeniowych. Dzięki zastosowaniu standaryzacji można te układy programować i nadawać im przeznaczenie w dowolnym momencie zmieniając ich wnętrze.
Układy FPGA używane są w cyfrowym przetwarzaniu sygnałów, lotnictwie i wojsku, w fazie prototypowej układów ASIC i w wielu innych dziedzinach. Aby zdefiniować zachowanie układu FPGA używa się języka opisu sprzętu takiego jak Verilog czy VHDL. Następnie przy pomocy narzędzi syntezy generuje się listę połączeń, która potem w procesie implementacji jest odwzorowywana w konkretnym układzie. Należy zwrócić uwagę, że proces syntezy dopuszcza tworzenie układów logicznych dowolnych rozmiarów, podczas gdy proces implementacji jest próbą wpisania go do konkretnego układu FPGA, gdzie może zabraknąć zasobów do realizacji zadanej logiki. Dlatego większość środowisk pozwala na przeprowadzenie pełnej symulacji działania i rozmieszczenia bramek na macieży FPGA. W oprogramowaniu firmy Altera wygląda to tak:
Jak zaprogramować FPGA ?
W celu zdefiniowania działania naszej logiki na układach FPGA używamy języka opisu sprzętu HDL takiego jak Verilog czy VHDL. Producenci układów FPGA udostępniają nieodpłatnie bardzo zaawansowane symulatory i kompilatory, które ułatwiają uruchomienie wytworzonej macierzy na układzie FPGA. Oto lista popularnych symulatorów HDL dla FPGA. Oto filmik pokazujący jak dalece zaawansowane są takie środowiska do symulacji FPGA:
Warto wspomnieć o tym, że FPGA to świat, w którym można zrealizować wiele różnych przedsięwzięć. Np. chcemy mieć ATARI lub inną architekturę to w serwisie Open Cores znajdziemy wiele projektów związanych z ciekawymi tematami wokół logiki programowalnej. Przykład starych mikrokontrolerów jest błachy, gdyż coś co rzuca się w ochy na OpenCores to PicoBlaze, czyli procesor zbudowany pod FPGA / ASIC i umożliwiający zrównoleglanie obliczeń, kiedy takich procesorów softwarowych na jednen układ FPGA wrzucimy np: kilka tysięcy :-) Tak, to jest możliwe i jeszcze jedno: tak działają karty graficzne GPU, które posiadają często układy ASIC i potrafią się przeprogramowywać w locie zależnie od zastosowania. A jak wiadomo GPU w obliczeniach przoduje i to dzięki mocy reprogramowanych matryc mamy takie wielkie krajowe produkty jak np: gra Wiedźmin wykorzystujące moc GPU. Do innych typów jednostek należą procesowy sygnałowe DSP, dla których też jest wiele propozycji na stronie Open Cores. A co ciekawe popularne stają się bardzo układy kryptograficzne oparte na FPGA, co w świecie szyfrowanych połączeń i zmierzchu HTTP/2 coraz bardziej nabiera na wartości :-)
Jakie moduły do nauki FPGA polecam ?
Oto lista płytek z FPGA, które mogę polecić. Bawiłem się DE10-Lite Board i uważam to za pełen wypas na początek przy relatywnie niskiejj cenie w stosunku do możliwości. Wygląda to tak:
Nie przypadkowa jest też możliwość podłączania modułów w formie wyprowadzeń modułów dla Arduino Uno.
Na płytce znajdziecie: 2x20 GPIO, ADC, SDRAM, akcelerometer, wyjście VGA, wyświetlacze 7-segmentowe, przełączniki. To wszystko + 50000 elementów logicznych do zaprogramowania stwarza optymalne warunki deweloperskie.
Co robi FPGA wśród usług firmy Amazon ?
Niewątpliwie karierę konkurencyjną w świecie chmur i wirtualizacji wszystkiego co możliwe w IT. Dodatkowo ułatwia programistom FPGA eksperymenty. Najpewniej otwiera nowe okno w świecie symulatorów i prototypów, których zbudowanie to był dla wielu innowacyjnych firm ogromny krok milowy.
Co może zrobić użycie "FPGA in the Cloud" w niedalekiej przyszłości ?
W zastosowaniu Cloud widać trendy związane z obliczeniami, czyli przetwarzanie dedykowanymi algorytmami obrazów/dźwięków/filmów/danych. Jak można sobie wyobrazić serwerownia przyszłości może zawierać klocki zmieniane w ramach potrzeb, bo przeprogramujemy sobie FPGA i mamy wydajny system do obsługi storage, a np: nocą w ramach przestojów przetwarzamy obrazki i przerzucamy instancję na inny tryb, która jest lepiej utylizowana w tych zadaniach batchowych. Daje to nam obraz wyprzedzający to co mamy dzisiaj: do masowego przetwarzania obrazków (lub AI) najlepszy będzie rack z kartami GPU. Jeśli chcemy taniej to teraz wiele tańszych skrzynek przeznaczamy do czegośtam a może wystarczą dwie instacje F1 nafaszerowane różnymi dziedzinowymi blokami i to pospinane z logiką usług backendowych.
Ta wizja związana z F1 to początek innego sposobu (softwerowego) patrzenia na możliwości rekonfiguracji dedykowanych usług. Kto wie, czy po czasie nie stanie się to tańsza metoda serwowania czegokolwiek, bo mając macierz można na niej osadzić softwerowe procesory do przetwarzania sygnałów, zbudować komórki pamięci, mostki, generatory sygnałów, AI, etc...
Zobaczymy, jak się to spopularyzuje, bo AWS market pokazuje, że będzie można używać lub kupować wiele gotowych aplikacji osadzanych na F1.
Wśród zainteresowanych F1 nie zabraknie pewnie górników BitCoin. Jeśli przy okazji dla nich zrobili w Amazonie usługę F1, to oddali wielki ukłon w stronę ich dziedziny. Na pewno chęć zysku kopaczy bitcoin spowoduje spływ kasy za czas działania na kopaniu instancji Amazon F1. Tak na serio to jest przykłąd spłycający możliwości FPGA i Amazon F1.
Jak zwykle niezmiernie miło gościć na konferencji, gdzie wiele osób z różnych branż wierzy w kult węża. Pamiętam mój wpis o wizycie na konferencji PyCon PL 2008, który odbył się w Rybniku i utkwił mi dobrze w pamięci. Najpewniej z powodu wygranej wówczas książki Agile Development, czyli w czasach kiedy SCRUM i XP były tylko teorią. Powód drugi to rok 2008 i ok. 130 osób łącznie obecnych i ok. 30 programistów Pythona a reszta raczej PHP.
Można powiedzieć, że w 2008 roku znałem wszystkich programistów Pythona w Polsce :-). I powrót do teraźniejszości - w 2016 roku następuje niezły skok w dziejach zainteresowanych językiem programowania Python: ok. 650 osób i wwygląda na to, że powyżej 600 to aktywni programiści Pythona. Naprawdę świetne wydarzenie, kreatywni ludzie i podręcznikowe warunki bytowe.
Moim zdaniem do 2020 język Python to będzie coś bliżej miejsca trzeciego w TOP5 wśród języków programowania ogólnego przeznaczenia. To jest przecież współczesny "BASIC" na sterydach ;-)
Szacunek w stronę organizatorów, że nadal po tylu latach jest drukowana tradycyjna książeczka PyCon PL z wybranymi wykładami na papierze. Wspominam o tym, bo w dobie PDFów, mobi, czytników ebooków to jest rarytas.
Nie przestaję uczyć się i eksperymentować w Pythonie i polecam wszystkim ziomkom, którzy dotknęli PHP oraz Java, gdyż można się przy programowaniu w Pythonie wyluzować. Nie spotkałem w Pythonie biblioteki, która nie spełniałaby założeń i wymagałaby grubego fixa. W PHP jest tego nadal moim zdaniem ~1/3 z popularnych libek. Co do Java, to ubolewam nad brakiem standardowego/jednolitego wsparcia do obróbki obrazków i oczywiście, jak to w świecie komercyjnym bywa za jakiś czas powstanie 40 libek.forków tej samej i będzie co testować ;)
Jak większość ludzi z branży IT w tym również ja, nie przechodzę obojętnie obok robotów i tematów związanych z robotyką. Tym razem warto spojrzeć na platformę do oprogramowania robotów ROS.
Tak wiele jest przeróżnych amatorskich rozwiązań do zbudowania robotów w oparciu o OpenSource + Arduino + gotowe moduły, że każdy z Nas, po zbudowaniu kilku robotów i skopiowaniu/zmodyfikowaniu poprzedniej wersji kodu (udoskonaleniu lub zmianie algorytmów) przychodzi w stan refleksyjny z serii "co dalej...". Jak to była w inżynierii warto zastanowić się, jak daleko chcemy zajść w konstrukcjach robotycznych. Każda sklejanka bibliotek różnej maści, która działa i cieszy amatora konstruktora jest czymś pozytywnym i jak najbardziej odkrywczym. Jednak kiedy mamy plany dalekosiężne w budowanie robotów i chcemy odkrywać więcej ciekawych możliwości - i rozwijać się w oprogramowaniu ciekawszych - robotów przychodzi nam na myśl słowo framework. Najbardzej marzy się nam platforma do konstruowania robotów. Właściwą odpowiedzią an takie potrzeby będzie ROS (Robot Operating System), czyli projekt OpenSource, który doczekał się wersji produkcyjnej i w zagościł w laboratoriach wielu dużych graczy na rynku w konstrukowaniu nowoczesnych robotów.
Na wstępnie filmik pokazujący możliwości jakie na dzień dzisisejszy posiada ROS - miłego oglądania.
Spróbuję wyjaśnić pokrótce, dlaczego platformę ROS uważam za profesjonalny produkt OpenSource. Na wielu forach internetowych i w dyskusjach z ludźmi spotykam się z opiniami, że programiści oprogramowania robotów nie mają czasu poznać ROS, chociaż bardzo by chcieli. Jawi się im to jako zbyt duży system i niezbyt pasujący do ich np: samojezdnych robotów. Z drugiej strony wszelkie nowoczesne funkcjojnalności t.j. rozpoznawanie otoczenia przez robota, unikanie przeszkód, komunikacja intersystemowa, wizualizacja trasy w 3D, itp. chętnie by uruchomili na swoim robocie. Czas najwyraźniej zmienić sposóśb patrzenia na budowanego robota z zabawki na produkt. Jest wówczas spora szansa na uzyskanie wymienonych wyżej funkcjonalności niejako z paczki :-) Tak, dokładnie chodzi mi o "nie wymyślanie koła od nowo" i to daje programistom robotów platforma ROS.
Chciałbym przedstawić, co można zrobić w takiej platformie oprogramowania robotów Open Source jaką jest ROS. Przede wszystkim ROS to ekosystem, który składa się z:
niezależne od języka i systemu operacyjnego narzędzia do budowania rozproszonych robotów w oparciu o ROS
klientów napisanych dla języków: C/C++, Python, JavaScript i LISP
pakiety komunikujące się z ROS realizujące niezależne funkcjonalności w ramach platformy
gotowe obrazy systemów operacyjnych Linux pod Virtual Box, VMWare, z preinstalowanymi systemami, dla programistów a nie DevOpsów, aby w szybciej uruchomić sówj eksperyment
Na poniższym filmie widać, że ROS to nie tylko soft do robotów, ale również do prototypowania interfejsów bazujących na szkieletowych/szablonowych ruchach człowieka używanych do sterowania (w tym przypadku żółwiem)
Poniżej zamieszczam przykład użycia platformy ROS do eksperymentu z robotem, który porusza się w środowiksu i poznaje je, dzięki czemu prędkość robota zależy od wiedzy o otoczeniu a nie jest blokowana przez kolizję z otoczeniem. Bardzo kompleksowy eksperyment, który naświetla też, jak wybgląda zestaw narzędziowy ROS i jak elastycznie można się nim posługiwać.
Kolejny przykład to połączenie ROS i OpenCV, czyli biblioteki do rozpoznawania/przetwarzania obrazów. Jest to bardzo silny trend w kierunku AI w robotach, aby używając kamery rozpoznawać kształy, kolory, śledzić cele.
Symulacja i możliwości uruchomienia robota "na sucho" stanowi założenie platformy ROS, więc jeśli chcesz stworzyć coś ciekawego i używać ROS możesz rozpocząć od serii dostępnych tutoriali. Polecam, jest to dość przemyślana platforma robotyczna i dzięku dodatkom rozwiążemy najczęstsze zagadki z robotycznego świata sprawniej, bo użyjemy implementacji wartościowych algorytmów w wersji Open Source. Więc nie trać czasu na zastanawianie się, gdzie warto zacząć uczyć się systemu operacyjnego robotów ROS - poniżej załączam szybki start.
Warto wspomnieć tutaj o wbudowanym w platformę ROS symulatorze 3D o nazwie GAZEBO, dzięki któremu można przećwiczyć system operacyjny naszego robota w wirtualnej rzeczywistości. Tak, można poustawiać meble, przeszkody, ściany, labirynty i obejrzeć, co zrobi nasz robot ew. farma robotów. Najważniejsze jest to, że zdarzenia systemowe na kolejkach oraz zmienne wystawione z robota możemy róœeniż podglądać na bierząco, co pozwoli nam wychwycić wcześnie wady naszego oprogramowania i pozwoli zaoszczędzić cenny czas.
Po kilku miesiącach czytania kodu Clojure i wielu prób z programowaniem w tym języku, nadal nie mogę nadziwić się fenomenowi składni i ideii języka który zainspirował Clojure, czyli LISP. Zasadniczo programowanie w Clojure jest pisaniem w LISPie z wygodnym ekosystemem, jaki ofertuje host wirtualnej maszyny Java. W tym wątku chaiłbym wspomnieć, czego można się nauczyć z książki "Clojure PACKT Akhil Wali" i dlaczego uważam, że ta literatura jest dobrym uzupełnieniem wiedzy o Clojure.
NIe każda książka zaczyna sie zakręconym - ale zrazem zwracającym uwagę na szczegóły - kodem. Ta książka wyjątkowo posiada bardziej ambityny wstępniak. Wspominam o tym, abyście się po kilku pierwszych stronach do niej nie zrazili, czy nie porzucili czytania. Faktycznie autor prezentuje coś praktycznego, ale moim zdaniem nie do tego służą pierwsze rozdziały książek.
Książka porusza i czytelnie opisuje aspekty takie jak:
praca z sekwencjami i wzorce stosowane w Clojure
orkiestracja w wielowątkowości i zrównoleglaniu zadań z przykładami
zrównoleglanie używające redukcji
metaprogramowanie z makrami
kompozycja elementów typu: transducers
wzmianka o teorii monad, funktorów, monoids, aplikowanie funktorów
wstęp do programowania logicznego na czytelnym przykładzie rozwiązanie Sudoku
taski asynchroniczne
wstęp do programowania reaktywnego
testowanie kodu
dobre / zalecane praktyki
Powyżej wymienione tematy są wytłumaczone dość jasno, każda linia jest skomentowana właściwie. Opisane są często fakty n.t. wewnętrznego działania Clojure i tricki, które za tym stoją. Jest to niewątpliwie ważne uzupełnienie wiedzy w tematyce języków funkcyjnych i implementacji wzorców funkcyjnych w Clojure w ramach wirtualnej maszyny JVM.
Jest jeszcze ostatnia myśl, która mi utwiła w pamięci i o której warto wspomnieć. Książka wyjątkowo gładko przenosi nas z jednego rozdziału do kolejnego. Byćmoże czytanie wcześniej n.t. Clojure w materiałach interenetowych spowodowało, że tak odbieram tą lekturę. Pomyślałem, że jest to wartość istotna, bo niewielu autorów książek przewija tematy w sposób płynny pomiędzy rozdziałami. Tak, polecam tą książkę o Clojure osobom zainteresowanym językiem programowania Clojure, który zyskał moim zdaniem godnego i wartościowego dialektu języka LISP
Marcin Bielak, architekt i programista biznesowych aplikacji internetowych. Stawia od początku na wysoką jakość produktu. W programowaniu wykorzystuje: Open Source, Linux, Python, Golang, ECMAScript/JavaScript.