3 marca 2014

Clojure - język funkcyjny osadzony na JVM

CLOJURE wg. wiki. jest to nowoczesny dialekt języka programowania Lisp, ogólnego przeznaczenia, który wspiera modyfikację uruchomionego programu i zachęca do programowania funkcyjnego oraz współbieżnego.

Tak się składa, że zawitałem ostatnio na warsztaty programowania w języku Clojure zorganizowane w Poznaniu i z niesamowitą lekkością ;-) w ciągu kilku pierwszych godzin testowałem sam język i jego możliwości, po czym kodowałem projekt prostej gry w Clojure oraz Clojure Script. Poniżej zechciałem dla siebie i innych sporządzić notatki z warsztatu n.t. Clojure.

Clojure cechy ogólne

  • kompilowany do bajtkodu JVM (Java Virtual Machine)
  • w pełni zgodny z językiem Java - można wykorzystywać klasy (bytekod) z Java w Clojure
  • domknięcia z naciskiem na rekurencję
  • Bogata biblioteka stałych struktur danych
  • repozytorium pakietów wraz z czymś takim jak szablony użycia, gotowe prototypy zapewniające szybsze pisanie kodu i przede wszystkim poznanie modułu
  • bogata biblioteka stałych struktur danych
  • Silne wsparcie dla współbieżności w postaci transakcyjnej pamięci (ang. Software Transactional Memory – STM) i systemu agentów
  • makra służące do definiowania funkcji jak w języku Scheme

Clojure jest dynamicznym językiem programowania

Wiem, że jest to zbyt ogólne pojęcie i już wyjaśniam. W Clojure ponad interpretację i kompilowanie kodu została wyniesiona idea odkrywania, testowania, wykonywania na bieżąco w trakcie programowania każdej linijki kodu. Clojure można osadzać w języku Java. Posiada on dedykowaną konsolę do uruchamiania kodu zwaną REPL (Read-Eval-Print-Loop), która umożliwia pracę zgodnie główną ideą Clojure napisz linijkę kodu, wykonaj, przetestuj, popraw i tak powtarzaj w pętli.

Clojure jest językiem funkcyjnym

Zapewnia to unikanie zmiennego stanu obiektu, proponuje funkcje jako obiekty "pierwszo klasowe", wspomaga iterację rekursywną zamiast ubocznego efektu rozwiązań bazujących na pęlach. Clojure powstał z myślą o zastosowaniach funkcyjnych, kiedy większość kodu wspiera ten sposób interpretacji rzeczywistości.

Clojure jest dialektem języka List

Idea - kod jako dane - zaczerpnięta z Lispa jest dość banalna a zarazem potężna. Opis funkcji w Clojure bazuje na systemie makr i danych, które te makra przetwarzają. Jednym ze znanych mi przypadków praktycznego użycia jest definicja cennika, który bazuje na makrach i strukturach danych zapisanych w jednym kodzie. Zmiana struktur danych jest możliwa na zasadzie pomyślnej interpretacji kodu Clojure. Mamy konwencję do przechowywania danych w strukturach, struktury, walidację oraz makra zapewnione na poziomie jednego języka/pliku opisującego byt/y.

Clojure jest w pełni współbierzne

Dzisiejsze systemy posiadają wiele niezależnych zadań działających na wielordzeniowych procesorach. Rozwiązania oparte o wątkisą dość kosztowne i skompilowane, ze względu na sekcje krytyczne i synchronizację. Clojure upraszcza wielowątkowość na kilka sposobów. Dzięki temu, że typy danych są niemutowalne (bezstanowe) możliwe jest łatwe rozpraszanie zadań.

Clojure jest osadzony na JVM

Clojure jest wbudowanym rozwiązaniem i bardzo dobrze integruje się z językiem Java, podobnie jak Groovy, czy Scala umożliwa tworzenie aplikacji które działają na jednej wirtualnej maszynie i na mogą róznież w ten współdzielić zasoby, przez co zarazem cachować w ramach jednej instancji JVMa.

ClojureScript - dedykowany dialekt tłumaczony do JavaScript

Oczywiście jak każdy współczesny język również Clojure zdecydowało się na posiadanie własnego odpowiednika JavaScript, który ma składnie Clojure, lecz pod spodem kompiluje się do Java Script i potrafi wykonywać się w ramach jednej aplikacji.

Jak na każdy niezależny język programowania przystało Clojure posiada również swój menadżer pakietów o nazwie Leiningen, który zadba o to aby zależności wymagane w projekcie zostały pobrane i ew. skompilowane do bajtkodu.

Polecam zapoznanie się z tematem jezyka programowania Clojure i byćmoże to będzie język przyszłości:-)

Linki:

http://clojure.org/

http://www.verious.com/board/AKumar/using-mutable-state-in-clojure/

http://clojure.com/

http://java.ociweb.com/mark/clojure/article.html

http://clojurescriptone.com/

10 stycznia 2014

Jak otworzyć wiele okien X11 - proporcjonalny podział ekranu

Spotkalem się dzisiaj z problemem jednoczesnego otwarcia wielu okien jakiegos oprogramowania w systemie X-window. Podejrzewałem, że skoro menadżery okien X11 radzą sobie z tym z automatu, to może coś z "x" na początku istnieje do tego celu i nie trzba pisać skryptów. Okazuje się, że x-tile pozwala na proporcjonalne otwarcie wielu różnych okien programów jednym kliknięciem.

Przypadek użytkowy - potrzebuje szybko zaprezentować w celu porównania 6 dokumentów PDF ew. obrazów JPG na jednym dużym monitorze. X-TILE świetnie sobie z tym radzi - testowałem na X11 w wersji GNOME na Ubuntu i polecam.

Poszczególne kroki działania

1. Wykonujemy polecenie otwierajace w tle wiele okien przegladarki z obrazkami dostepnymi w katalogu (z konsoli Linux):

find . -iname '*.jpg' -exec sh -c 'echo "{}" ; gthumb "{}" &' \;

2. Instalujemy x-tile z podanego x-tile

sudo dpkg-i ~/Downloads/x-tile_2.5-1_all.deb

3. Uruchamiamy zainstalowany program x-tile

x-tile

4. Wybieramy w x-tile aplikacje z listy i klikamy na ikonke, po czym wybieramy w ilu rzędzach i kolumnach chcemy rozłożyć okna

5. Poniżej przykładowy efekt działania z 6-cioma obrazkami JPG przypadkowo pobranymi z sieci

Może znacie jakieś magiczne skróty klawiszowe do tego celu ew. inne rozwiązania ... chętnie się dowiem jak to się robi na Mac OSX :-)

9 stycznia 2014

ArduSat - satelita Open Source & Hardware zbudowany jak Arduino - AVR w kosmosie

Jak miło czyta się kolejne wątki twórczości Open Hardware, które zbliżają nas do kosmosu ;-)

Otóż, okazuje się, że są na świecie fanatycy (czyt. fascynaci) wysyłania sztucznych satelitów i do tego testują kod Open Source na orbicie. Cały pic polega na tym, że projekt ArduSat powstał na kickstarter.com i pozwoliłz założenia programistom umieszczać swój kod na orbicie - a to dla każdego GEEKa, fana sci-fi, marzyciela-elektronika ;) ... zaiste fenomenalny pomysł !!!

Za ok. $500 można zakupić moduł do zbudowania własnego satelity o otwartych źródłach !!!

Ta powyższa wiadomość wstrząsnęła mną dość konkretnie, bo w sumie konstrukcyjnie nie jest to jakiś zaawansowany twór (zawiera 16-cie mikrokontrolerów AVR t.j. używam\ słynny projekt Arduino. Można powiedzieć, że jest to wieloprocesorowy projekt kompatybilny z Arduino.

Autorzy założyli, że jeden mikrokontroler będzie odpowiedzialny za jeden typ pomiaru, co może okazać się dość racjonalne na orbicie. Dlatego, że przy tak zmiennych warunkach atmosferycznych, w szczególności temperaturowych krzem może zachowywać się dość nieprzewidywalnie. Rozdzielenie kompetencji na wiele mikrokontrolerów jednoukładowych (czyli wyspecjalizowanych procesorów z przetwornikami w środku) zapewni utrate jednego pomiaru, jeśli zawiedzie procesor a nie 16-tu, gdyby wszystko było mierzone jednym kontrolerem. Oczywiście, jest też niezbędny nadzorca, który został tam zainstalowany i pełni rolę watchdoga oraz spina magistralę danych modułu.

Dla miłośników areonautyki i startów rakiet załączam pełnometrażowy dokument, który pokazuje umieszczenie ArduSat na orbicie :-) Przyjemnego oglądania i rozmyślania... byćmoże to Wy wpadniecie na kolejny takiej skali pomysł użycia popularnych 8-bitowych procesorów w wielkim eksperymencie

Linki:
* Ardusat access to a satellite in space for as little as 350