Pokazywanie postów oznaczonych etykietą OpenSource. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą OpenSource. Pokaż wszystkie posty

19 października 2020

Valgrind - pomaga wyszukać wycieki pamięci w programach

Chwilę pomyślałem sobie dzisiaj o problemach jakie mogą mieć urządzenia wbudowane z oprogramowaniem i przyszła mi taka myśl: 

Ciekawe, czy zależnie od języka programowania w standardzie możemy dostawać wycieki pamięci lub nie?

Z punktu widzenia różnych znanych mi systemów w urządzeniach mobilnych zastanawia mnie słabe rozwiązanie tego problemu - tzn. klikanie zwolnij zaalokowaną pamięć telefonu na żądanie. Inny wariant, to dedykowane programy z klasy "odśmiecacze pamięci", czyli dedykowane oprogramowanie, którego celem jest przegląd wszelkich niezwolnionych bloków i za zgodą usera próba zwolnienia. Brzmi znajomo, może Twój telefon z Androidem też przymula po otwarciu kilku aplikacji (nie koniecznie gier) ... i dopiero restart naprawia sprawę. Cóż, może mamy tam do czynienia z tzw. wyciekiem pamięci operacyjnej. Koncept nieskomplikowany do sprawdzenia na prostym przykładzie. 


Wprowadzenie do wycieków pamięci

Wyciek pamięci (ang. memory leak) to zaalokowanie pamięci w systemie operacyjnym przez program, który nie zwalania pamięci po zakończeniu swojego działania. 

Wszystko fajnie, kiedy bawimy się telefonem i po np: tygodniu działania zaczyna zamulać, robimy restart i działa dalej. Inaczej sprawa się ma na rynku np: serwerów, czy sprzętu ratującego życie, medycznego, diagnostycznego, kalibracyjnego. Są branże, gdzie wycieki pamięci to nie jest norma a poważny błąd. Każdy bajt wykradziony z puli w takich systemach wbudowanych, to proszenie się o zawieszenie systemu / programu / procesu, czyli o niestandardową awarię.

Nie jest tylko tak, że wycieki pamięci generują programiści danego softu. Mogą istnieć ukryte wycieki pamięci, które generują zewnętrzne bibioteki lub biblioteki współdzielone lub systemowe. Ta klasa błędów posiada dość szeroki zasięg ze względu na magię używania dwóch podstawowych instrukcji niższego poziomu w jężyka programowania t.j. C dobrze znanych. Są to:

 - alloc / malloc / calloc / tallloc i pochodne - rezerwują pamięć w programie dla zmiennej

- free i pochodne - zwalniają przydzieloną pamięć (po podaniu zmiennej z przydziału pamięci jako argumentu) 

Właściwie to chodzi tutaj o fakt, że nie wywołuje się FREE tam gdzie zachodzi *ALLOC. Niby takie proste w opisie a do osiągnięcia nirvany jest sporo kombinacji i pracy ;-)


Valgrind - ratunek na wycieki pamięci w oprogramowaniu

Na szczęście w fazie tworzenia oprogramowania, debugowania i testowania, jesteśmy w stanie sprawdzić jak zachowuje się oprogramowanie i dokonać rozpoznania wycieków pamięci. Narzędziem najpopularniejszym na rynku otwartego oprogramowania jest Valgrind 




Narzędzie to doczekało się dojrzałej wersji i bardzo bogatego portfolio, jeśli chodzi o wspierane architektury.

Valgrind obejmuje obecnie siedem narzędzi o jakości produkcyjnej: 
- detektor błędów pamięci 
- dwa detektory błędów wątków 
- pamięć podręczną i profiler predykcji rozgałęzień 
- wykres wywołań generujący pamięć podręczną 
- profiler przewidywania rozgałęzień 
- dwa różne profilery sterty. 
Zawiera również eksperymentalny generator podstawowych wektorów blokowych SimPoint. 
Działa na następujących platformach: X86 / Linux, AMD64 / Linux, ARM / Linux, ARM64 / Linux, PPC32 / Linux, PPC64 / Linux, PPC64LE / Linux, S390X / Linux, MIPS32 / Linux, MIPS64 / Linux, X86 / Solaris , AMD64 / Solaris, ARM / Android (2.3.x i nowsze), ARM64 / Android, X86 / Android (4.0 i nowsze), MIPS32 / Android, X86 / Darwin i AMD64 / Darwin (Mac OS X 10.12).

W Ubuntu możemy zainstalować narzędzie valgrind z takiego onelinera:

$ snap install valgrind  --classic



Test dwóch znanych języków programowania - Python i Golang - na wycieki pamięci w najprostszym programie

Wracam tutaj do założenia mojego wpisu. Mamy dwa bardzo popularne dzisiaj języki programowania: Python i Golang, którymi posługuję się biegle na codzień. Pomyślałem, spróbuję napisać jednolinijkowca i zobaczymy, czy valgrind coś wykryje :-) Poniżej zrzut z testu i rezultaty:


Program w Python + valgrind


$ cat memleaks_test.py 
print("a" * 255)

$ python3 memleaks_test.py 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Ok, odpalmy teraz z badaniem wycieków pamięci i co widzimy:

....
==19177== Invalid read of size 4
==19177==    at 0x5139AE: PyGrammar_RemoveAccelerators (in /usr/bin/python3.8)
==19177==    by 0x67EE59: Py_FinalizeEx (in /usr/bin/python3.8)
==19177==    by 0x6B614C: Py_RunMain (in /usr/bin/python3.8)
==19177==    by 0x6B63BC: Py_BytesMain (in /usr/bin/python3.8)
==19177==    by 0x4C890B2: (below main) (libc-start.c:308)
==19177==  Address 0x51f0020 is 384 bytes inside a block of size 732 free'd
==19177==    at 0x4A39078: free (vg_replace_malloc.c:538)
==19177==    by 0x51ACB8: PyGrammar_AddAccelerators (in /usr/bin/python3.8)
==19177==    by 0x5FD6C4: PyParser_New (in /usr/bin/python3.8)
==19177==    by 0x517293: ??? (in /usr/bin/python3.8)
==19177==    by 0x67BA7A: PyParser_ASTFromStringObject (in /usr/bin/python3.8)
==19177==    by 0x67BEFD: PyRun_StringFlags (in /usr/bin/python3.8)
==19177==    by 0x600581: ??? (in /usr/bin/python3.8)
==19177==    by 0x5C4D7F: ??? (in /usr/bin/python3.8)
==19177==    by 0x56B26D: _PyEval_EvalFrameDefault (in /usr/bin/python3.8)
==19177==    by 0x5F7145: _PyFunction_Vectorcall (in /usr/bin/python3.8)
==19177==    by 0x56B26D: _PyEval_EvalFrameDefault (in /usr/bin/python3.8)
==19177==    by 0x569559: _PyEval_EvalCodeWithName (in /usr/bin/python3.8)
==19177==  Block was alloc'd at
==19177==    at 0x4A37ECB: malloc (vg_replace_malloc.c:307)
==19177==    by 0x51ACCF: PyGrammar_AddAccelerators (in /usr/bin/python3.8)
==19177==    by 0x5FD6C4: PyParser_New (in /usr/bin/python3.8)
==19177==    by 0x517293: ??? (in /usr/bin/python3.8)
==19177==    by 0x67BA7A: PyParser_ASTFromStringObject (in /usr/bin/python3.8)
==19177==    by 0x67BEFD: PyRun_StringFlags (in /usr/bin/python3.8)
==19177==    by 0x600581: ??? (in /usr/bin/python3.8)
==19177==    by 0x5C4D7F: ??? (in /usr/bin/python3.8)
==19177==    by 0x56B26D: _PyEval_EvalFrameDefault (in /usr/bin/python3.8)
==19177==    by 0x5F7145: _PyFunction_Vectorcall (in /usr/bin/python3.8)
==19177==    by 0x56B26D: _PyEval_EvalFrameDefault (in /usr/bin/python3.8)
==19177==    by 0x569559: _PyEval_EvalCodeWithName (in /usr/bin/python3.8)
==19177== 
==19177== 
==19177== HEAP SUMMARY:
==19177==     in use at exit: 301,190 bytes in 135 blocks
==19177==   total heap usage: 2,186 allocs, 2,051 frees, 3,158,779 bytes allocated
==19177== 
==19177== LEAK SUMMARY:
==19177==    definitely lost: 0 bytes in 0 blocks
==19177==    indirectly lost: 0 bytes in 0 blocks
==19177==      possibly lost: 1,632 bytes in 3 blocks
==19177==    still reachable: 299,558 bytes in 132 blocks
==19177==         suppressed: 0 bytes in 0 blocks
==19177== Rerun with --leak-check=full to see details of leaked memory
==19177== 
==19177== Use --track-origins=yes to see where uninitialised values come from
==19177== For lists of detected and suppressed errors, rerun with: -s
==19177== ERROR SUMMARY: 1106 errors from 128 contexts (suppressed: 0 from 0)

Kilkaset bajtów program pożarł ;-) a to nowina dla wszystkich milionów użytkowników języka Pytohn :-) Polecam prztestować bardziej skomplikowane programy oraz serwery aplikacji.



Program w Golang + valgrind


$ cat main.go 
package main

import "fmt"
import "strings"

func main() {
fmt.Println(strings.Repeat("a", 255))
}


$ go build main.go 
$ ./main 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


Program w GOlangu robi dosłownie to samo i badamy go przy pomocy valgrind:


==19372== Conditional jump or move depends on uninitialised value(s)
==19372==    at 0x40C4FD: runtime.mallocgc (/snap/go/6633/src/runtime/malloc.go:1152)
==19372== 
==19372== Conditional jump or move depends on uninitialised value(s)
==19372==    at 0x40C4B1: runtime.mallocgc (/snap/go/6633/src/runtime/malloc.go:1136)
==19372==    by 0x4474A8: runtime.growslice (/snap/go/6633/src/runtime/slice.go:230)
==19372==    by 0x43593E: runtime.allgadd (/snap/go/6633/src/runtime/proc.go:473)
==19372==    by 0x43D1F8: runtime.newproc1 (/snap/go/6633/src/runtime/proc.go:3572)
==19372==    by 0x45DBD2: runtime.newproc.func1 (/snap/go/6633/src/runtime/proc.go:3528)
==19372==    by 0x461605: runtime.systemstack (/snap/go/6633/src/runtime/asm_amd64.s:370)
==19372==    by 0x43745F: ??? (<autogenerated>:1)
==19372== 
==19372== Conditional jump or move depends on uninitialised value(s)
==19372==    at 0x40C4FD: runtime.mallocgc (/snap/go/6633/src/runtime/malloc.go:1152)
==19372==    by 0x4474A8: runtime.growslice (/snap/go/6633/src/runtime/slice.go:230)
==19372==    by 0x43593E: runtime.allgadd (/snap/go/6633/src/runtime/proc.go:473)
==19372==    by 0x43D1F8: runtime.newproc1 (/snap/go/6633/src/runtime/proc.go:3572)
==19372==    by 0x45DBD2: runtime.newproc.func1 (/snap/go/6633/src/runtime/proc.go:3528)
==19372==    by 0x461605: runtime.systemstack (/snap/go/6633/src/runtime/asm_amd64.s:370)
==19372==    by 0x43745F: ??? (<autogenerated>:1)
==19372== 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
==19372== 
==19372== HEAP SUMMARY:
==19372==     in use at exit: 0 bytes in 0 blocks
==19372==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==19372== 
==19372== All heap blocks were freed -- no leaks are possible
==19372== 
==19372== Use --track-origins=yes to see where uninitialised values come from
==19372== For lists of detected and suppressed errors, rerun with: -s
==19372== ERROR SUMMARY: 3447 errors from 761 contexts (suppressed: 0 from 0)

... i ku naszemu zdziwieniu jednak GOlang nie ma wycieków pamięci na takim samym banalnym programie.



Podsumowanie

Bardzo ciekawa obserwacja pomyślałem sobie, jak łatwo przy pomocy valgrind znajdziemy wycieki pamięci. Szczególnie kiedy chciałbym coś napisać na urządzenie wbudowane, którego wielkość pamięci RAM to nie są GB a MB, przemyślę jednak w jakim języku napisać kod. 
Nie chciałbym wpaść w totalne błędne wnioski, że nie można tego robić w Pythonie i tylko w GOlang, gdyż może to być błąd mojej wersji i w kolejnej zostanie naprawiony. Oczywiście, tak błachy błąd dla jednych programistów jest powodem do kolejnych eksperymentów dla innych. 

W związku z tym zapraszam do wypowiedzi, jakie macie doświadczenia z valgrind? Z jakich ciekawych sytuacji wyratował Was ten tool w pracy zawodowej? 


25 stycznia 2020

My Open source - visual learning generator - skrypt w Python generujący szablony PDF A4

W ramach serii "My Open Source" chciałbym przedstawić Wam mój nieskomplikowany skrypt do wsparcia nauki czytania dla dzieci i młodzieży, u których zalecane są ćwiczenia pracy z tekstem w celu poprawienia prędkości czytania. Koncept jest od dawna znany i potwierdzony w alternatywnych metodykach wsparcia prędkości nauki czytania u dzieci. Jeśli macie takie wyzwania ze swoimi dziećmi, zachęcam do codziennych ćwiczeń i motywowania dzieci do sprawniejszego czytania. W świecie informacji, to jak szybko przyswajamy wiedzę determinuje nasz byt, przetrwanie oraz niejednokrotnie jakość życia :-)

Co daje nam ten kawałek kodu - generuje plik PDF, który możemy wydrukować na kartce A4, aby dziecko wykonało ćwiczenia.

Idea wsparcia pracy z tekstem w metodzie visual learning jest na tyle banalna, że dziecko wśród wygenerowanych wyrazów musi znajdować kolejne litery alfabetu i zakreślać je długopisem podczas przeglądania tekstów.
Poniżej ćwiczenia zapisujemy czas pracy nad akapitem tekstu i liczymy na to, że czas ten będzie po kilku tygodniach pracy zmniejszał się.

Oto taki dokument A4 jako PDF generuje program do wsparcia visual learning napisany w języku programowania w Python:



Motywacją utworzenia tego kawałka praktycznego generatora była możliwość generowania przez innych potrzebujących takich arkuszy PDF A4 do wsparcia nauki czytania swojego dziecka.


https://github.com/bieli/visual-learning-generator


Jeśli zastosowaliście i chcecie przedyskutować wyniki/postępy komentujcie poniżej. Mam przejściowe doświadczenie z tym narzędziem.


...

3 marca 2019

Open Source jako napęd dla Internet of Things

W dziejach świata zazwyczaj pierwotne odkrycie, czy wynalazek pociąga za sobą falę kolejnych opartych na jego bazie. Jest to piękne zachowanie ewolucji postępu w przemyśle i zadziwia mnie za każdym razem. Kiedy dodamy do tego społeczność ludzi udostępniających swoje rozwiązania za darmo, mamy niesamowity wachlarz narzędzi do wyboru zależnie od potrzeb.



Empiryczne Prawo Moore'a, nazwane tak na cześć współzałożyciela Intela, Gordona Moore'a, jest pomysłem, że moc obliczeniowa komputerów podwoi się co dwa lata. Okazało się to ważne w wielu obszarach, od komponentów (zakres początkowy) po urządzenia.




W szczególności nieubłagany wzrost mocy chipów i uderzający spadek kosztów ostatecznie umożliwiły urządzeniom na całym świecie umieszczenie w nich jakiejś formy "inteligencji".
Przeszliśmy od komputerów mainframe na stacje robocze, klient-serwer, przetwarzanie w sieciach komputerowych, przetwarzanie w chmurze, a dziś kolejnym naturalnym krokiem jest Internet przedmiotów. Inteligentne urządzenia, aktywne urządzenia na całym świecie są połączone, generując ogromne ilości danych i reagując na środki lub polecenia od władz centralnych lub rozproszonych.


Firma Gartner przewiduje, że w 2020 r. zainstalowanych zostanie 26 miliardów urządzeń IoT, które wygenerują 300 miliardów dolarów przychodu dla producentów sprzętu, a ogólny wpływ na gospodarkę wyniesie 1,9 biliona USD.

To rozprzestrzenianie danych dzięki IoT może być zniechęcające, ale jego siłą jest to, że umożliwia on wszystkie nowe dziedziny aplikacji, w szczególności wokół dużych zbiorów danych. Organizacje bardzo chętnie sięgają po ten nowy rynek i jego możliwości, ale są nieco zdenerwowane tym pierwszym krokiem. Przy wchodzeniu na nowe pole działania bardzo często występuje powiązana krzywą uczenia się i bariera wejścia. Na szczęście dzięki Internet of Things nie jest to tak skomplikowane i kosztowne, jak się wydaje. 

Ewolucją sprzętu, która cicho wkradła się do nas, można zarządzać, wykorzystując inną ewolucję technologii o równie dużych rozmiarach: oprogramowanie Open Source.

Oprogramowanie Open Source istnieje już od kilkudziesięciu lat i jest definiowane przez cztery swobody, jakie oferuje użytkownikowi:

Swoboda uruchamiania programu, jak chcesz, w dowolnym celu (swoboda 0).
Swoboda badania tego, jak program działa i zmieniaj go tak, aby komputer działał tak, jak chcesz (wolność 1). Dostęp do kodu źródłowego jest warunkiem wstępnym.
Swoboda redystrybucji kopii, abyś mógł pomóc swojemu sąsiadowi (wolność 2).
Swoboda dystrybucji kopii zmodyfikowanych wersji innym (wolność 3). W ten sposób możesz dać całej społeczności szansę skorzystania z twoich zmian. Dostęp do kodu źródłowego jest warunkiem wstępnym.
Te cztery swobody są powodem, dla którego otwarte źródło jest również określane jako wolne oprogramowanie. Umożliwiając i zachęcając do dzielenia się kodem źródłowym, pozwala użytkownikowi być tak kreatywnym, jak chciał i tworzyć aplikacje, których budowanie w przeciwnym razie byłoby niemożliwe od zera. A ponieważ coraz więcej osób opracowuje i wykonuje nowe kreatywne aplikacje, inspiruje jeszcze więcej nowych pomysłów i projektów - dzięki oprogramowaniu open source wszystkie te nowe pomysły i sposoby na ulepszenie istniejących aplikacji można zrealizować znacznie szybciej niż kiedykolwiek wcześniej. A "szybki" jest kluczowy dla IoT.

IoT to świat DevOps i innych zwinnych metodologii programowania oprogramowania (i sprzętu). Im szybciej zespół może wymyślić pomysł na produkt, opracować go, sprzedać go po niskiej cenie, ale z dobrym marginesem i iteracyjnie go poprawić, tym lepiej. Teraz setki, a nawet tysiące programistów i zespołów tworzących nowe produkty IoT, każda zaangażowana grupa lub projekt zwiększa wykładniczo liczbę nowych urządzeń, nowe źródła danych, a co za tym idzie liczbę aplikacji do uruchomienia wszystkich to.

Bariera zerowego dostępu dzięki wykorzystaniu Open Source, z kilkoma zestawami narzędzi, bibliotekami i sprzętem Open Source, takimi jak Arduino i Raspberry Pi, jest podstawą do pojawiania się na małych urządzeniach rozproszonych na całym świecie, od bezpieczeństwa w domu po zarządzanie energią systemy, od telematyki samochodowej po monitory zdrowia. 
Ponieważ oprogramowanie typu Open Source pomaga obniżyć koszty samego urządzenia, firmy mogą teraz eksperymentować i łączyć ze sobą rozwiązania, które w przeciwnym razie zostałyby zignorowane, ponieważ wymagałyby wcześniejszego zakupu drogich licencji na narzędzia programistyczne i środowiska, konkretne biblioteki i komponenty oprogramowania. 

Open Source to bardzo skuteczny sposób na poruszanie się po fali IoT z dużą prędkością, przy jednoczesnym zachowaniu ryzyka i kosztów, aby to zrobić pod kontrolą.
Dzięki Open Source możemy gromadzić dane z tysięcy czujników i urządzeń rozproszonych po całej planecie, co umożliwia kreatywność i innowacje na nowe sposoby. Te dane sprawiają, że IoT jest niezwykle ekscytujące i obiecujące dla organizacji i indywidualnych programistów. 
Ten trend może być wykorzystany do opracowania wewnętrznych narzędzi, komponentów istniejących większych systemów (takich jak czujniki pomiarowe dla większych maszyn) lub samodzielnych produktów (pomyśl o czujnikach automatyki domowej lub czujnikach środowiskowych). W rzeczywistości ankieta przeprowadzona przez ARM pokazuje, że blisko 75% organizacji korzysta już z internetu przedmiotów w ten czy inny sposób lub obecnie poszukuje sposobów, aby to zrobić.




Bill Joy, współzałożyciel Sun Microsystems, powiedział kiedyś, że
"innowacja dzieje się gdzie indziej"

To zdanie implikuje albo pozyskiwanie pomysłów z innych miejsc (przejęcia, zatrudnianie zewnętrznych talentów lub przeprowadzanie warsztatów z otwartymi innowacjami) lub dzielenie się pomysłami ze społecznością osób o podobnych zainteresowaniach.

Z tych wszystkich przemyśleń powstała w mojej głowie inicjatywa stworzenia meetupu, którego inaugurację dzięki zaangażowaniu znajomych udało się zrealizować. Tutaj znajdziecie szczegóły:

Internet of Things, Hardware & Robotics - Poznań




Open source to zdecydowanie najlepszy sposób na rozwijanie się w takim trybie współdzielonym, poprzez hosting twojego kodu w publicznie dostępnym repozytorium, w którym nie tylko jedna jednostka pisze kod, ale każdy może połączyć się z repozytorium, sprawdzić części kodu i wnieść wkład/modyfikacje lub dodatki do bazowego kodu. W ten sposób nie ma ograniczeń co do tego, skąd pochodzi innowacja lub jak szybko jest ona napędzana przez bardzo zmotywowanych współpracowników.


Otwarte źródło to także fantastyczne narzędzie do pokonywania przepaści cyfrowej. Bardzo łatwo jest rozpocząć tworzenie aplikacji z systemami IoT, takimi jak Arduino lub Raspberry Pi, które są w pełni oparte na otwartym źródle. Łatwo jest po prostu kupić sprzęt lub, alternatywnie, po prostu pobrać schematy i zbudować je bezpośrednio. Systemy te są dostarczane z darmowymi, otwartymi systemami operacyjnymi, takimi jak Contiki lub Raspian, zestawy rozwojowe, takie jak projekt Eclipse IoT, oprogramowanie pośrednie, takie jak IoTSys i wszelkiego rodzaju interfejsy do łączenia z czujnikami sprzętowymi i sprzętem. Każdy może rozpocząć prototypowanie urządzeń IoT, a następnie przekształcić je w pełnoprawne produkty. Ludzie używają tych platform do tworzenia urządzeń monitorujących dla swoich akwariów, ogrodów lub uzdrowisk lub do budowy stacji pogodowych i modułów sterujących dla wszystkich rodzajów systemów, takich jak drzwi garażowe, termostaty lub dzbanki do kawy, które nagle stają się w pełni zautomatyzowane i autonomiczne, a także zapewniają aktywny feedback w ich środowisku.


Open Source i Internet of Things, w połączeniu, mogą pomóc wprowadzić innowacje i wiedzę do każdego rodzaju społeczeństwa zarówno w krajach rozwiniętych, jak i rozwijających się. Na przykład innowatorzy w dżungli amazońskiej, mimo że mieli dostęp tylko do przestarzałego sprzętu, byli w stanie wdrożyć infrastrukturę typu Open Source i wykorzystać Internet rzeczy, aby stworzyć aplikację, która pozwoliła im używać starych telefonów komórkowych zasilanych zużytymi panelami słonecznymi słuchać dźwięków w bardzo odległych częściach lasu deszczowego. Następnie, dzięki przetwarzaniu dźwięku i rozpoznawaniu wzorca, mogli odczytać hałas wytwarzany przez piły łańcuchowe. Ta aplikacja, zbudowana przy użyciu ogólnodostępnych bibliotek Open Source, pozwoliła tym innowatorom ostrzec urzędników przed nielegalnym wylesianiem i chronić lasy deszczowe.


Zwykle zastrzeżone bazy danych, ze względu na wysokie koszty licencjonowania, mają tendencję do zwiększania barier wejścia do możliwości gromadzenia, przechowywania i przetwarzania danych wymaganych przez takie projekty. Jednak przy korzystaniu z Open Source istnieje wiele łatwych i dostępnych baz danych typu Open Source, takich jak MongoDB, MySQL / MariaDB, PostgreSQL i Cassandra, które pomagają zarządzać danymi po niższych kosztach i pomagają programistom przyspieszyć terminy realizacji projektów.

Narzędzia do zarządzania danymi również pojawiły się, w tym Redis, co pomaga zwiększyć użyteczność otwartych źródeł danych. Nie byłoby to możliwe bez oprogramowania Open Source - ponieważ otwarte oprogramowanie jest dostępne dla wszystkich, programiści ze świetnymi pomysłami nie muszą iść i ponownie wymyślać wszystkie szprychy koła. Dzięki otwartemu źródłu mogą oni po prostu sięgnąć do wcześniej istniejących bibliotek Open Source, a także zindywidualizować, zmodyfikować i ulepszyć kod, który mogą dostosować (następnie, co ciekawe, wesprzeć go ponownie w społeczności).


Startupy już tworzą przyszłość internetu przedmiotów, budując urządzenia do noszenia (ang. wearable), które wyczuwają środowisko - skład powietrza, zawartość drobnoustrojów, zawieszone cząstki stałe i dopasowują je do szerokiej gamy publicznych baz danych w czasie rzeczywistym, aby powiedzieć użytkownikowi: "Wyjdź teraz - powietrze ma ślady wirusa Ebola. "
Aby to osiągnąć, wykorzystują istniejące biblioteki i narzędzia Open Source, oprócz własnej własności intelektualnej. Tworzą nowe urządzenia, które żyją w IoT i zapewniają bardzo wysoką wartość dodaną. 
Venture Capitalists (True Ventures, Kleiner Perkins ...) i korporacyjne fundusze venture (Intel, Qualcomm, Cisco ...) wiedzą o tym i inwestują na tych rynkach. 

Open Source ma ogromne znaczenie dla przedsiębiorstw nabywających infrastrukturę IoT.

Ponieważ nie ma żadnych rzeczywistych ograniczeń pod względem liczby urządzeń, objętości danych, skonsolidowanej przepustowości, 

jedynym ograniczeniem, z IoT, jest twoja wyobraźnia. Więc na co czekasz? Zdobądź zestaw i zacznij tworzyć aplikacje IoT.





Inspiracja (na podstawie artykułu dostępnego w języku angielskim):


28 lutego 2019

Internet of Things, Hardware & Robotics - Poznań #1 - moja inicjatywa meetupu

Od wielu miesięcy się zastanawiałem, jak mógłbym wesprzeć świat Internetu Rzeczy w rzeczy samej, w naszej Rzeczypospolitej. Każda myśl, prezentacja i wystąpienie zostały skrupulatnie przemyślane i wdrożona w życie w ciągu całego 2018 roku. Na postawie tej sprawnej edukacji odważyłem się w ostatnim kwatale 2018 roku otworzyć meetup dla sympatyków Internet of Things, Hardware & Robotics. Ten wpis jest poświęcony pierwszemu wydarzeniu, które miało miejsce w Poznaniu w siedzibie Allegro i było inauguracją wydarzenia mojego pomysłu.




Każdy z Was pewnie kiedyś chciał zrobić coś dla ludzi, otóż i ja również pomyślałem, że coś takiego będzie świetnym uwieńczeniem ok. 20-letniej kariery zawodowej wokół różnych poznanych przeze mnie branż: automatyki przemysłowej, grafiki komputerowe, projektowania układów elektronicznych i systemów wbudowanych, systemów rozproszonych, zarządzania projektami i tworzeniem niebanalnego programowania, wspierania e-commerce w PL, zwinności i pewnie paru innych.

Wymyśliłem, że skupienie się na jednej dziedzinie może nie być sprawiedliwe, bo ludzie interesujący się IoT interesują się tak jak ja programowaniem, SBC - systemami wbudowanymi, automatyką, architekturami, protokołami. Spojrzałem przez ten pryzmat i wyszło, że meetup, który chcę założyć powien posiadać szerszy kontekst tzn.

Internet of Things, Hardware & Robotics




Naturalnie wypadło na meetup.com jako stronę hostującą wydarzenia i co ciekawe po 14 dniach było już 130 osób zapisanych i lubiących tą inicjatywę. Oczywiście liczby stały się motywatorem, aby tą sporą jak dla mnie społeczność spytać w ankiecie, czego oczekują na początek. Wyniki ankiety jednoznacznie wskazały, że nie należy rozdzielać tematu hardware, software oraz IoT.

Jakby z automatu zaczęli do mnie pisać ludzie z różnych branż z kraju i nie tylko, chcąc zaoferować swoje wystąpienie na meetupie. To spowodowało kolejną falę pozytywnego wydźwięku. Kiedy powiedziałem o tym pomyśle kilku znajomym (prelegenci) z branży oraz wspierającej mnie od strony technicznej (salka, rezerwacja, pizza, pokrycie kosztów) koleżance Oli z Allegro, wówczas wszystko się zaczęło urzeczywistniać i pojawił się na horyzoncie termin pierwszego spotkania :-)
Poprosiłem kolegów o pomoc w przygotowaniu swoich prelekcji w ulubionych tematach i taki oto kształt przybrała wersja pierwsza meetupu, który był oklaskany nieraz podczas tego dnia sukcesem.

Tematy jakie poruszyliśmy i mój krótki komentarz do nich (kolejność zgodna z agendą):



Souly – Smart Building – system IoT w praktyce


Marcin Dryjański wprowadził nas w praktyczny system Internetu Rzeczy o nazwie Souly, który tworzony jest w firmie Grandmetric w Poznaniu. Co ciekawego, chłopaki pokazali swoje rozwiązania techniczne, podzielili się wnioskami oraz dość szczegółowymi aspektami projektowymi. Nie zabrakło też wielu porad, jakie problemy są przy tej skali instalacji oraz implementacji (ok. 500 punktów/bramek IoT). Szanuję bardzo pracę chłopaków, gdyż zaskoczyli mnie już na współtworzonym razem meetupie Network & Wireless Meetup, kiedy mówili o poprzedniej wersji swojego produktu. W tej prezentacji zauważyłem naniesione poprawki, które zdążyli zwinnie wdrożyć do systemu na produkcje. Klienci zapewne są z nich dumni i dzięki wielkie za pokazanie, że w Pyrlandii (dla niewtajemniczonych: miasta Poznania) robi się na wysokim poziomie - pierwsze na skalę kraju - produkty Internet of Things.
Oto z jaką uwagą uczestnicy patrzyli na slajdy Marcina:


FreeRTOS - podstawy


Tymoteusz Sielach wprowadził nas w podstawy systemu czasu rzeczywistego FreeRTOS. Uwagi i trafne spostrzeżenia, jakie zostały poruszone wielu osobom zwróciły uwagę, że można coś zrobić sprawniej w systemach wbudowanych zamiast klepać w Arduino. Zdecydowanie kolega podkreślił, że można zyskać wchodząć w FreeRTOS oraz napisać solidny modularny kod aplikacji.
Dla osób lubujących się w Arduino na pewno była to doza spjrzenia w tą bardziej uprzemysłowioną stronę. Tak wyglądał ten temat prezentowany przez Tymka:




Kochanie, po co nam w domu szafa serwerowa (v1.1)


Julian Szulc zaprosił nas do wnętrza swojej szafy serwerowej oraz autorskich adaptacji rozwiązań IoT w domu. Bardzo fajny projekt, w którym Julian buduje serwerownie od podstaw w zakątku domowym. Nie tyle buduje, co zaprojektował dom pod taką okoliczność, aby szafka serwerowa miała swoją wnękę, nadmiar ciepła z grzejących się urządzeń był odpowiednio odprowadzany i rynny na kabelki stanowiły miejsce zabaw dla domowych kotów :-)
Super przekaz i wartościowa porcja wiedzy, jak można się bawić Internetem Rzeczy, przy okazji również używać go w potrzebach domowych t.j. automatyczne podgrzewanie mleka dla dziecka, lokalizowania partnerki, prywatny magazyn dla wszystkich danych, wizualne statystki i metryki.
Wow, jest sporo technicznego mięsa w opowieści Juliana. Z rozmów po meetupie wiem, że wielkim zainteresowaniem ludzi cieszyły się gotowe receptury Juliana na postawienie całego swojego domowego stacka automatyzacji ioT w Dockerach. Oto wizerunek kolegi Juliana:



Przezroczysty telefon komórkowy


Mateusz Piasecki to kolega, którego poznałem na sobotnim warsztacie z Blockchain i po kilku chwilach dyskusji o naszych zainteresowaniach wyraziłem brak meetupu w naszej dziedzinie IoT w Poznaniu. Mateusz przekonał mnie, że na pewno znajdą się chętni, więc po prostu założyłem meetup i tak się formalnie historia zaczęła.
Wracając do ciekawej prezentacji, była ona ukazaniem w tajemniczy i pomysłowy sposób możliwości jakie dają nam przezroczyste wyświetlacze. Mateusz przedstawił tą gałąź przemysłu jako coś, co niebawem ziści wszelkie nadzieje fanatyków sci-fi i będziemy mogli nosić w kieszeni, albo na ręce coś co jest niby bransoletką a niby telefonem, bo tego nie widać :-)
Super, że udało się wypożyczyć jeden prawdziwy egzemplarz takiego wyświetlacza i pokazać nam jak to działa dzisiaj. Proszę zobaczcie, jakie tłumy przyciągnął ten prelegent do urządzenia:




Zbudujmy robota z ROS - RoboTICK.


Marcin Bielak - tak, to moja prywatna inicjatywa o nazwie RoboTICK, do której zapraszam żądnych wiedzy z dziedzin: IoT, hardware, software, cloud, Machine Learning i protokołów sieciowych. Co mam na myśli: otóż zaprezentowałem szkielet prototypu oraz wizualizację robota mobilnego, trójkołowego i chcę wspólnie z poznanymi na meetupie ludźmi go wykonać. Tak wygląda wizualizacja mojego autorstwa (wykonana w programie Open Source Blender): 




Nic nadzwyczajnego pewnie pomyślicie, ale przy moich założeniach zduplikowanego komputera pokładowego, autonomiczności i wielu torów zasilania  - jak w serwerowniach :-) - to będzie nie lada wyzwanie. Zaprezentowałem te koncepty podczas prezentacji, pokazałem przy tym inne kierunki typu: IoT Blockchain, Swarm Robots, Reinforcement Learning (Machine Learning) w których będę rozwijał ten projekt.
Zachęcam Was do udziału w projekcie i gwarantuję wspólną naukę, zabawę oraz poznawanie nowości z lubianej tematyki IoT, Hardware & Robotics. Oto moja skromna osoba przed widownią:




Prezentacja w całości: 




Link do repozytorium projektu (hardware, software, prototypes):


Ogólnie chciałem tym wystąpieniem poznać:

  • ludzi, którzy są chętni do niezobowiązującej pracy nad różnymi ideami wokół IoT
  • opinie ludzi o tym co chcę zrobić
  • możliwości tworzenia tej skali projektów, które jak się okazało otworzyły się szerzej tzn. otrzymałem propozycję wystąpienia na uczelni przed setkami studentów chętnymi do realizacji takich pomysłów oraz opcję współpracy we współtworzeniu łazików marsjańskich na konkursy ERC
  • alternatywne ścieżki realizacji projektu

Bardzo pozytywny feedback otrzymałem, przez co nadal rozważam, jak pogodzić czas prywatny, życie zawodowe i projekty, aby sprostać nowym wyzwaniom. Coś pewnie się z tego "urodzi", ale zawsze daję sobie czas na zracjonalizowanie możliwości, bo jak wiemy jest ich tak dużo w tych czasach, że warto skupić się na najważniejszych dla siebie.


Naturalnie czas na networking nadszedł dość szybko i wszyscy dzięki wsparciu finansowemu mojego pracodawcy Allegro.pl - któremu dziękuję - otrzymaliśmy na zakończenie megabajty kalorii w postaci ciepłej pizzy. A było w co zęby wbijać zapewniam Was.


Ilość pytań po każdym wykładzie była piękna, musiałem nawet użyć mechanizmu "tykadła" tzn. z powodów czasowych poprosić o przeniesienie dyskusji na później. Oczywiście nie obraźcie się, inni też chcieli coś od siebie przedstawić - mam dzięki temu pewien pomysł na różne dyskusję w kolejnych edycjach meetupów. Niewiarygodnie wiele tematów, które zostały poruszone w trakcie dyskusji przybliża mnie do myśli, że jest potrzeba na takie miejsce jak mój meetup wiele pytań siedzi gdzieś tam w ludziach z branży IT a takie spotkania pozwalają się im uwolnić. Naturalnie nie zawsze dostajemy poprawną odpowiedź, ale mamy gdzie zapytać, skomentować swoje wątpliwości i to się tutaj znacząco liczy. Cenimy sobie podczas meetupu szczere chęci dzielenia się wiedzą, bo to są zasady otwartego na wiedzę społeczeństwa, które wspieramy.

Dziękuję bardzo wszystkim zaangażowanym:

  • prelegentom
  • uczestnikom
  • Aleksandrze Dondziak, za wsparcie mentorskie i organizację techniczną wydarzenia (w profesjonalnej sali w budynku Allegro i za pizze).
Do zobaczenia na kolejnym meetupie, który jak już wiem pojawi się niebawem tutaj.

16 maja 2017

Pixar's Renderman + Ubuntu + Blender = realistyczne renderowanie grafiki 3D

Od zawsze oglądamy produkcje firmy Pixar, ale nie wszyscy wiedzą, że piękne sceny do tych produkcji filmowych w tym bajek są renderowane w opublikowanym do użytku za darmo rendererze  Renderman. Niedawno ten silnik obchodził swoje 25 lat, co jest wielkim sukcesem w tej branży.



W związku z tym, że bawię się czasami blenderem (w modelowanie rzeczywistości oraz przygotowanie modeli do druku 3D) spróbowałem podłączyć ten renderer w ubuntu, aby uzyskać na swoich scenach takie realistycznie wyrenderowane grafiki 3D.

W kwestii samej architektury rozwiązania warto wspomnieć, że Pixar oferuje po rejestracji do celów nie komercyjnych skompilowany serwer i w procesie instalacji wiążemy go poprzez e-mail z kontem na stronie firmy Pixar. Dla wielu programów do modelowania 3D są dostępne dedykowane pluginy, które pozwalają na wykonywanie renderowania scen na silniku RenderMan

Renderer Pixara jest bardzo bogatym w opcje narzędziem z interfejsem graficznym.
Ten produkt pracował przy produkcjach, kótre nie raz wygrywały Oscara i nie tylko.


Dzięki niemu w scenach akcji w „Final Fantasy VIII” znalazło się efektowne rozmycie tła, w „Strażnikach Galaktyki” świat z komiksów Marvela zyskał nowe życie, popisowo złamał się Titanic, a Jedyny Pierścień wpadł do ognia Góry Przeznaczenia. źródło

Cechuje go kilka ważnych aspektów:

  • fotorealizm - RenderMan produktuje bardzo realistyczne obrazy z bazujących na fizyce cieniowaniu i świetle. To co mnie zaskoczyło, to w opcji renderowania ustawia się datę i godzinę, a pozycja słońca w scenie się wylicza automatycznie. Bardzo sprytne i praktyczne podejście.  
  • wydajność - bardzo efektywnie renderuje duże i skomplikowane - ze sporą ilością odbić światła - sceny. Oczywiście można renderować na farmie, czyli w cloudzie, co ułatwia pracę w tej branży.
  • jakość - możemy tworzyć wysokiej jakości obrazy z nowościami typu zaawansowane filtrowanie oraz rozmyciem w ruchu
  • kontrola - język RenderMan Shading Language i format danych Pixar's 3D (RIB) umożliwiają automatyzację kreacji oraz wyrażenie dowolnej ekspresji twórczej.
Oczywiście wspierane są wszystkie popularne dzisiaj systemy operacyjne.

Tutaj film pokazujący, jak podłączyć RenderMan w Blenderze.








Chciałbym przedstawić różne materiały wyrenderowane w Blenderze 2.78c, w tym oczywiście przy pomocy Pixar's RenderMan. Celowo zachowałem światło ze zmroku, aby ukazać jak w warunkach słabszego oświetlenia RenderMan radzi sobie ze scenami.

RenderMan rendering dla zachodzącego słońca








25 kwietnia 2017

Zwycięstwo Open Source nad pospolitą komercją



Zasady w świecie otwartego oprogramowania są dość naturalne:
  • stwórz sobie projekt, który możesz zrobić lub szukasz innych chętnych do jego realizacji
  • korzystaj z kodu innych i zgłaszaj swobodnie poprawki, błędy, pomysły, uwagi
  • kontrybuuj, czyli dorzucaj kiedy chcesz swoje trzy grosze zupełnie "za darmo" do projektów
  • ciesz się życiem, sukcesami i ew. dolarami za zdobycze/osiągnięcia całego świata IT bazującego na Open Source
  • nie narzekaj, po prostu poprawiaj niedoróbki jako wolontariusz - wielu też się teraz uczy
  • inne specyficzne zależne od konkretnych prawnych licencji
Jak to bywa w wielkim świecie oprogramowania są firmy, które pokazują co produkują i takie, co ukrywają tajnie swoje kody. Do niedawna było tak, że wielcy tego świata z branży IT robili kod tylko dla siebie i pokazywali wyjątkowo fragmenty na konferencjach branżowych. Lata mijały, coraz trudniej im się wiodło i od kilku lat mają swoje konta na github.com i tam świadomie dzielą się w ramach FLOSS za darmo wyprodukowanym kodem. Również respektują przytoczone na wstępnie zasady :-)

To jest WIELKI SUKCES OPEN SOURCE, kiedy przeglądając kod takich firm jak: Google, Allegro, Zelando, Amazon, eBay, Netflix, Uber, Facebook, Apple, IBM, Redhat, NASA, NSA itd. możemy podziwiać kunszt i uczyć się od najlepszych, o ile jaramy się warsztatem programistycznym innych programistów z całego świata. 

Osobiście "pożywiam" się takim otwartym kodem na co dzień i muszę tutaj wspomnieć, że analiza statyczna, testy bezpieczeństwa, testy jednostkowe, testy behawioralne to kanony, które już stanowią podstawę publikacji wielu projektów Open Source.
Nie ma już sytuacji, że tak jak kiedyś na sourceforge.org ściągaliśmy spakowane źródła z kodem, to nie było wiadomo, czy działa, czy nie działa. Obecnie na github, gitlab, bitbucket i wielu innych sitach mamy dostęp do wysokiej jakości kodu za darmo
TAK jest to wiedza, która jest za DARMOCHĘ.
Jeśli drogi czytelniku zamierzasz zostać programistą, to musisz wiedzieć, że istnieje ogromna ilość kodu do przejrzenia, wsparcia i współtworzenia. Co wiążę się z nowymi sposobami zdobywania wiedzy, poprzez społecznościowe przeglądy naszego kodu, dyskusje z ludźmi zaangażowanymi w brażę, z pasjonatami. Koniec z nudnymi wykładowcami - taki żarcik, nie wymrą zbyt szybko - bo współcześnie każdy nowy trend w IT ma swoich zwolenników, społeczność i darmowe kursy eLerningowe.

W tej sytuacji, jeśli jakaś komercyjna firma, która nie ma udziałów w OpenSource w sensie nie dokłada swojej cegiełki, a tylko korzysta jest pozbawiona najpewniej ludzi z pasją. Bo ludzie z zainteresowaniami chętnie wspierają innych, kontrybują do Open Source i są bardzo otwarci na dzielenie się wiedzą i kodem na zewnątrz. To stoi w sprzeczności z interesami firm, które zamykają się na Open Source, więc mam taką hipotezę, że inżynierowie oprogramowania jacy do nich trafią będą mniej otwarci na NOWE technologie niżeli fanatycy zmieniającej się branży.
Dochodzimy do sedna: jeśli zatrudniasz ludzi z pasją do Open Source to wiedz, że Twoja firma dzięki takim ludziom posiada przewagę konkurencyjną. Ludzie w zamkniętych technologiach/korporacjach czekają aż jakiś support rozwiąże za nich problem, a ludzie z otwartych firm sami robią Pull Requesrty ze zmianami do używanych przez nich projektów Open Source.

Skąd te wnioski ? Z praktycznego współtworzenia kodu i społeczności Open Source m.in. tutaj http://github.com/bieli oraz z edukacji znajomych (w tym licznych klas młodzieży) w tematyce programowania i budowy systemów komputerowych.

Zachęcam tym samym wszystkich do spróbowania, załóżcie konto na GITHUB, nauczcie się GITa i spróbujcie swoich sił w bardzo silnej branży IT. Świat otwartego oprogramowania liczy na waszą kontrybucję :-) i kto wie, może tak przełomowy projekt jak jądro Linuxa, czy rozproszony system kontroli wersji GIT.

Tutaj oczywiście ukłon w stronę Open Source i wyraz szacunku, że zaufanie jakie pokładałem w otwartym oprogramowaniu ładnych ~25 lat temu współcześnie jest normalnością, standardem i koniecznością. Jest to spójne ogniwo pomiędzy wieloma firmami i freakami, gdzie widać wspólny cel, kształtowanie etyki zawodowej i realny rozwój technologii przez każdego chętnego.


Open Source dzisiaj to synonim Otwartego Spokojnego Umysłu i niechaj tak pozostanie :-)



15 grudnia 2016

UbuntuBSD - bezpieczny kernel z FreeBSD + popularna dystrybucja Linuxa Ubuntu + system plików ZFS

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


5 grudnia 2016

FPGA w chmurze - Amazon EC2 F1 - logika programowalna dla każdego

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.

23 października 2016

Platforma programistyczna do tworzenia robotów ROS (Robot Operating System) pomaga inżynierom już 8 lat

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:

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.

Linki:
Wprowadzenie do systemu operacyjnego robotów ROS - przykład kodu w języku Python
Pi Robot - ROS pomaga w nawigacji
Polecane książki n.t. ROS Mastering ROS robotic programming ROS w przykładach
Hardware ROS
KOnferencja ROS 2016 - dostępne są filmy i filmy z każdej prelekcji
Nauka programowania robotów z użyciem języka Python

10 listopada 2015

Protokoły w świecie internetu rzeczy - IoT protocols - (część 1 z 2)

Wstęp - czym są protokoły w branży IT ?

Dla niewtajemniczonych, zgodnie z definicją Protokół komunikacyjny to zbiór ścisłych regół oraz kroków postępowania, które stosują urządzenia w celu wymiany danych i łączności.
Z powodzeniem protokołem możemy nazwać formalny język komunikacji nie tylko pomiędzy maszynami, ale również pomiędzy ludźmi. Oczywiście zakładając, że jest to nietypowy przypadek, kiedy ludzie komunikują się zawężając swoje możliwości poznawcze oraz intelektualne w kontakcie z innym człowiekiem. To oznacza, że stosowaliby taki sposób wymiany informacji, że komunikacja byłaby jednoznaczna dla każdej ze stron :-)

Protokół to też systemem regulacji oraz zasad, które umożliwiają dwóm lub więcej jednostkom systemu wymieniejącego komunikaty do przesyłania informacji różnego typu, w tym również weryfikacje poprawności tej komunikacji (sumy kontrolne, bity parzystości, znaczniki czasu, unikalne identyfikatory, itp).


We współczesnym świecie IT do niedawna protokoły dzieliły się na klasyczne, internetowe, transmisji multimediów, automatyki przemysłowej, lecz od kiedy Internet rzeczy (ang. Internet of Things) stał się realną wizją przyszłości powstała nowa kategoria protokołów, którą stanowią protokoły IoT.

Spośród znanych i używanych w internetcie protokołów nalezy wymienić:


Automatyka przemysłowa i jej znane protokoły:

Internet przedmiotów zyskuje popularność i najważniejsi gracze inwestują w Internet rzeczy potężne pieniądze. Internet rzeczy zapowiada jak szacują firmy analityczne rewolucje technologiczną. Już dzisiaj wiele firm z różnych branż zainwestowało w IoT. Dotyczy to dość szerokiego kręgu: przemysłowego, transportu, energii, życia codziennego, opieki zdrowotnej, rolnictwa, ruchu drogowego, oszczędzania energii.
istnieje wiele rozwiązań do realizacji projektów IoT, które umożliwiają implementacje kilku protokołów IoT, o których chciałbym tutaj wspomnieć.

Jak wiadomo świat SOA i mikrousług sieciowych w internecie bazuje na protokole HTTP oraz często formatach danych typu YAML, XML, JSON. Jest to dość uniwersalna metoda, ale w IoT zupełnie niewygodna. Chodzi o podstawowy fakt - w internecie rzeczy zakładamy, że usługi będą realizowane poprzez wzmożoną komunikacje maszyn z maszynami. Ludzie będą otrzymywali raporty, które bazują na zautomatyzowanych i rozproszonych zbiorach danych online.
Wielu projektantów IoT założyło, że do tego celu protokoł HTTP nie jest wystarczający, stąd narodziny kilku istotnych dla IoT protokołów wymienionych poniżej.

Protokoły IoT

Poniżej znajduje się lista najbardziej popularnych protokołów IoT używanych w znanych mi obecnie ekosystemach Internatu Rzeczy.

Koncept brokera IoT w występujący w większosći prezentowaych protokołach IoT:

Protokół MQTT

MQTT (ang. Message Queuing Telemetry Transport) to protokół - wg. OASIS powinien w przyszłości zarządzać środowiskiem sieciowym Internet of Things - dzięki któremu stworzymy wiele aplikacji wysyłających sobie nawzajem komunikaty, czy też zdarzenia. MQTT pozwala na wysyłanie zdarzeń i nasłuchiwanie na nie między odległymi aplikacjami.
Z protokołu MQTT korzysta min. Facebook Messenger. Dzięki zastosowaniu tego protokołu w łatwy sposób możemy przenosić się podczas rozmowy z jednego urządzenia na drugie i kontynuować konwersację.

Protokół zakłada pojęcie brokera, czyli bramki, która zapewnia propagację komunikatów na kanały komunikacyjne. Najbardziej popularną implementacją brokera MQTT jest mosquitto.
Broker w MQTT pełni rolę serwera albo centralnego huba lub switcha przesyłającego komunikaty.
Z brokerem łączą się klienty aby nasłuchiwać lub wysyłać wiadomości. Każda wiadomość musi mieć odpowiedni temat (topic) oraz treść. Nasłuchiwanie zawsze dotyczy konkretnych tematów.



Pierwszą wersję protokołu MQTT opracowały firmy IBM i Eurotech. Jest on do dzisiaj używany w medycynie (gdzie jest wykorzystywany np. do komunikowania się drogą radiową z rozrusznikami serca) oraz przez firmy eksploatujące złoża ropy naftowej i gazu.

Protokół CoAP

CoAP jest promowany jako "well designed", gdyż bazuje na RFC 7252 Constrained Application Protocol. Analogicznie jako HTTP, CoAP bazuje na sukcesie modela REST implementowanego w współcześnie w modnym świecie mikrousług / SOA na HTTP. Używa lekkiego UDP zamiast cięzkiego TCP/IP.
Protokół CoAPI zakłada użycie formatów XML, JSON ale wnosi również binarny format JSONa zwany CBOR opisany w RFC 7049 Concise Binary Object Representation.
CoAP posiada zaimplementowane rozpoznawanie urządzeń oraz właściwości spośród nodów, które działają w sieci IoT. Jest to dość praktyczna wzmianka, biorąc pod uwagę sporą liczbą urządzeń IoT, która ewolucyjnie powinna podzielić się na grupy specjalizacji w przyszłości. Discovery w CoAP może tylko wesprzeć ten podział logicznych grup urządzeń IoT.




Dla potrzeb implementacji protokołu IP w niewielkich urządzeniach (małe czujniki, elementy wykonawcze, jednoukładowe sterowniki czy moduły monitorujące) opracowano protokół aplikacji CoAP (ang. Constrained Application Protocol), dedykowany do aplikacji z węzłami sieciowymi o ograniczonych zasobach pamięci i mocy obliczeniowej, realizujących proste zdania i funkcjonalności, ale wymagających komunikacji za pośrednictwem sieci Ethernet lub Internet. Protokół CoAP umożliwia implementację funkcji protokołu HTTP i obsługi stron WWW w prostych konstrukcyjnie modułach i węzłach sieciowych.

Protokół AMQP

AMQP (Advanced Message Queueing Protocol) to zaawansowany protokół kolejkowania komunikatów.
Najpopularniejsza implementacja protokołu AMQP to system RabbitMQ. Jest on czymś w rodzaju firmy pocztowej, która jest organizacją złożoną nie tylko z placówek pocztowych, ale i całej infrastruktury służącej do przekazywania wiadomości z jednego miejsca na drugie, od nadawcy do odbiorcy.
AMQP posiada wiele integracji w gotowych frameworkach w wielu popularnych językach programowania. Śmiało można uznać go za standard w branży IT.

Protokół XMPP

XMPP (ang. Extensible Messaging and Presence Protocol Read) znany kiedyś protokół jako Jabber. Pozwala enkapsulować inne protokoły komunikacji tekstowej w komunikatorach internetowych. To było kiedyś, bo współcześnie jest to uznany protokół bazujący na XML do komunikacji w czasie rzeczywistym. Umożliwia zarówno wymianę komunikatów jak i statusów.


Protokół XMPP zasadniczo używany jest do błyskawicznej komunikacji między użytkownikami, ale nie ma przeszkód by używać go jak poczty elektronicznej tj. uruchamiać pobieranie wiadomości co pewien czas.

Protokół STOMP

STOMP to tekstowy protokół komunikacji z ramkami oparty na HTTP. Protokół STOMP został zaprojektowany jako bardzo prosty w implementacji, co może być korzystne w kontekście działania na urządzeniach wbudowanych.
Najpopularniejszym użyciem protokołu jest STOMP na Web Socket co daje nam nieograniczone możliwości implementacji protokołu z WebSockets, które są już wybudowane we wszystkie współczesne przeglądarki internetowe. Praktycznie oznacza to, że nasz system IoT implementujący STOMP poprzez Web Socket może zachodzić w interakcje z przeglądarką każdego klienta i w czasie rzeczywistym utrzymywać wymieniać komunikaty.

Dodatkowe informacje o protokołach IoT

Oto prezentacja pokazująca nowe trendy w protokołach IoT:



Prezentacja uzupełniająca wiedzę o protokołach IoT:

Tabela ze szczegółami dla wymienionych protokołów:

Linki:
Wybór protokołu IoTL AMQP, MQTT, or STOMP
REDHAT używa protokołu STOMP do testowania serwera komunikatów qiot containers