11 lipca 2016

Mastering Clojure PACKT Akhil Wali - recenzja książki

https://www.packtpub.com/application-development/mastering-clojure

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

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

4 kwietnia 2014

Wyszukiwarki inne niż google.com - tak istnieją metawyszukiwarki

Zgodnie z definicją wyszukiwarka internetowa (ang. search engine) to program lub aplikacja internetowa, która realizuje fukncję podążania za hiperłączami (linkami) internteowymi w celu zbudowania indeksu z danymi. Oczywiście sukces, jaki niewątpliwie osiągnęło Google w swojej globalnej wyszukiwarce internetowej dla zasobów HTTP / WWW to szybki czas i wysoka trafność odpowiedzi na zapytania o szukane frazy. Globalny zasięg (oprócz Chin i jednej z Korei oczywiście) spowodował, że Google dzięki wyszukiwarce internetowej podbiło świat wirtualny internetu i ma monopol.


W dobie takiego monopolu czasami spotykamy się z niewiarygodnymi rezultatami wyszukiwania lub po prostu spamem internetowym zamiast np: artykułu naukowego na temat. Na ratunek przychcodzą nam metawyszukiwarki, czyli wyszukiwarki dziedzinowe, w których zawężamy się do szukania wyłącznie tematów i zagadnień z danej dziedziny.
 
Metawyszukiwarki są też często kojarzone z multiwyszukiwarkami, które przeszukują wiele serwisów i zwracają w jeden spójny sposób agregaty danych bądź też najcenniejsze z nich, które wynikają np: z rankingu popularności ew. kryterium jakim jest zawężenie do dziedziny multiwyszukiwarki.
 


Warto nadmienić, że metawyszukiwarka nie musi bazować na linkujących do siebie stronach WWW. Może używać dedykowanego parametru lub dziedzinowego kryterium, po którym wyniki wyszukiwania będą najbardziej trafne. Np: szukanie aminokwasów nie zawsze udaje się w Google, ale metawyszukiwarka od aminokwasów robi to idealnie i sprawniej. Ba możemy do niej wprowadzić wzór lub obrazek aminokwasu, którego szukamy i jest to najlepszy sposób dziedzinowy.
Istotna różnica metawyszukiwarekk i multiwyszukiwarekk w stosunku do zwykłych wyszukiwarek internetowych ogólnego przeznaczenia jest taka, że meta i multi mogą nie utrzymywać swojego indeksu wiedzy. Jedynie robią rankingowanie lub stosują inne eksperckie algorytmy podpowiadania nejlepszych wyników.

Odnośnie szukania konkretów w sieci. Tak działa na codzień przeciętny użytkownik, nie szuka zawsze wszystkiego i w każdym wymiarze. Jest jeden szczególny klient, który szyka byćmoże wszystkiego i wszędzie - zdecydowanie, agencje wywiadowcze. Używają sobie tylko znanych metawyszukiwarek, które w dziedzinie śledczej lub wywiadowczej robią swoją najlepszą robotę. Dokładnie nakierowują na: cele, ludzi, firmy, zzdarzenia, fakty, skojarzenia ludzi i urządzeń, itd.
Postaram się omówić kilka metawyszukiwarek jakie spotkałem na WWW i zachęcam do eksperymentowania z wyszukiwaniem, bo jest to ważne, aby wiedzieć gdzie oprucz Google.com znajdą się stosowne informacje w internecie.


Świat metawyszukiwarek ciągle się zmienia. Jedne istnieją w sieci, ale nie rozwijane odstraszają datą ostatniej aktualizacji. Inne zmieniają nazwy i adresy. Część zupełnie znikaja i powoli się o nich zapomina. Metawyszukiwarki nigdy nie zdobyły dużej popularności. Może trudno im wygrać konkurencyjną walkę z gigantem, ale mimo tego mają wiernych fanów, a w sieci regularnie pojawiają się nowe projekty z tej grupy.



Dzisiaj punkt ciężkości przesuwa się raczej w stronę metawyszukiwarek tematycznych, zwanych potocznie „porównywarkami” – te umożliwiają wyszukanie i porównanie wielu ofert różnych sprzedawców internetowych. To serwisy typu ceneo.pl czy skapiec.pl, ostatnio popularne są „travel metasearch engines”, które pomogą zarezerwować np. lot czy pokój w hotelu.

Lista poniżej to typowe metawyszukiwarki, dzięki którym w jednym oknie widzimy wyniki z kilku innych wyszukiwarek. Są głównie anglojęzyczne i to ten obszar językowy jest przede wszystkim przeszukiwany. Poza jednym wyjątkiem nie ma takiej, która byłaby dedykowana specjalnie zasobom polskojęzycznym.

Dogpile

Łączy wyniki Google, Yahoo!, Yandex i kilku innych wyszukiwarek, zwłaszcza tych dedykowanych plikom video i audio. Umożliwia wyszukiwanie w całej sieci oraz w obrazach, materiałach video, newsach. Oferuje wyszukiwanie informacji lokalnych oraz osób , szkoda że tylko na terenie USA. Daje możliwość wyszukiwania zaawansowanego: z wszystkimi słowami, dokładnej frazy, wykluczenia słowa bądź frazy, oraz wyeliminowania bądź zawężenia do konkretnej domeny. Można także ograniczyć wyniki do jednego z 10 języków (polskiego niestety nie ma).Działa dość długo, bo od 1996 r. Ciekawostką jest nazwa wyszukiwarki, zaczerpnięta z gry rugby, gdzie gracze tworzą stos nakładając się jeden na drugiego. Dogpile – jak zapewniają twórcy – robi dokładnie to samo, układa wszystkie dostępne wyniki w jednym miejscu.

Yippy

Twórcy kładą nacisk na dwa elementy ważne według nich dla współczesnego internauty. Po pierwsze Yippy ma być przyjazna rodzinie. Eliminowane są treści takie jak pornografia, gry, treści seksualne oraz produkty czy poglądy, które mogłyby być uznane za antysemickie, antychrześcijańskie, konserwatywne i antyamerykańskie. Po drugie chroni prywatność użytkowników (żadne metadane nie są przechowywane, tak jak i historia wyszukiwania). Oferuje ciekawe rozwiązanie – zamiast dostarczania milionów wyników w postaci jednej długiej listy, grupuje podobne wyniki razem w “chmury”: dziedzinową (tematyczną), źródłową (pokazuje liczbę wyników z konkretnego adresu), wg. domeny i czasu, kiedy się informacja w sieci pojawiła. Możliwe jest wyszukiwanie w całej sieci, zdjęciach, blogach bądź wikipedii. Ciekawe są projekty specjalne, np. wyszukiwarka dedykowana dziełom Szekspira http://shakespeare.yippy.com czy działalności Benjamina Franklina http://ben.yippy.com.

Ixquick

Jedyna multiwyszukiwarka posiadająca także interfejs polski. Jest dostępna także w innych językach m.in.: chińskim, angielskim, francuskim, niemieckim, japońskim, portugalskim, hiszpańskim, szweckim, a nawet tureckim czy koreańskim. Łącznie wyszukuje w 18 językach. Każda wersja językowa uwzględnia w wyszukiwaniu lokalne wyszukiwarki (o ile istnieją). przyznaje każdej stronie jedną gwiazdkę za każdą wyszukiwarkę, która umieściła ją w pierwszej dziesiątce swoich wyników. Pięć gwiazdek oznacza, że pięć wyszukiwarek oceniło stronę tak samo. Ixquick nie gromadzi ani nie udostępnia żadnych informacji osobistych. Mechanizm Oferuje szerokie możliwości spersonalizowania ustawień wyszukiwania.