3 grudnia 2010

Mapowanie w PHP - OpenData dla społeczeństwa

Wspominam o różnych technicznych aspektach informatyki, więc nie mogę pominąć aspektu społecznego. Okazuje się, że niektóre firmy udostępniają swoje dane jako OpenData i dzięki tym danym można używając mapowania w języku PHP robić takie oto piękne infografiki związane ze statystykami.

Są ludzie, którzy bawią się w przemapowywanie GPS na kody pocztowe i jeśli Was to zainteresuje, możecie śmiało spojrzeć tutaj.
Oto przykład praktycznego użycia takiej bazy danych mapowań kod pocztowy (post code) do pozycji geograficznej (GPS):
http://www.uk-postcodes.com/postcode/E97NE

16 października 2010

Soft OpenSource do prototypu robota - porady techniczne przy budowaniu amatorskich robotów z Arduino

Konstrukcja robota i sposób jego programowania obejmuje szereg dokumentacji i procedur. Zebrałem kilka myśli na temat tych zagadnień. Nic, co jest przedstawione tutaj jest wprost niezbędne, ale możliwe, że zaciekawie tych, którzy chcą zbudować od zera robota. W tym wpisie zainspirowałem się materiałami z GitHub oraz licznymi forami na temat budowy robotów.

Jak zacząć z konstrukcją robota ?

Robot składa się z zestawu elementów mechanicznych oraz elektronicznych, które działają zgodnie z napisanym programem. Niektóre elementy są wykonane na wymiarm do tego celu często wykorzystywany jest program QCad lub AutoCAD. Czasami wystarczający jest dla nas edytor wektorowy Inkscape, dlatego że jest prostszy w użyciu niżeli jakiekolwiek narzędzie CAD. Co ciekawe posiada też eksporty do GCODE, aby dokonać frezowania na podłączonej do komputera maszynie CNC.




Warto wesprzeć się wiedzą z zajęć praktyczno-technicznych na temat obsługi narzędzi ręcznych. Nie wszystko musimy wykonać na drukarce 3D lub na ploterze CNC. Jest to oczywiście udogodnienie dla każdego inżyniera, kiedy projekt przygotowany w oprogramowaniu CAD wygeneruje dla nas dokumentację produkcyjną CAM. Mając dane dla obrabiarki numerycznej o wektorach cięcia lub wiercenia np: w formacie Gerber lub GCODE jesteśmy w stanie zlecić prace mechaniczne firmie zewnętrznej na wybranych wcześniej materiale (np: plexi, sklejka, aluminium, ). Dokłądność wykonanie mechanicznych części zostanie zagwarantowana przez firmę wykonującą frezowanie, cięcie, wiercenie. I tutaj dochodzimy do dość ważnego szczególu - jakość wykoniania części mechanicznych ma znaczenie.
Okazuje się bowiem, że każde przesunięcie, nieprecyzyjne wykonania w robotach np: jeżdżących stanowi problem w postaci poprawnej jazdy po linii prostej. Często też drgania z silników przenoszą się na obudowe i może się okazać, że np: przy zakręcaniu nasz robot niedeterministycznie jeżdżi lub montaż zasilania nie będzie właściwy. Z powyższych podowód często przed złożeniem fizycznych części robota musimy sprawdzić ich dopasowanie, precyzję i jakość. Często używam pilnika ew. papieru ściernego, aby obrobić delikatnie obudowę bazową robota i zapewnić sprawniejsze pasowanie składanych elementów, złącz, źrub oraz łożysk.
Oczywiście wiele projektów robotów raz z dokładnymi wzorami do frezowania jest dostępnych na licencji GPL lub Creative Commons, co wiele ułatwia ludziom, którzy chcą przeskoczyć fazę przygotowania mechanicznych podzespołów robota.

Modelownie robota w programie 3D

Od wielu lat projektanci robotów zyskują coraz więcej narzędzi do wsparcia ich pracy i czcęsto też pasji. Jedną z wielu aplikacji do projektowania robotów niewątpliwie jest mój ulubiony Blender. Możemy zamodelować robota w trzecch wymiarach, postawić go w świecie wirtualnym używając wbudowanego w Blendera silnika fizyki i spowodować, że będzie działał, głównie dzięki temu, że w Blenderze mamy możliwość programowania logiki, akcji w języku Python. Daje nam to niesamowite możliwość przetestowania naszego robota o fizycznych wymiarach i masie w piaskownicy (Sandbox) bez ruszania się od tego narzędzia projektowego. To co symulujemy sobie w programie 3D na pewno oszczędzi naszego czasu na wielokrotnyc próbach i błędach.

Metoda prób i błędów - rzeczywista ścieżka w innowacji

Uważam, że to jest najważniejsza część w procesie tworzenia robotów. Jest to naturalna metoda pracy w każdej innowacji, wynalazku i projekcie o dużym poziomie skomplikowania. Musisz posiadać determinację i wierzyć w swoje możliwości rozwoju w wielu dziedzinach: mechanika, konstrukcje, automatyka, elektronika, programowanie, algorytmika. Jest też taka opcja, że znajdziesz drużynę i razem wspólnie osiągniecie sukces w budownie robota i byćmoże wystartujecie w jednym z wielu konkursów robotycznych. Do tego momentu musisz wiedzieć, że każdy mały błąd i krok wstecz gwarantuje przy odpowiedniej determinacji duży sukcecs w przyszłości.

NIe wstydź się swojego robotycznego pająka

Często też mamy do czynienia z sytuacją, że robimy coś do szuflady. Jest to sytuacja dość niekorzystna, gdyż nie mamy okazji zestawić swojego dzieła z naturalnym krytycyzmem osoby spoza żyjącej w naszym mózgu wizji :-) Polecam Wam, aby oddać swoją zabawkę robotyczną na jedną godzinę dziecku porzyczyć do zabawy innemu koledze. Na pewno wnioski i spostrzeżenia będą na tyle istotne, że zainspiruje nas to do budowania kolejnej wersji naszego "pająka" - mam tutaj na myśli robota, któremu zwisają kable, nie do końca dokręconego, nie zupełnie skończonego, ale wykonanego własnymi rękami. I właśnie to się liczy najbardziej, że udało Wam się osiągnąć kolejny stopień wtajemniczenia i dajecie sobie radę z problemami technicznymi. Tak rodzą się inżynierowie :-)

Napędy, sterowniki silników i zasilanie

Każdy konstruując robota chciałby posiadać uniwersalny napęd oraz elektronikę do niego. Oczywiście nie jest to takie oczywiste, że każdy napęd w robocie można nazwać dedykowanym i tylko w robotach amatorskich możemy sobie ze względów edukacyjnych pozwolić na takie uproszczenia. Dlaczego tak jest, że napędy zależą od zastosowania robota? Otóż, każdy robot ma swoje przeznaczenie w przemysle, czy produkcji. Nie jesteśmy przez to w stanie wytworzyć uniwersalnego napędu o jednej ekstra małej masie, bo robot spawalniczy potrzebuje innego napędu oraz przyspieszenia niżeli robot jeżdżący po planecie Mars we własnym dedykowanym pojeżdzie. INnego typu napęd będzie miał robot latający np: drone niżeli robot mieszający produkty spożywcze. Każdy z powyższych przykładów posiada swoje specyficzne cechy napędu, a co za tym idzie specyficzne sterowniki.
Budując napęd amatorskiego robota możemy wybrać silnik: DC (z przekładnią, enkoderem lub bez nich), krokowy, serwomechanizm z obrotem 260 stopni. Ten wybór zależy od ceny i rozmiarów oczywiście, bo czasami budując microsumo lub minisumo musimy zwrócić szczegółną uwaŋ na wybór napędu i zasilania, gdyż w rozgrywkach sumo robotów mamy ograniczenia regulaminowe

Na szczęście budując prototyp prostego robota na rynku dla celów amatorskich mamy dostęp do wielu płytek sterowników silników DC oraz krokowych. Dodatkowo silniki są dostępne w tak wielu opcjach, że wybór jest bardzo elastyczny.
Myślę, że jest taka drobna rzecz, która nam zawsze przemyka przy budownie robotów jak grubość osi silnika. Wiele razy dzięsiąte części militetra w wyliczonym otworze i odpowiedniej osi silnika spowodowały w moich prototypach robotów, że koło jest zbyt słabo osadzone i wpada w wiracje. Następstwem tego są wibracje na kołach, czyli robot zjeżdża delikatnie z trasy. Oczywiście można to skorygować programowo i wręcz należy, ale jeśli uczymy się budowania robotów, to każda linika nadmiarowego kodu w pierwszych programach jest zbędna i szczególnie kiedy można jej uniknąć zapewniając dobre dopasowanie mechaniki :-)
Istotna pułapka to również prąd silnika oraz max. prąd sterownika, bo kiedy robot nasz zatrzymuje się na przeszkodzie i nie mamy obsługi pomiaru prądu na silnikach oprogramowanej, wówczas może dojść do przegrzania i przepalenia silników ew. sterowników. Uwaga! W warunkach domowych łatwo przez nieuwagę doprowadzić do pożaru, przed czym przestrzegam. Każdy sterownik napędu powinien posiadać zabezpieczenie prądowe i powinniśmy być świadomi mocy naszych silników oraz dostosować grubość przewodów do prądu przepływającego pezez nie, aby uniknąć wypadku.
Ważne również jest użycie akumulatorów lub baterii, których moc i masa jest dopasowania do naszej konstrukcji. Musicie uważać też na akumultory Li-Ion oraz Li-Po, bo ich niewłaśniwe użycie grozi wybuchem lub zagrożeniem dla Wazsego żdrowia. Dobierajcie baterie też do warunków np: nie wiele systemów zasiania akceptuje wodę lub wilgoć, co też warto uwzględnić Co do softu ułatwiającego projektoranie zasilania i napędów to mamy kilka opcji w OPenSource, oto lista kilku.
Lista aplikacji dla elektroników:

Elektronika

Powyżej umieszczone programy wspierają nas w budowie elektroniki robota, nie tylko napędów, więc jak widać w świecie OpenSource mamy sporo gotowego softu dla projektów elektroniki w naszych robotach.
Zasadniczo nie mogę pominąć fraktu, czym zajmuje sie elektronika w robocie. Otóż jest to serce zasialania i sterownia robota, więc jest niezbędna i od jakości jej wykonania zależy powtarzalność zachowania robota, czyli gwarancja dobrej zabawy z naszym robotem.
O co chodzi w tej jakości ? Zasadniczo w tym, aby płytka PCB była wykonana dość praktycznie ew. stosujemy uniersalną płytką i gwarantujemy, że nie będzie zimnych lutów, czyli przerw w połączeniach lutowanychc. Dodatkowo warto zapewnić kondensator elektrolityczny przy każdym rozgałęzieniu zasilania, co zapewni filtrowanie skoków napięcia i zakłuceń, gdy nie mamy odrębnego zasilania do części napędowej i części cyfrowej. Bo zakładam, że posiadamy jedno źródło zasialani bez skomplikowanych konwerterów napięć.
Praktyczną opcją jest użycie Arduino lub jego klonów z gotowymi sterownikami silników, które posiadają już wspomniane zabezpieczenia i nie musimy się tym przejmować.

Programowanie + mikrokontrolery jednoukładowe AVR z użyciem Arduino

Oczywiście implementując algorytmu działania naszego robota niezbędne jest dla nas środowisko. Oto mój sprawdzony w boju zestaw bibliotek, które pomagają mi na budowanie softu dla mikrokontrolerów jednoukładowych AVR i zapewniają kompilację bez posiadania dedykowanego środowiska. Moje repozytorium na github.com z frameworkiem do zaabawy z AVR

Powyżej linkowany zestaw narzędzi uratował mnie, kiedy nie było jeszcze Arduino. Natomiast obecnie mamy świetnie rozwijający się projekt środowiska IDE do programowania mikrokontrolerów AVR, który ma szansę stac się wygodnym lkikalnym standardem i tego temu projektowi OpenSource życzę. Zachęcam Was do zgłębiana wiedzy o aplikacji Arduino oraz platformie Arduiono, gdyż jest to moim zdaniem najprostsze środowisko do nauki programowania sterowników robotów.
Społeczność Arduino IDE stale rozwija się i przybywają nowe bibliteki. Przykładem takiej biblioteki, którą przetestowałem mogę polecić do budoway amatorskiego robota jest pakiet Motor dla Arduino IDE, który pozwala nam na sterownie niezależnie dowolną ilośćią silników, poprzez sterownik fizyczny oparty o uład scalony L293.

12 sierpnia 2010

Open Hardware to pomyślny kierunek dla wynalazców

Podczas przeglądania materiałów n.t. Arduino natknąłem się na kilka dokumentów z linkami do stron autorów. Zamieszaczam je poniżej i życzę przyjemnej lektury. Niektóre wynalzki wykorzystujące współczene możliwości mikrokontrolerów są na prawdę niebanalne. Dla przykładu taka oto latająca platforma - kto by uwierzył, że kilka deseczek, dwa serwa, jakiś tani mikrokontroler zasilanie i możemy latać :-)



Kolejny przykładowy wynalazek, który może Was zainteresować dotyczy nietypowego lustra - złożonego ze sporej ilości silników i oczywiście kamery, która przetwarza obraz i steruje tym widowiskowym falującym lustrem:




Szczytem chyba jest BIOTICALS. Projekt, w którym roślina w doniczce podlega stałemu monitoringowi warunków i mikrokontroler, który ją monitoruje wysyła na dedykowanego bloga tej roślinki - nie żartuję sobie, hahaha - widomości w stylu Podlej mnie wreszcie :) W tym przykładzie do mikroblogowania wykorzystany jest twitter API .


Poniższe wartościowe materiały, które zawierają całą masę szalonych pomysłów:


Life Hacks Winner Arduino Security by MC. Rene Solis R. on Scribd




Arduino Lecture 2 - Interactive Media CS4062 Semester 2 2009 by eoinbrazil on Scribd




Tutorial Arduino 01 - presentaci%f3n by MC. Rene Solis R. on Scribd



Godne przytoczenia są również projekty Stefan Marti z MIT

5 sierpnia 2010

"Idziemy na zachód" z NoSQL

Definiując noSQL warto zaznaczyć, że nie chodzi tutaj o niniejszy jakiś żart. O ile specjaliści od T-SQL i posiadacze stu certyfikatów ORACLE myślą inaczej, są rekomendacje płynące chociażby z digg.com, facebook.com, yahoo,com ale od zawsze z google.com potwierdzające, że trend noSQL ma sens w przetwarzaniu i składowaniu dużej ilości danych. Mając na myśli dużej mam na myśli setki Gigabahjtów, Terabajty i Petabajty ... i nie jest to wcale SF :-) Problem jak zwykle dotyczy skali i oczywiście dotyczy grupowania i złączania danych z różnych źródeł i baz. Tutaj składnia ... JOIN ... może okazać się nieco zasobożerna i nie na miejscu ;-) W miejsce, gdzie nie można robić SELECT i LIMIT + OFFSET + JOIN lub zwyczajne zapytania wykonują się zbyt długo, a CRON + memcached nie wystarczy potrzebne są bazy danych noSQL do składowania i mechanizmy Map Reduce do agregacji i łączenia danych dla osiągnięcia pożądanych wyników. Oczywiście że nie istnieje jedna baza do wszystkich zastosowań ... oto pomocnik w wyborze bazy noSQL.




Od 2001 roku, od kiedy to przyszło mi korzystać produkcyjne z bazy danych mySQL nie miałem pojęcia, że używam idei noSQL. Moja baza danych to było składowisko danych pomiarowych z różnej maści mierników elektronicznych oraz różnego typu alarmów, przy przekraczaniu zakresów. Napisałem wspólnie z kolegą z zespołu sterownik do składowania danych binarnie, ale z ideą podobną jak DBASE IV. Okazało się, że silnik i sterownik naszej bazy świetnie się sprawdzał i działał zgodnie z założeniami w wielowątkowym środowisku. Jednak potrzeba przetwarzania danych zmusiła mnie do przechowywania danych w bazie SQL, aby wykonywać prościej rankingi na danych. Wówczas ideę złączeń należało po prostu odrzućić ... nie będę tłumaczył powodów, dla których mySQL 3.28.x się wtedy zamulał przy złożonych JOINach ;-) Ważne, że założenie to było słuszne jak na rok 2001 i PHP 3.x.

Patrząc z perspektywy czasu uświadomiłem sobie, że utworzyłem w mySQL coś takiego jak mój własny noSQL. Składowałem dane w kolumnach, ale również utworzyłem superkolumny z pól tekstowych, w które wpisywałem oddzielone identyfikatorami wartości powiązanych danych. Dane były wiązane we wręcz prostacki sposób, ale taka metoda pozwalała - zamiast stosowania JOINów - przetwarzanie źródłowych danych z pomiarów do postaci pośredniej przez 6h a nie 11h. Jak na tamte czasy i koszty hostingu/dedykowanych serwerów było to znacząco optymalne podejście.

Współcześnie widzę trend dość podobny (z ang. structured storage) i równie banalny w zastosowaniu tzn. używanie "superkolumn" w składowaniu danych w ramach tej samej kolumny. Dodawanie zamiast relacji niejako "nadmiarowych" i zarazem powiązanych danych w wierszu, które podlegają wydajniejszemu wyszukiwaniu niżeli tradycyjne metody z baz SQL. Nie zawsze mogą konkurować z zewnętrznym indeksem opartym na rozwiązaniu t.j. Apache Lucene.

Rozwiązań serwujących ideę noSQL jest sporo i po pełną listę zapraszam do odpowiedniego źródła, któro porównuje i próbuje skatalogować bazy danych noSQL.

20 lipca 2010

Android + PHP -> czy wygra prostota ?

http://bingphp.codeplex.com/

http://blog.wilgucki.pl/2010/07/php-for-android.html


http://blog.wilgucki.pl/2010/07/php-for-android.html?utm_source=feedburner+php&utm_medium=feed&utm_campaign=Feed:+wilgucki/PHP+(Hello+World!+PHP)

http://blog.wilgucki.pl/2010/07/php-for-android-nowe-logo-oraz-roadmap.html


http://www.phpclasses.org/blog/post/125-Developing-PHP-applications-to-run-natively-on-Android-phones.html

http://danielpetty.com/android-lamp-linux/

http://www.phpforandroid.net/doku.php

9 lipca 2010

OpenStack - nowy standard w chmurach

Okazuje się, że ACKSPACE i NASA zaczęli już w 2009 roku interesować się w technologiami komercyjne służącymi do szeroko pojętej "wirtualizacji" takich firm jak: CITRIX, DELL, NTT DATA, RIGHTSCALE. Tak się składa, że gdy takie potęgi zaczynają się w coś "wgryzać" ;-) to może skutkować zwyczajnie na świecie wartościowym produktem Open Source.

Dzisiaj przywitajmy efekt owocnych prac ACKSPACE oraz NASA OpenStack, który wg. założeń ma spełniać wymagania stawiane chmurom i utworzyć standard w automatyce/wirtualizacji farm serwerów. Uproszczenie, jakiego OpenStack ma dokonać dotyczy API zarówno programistów aplikacji, jak i administratorów. Admini nie będą musieli się wysilać przy awarii oprogramowania, a programiści będą mogli w kilka kliknięć podnieść sobie farmę maszyn. I jest to NOWOŚĆ, bo admini mogą czuć się nieco niepotrzebni szczególnie, gdy wszyscy zaczynają produkcyjnie używać Ubuntu i instalują a nie kompilują :-) Pozornie niepotrzebni, bo wiadomo, że jeśli chodzi o ustawianie np: "load balancing" lub innych tematów sprzętowo-systemowych, to admini są po prostu niezbędni. OpenStack daje nam tutaj wybór, kiedy nie musimy zatrudniać kilku adminów, aby ogarnąć zmiany infrastrukturalne w systemach i sprzęcie. Wyłącznie wtegy, gdy nasza aplikacja na serio wykorzystuje chmury ;)

Ci, którzy korzystają z np: chmury Amazona lub innych chmur prywatnych wiedzą, że bardzo wygodne jest dorzucenie RAMu lub kilku procesorów do maszyny, która niespodziewanie jest silnie obciążona. Równie dobrze można dodać do infrastruktury w sposób nieskomplikowany kolejny wymagany serwer dla zbalansowania obciążenia. Oczywiście, przechowywanie danych to stały problem zasobów dyskowych, które w chmurze mogą być zbyt wolne w operacjach IO. I tego problemu chmura nie rozwiąże za nas sama, tutaj potrzeba nieco pokombinować.

Każda infrastruktura aplikacji internetowej jest w pewnym sensie powtarzalna, wówczas warto zastanowić się nad jej uproszczeniem i pokłonić się do Open Stack. Zysk z tej decyzji jest GWARANTOWANY. Przekonał się m. in. o tym "Pan gąbka" z naszaklasa.pl, kiedy brakowało fizycznej możliwości obsłużenia sporej fali ruchu internetowego kilka lat przed popularnością w kraju Faceboook.com.

Istnieją kwestie dotyczące marketingu w Cloud computing, że IaaS i SaaS daje nam spore możliwości ... owszem, jest to zaleta chmur, ale odnoszę wrażenie, że nie każdą firmę stać na doświadczenie produkcyjne przejścia na chmury. Świadomość używania chmur co prawda wzrosła od kilku lat, ale programiści/architekci nie zawsze mają w tyle głowy taką opcje w swojej aplikacji, co skutkuje przepisywaniem funkcjonalności często OD ZERA.

Na dzień dzisiejszy pozostaje alternatywa: utworzyć chmurę prywatną i panować nad nią ew. kupić zasoby w jakiejś chmurze i bawić się w przerabianie aplikacji. Każdy dzisiaj może za kilkadziesiąt USD kupić sobie 64 CORE + 64 GB RAM (!!!) i kilka dni testować, czy jego produkt jest przygotowany do takiej migracji. Ba, można zatrzymać taką maszynę i wówczas naliczane koszta są bardzo małe (mam na myśli kilka centów dziennie).





Problem polega na tym, że widzę wiele PLUSÓW a jeden MINUS (storage dla baz danych) ... może mnie oświecicie co jeszcze jest minusem w chmurze z OpenStack według Was ?

4 lipca 2010

23 kwietnia 2010

KISS Python and KISS rules

Często musimy przypominać sobie i wracam dosc czesto do przykazań węża


* Beautiful is better than ugly.
* Explicit is better than implicit.
* Simple is better than complex.
* Complex is better than complicated.
* Flat is better than nested.
* Sparse is better than dense.
* Readability counts.
* Special cases aren’t special enough to break the rules.
* Although practicality beats purity.
* Errors should never pass silently.
* Unless explicitly silenced.
* In the face of ambiguity, refuse the temptation to guess.
* There should be one— and preferably only one —obvious way to do it.
* Although that way may not be obvious at first unless you’re DutchCanadian/Swedish.
* Now is better than never.
* Although never is often better than right now.
* If the implementation is hard to explain, it’s a bad idea.
* If the implementation is easy to explain, it may be a good idea.
* Namespaces are one honking great idea — let’s do more of those!

22 kwietnia 2010

CSS framework - czas szkieletów w arkuszach styli CSS

Jak każdy webdeveloper

;) lubię porządek w kodzie i nie ma przeproś, kiedy ktoś wypycha mi jakiś szit zamiast klocków, z których mogę budować strony. To nie jest wcale bajka o świecie idealnym, tylko przyszłość tzw. systemów siatek i szablonów CSS. Wyobrażenie i potrzeba wygody, stabilności w IT przeradza się w standardy.<
Oto kilka rokujących systemów szablonów, które mogą w przyszłości być bazą do budowania stron www:

Czekamy na kolejne ułatwienia, t.j. edytory do systemów szablonów, które będą umożliwiały wygenerowanie siatki do dalszej pracy, gotowe skórki, etc ...

8 kwietnia 2010

Wielki Zderzacz Hadronów - jak zrobić czarną dziurę

Bardzo lubię, kiedy nowość z dziedziny nauki powoduje u mnie uśmiech. Tym razem jest to uśmiech związany z potężnym eksperymentem, który odbędzie się w ośrodku naukowym CERN. Mam na myśli Wielki Zderzacz Hadronów (Large Hadron Collider - LHC), który został ponownie uruchomiony.

Z powodu usterki jednego z magnesów start został przesunięty i jest szansa, że w czerwcu ruszy eksperyment wykonany przy użyciu LHC. Postanowiłem zwrócić na ten temat uwagę i zaserwować wycieczkę obrazkową w ramach potęgi nauki, z którą tutaj mamy do czynienia :-)
Wielki Zderzacz Hadronów stanowi m. in. ok. 27-kilometrowy podziemny tunel. Naukowcy planują pozderzać poruszające się w przeciwnym kierunku wiązki protonów, które osiągają prędkość zbliżoną do prędkości światła. LHC to rodzaj gigantycznego przyrządu pomiarowego, który pozwala obserwować zachowanie cząstek elementarnych.

Wszystko byłoby fajnie, gdyby z mojego punktu widzenia nierozwikłana tajemnica jak dużo danych będą potrzebowali zapisać w bazie lub na storage ze swoich eksperymentów. Nie znalaazłem nic na ten interesujący temat, ale zakładam, że niebawem coś wyjawią. Z tego co widać po założeniach eksperymentu to będą potrzebowali byćmoże wielu Terbajtów na jeden eksperyment. Skąd ta ekspercka liczba ? Wywróżyłem ją z ilości kabelków jakie widać na fokach i z artykułów, w których są wzmianki o dodatkowych kosztach dotyczących przetwarzania danych z eksperymentu. Nie będzie to takie proste, ale CERN na pewno ma na to budżet :-)

16 marca 2010

gource & logstalgia - wizualizacja życia repozytorium kodu oraz aktywności na serwerze www

Pomyślałem sobie, żę warto opublikować ten bajerancki przykład bezgranicznej wyobraźni programistów zwany gource. Z założenia jest to aplikacja napisana w C++ z wykorzystaniem korzyści płynących z poniższych bibliotek:

SDL 1.2 (libsdl1.2-dev)
SDL Image 1.2 (libsdl-image1.2-dev)
PCRE3 (libpcre3-dev)
FTGL 2.1.3~rc5-2 (libftgl-dev)
PNG library (libpng12-dev)
JPEG library (libjpeg62-dev)



Mając dowolne repozytorium GITa pobrane np: z serwisu github możemy obejrzeć niesamowitą animację renderowaną w czasie rzeczywistym z cyklu życia projektu. Osoby zatwierdzające / skłądujące kod w repozytorium uwidocznione są jako ludki strzelające z laserów do dynamicznego drzewa kodu. Bajerancko ukazuje się nam w lini czasu życia naszego kodu jego rzeczywisty rozwój i spojrzenie na kod nabiera zupełnie innego wirtualnego wymiaru. Z resztą sami spójrzcie:





Sposób kompilacji na Ubuntu 9.10:

$ git clone git://github.com/acaudwell/Gource.git
$ cd Gource
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev
$ ./configure
$ make
$ make install


Uruchomienie na repozytorium Gource:

$ ./gource


Innym pomysłem na wizualizacje wirtualnego życia jest projekt logstalgia.




Efekt wizualizacji przedstawia pinponga z logów dostępu serwera www (access.log). Obserwacja odbijania a la gra typu ping-pong umożliwia uzmysłowienie natężenia ruchu na serwerze www. Oto przykładowy filmik z działania:





Materiały dodatkowe:
Oficjalna strona projektu Gource
Oficjalna strona projektu Logstalgia

3 marca 2010

Spore możliwości wirtualnych arkuszy kalkulacyjnych Google oraz Yahoo pipes

Chciałbym poruszyć temat Yahoo pipes oraz Google Spreadsheeats. Oba produkty wydają mi się bardzo trafione i ponadczasowe.
Pierwszy produkt, Yahoo Pipes to graficzny edytor do zbudowania przetwarzania zdarzeń z sieci, który może spokojnie np: przeglądać za nas fora internetowe, czy kanały informacyjne RSS i na wyjściu na podstawie filtrów zwracać nam listę w postaci naszego kanału RSS z odsianymi ze śmieci informacjami.
Nie można lekceważyć mocy takiego darmowego narzędzie i zaznaczam, że są chętni do napisania botów internetowych, które odpowiadają na tweety za pomocą Yahoo Pipes. Oto zrzut ekranu takiego kreatywnego projektu bota bez żadnej linijki typowego kodu:


Drugie narzędzie to Google Spreadsheets, który jest akruszem kalkulacyjnym przyszłości i niewątpliwie Excel znany spod M$ zniknie niebawem z desktopu. Miejmy nadzieję, że przed 2020 rokiem, bo inaczej prognozy postępu technologicznego będą się ciągnęły jak krew z nosa :-)
Już dzisiaj można spokojnie używać Google Spreadsheets jako podręcznej rozproszonej w sieci bazy danych i wśród narzędzi firmy Google powstaje zdrowy trend do ujpójniania API różnych produktów. Zakładam, że za kilka lat będzie możliwe kreślenie nie tylko na mapie punktów związanych z danymi w Google Spreadsheets, ale też będą one wystawiane na znanym nam endpoincie HTTP. Wierzę w moc Google APIs.
Poniżej przykład danych w darmowej chmurze, czyli w Google Sppreadsheets oraz ciekawy wpis n.t. tego jak zrobić data scraping z wikipedia z użyciem Google Spreadsheets.

18 lutego 2010

Fritzing - elektronika i informatyka w jednym miejscu

Od jakiegoś czasu zastanawiałem się, czy ktoś czasem nie połączył Open Hardware z Open Source w jakiś zwinny sposób ... długo myślałem nad swoim rozwiązaniem coś a la PADS do projektowania obwodow drukowanych + autotouterek do tworzenia PCB + interfejsy do PC w jednym miejscu :-) Myśli nie zdążyłem przelałem na papier i tym razem także zasięgnąłem do Open Souce ;-) Znalazłem tak długo wyczekiwany produkt nie tylko mojej wyobraźni pod hasłem Fritzing. Zapewniam was, że teraz od prototypu do produktu jest zdecydowanie sprawniej z Fritzing.



Polecam filmowe wprowadzenie do środowiska, które znajduje się tutaj:




Okazuje się, że projekt Fritzing to nie tyle różne narzędzia desktopowe do projektowania i prototypowania układów elektronicznych, ale również budowanie społeczności, wokół Open Source & Open Hardware. Strona projektu posiada dział, w którym mamy dostęp do banalnie prostej opcji wymiany projektów pomiędzy użytkownikami. Już z poziomu aplikacji mamy możliwość klikając na wyodrębniony i widoczny przycisk share przekazać nasz schemat, kody źródowe oraz płytkę drukowaną do repozytorium społeczności Fritzing.


Zaskakuje również wbudowany autorouter do projektowania płytek drukowanych PCB. O ile ten w projekcie Eagle jest dość sprawny i wystarczający do większości drobnych projektow wykluczając wysokie częstotliwości, to ten we Fritzing nadaje się jak wynika z opinii użytkowników również do w.cz. Osobiście śmie wątpić, bo nie znalazłem żadnych symulatorów zjawisk w.cz. propagacji fal, wykresow sygnałowych oraz propozycji prowadzenia ścieżek z uwzględnieniem zjawisk w.cz. Cóż, byćmoże to są plany i całkiem realne patrząc na to dość praktyczne dzieło wykonane zupełnie nieodpłatnie w ramach otwartego oprogramwowania z pasją.

Kiedy przyjrzymy się bliżej źródłom widać przewagę języka programowania C++ oraz biblioteki Qt-4.6.1 firmy Trolltech. Warto spojrzeć na kod autoroutera z algorytmem optymalizacji wyszukiwania ścieżek Dijkstry



Materialy dodatkowe:
http://code.google.com/p/fritzing/
http://code.google.com/p/fritzing/w/list
http://hackaday.com/2009/08/25/fritzing/
http://www.piksel.no/tag/fritzing
http://geekswithblogs.net/kobush/archive/2010/01/04/137328.aspx
http://unknowndomain.co.uk/blog/2010/01/03/i-heart-fritzing/
http://www.golem.de/0902/65340.html
http://portal.acm.org/citation.cfm?id=1517735
http://robot-overlord.blogspot.com/2009/04/robot-overlord-recommends-fritzing.html
http://www.pixelsumo.com/post/fritzing
http://starter-kit.nettigo.pl/2009/09/arduino-gramy/
http://starter-kit.nettigo.pl/
http://fritzing.org/projects/blow-up-shield/
http://www.gosh2009.ca/wiki/index.php/About_Gosh!
http://www.gosh2009.ca/wiki/index.php/Workshop_Schedule
http://sebastiansobotka.blogspot.com/search/label/led%207-segmentowy

3 lutego 2010

PHP + HipHop ... i nigdy stop :)

Tytuł sam odkrywa szczegóły tej wypowiedzi. Chciałbym opisać swoimi słowami co myślę o rozwiązaniach sieciowych, które są wysoko skalowalne i produkcyjnie pozwalają na obsłużenie stron o ruchu ~400 mln odsłon miesięcznie. Temat do tyczy znanego wszystkim języka PHP oraz narzędzia poprawiającego niemalże o połowe wydajność tego języka tzn. prj. HipHop.



Wiele projektów udowodniło, że język PHP daje się osadzać na innych platformach (t.j. Java, .NET, Erlang VM)i konwertować do innych formatów wykonawczych. Niewiele miało tak wyjątkową rekomentację jak HipHop. Pierwotnie projekt zrodził się na potrzeby optymalizacji wydajności skryptów w serwisie społecznościowym Facebook. Od kilku dni źródła zostały uwolnione i umieszczono je na GitHub.

Wracając do alternatywnych prób kompilacji w PHP oraz osadzania warto przytoczyć następujące projekty:
phpcompiler
roadsend
Phalanger php compiler
Quercus - PHP in Java



Kwintesencja HipHop jest zarazem założeniem tego tworu. Jest to coś ala kompilator skrośny z języka PHP do języka C++. Dzięki takiej ścieżce ANSI C (Zend API), w którym napisany jest PHP, dalej PHP i na końcu skrypty CGI skompilowane kompilatorem G++ daje zysk ponoć dwukrotny w wydajności !!!
Co dla świata PHP jak i dla samego Facebooka jest REWOLUCYJNE :-) Pierwotnie produkt komenrcyjny ZendServer próbował optymalizować czas działania skryptów, poprzez pakowanie OPCODES (coś ala bytecode w PHP), lecz możliwości tego rozwiązania skończyły się bardzo szybko. Aktualnie zamiast np: dokupować kolejny rdzeń lub stawiać kolejną maszynę w farmie wystarczy użyć HipHop - nieprawdaż że proste ;) Poniższy schemat pokazuje ogólnie ten proces:





Materiały dodatkowe:

http://developers.facebook.com/news.php?story=358&blog=1
http://www.ustream.tv/recorded/4409735
http://www.facebook.com/video/video.php?v=124728580468&ref=mf

7 stycznia 2010

Przodują Java + C a PHP w górę się pnie ;)

Na stronie Tiobe podejrzymy interesujące statystyki sporządzane wymyślnym algorytmem dot. populrności języków programowania. Oto raport w postaci wykresu udostępniany w ramach serwisu Tiobe:





W postaci uproszczonej widać ciekawe wyniki w tabeli:

Position
Feb 2010 Position
Feb 2009 Delta in Position Programming Language Ratings
Feb 2010 Delta
Feb 2009 Status
1 1 Java 17.348% -2.05% A
2 2 C 16.602% +0.76% A
3 5 PHP 10.001% +1.22% A
4 3 C++ 9.447% -0.19% A
5 4 (Visual) Basic 7.051% -1.79% A
6 6 C# 5.015% -0.05% A
7 7 Python 4.314% -0.25% A
8 8 Perl 3.600% -0.52% A
9 9 Delphi 2.656% -0.97% A
10 10 JavaScript 2.636% -0.90% A
11 11 Ruby 2.439% -0.84% A
12 32 Objective-C 1.779% +1.60% A
13 - Go 1.778% +1.78% A-
14 14 SAS 0.771% -0.06% A
15 13 PL/SQL 0.738% -0.25% A
16 17 ABAP 0.661% +0.09% B
17 16 Pascal 0.606% -0.08% B
18 18 ActionScript 0.579% +0.04% B
19 23 Lisp/Scheme 0.563% +0.13% B
20 24 MATLAB 0.536% +0.12% B



Warto podkreślić, że serwis agreguje dane z różnych przeglądarek oraz przetwarza je po czym wyznacza na podstawie sporządzonego przez siebie - i opublikowanego - wzoru rankingi.

4 stycznia 2010

GIT - dlaczego Linus i ja nie polubiliśmy subversion

Systemy kontroli wersji są niezbędnym narzędziem w codziennej pracy zespołu projektowego, a często bez odpowiedniego rozwiązania niemożliwa jest komunikacja i wymiana rezultatów prac pomiędzy programistami.

Ujmując temat zwięźle w ramy praktyczne Linux Torvalds poczuł potrzebę niezależności w wytwarzanych projektach i zrozumiał, że problem łączenia kodu różnych osób współtworzących jeden produkt tzw.merge to klucz do sprawnej pracy. Tworzenie oprogramowania, kiedy 30% czasu zajmuje rozwiązywanie konfliktów mojego kodu z innymi to znane z SVN (Subversion) marne zwyczaje współpracy. Linus wychwycił również ten fakt, więc nie chciał kopiować systemu wersji SVN i pomyślał o swoim systemie wersji. Ponieważ zna się na algorytmach opracował koncept, kiedy każda zmiana może być postrzegana jako gałąź drzewa stanowiących naturalny system zmian, zakończony jednym pniem. Pień drzewa, czyli master jest miejscem (tzw. branch), gdzie wszystkie powstające zmiany (tzw. features) trafiają ostatecznie. Każda nowa zmiana może dosłownie niezależnie być rozwijana w dowolnym innych mniej lub bardziej zależnym repozytorium przez jednego lub więcej developerów. Niby nic dziwnego, bo tak ma wiele systemów kontroli wersji, ale jednak więcej niżeli w Subversion. Koncept, który udało się wytworzyć pozwala na podłączanie się do wielu zdalnych repozytoriów kodu, łączenie ze sobą pracy wielu niezależnych programistów i osiąganie w ten sposób jednego zamierzonego celu. Tym celem jest Linux Kernel, czyli jądro >70% urządzeń, maszyn, serwerów, rakiet, sprzętu wojskowego i innych przemysłowych wytworów, do tego współczesnych smartfonów, tabletów, komputerów. Linus Torvalds tworząc GITa osiągnął swój cel, czyli uniezależnienie pracy wielu chętnych ludzi ze świata Open Source w celu stworzenia jednego z największych i rewolucyjnych produktów. Sukcesem tym Linus podzielił się ze światem i zmienił myślenie, ułatwiając tym samym pracę wielu milionów programistów.

Linus, thanks for GIT, too ;)

Przypominam sobie jak chciałem zrobić kilka poprawek do słynącego systemu helpdesk o nazwie OTRS, co tutaj będę ukrywał - w języku Perl :-)< br /> Zapowiadał się dość niepewnie, bo na starcie dowiedziałem się o tym, że mają w tym projekcie repozytorium CVS, które to jest dość magicznym sposobem na gromadzenie historii zmian wersji kodu. Nie pozostało mi nic innego jak zaproponować autorowi OTRSa przenieść się na GITa :-) Nie musiałem go zbyt przekonywać, bo dzięki temu społeczność developerów wokół projektu OTRS odżyła. Szczegóły widać na GITHUB w projekcie OTRS

Cechy z którymi GIT stał się potęgą obsługi wersji współczesnych projektów to:

Oto co mówi Linus na temat systemu kontroli wersji GIT:

Linki:

Move OTRS code repositories/branches to GIT

GIT-SCM

Linux Kernel