Prawdziwe granie online

July 2nd, 2009

Dziś zaszokowała mnie wiadomość o oprogramowaniu do gier online autorstwa Davida Perry. Otóż, David udostępnia gry komputerowe online. Na serwerze zainstalowana jest gra, a pograć możemy przez przeglądarkę z Flashem. Gratulacje David!!!

Nie mam pojęcia jak David to zrobi? Może wy wiecie?

Mi przychodzą na myśl następujące rozwiązania. U klienta jest Adobe Flash Player. To oznacza połączenie do serwera za pomocą RTMP. RTMPF lepiej by się nadawało, ale wciąż jest eksperymentalne. Kodowanie pewnie H264. Ale jak wyświetlić grę w taki sposób żeby serwer mógł ją przekazać do Internauty? Może technologie wirtualizacji i protokół RTP? RTP dało by się podłączyć do serwera, na przykład Red5 lub Wowza a te z kolei mogły by serwować do Flasha. Na szybko znalazłem że RTP jest blisko Microsoft Virtual PC. Albo może jeszcze zupełnie coś innego…

Programiści, a wy jak myślicie, jakich technologii użył David by pograć sobie online?

Antoni Jakubiak Uncategorized

Google OAuth Gadgets po polsku

June 18th, 2009

Zauważyłem, że w polskiej wersji serwisu IGoogle zaczęły działać gadżety OAuth. Dotychczas, gadżety takie działały tylko w wersji angielskiej. Nie chcę wnikać w szczegóły, bo już zupełnie nie pamiętam o co chodzi i dlaczego wcześniej nie działało. W każdym bądź razie teraz, można już pisać gadżety, które będą dostawać autoryzacje od zalogowanego użytkownika IGoogle, i na przykład operować na jego książce adresowej. Na przykład ten testowy gadżet wyświetla 20 pozycji z książki adresowej internauty, oczywiście pod warunkiem że internauta mu na to pozwoli.

Dzięki OAuth gadżety i webowy pulpit Google staną się jeszcze fajniejsze. Wraz ze wzrostem możliwości jakie dają gadżety konieczny jest wzrost świadomości o niebezpieczeństwach, na które jesteśmy narażeni. Na przykład, ten gadżet który wcześniej autoryzowaliście mógłby skraść wszystkie adresy z waszej książki adresowej, następnie je skasować i zażądać 1$ za ich odzyskanie. Fajne, co?

Antoni Jakubiak google

VLC Media Player

June 17th, 2009

Jest wiele programów przeznaczonych do odtwarzania filmów. Na serwerach lubię mieć zainstalowany MPLayer. Na desktopie SMPlayer. SMPlayer jest fajny, bo potrafi pobrać automatycznie wyszukać napisy do odtwarzanego filmu na stronie OpenSubtitles. Jednak nie o tym chciałem napisać…

Niedawno natrafiłem na jeszcze inny player: VLC Media Player. VLC jest niezwykłym programem do odtwarzania filmów. VLC jest nawet bardziej niezwykły niż MPLayer. VLC potrafi odtwarzać filmy, dodawać napisy i efekty, zmieniać formaty filmów. VLC może pracować jako serwer multimediów. Dlatego VLC jest więc bardzo cennym nabytkiem w skrzynce z narzędziami u programisty multimediów – czyli na przykład u mnie. Oczywiście VLC można używać też do zwykłego oglądania filmów na przykład z DVD, albo z YouTuba, lub do słuchania muzyki z radiostacji internetowej.

Najbardziej interesujące jest wykorzystywanie VLC jako serwera multimediów. VLC może być na przykład serwerem dla Windows Media Playera. VLC może pobierać obraz na przykład z kamery wideo, może pobierać zrzuty ekranu, lub może najzwyczajniej na świecie pobierać filmy DVD i o ile warunki licencji na to pozwolą, serwować go na stronę WWW gdzie będzie odtwarzany komponentem Windows Media Player lub Flashem i JWPlayerem.

Zrobię mały test. Na komputerze na strychu uruchamiam VLC, z menu wybieram opcje strumieniuj, wybieram plik który ma być serwowany, mogę wybrać napisy. Na następnym ekranie wybieram strumieniowanie “HTTP” i format “Windows”. Uruchamiam Windows Media Player. Otwieram adres URL: http://ADRES-IP-SERVERA:8080/ i działa:

 

 

Antoni Jakubiak Uncategorized

Co nowego w Red5 0.9?

June 16th, 2009

Kilka dni temu świat ujrzał Red5 w wersji 0.8. W zasadzie Red5 0.8 nie wnosi nic nowego – uporządkowano jednak kod i dodano instalator aplikacji. Red5 0.8 to były ważne zmiany dla programistów a nie dla użytkowników.

Dopiero Red5 0.9 to będzie coś!!! Popatrzyłem na komentarz programistów w systemie kontroli wersji i znalazłem tam:

Jak widać programiści Red5 pracują pełną parą. Zachęciło mnie to do zaktualizowania projekt jakubiak-red5 – budowanie Red5 z maven2. Utworzyłem gałąź 0.8.0. Utworzyłem repozytorium maven. Posprzątałem trochę kod.

Uważam, że wersja 0.9 Red5 będzie przełomowa. Dotychczas Red5 zostawał w tyle za Wowza i FMS. Nowa wersja i potęga Xuggle wypchną ten serwer daleko przed konkurencje – przynajmniej w dziedzinie przetwarzania strumieni wideo.

Antoni Jakubiak Uncategorized

Czy e-wybory mają sens?

June 8th, 2009

Zapraszam do mojego blog politycznego – gdzie próbuję odpowiedzieć na pytanie czy e-wybory mają sens? Zależy mi na tym, by poznać opinię programistów na ten temat.

Antoni Jakubiak Uncategorized

WolframAlpha

June 4th, 2009

Jestem pod wrażeniem oprogramowania WolframAlpha. To taki kalkulator. Potrafi powiedzieć nam ile to 2 + 2 – ale to i ja bym potrafił. Wolfram potrafi rozwiązać równanie na przykład: 2 * x = 8 – sin(x) – z tym nie dał bym sobie pewnie rady. Wolfram potrafi robić też wiele innych ciekawych obliczeń, na przykład możemy zobaczyć że jeden pracownik Google wytwarza ponad 200 tysięcy dolarów przychodu rocznie – gratulacje!!! Mogę też sprawdzić, że w 20 maja 2023 roku będę obchodził mój 16384 dzień życia – zaplanuję zakup komputera z tej okazji. Gratulacje dla programistów WolframAlpha.

Antoni Jakubiak Uncategorized

wagon-svn

June 2nd, 2009

wagon-svn to rozszerzenie do Maven2 które umożliwia publikowanie bibliotek do zdalnego repozytorium SVN. Może być ono szczególnie użyteczne dla osób korzystających z Google Code, na przykład dla mnie J. Instalacja biblioteki jest prosto, nie będę jej opisywał, gdyż zrobiło to już kilku boglerów, na przykład Don Brown.

W skrócie, maven2 pozwala określić jakie biblioteki potrzebne są do skompilowania naszej aplikacji. Biblioteki dostępne są w repozytoriach. Aby umieścić nasz projekt w repozytorium możemy korzystać właśnie z wagon-svn.

Z mojego odkrycia cieszę się niezmiernie, gdyż pamiętam że rok temu jeszcze nie było z tym tak prosto.

Antoni Jakubiak Uncategorized

Red5 + JPA + Maven2

May 13th, 2009

Zapraszam do artykułu w którym opisze jak przy pomocy Maven2 zbudować aplikację dla serwera Red5 korzystającą z technologii Spring, JPA, Hibernate oraz bazy PostgreSQL. Nie będę posługiwał się żadnym IDE, użyje tylko edytora tekstu VIM oraz poleceń powłoki Bash. Całość uruchomię na wirtualnym komputerze z FreeBSD.

Zadanie aplikacji, korzystającej z tych wszystkich technologii będzie bardzo proste. Będzie to program klasy “Hello World”. Aplikacja będzie sprawdzać, czy Internauta ma uprawnienia do publikowania materiałów wideo na serwerze Red5. Sprawdzanie będzie odbywać się na postawie adresu IP nadawcy. Dozwolone adresy IP będą zapisane w bazie danych PostgreSQL. A najfajniejsze jest to, że już tą aplikację napisałem, opublikowałem i opiszę gotowca.

Na serwerze mam już zainstalowane:

  • Java 1.6 (Diablo JDK)
  • Maven 2.0.9
  • PostgreSQL 8.3

Aby rozpocząć, pobieramy aplikację korzystając z SVN:

svn checkout http://jakubiak-red5.googlecode.com/svn/trunk/ jakubiak-red5-read-only

 

W ten sposób ściągamy źródła projektu jakubiak-red5 wraz z przykładową aplikacją. Projekt jakubiak-red5 jest dowiązany do źródeł projektu Red5 przy pomocy svn:externals. Tak więc, pobierając mój projekt, zostaną pobrane kody źródłowe serwera Red5. Nastał czas na pierwszą kompilację. Dzięki pracy włoskiego programisty Marcello Teodorii aplikacja powinna zbudować się bez przeszkód.

cd jakubiak-red5-read-only/jakubiak-red5-pom/
mvn clean install

 

W tym momencie maven zacznie pobierać z Internetu biblioteki konieczne do zbudowania aplikacji. Może to chwile potrwać. Kolejną chwilę będziemy musieli poczekać na kompilacje 700 klasy Javy. Na koniec, ucieszymy się sukcesem. (Jak widać, ja byłem cierpliwy bo czekałem 16 minut, jednak gdy zależności są już pobrane z Internetu to aplikacja buduje się szybko.)

Następnie zakładamy bazę danych PostgreSQL i użytkownika dla niej. Jako hasło podajemy “demojpa”.

createuser -h localhost -U pgsql -S -D -R -P demojpa
createdb -h localhost -U pgsql -O demojpa demojpa

 

Założenie bazy danych na tym etapie jest wymagane, gdyż właśnie ta baza będzie użyta do testowania aplikacji. Aplikacja będzie się testować podczas kompilacji. Więc kompilujemy:

cd ../jakubiak-red5-demo-jpa/
mvn clean install

 

Powinniśmy cierpliwie oczekiwać sukcesu.

Nasza aplikacja została zbudowana. Wynikiem pracy jest plik war. Ten plik war możemy wgrać na serwer Apache Tomcat. Ja korzystam z najnowszej stabilnej wersji – 6.0.18.

cd ../..
wget "http://ftp.tpnet.pl/vol/d1/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz"
tar xvfz apache-tomcat-6.0.18.tar.gz
cp jakubiak-red5-read-only/jakubiak-red5-demo-jpa/target/tomcat/webapps/jakubiak-red5-demo-jpa-war.war apache-tomcat-6.0.18/webapps/

 

Zaganiamy koteczka Toma do roboty. MiauJ

cd apache-tomcat-6.0.18/
./bin/startup.sh
tail -f logs/catalina.out

 

W logach serwera wypatrujemy sukcesu.

Nadszedł czas na testy użytkownika. Uruchamiamy przeglądarkę:

http://ADRES-IP-SERWERA:8080/jakubiak-red5-demo-jpa-war/publisher.swf

 

Wczytana zostanie standardowa aplikacja demonstracyjna, dostarczana z serwerem Red5. W polu “Location” wpisujemy:

rtmp://ADRES-IP-SERWERA/demojpa

 

RTMP to protokół komunikacyjny używany w Flashu. “demojpa” to nazwa naszej aplikacji. Połączenie do serwera zostanie nawiązane.

W zakładkach “Settings” wybieramy kamerę webową oraz dźwięk. Testujemy publikowanie wideo. Nie powinno działać, gdyż nie wpisaliśmy jeszcze swojego adresu IP do listy uprawnionych adresów w naszej aplikacji.

W logach serwera znajdziemy przyczynę.

Adres IP, z którego zamierzamy publikować, trzeba dopisać do bazy danych.

psql -h localhost -U demojpa
INSERT INTO hostallow VALUES ( '192.168.0.114' );

 

Wracamy do przeglądarki WWW. Teraz możemy już rozpocząć publikację i podziwiać efekt naszej pracy.

Gdy mamy już działającą aplikację, to możemy w niej pogrzebać, po to by coś zepsuć lub ją zrozumieć. Ja nie będę nic psuł, ale postaram się opisać najważniejsze elementy.

find . -type f | egrep -v .svn
./src/test/java/eu/jakubiak/red5/demo/jpa/StreamPublishSecurityTest.java
./src/main/java/eu/jakubiak/red5/demo/jpa/entities/HostAllow.java
./src/main/java/eu/jakubiak/red5/demo/jpa/DemojpaApplicationAdapter.java
./src/main/java/eu/jakubiak/red5/demo/jpa/StreamPublishSecurity.java
./src/main/resources/META-INF/persistence.xml
./src/main/resources/red5-services.xml
./src/main/resources/logback.xml
./src/main/resources/red5-core.xml
./src/main/resources/red5-common.xml
./src/main/resources/beanRefContext.xml
./src/main/resources/defaultContext.xml
./src/main/resources/red5-web.xml
./src/main/resources/jdbc.properties
./src/main/webapp/META-INF/MANIFEST.MF
./src/main/webapp/WEB-INF/demojpa-servlet.xml
./src/main/webapp/WEB-INF/web.xml
./src/main/webapp/publisher.swf
./pom.xml
			

 

Po kolei, StreamPublishSecurityTest – jest to klasa która służy do przetestowanie wrażliwego kodu w naszej aplikacji. HostAllow jest to klasa reprezentująca encję JPA, koresponduje ona z tabelką która zostanie utworzona w bazie danych. DemojpaApplicationAdapter definiuje aplikację Red5, w tej klasie włączamy naszą politykę bezpieczeństwa podczas publikowania wideo. StreamPublishSecurity to klasa którą robi czarną robotę – właśnie tu sprawdzane jest, czy Internauta może publikować.

Dalej: persistence.xml to plik potrzebny dla JPA. Najprościej mówiąc, definiujemy w nim, które klasy mają być mapowane na tabele w bazie danych. red5-services.xml to bardzo ważny plik, w którym konfigurujemy ziarna springa wykorzystywane w naszej aplikacji. Znalazły się tam też informacje o bazie danych. Gdyby nasza aplikacja posiadała jakieś usługi zdalne, to właśnie tam warto było by je opisać.

logback.xml to konfiguracja dzienników aplikacji. red5-core.xml, red5-common.xml, beanRefContext.xml i defaultContext.xml to konfiguracja Springa dla serwera Red5. Gdy chcemy coś ulepszyć w Red5 to właśnie tam powinniśmy się włamać. red5-web.xml to plik w który możemy zmienić nazwę naszej aplikacji “demojpa” używaną podczas połączenia RTMP.

jdbc.properties to parametry połączenia do bazy danych. demojpa-servlet.xml w tym pliku trzymał bym konfiguracje kontrolerów widocznych w protokole HTTP (akurat nie ma takich). web.xml to najważniejszy dla archiwum war plik w którym opisujemy składniki aplikacji internetowej. Z publisher.swf już wcześniej się spotkaliśmy. pom.xml to magiczny plik dla Mavena, który opisuje jak zbudować całą aplikację i jakie ma ona zależności.

Prawda, że fajne? 

Antoni Jakubiak Uncategorized

Java dla pokolenia YouTube

May 7th, 2009

YouTube jest symbolem zmian. Ludzie pokolenia YouTube potrafią robić rzeczy, które dla innych ludzi są niewyobrażalne. Potrafią na przykład jednocześnie słuchać muzyki i uczyć się matematyki. Wciąż potrzebuje nowych wrażeń, których trzeba dostarczać im z piorunującą szybkością. YouTube to potrafi. Młodzi pokochali YouTube a YouTube stał się symbolem ich pokolenia.

Nowe pokolenie potrzebuje nowych mediów. Nowe media potrzebują nowej technologii. Nowa technologia potrzebuje programistów. Przed nami nowe wyzwania!!!

Zapraszam na przegląd technologii, z którymi ostatnio się zderzyłem. Powiem kilka słów o Adobe Flex, Red5, Xuggle, MLT, i jeszcze kilku zakręconych bibliotekach które rozkwitły w kraju kwitnącej wiśni . Pokaże kilka pięknych dla mnie fragmentów kodu. Zaproponuję kilka zastosowań tychże technologii. Chętnie podyskutuję.

Miałem wtedy osiem lat, to był Amstrad/Schneider CPC 464. Mój tata zapomniał kupić gry, więc zacząłem uczyć się programowania próbując zrozumieć niemiecką instrukcję obsługi. Programowałem dla siebie, dla startupów, dla korporacji, i znów dla siebie. Dziś, wspólnie ze Sławomirem Idziakiem prowadzimy firmę. Naszym strategicznym celem jest stworzenie wirtualnego studia filmowego – społeczności filmowców i narzędzi, które umożliwią budowę filmu za pośrednictwem Internetu.

Zapraszam na 47 spotkanie Warszawskiego JUG którego tematem będzie “Java dla pokolenia YouTube”.

Antoni Jakubiak Uncategorized

Qik i zagrzebywanie śmieci

April 27th, 2009

Odkryłem dziś w Internecie fajną zabawkę. Nazywa się to Qik. Umożliwia nagrywanie wideo z telefonu bezpośrednio na stronę Internetową, a nawet więcej – umożliwia strumieniowanie wideo z komórki bezpośrednio na stronę WWW. Ci amerykanie są naprawdę niewybaczalnie dobrymi hakerami. Brawo!

Ja to działa? Instaluje się na nowoczesnym telefonie aplikację. Aplikacja wysyła obraz z kamery telefonu komórkowego do serwera Qik. Wykorzystywane jest połączenie Internetowe. Niby proste – ale naprawdę fajne. Więc do testów.

No i właśnie postanowiłem się pobawić Qik. Postanowiłem sfilmować gruz, który mam wygrzebuję z działki. Otóż, firma budująca postanowiła zagrzebać odpadki budowlane na terenie mojej działki. Ukryli je jakieś 10 centymetrów pod ziemią. Nie wiem ile ich jest i gdzie są, ale powinienem chyba je wygrzebać. Nie znam się na roślinach, ale wydaje mi się, że nie będą one zbyt chętnie rosły na odpadach budowlanych. Więc je wygrzebuje. A gdy wygrzebuję, to myślę sobie – ile razy zdarzyło mi się zagrzebać jakieś śmieci w kodzie. Ale jest różnica, ja – jak zagrzebuję coś w kodzie to staram się to oznakować komentarzem: FIXME, TODO, XXX. Czasem takie FIXME, odkrywa się na przykład po wielu latach i wtedy jest zabawnie. Ale najczęściej takie FIXME zasypuje się na tyle głęboko, że nikt go już nie znajdzie. Niestety, firma która zagrzebała mi śmieci na działce, zagrzebała je na tyle płytko – że muszę je wygrzebać i na tyle głęboko – że muszę się przy tym narobić.

I dlatego z taką przyjemnością opowiadam o tym testując rewelacyjną aplikację Amerykanów – Qik. Ciekawe, jak często amerykanie zagrzebują swoim klientom śmieci na działce?

Antoni Jakubiak Uncategorized