23 kwietnia 2009

Erlang, OTP, współbieżność, funkcyjność i rozproszenie aplikacji

O języku Erlang słyszymy przeróżne żarty, czytamy posty i co ciekawe znajdujemy nawet nieliczne w kraju oferty pracy. A tak na prawdę to słowa Erlang się boimy :-) Bo byćmoże posiada germańską naleciałość fonetyczną. Całkiem możliwe, że zapis kodu jest magiczny i przyzwyczajeni jesteśmy od szkoły średniej do zapisów typu:
"function ...() ... if {...} elseif {...} else {...} ... return ..."

Dodatkowo jeśli coś jest skomplikowane na pierwszy rzut oka i wyszukiwarka nie pisze słodkich ciekawostek o tym, że warto też to czasami zlewamy. Cóż, wiem to po sobie i znajomych, którzy brną coraz dalej w różne takie powszechne (czytaj komercyjne) trendy. Pochwalam zarazem wszystkich wytrwałych łowców historycznych i zagadkowych języków programowania tudzież udziwnionych rozwiązań t.j. LISP, Prolog oraz święty Erlang :-)





Na dzień dzisiejszy wydajność aplikacji (wykluczając rozwiązania google, ibm, oracle, amazon, częściowo facebook i pewnie kilka innych posiadających chmury obliczeniowe + gridy) jest uzyskiwana dzięki serwerom www, które dzięki interpretowaniu skryptów w profilowanych wątkach Fastcgi generują kod XML, HTML lub inny strumień informacji przy pomocy pipeline (lecz nie tylko) do przeglądarki klienta. Dość powszechny, uniwersalny i wydajny sposób, który posiada bardzo namacalne granice skalowalności.
Oczywiście ilość dostępnych maszyn (coraz częściej wirtualnych) oraz procesorów w tym wszelkich pamięci RAM zawsze będzie znacząca. Dodatkowo serwery cachujące typu memcache, moduły typu apc, etc zawsze się przydają. No tak baza danych master i slavy, których synchronizacji lub jeszcze lepiej replikacji pilnować, bo najlepsze jajca będą, jak kopie rekordów będą miały inne identyfikatory lub jak nagle slavy się oburzą i całe obciążenie spadnie na mastera. Może się też okazać, że lubimy NFS, sieciowe systemy plików lub nietypowe systemy plików w naszej aplikacji, które obciążają nasz serwerek i load w granicach 66.6 nas nieco dziwi. Praca administratora przy skalowaniu, profilowaniu też jest kosztowna i należy ją wrzucić do całkowitego rachunku ... to takie typowe założenia.

A co będzie jeśli to wszystko olejemy i użyjemy języka Erlang ?!


Wiadomo musimy nabyć odpowiednią wprawę, zrezygnować z typowych rozwiązań, nauczyć się kilku poleceń Eshell i posiadać marzenia :-) bo tylko One nas uratują, hahahahaaaa :-)
Weźmy pod uwagę, że w Erlangu każdy funkcjonalny kawałek kodu działa jako specjalny atomowy proces Erlanga, do tego dodam, że takich procesów można stworzyć nawet na bardzo słabym procesorze setki tysięcy. Ponadto dodam, że każdy proces z każdym może wymieniać komunikaty, co daje rozproszone podejmowanie decyzji i prawdziwie wielowątkową obsługę zdarzeń. Nie skłamię, jeśli napiszę, że język został ochrzczony w zastosowaniach dość wymagających i krytycznych czasowo tzn. w telekomunikacji. Służy(ł) do obsługi central oraz przełączników telekomunikacyjnych, gdzie raz uruchomiona aplikacja nie była wyłączana przez wiele lat i procesy w niej działające stale wykonywały swoje zadania. Mało tego, to może napiszę coś zabawniejszego, bo języku Erlang nie przejmujesz się błędami. Nie jest to bynajmniej parodia znanych nam powszechnie języków programowania, lecz ucieczka w stronę pisania bardzo wymagających aplikacji. Zarówno skupienie się na tym co się dzieje w procesach aplikacji, jak i odciążenie programisty stałym poprawianiem błędów swoich i cuchych. Jasne, że nie da się tego uniknąć, ale co powiecie na to, że jeśli kawałek kodu pada z powodu błędu to w tym czasie powołuje do życia instancje (swój klon), który zajmuje się dalej zadaniem. Dopieprzyć warto czymś, o czym wiele rozwiązań może tylko pomarzyć, czyli podmiana kodu w locie :-) Oczywiście administratorzy nie odniosą kolejnej klęski podczas klastrowania aplikacji, bo procesy Erlanga widzą się na maszynch, które posiadają połączenie sieciowe (rozpoznają się po nazwach). Dodajemy kolejny serwer uruchamiamy środowisko Erlanga i aplikacje, które widzą działające procesy na pozostałych połączonych maszynach.

Dodam, że firma Ericsson stosuje rozwiązania bazujące na tym języku od ponad 20-tu lat. Firma Google natomiast oparła swój meta komunikator GoogleTalk w oparciu o ejabberd, jabber (XMPP)serwer oraz klient do budowy dowolnych komunikatorów internetowych napisany i działający całkowicie w Erlangu. Tyle tytułem wstępu, resztę pozostawiam sprawnym obserwatorom i odkrywcom, którzy zechcą przejrzeć kilka prezentacji na temat języka Erlang i wyciągnąć pożyteczne wnioski.

By nie nawijać tylko o teorii pewnego dnia usiadłem sobie do kilku przykładów i zechciałem się nimi z Wami podzielić. Oto one:


Dodatkowe linki:
Referat - Erlang

Jabber we własnej domenie - uruchamiamy serwer

ejabberd we FreeBSD

All you wanted to know about the Erlang HiPE compile (but might have been afraid to ask)

Porównanie Erlang HiPE do Java 6 server

Erlang in Practice Episode 1: Sending and Receiving Chat Messages

Erlang in Practice Episode 3: Distributing Clients In A Multi-node Environment

Erlang in Practice Episode 5: Unit Testing with EUnit


Erlang community site Planet Erlang

Wtyczka do Eclipse dla programistów Erlanga

Introduction to the Open Telecom Platform

Erlang: Open Telecom Platform (Parts)

Erlang-Open-Telecom-Platform.ppt

http://www.slideshare.net/dennisbyrne/the-erlang-programming-language-presentation

http://www.slideshare.net/btedev/erlang-concurrency-presentation

Prezentacja oraz projekt łamania haseł na podstawie MD5 wykonany w Erlangu

http://www.slideshare.net/btedev/erlang-concurrency-presentation

http://github.com/btedev/erlang_md5crack/tree/master

http://github.com/btedev

19 kwietnia 2009

Newsqueak - programuj z przyjemnością swoje kanały danych działające w procesach

Dziś obejrzałem kolejny odcinek cotygodniowego zawodowego serialu na video.google.pl z serii Advanced Topics in Programming Languages p.t.
Advanced Topics in Programming Languages: Concurrency/message passing Newsqueak. Dotyczył on języka Newsqueak, który podobnie jak Haskell oraz Erlang stanowią dla mnie wielką zagadkę poznawczą :)

Oto omawiany filmik, gdyby ktoś się skusił:



Ogólnie wiadomo, że założenia konstrukcyjne mogą szokować. Tak też jest w przypadku języka Newsqueak, który dość jasno określa zasady:



  • odrzuć koncepcje programowania wielowątkowego bazującej na Andrew Birrell's ''An Introduction to Programming with Threads.''

  • odrzuć typowe podejście w programowaniu z maszyną stanów

  • zastanów się nad swoimi interfejsami i potraktuj je jako struktura danych zawierająca kanały komunikacyjne

  • pozwól swoim interfejsom działać jako procesy

  • spróbuj utworzyć kanały komunikacyjne (bazując na interfejsach), które w dedykowanych (odrębnych) procesach enkapsulują kanały informacyjne (transmisje Twoich danych)

  • stwórz oprogramowanie bez myślenia, że popełniasz błędy - nie tracąc czasu na debugowanie

  • nie zamartwiaj się zbytnio obciążeniem stworzonego systemu - to kwestia balancingu działających procesów




Materiały dodatkowe:

Montage: Breaking Windows into Small Pieces

Video example

Rob Pike wikipedia page Rob Pike

A Concurrent Window System

The Good, the Bad, and the Ugly: The Unix Legacy - Slides of his presentation at the commemoration of 1000000000 seconds of the Unix clock.

Newsqueak: A Language for Communicating with Mice article 2

Resources about threaded programming in the Bell Labs CSP style

WikiProject Plan 9

Genuinely Functional User Interfaces - Theories of Programming Languages, Cambridge University

Limbo programming language

Squinting at Power Series

Acme is a text editor and graphical shell from the Plan 9 from Bell Labs operating system, designed and implemented by Rob Pike.

List of Plan 9 applications plan9 papers

Rob Pike on newsqueak

Declarative event-oriented programming

The lecture notes about the Plan 9 window system

Inferno Programming With Limbo Inferno Programming With Limbo rapidfx

8 kwietnia 2009

Jak wektorki to tylko z Inkscape !

Od kilku lat używam do wszelakich grafik, rysunków, szkiców, schematów poglądowych oraz różnych ulotek, reklam i publikacji (w tym również www) aplikacji niezastąpionej o nazwie Inkscape.



Dziś odkryłem, że istnieje podręcznik do jakże praktycznego dzieła OpenSource. Praktycznego, to mało powiedziane. Powstają w nim na prawdę zalewające użytkowników Corela pomysły. Poniższy link dedykuję tym, którzy lubią w ojczystym języku posiadać książkę tego do ulubionego programu graficznego:

Instrukcja w języku polskim do programu do edycji grafiki wektorowej Inkscape

Oto znane linki do przykładowych prac wykonanych przy pomocy tej aplikacji oraz tutoriali:

The Inkscape tutorials weblog

Inkscape galleries

Inkscape showcase

Open Clipart Library

1 kwietnia 2009

Zbuduj robota na Prima Aprilis - konstrukcje papierowe kształcą

W dniu tak specyficznym postanowiłem dodać wzmiankę dla tych konstruktorów, dla których edukacja poprzez zabawę nie zna granic ;) Konstruowanie nie zawsze wiąże się z użyciem młotka, desek, silników, mikroprocesorów. Często do tego celu wystarczy najpowszechniejszy współczesny materiał jakim jest papier. Papierowe modele co prawda mogą być delikatne, ale zależnie od formy, grubości papieru i rodzaju zastosowanego kleju nie musi to stanowić reguły. I w tym cała magia ... kilka dostępnych w każdym kiosku na rogu potrzebnych rzeczy oraz jak zwykle niezastąpione źródło wiedzy internet i możemy budować roboty. Ojciec z synem znajdą na pewno wiele atrakcyjnych wynalazków, które posiadają rekonstrukcję modelarską z papieru. A w dobie zalewających iPodów powrót do korzeni - jakim jest zabawa w konstruowanie z papieru - czasami jest jedynym ratunkiem przed slęczeniem dziecka przed monitorem.




W ramach komentarzy podzielcie się proszę swoimi konstrukcjami. Powodzenia i miłej zabawy.

Jako dodatek zamieszczam stosik linków oraz kilka tutoriali dot. użycia Google SketchUp (okazuje się, że jest to alternatywa dla Blendera, aczkowiek Blendera również polecam).

Budowa modelu robota w programie Google SketchUp



SketchUp-Making a quick model



Sketchup - Modeling a tractor



How To Use Google SketchUp -- Modeling (Part 1)



How To Use Google SketchUp -- Modeling (Part 2)



Sketchup-Model a Lantern



Wirtualna szkoła z filmami do nauki programu Google SketchUp


Podstawy konstruowania modeli z papieru




Linki do stron z gotowymi do pobrania modelami robotów z papieru:

http://gundamandrobotanime.blogspot.com/search/label/papercraft?updated-max=2007-07-24T13%3A23%3A00-07%3A00&max-results=20

http://www.ss42.com/pt-scifiction.html

http://www.blogcatalog.com/topic/robot+paper+model/

http://jleslie48.com/gallery_models_scifi.html

http://jleslie48.com/gallery_models_real.html

http://www.marscenter.it/veicol.asp?pa=605

http://win1999.web.fc2.com/Oshiire/EXTRA/025/25.htm

http://www7a.biglobe.ne.jp/~sf-papercraft/Original/LensHeadB_tuned/LensHeadB_tuned.html

http://www.marshallalexander.net/




Temat pokrewny - modele papierowe rakiet i pojazdów kosmicznych:

http://jleslie48.com/ariane5ton/

http://jleslie48.com/deltavheavy/divh.html

http://jleslie48.com/cevton02/

http://jleslie48.com/tonmercury/

http://jleslie48.com/stbb/

http://jleslie48.com/lunarsurveyor/

http://jleslie48.com/energialeo/cs.html

http://jleslie48.com/leo0612/

http://jleslie48.com/leo_vulcan/

http://jleslie48.com/ton_acts0811/