26 maja 2009

Erlang + PHP - nastała era miksowanych rozwiązań

Jak sami wiecie najlepsze kanapki to takie, które mają wiele smakowitych składników :-)
Takie kanapki można porównać do połączenia technologii PHP oraz Erlang. Kontrast języka skryptowego PHP przeznaczonego do przetwarzania i tworzenia hipertekstu, prostych zadań po stronie serwera oraz ponadczasowego języka funkcyjnego z własnymi mikrowątkami do przetwarzania danych w chmurach obliczeniowych Erlang. Kontrast dość spory, więc postanowiłem sprawdzić, co wynika z zestawienia takich odrębnych tematów.


src: http://www.flickr.com/photos/tobiasschlitt/2644905363/

Niewątpliwie zaletą języka PHP jest jego popularność na sporej liczbie produkcyjnych serwerów serwujących dynamiczny kontekst, możliwość zestawienia połączeń z powszechnymi bazami danych, stały rozwój języka oraz prostota programowania w nim. Do tego spora społeczność znawców oraz zadających stale te same FAQ na forach powoduje mega popularyzację tematyki programowania stron oraz aplikacji internetowych. Przyglądając się rozwojowi języka z perespektywy kilku lat znajdziemy w jednym dość specyficznym temacie dość spory niedosyt. Dokładnie mam na myśli w brak wielowątkowości w języku PHP. Jest to może i śmieszne, ale bywa zgrozą na codzień dla poważniejszej kady developerów PHP. Nie będę rozpisywał się o tym, że takie języki skryptowe jak Python, Ruby, Lua mają wbudowaną obsługę wieloeątkowości ... i to je stawia zupełnie na innym podium ;)

Spoglądając z kolei na język Erlang i jego możliwości tworzenia nieograniczonej ilości wbudowanych mikrowątków, które są niezależne od platformy i wątków systemowych, można wymyślić wart świeczki pomost dla tych technologii. Warto też przytoczyć jakieś dwa przykłady, w których ten język osiągnął popularność i sukces tzn. serwer metakomunikatora ejabberd oraz baza danych Amazon SimpleDB. Chcących poznać pozostałe przykłady polecam wikipedia oraz google :)

Dla chcących wtajemniczyć się w dość ciekawy temat łączenia technologii polecam materiały dodatkowe, w których znajdują się opisy oraz objaśnienia jak takiego powiązania dokonać.

Zapraszam serdecznie chcących podyskutować o wydajności i szczegółach technicznych. Czy używacie w soich projektach takiego rozwiązania ? Czy wiecie może jakie są postępy nasza-klasa.pl we wbudowaniu ejabberd w ich portal ?



Materiały dodatkowe:

Persistent PHP processes in Erlang/OTP

PHP/Erlang aims to be a PHP extension with a simple set of functions for turning a PHP thread into an Erlang C-node

A PHP eval server for Erlang/OTP

peb (Php-Erlang Bridge) is an open-source php extension to run php as an Erlang cnode

Reading Serialized PHP Objects from Erlang

7 maja 2009

R - język statystyczny do wizualizacji danych eksperymentalnych

Pomimo brzmiącego wzniośle tytułu i wielkiej litery R na czątku artykuł nadal dotyczy on dziedziny programowania. Tym razem dotykam nieco odmiennego aspektu - narzędzia do statystycznej analizy danych R, które cieszy się dość sporą popularnością w kręgach naukowych, gdyż cytując wikipedię:
GNU R to język programowania i środowisko do obliczeń statystycznych i wizualizacji wyników.
Każdy czytelnik w tym miejscu może zadawać sobie zasadnicze pytanie:
co można w tym zrobić i dlaczego lepej niżeli w moim języku programowania ?.



Oto kilka cech, które pozostawiają w tyle moje ulubiony języki programowania i skłaniają mnie do użycia języka R:

  • dostarcza szeroką gamę technik statystycznych (liniowe i nieliniowe modelowanie, klasyczne testy statystyczne, analiza szeregów czasowych, klasyfikacja, grupowanie, etc)

  • łatwość z jaką można tworzyć dobrze zaprojektowane wykresy z jakością nadającą się do publikacji. Dotyczy to także symboli i formuł matematycznych

  • repozytorium pakietów CRAN, które zawiera ponad 1500 gotowych bibliotek do użytku w naszych statystykach - zaimplementowana jest spora liczba metod oraz przekształceń statystycznych

  • tekstowa i graficzna konsola obsługi, jak również możliwość uruchamiania przygotowanych skryptów

  • stworzenie wykresu często polega na wczytaniu w jednej linii danych ze źródła siecowego, plikowego, w tym popularne formaty CSV oraz Excel ! przypisaniu do zmiennej oraz w kolejnej linii wywołana funkcji plot() ze zminną(zmiennymi) przechowującą(przechowującymi) dane w argumencie. Efekt jest widoczny natychmiast w specjalnym oknie graficzym wykresów

  • powalająca na kolana baza rodzajów wykresów w postaci galerii z przykładami kodu w języku R
  • polecenia języka są intuicyjne i uproszczone do niezbędnego minimum:

    • package.install("nazwaPakietu", depedencies=TRUE) - dodawania pakietu, w efekcie czego pakiet jest pobierany z wskazanego repozytorum CRAN oraz kompilowany wraz z dokumentacją i przykładami użycia

    • library("NazwaBiblioteki") - użycie zainstalowanej biblioteki

    • nazwaBibliotek.funcka(argumenty) - użycie funckcji z biblioteki


  • tworzenie interaktywnych wykresów oraz możliwość używania akceleratorów grafiki 3D w wykresach

  • wbudowane przestrzenie nazw, profiler, debuger, garbage collector :-), których niekiedy może pozazdrościć język PHP

  • programowanie objaśniającego (pakiet Sweave)

  • funkcje statystyczne do przeprowadzania analizy regresji i analizy wariancji

  • funkcje do przeprowadzania klasyfikacji oraz analizy klastrowania

  • generatory liczb losowych oraz generatory liczb losowych z określonych rodzin rozkładów prawdopodobieństwa

  • funkcje do radzenia sobie z brakującymi obserwacjami oraz wstępną analizą danych

  • funkcje do korzystania z metody bootstrap i analizy przeżycia

  • prognozowanie na podstawie posiadanych danych !

  • możliwa edukacja w zakresie testów statystycznych dotyczących testowania hipotez o równości parametrów położenia, o równości parametrów skali, dotyczących prawdopodobieństwa sukcesu, procedury testowania istotności dla wybranych współczynników zależności pomiędzy dwoma zmiennymi oraz testy zgodności



Przegląd możliwości systemu R w wygodny sposób zarysowuje możliwości tego specyficznego języka programowania. Liczne prezentacje oraz artykuły umacnają mnie w przekonaniu, że warto wykreślać w tym języku wykresy z danych pomiarowych, szczególnie jeśli zależy mi na dokładności oraz pewności, że dany wykres reprezentuje wskazaną porcję danych.



Niesamowite jest to, że w języku R możemy osadzać np: język Python i odrotnie w języku Python możemy osadzać język R, co widać na poniższych stronach:

http://rpy.sourceforge.net/rpy_demo.html

http://rpy.sourceforge.net/

Oczywiście to kolejny plus na korzyść Pythona :-)


Materiały wideo do nauki języka R:



Oto linki pomocnicze:

http://processtrends.com/Learn_R_Toolkit.htm

http://processtrends.com/

http://www.r-ekonomia.pl/?ksiazki,11

http://www.personality-project.org/r/r.plottingdates.html

http://orgmode.org/worg/org-tutorials/org-R/org-R.php

http://www.nceas.ucsb.edu/scicomp/Dloads/RCourse/RShortCourseMeetThreeNotes.pdf

http://www.nytimes.com/imagepages/2007/01/22/science/20070123_SCI_ILLO.html

http://learnr.wordpress.com/2009/05/10/import-a-text-file-with-repeating-titles/

http://learnr.wordpress.com/2009/05/05/ggplot2-two-time-series-with-different-dates/

http://chartsgraphs.wordpress.com/

http://www.scribd.com/doc/2171544/R-Programming

http://www.scribd.com/doc/288555/dataR

http://www.scribd.com/doc/6187359/R-Matrix-Tutor

http://www.math.ncu.edu.tw/~chenwc/R_note/index.php?item=plot

http://commons.wikimedia.org/wiki/File:R-US_state_areas-1D_log.svg

http://commons.wikimedia.org/wiki/File:R_sin(theta)_Surface_Plot.png

http://commons.wikimedia.org/wiki/File:R-horsekick_totals-quantileplot%2Bquartiles.svg

http://www.r-project.org/other-docs.html

http://processtrends.com/toc_trend_analysis_with_Excel.htm

http://skiadas.dcostanet.net/uploads/RandSweaveInTextMate.mov


Alternatywa dla wykresów - wykresy kołowe:

http://mkweb.bcgsc.ca/circos/tableviewer/

http://mkweb.bcgsc.ca/talks/circos/

http://mkweb.bcgsc.ca/circos/?gallery

RepRap - samoreplikujący się robot Open Hardware + Open Source

W jednym z klasycznych dzieł fantastyki i dodatkowo "fantastycznym", którego nazwa wymknęła mi się z pamięci jest wątek o tym, jak roboty budują roboty. Do tego stopnia potrafią się replikować, że tworzą całe stada różnych wielkości oraz rodzajów robotów. Ludzie na stacji kosmicznej znikają, bo roboty potrzebują "podzespołów" t.j. ludzkie oczy ... i wszystko byłoby fikcją, gdyby nie fakt, że jest sobie XXI wiek i możemy śmiało powiedzieć, że jest to początek historii, która może zakończyć się niebawem mało "fantastycznie".

Przedstawiam dziś bardzo kreatywny projekt. Robot, który w kilkudziesięciu procentach potrafi się zreplikować.





Jest to projekt Open Source i Open Hardware. Znajdziecie pod nazwą RepRap. Jest on jednym z zastosowań dla opisywanego na łamach wielu blogów modułu Arduino i w pełni wykorzystuje go jako swój bazowy podzespół.

Robota tego nazwać można też drukarką 3D, gdyż jego rola polega na tym, że potrafi drukować z dość dużą precyzją z topionego plastyku dowolne wymyślne trójwymiarowe twory. Otwiera nam wyobrażnię, bo jak dotąd żyliśmy wyłącznie w świecie kolorowych reklam i druków oraz form seryjnie produkowanych w fabrykach. Prototypowanie odbywało się na urządzeniach frezujących/skrawających CNC. Od teraz prototyp możesz zrobić sam w domu i to przy użyciu ogólnie dosŧępnego sprzętu t.j. PC + Linux + kilka silników krokowych + nieco łączników metalowych + oczywiście odpowiedni software :-)

Wracając pamięcią do zagadnienia z tematu tzn. reprodukcji chciałbym zauważyć, że o ile istnieją standardy do różnych zastosowań, w weilu dziedzinach, wiele norm opisuje techniczne aspekty konstrukcji, o tyle niekt jeszcze nie stworzył standardu do robotów a o samoreplikujących się robotach już nie wspomnę. Polecam ważny dla robotyki artykuł Robot wciaz bez standardu i zachęcam do dyskusji na ten zapomniany temat. Kręgi akademickie możliwe, że zarzucą mi, iż mało w życiu robotów widziałem ... cóż, widziałem ich nie wiele, ale wiele nieudanych prób napisania standardu do takich maszyn jak roboty widziałem dość wiele. Każda kończyła się prywatyzacją standardu i okrzykiwaniem, żę to jest właśnie ten. Chyba potrzeba silnej firmy - może Google - która narzuci przemyślany standard - może z KML - do definiowania robota oraz jego możliwości i zadań. Może powstanie jakiś nowy superobiektowy język opisu i programowania robotów z interfejsami do sztucznej inteligencji. Do tego rozproszone agenty, które podpisany jako pluginy naszego robota, które potrafią współdzielić w sieci neuronowej doświadczenie i mamy roboty samoreplikujące się, które będą w stanie upiec nam np: ciastko, że aż palce lizać, hahhaaa :-)

Oto robot samoreplikujący się w akcji:

RepRap from Adrian Bowyer on Vimeo.




Oto co robot taki lubi jeść najbardziej:




Na dość radosny koniec przedstawam robota, którego zrobił RepRap, aby pingwiny miały się czym bawić :-)





Materiały dodatkowe:


http://www.flickr.com/photos/batistleman/

http://www.flickr.com/photos/batistleman/sets/72157612625523823/

http://www.flickr.com/photos/batistleman/sets/72157616965045763/

http://www.flickr.com/photos/batistleman/sets/72157617452928999/

http://www.coded.be/en/reprap

http://www.thingiverse.com/thing:688

http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard

http://objects.reprap.org/mediawiki/images/9/90/Laser-reprap.jpg


Software Open Source do RepRap:

http://sourceforge.net/project/showfiles.php?group_id=159590

http://reprap.org/bin/view/Main/Generation2Electronics#Arduino_Arduino_Clones_and_Sangu

http://sanguino.cc/

http://code.google.com/p/sanguino/downloads/list

Hardware do RepRap:

http://www.atmel.com/dyn/Products/Product_card.asp?part_id=3896

http://www.iearobotics.com/personal/juan/doctorado/Modulos-Y1/modulos-y1.html

http://fotos.iearobotics.com/index.php?album=modulos-repy-1

http://www.youtube.com/watch?v=x7OYkaXNGrY

http://www.youtube.com/watch?v=QmFV8lIZhB8

http://www2.parc.com/spl/projects/modrobots/chain/polybot/index.html