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?
SimplePie to biblioteka PHP której użyłem do czytania blogów.
Moim zadaniem było przepisanie do bazy danych postów z bloga. Mając adres URL bloga należy wczytać stronę bloga, znaleźć w niej odwołania do RSS (lub ATOM), następnie wczytać dokument RSS (lub ATOM) i zrozumieć go. Z dokumentu RSS (lub ATOM) należy wyciągnąć wszystkie wpisy i umieścić je w bazie. Zadanie było by trywialne, gdyby nie różnice w protokołach ATOM oraz RSS.
Z początku próbowałem zaprząc do tego celu Zend Framework. Niestety – działało to bardzo źle. Zniechęcony postanowiłem wypróbować inną bibliotekę. Wybrałem SimplePie. Działa prawidłowo – brawo!!!
Drzewo w bazie danych to jeden z problemów, o których fajnie się dyskutuje na studiach. Istnieje wiele sposobów implementacji drzewa, znany hacker Depesz wymienił 5. Niestety, często zapomina się o najważniejszych i najprostszych metodach. Żadnych identyfikatorów rodzica. Tylko ścieżka – która jest opisana tekstowo. Lub identyfikator rodzica i ścieżka. Na przykład:
Identyfikator rekordu
Identyfikator rodzica
Ścieżka
1
0001
2
1
0001 / 0002
3
1
0001 / 0003
4
3
0001 / 0003 / 0004
5
3
0001 / 0003 / 0005
6
1
0001 / 0006
7
1
0001 / 0007
Jakie są zalety takiego rozwiązania? Prostota implementacji, błyskawiczne wyszukiwanie potomków, szybkie wyszukiwanie rodziców, miłe przeglądanie bazy w konsoli SQL, szybkie sortowanie. Oczywiście, gdy potrzebujemy sortowania to należy użyć dodatkowego identyfikatora kolejności, na przykład:
Identyfikator rekordu
Identyfikator rodzica
Kolejność
Ścieżka # Kolejność
1
1
0001 # 0001
2
1
2
0001 / 0002 # 0002
3
1
1
0001 / 0003 # 0001
4
3
1
0001 / 0003 / 0004 # 0001
5
3
2
0001 / 0003 / 0005 # 0002
6
1
3
0001 / 0006 # 0003
7
1
4
0001 / 0007 # 0004
Zestawienie zalet i wad rozwiązanie z ścieżką:
Wady
Więcej miejsca na dysku
Zalety
Prosta implementacja
Prostota modelu
Błyskawiczne wyszukiwanie potomków
Szybkie wyszukiwanie rodziców
Szybkie sortowanie
Miłe przeglądanie bazy w trybie administratora
Czy są lepsze rozwiązania? Oczywiście. Wystarczy wprowadzić założenie, że w naszym drzewie może być tylko kilka poziomów zagłębienia i liczba ta jest określona przez programistę systemu. Wtedy, w bazie danych możemy zapisywać informację w następujący sposób:
Identyfikator rekordu
Rodzic poziom 1
Rodzic poziom 2
Kolejność
1
1
2
1
2
3
1
1
4
1
3
1
5
1
3
2
6
1
3
7
1
4
W świecie prawdziwych problemów, często właśnie ta trywialna implementacja drzewa będzie najlepsza: jest najprostsza w implementacji i jest rewelacyjnie szybka. Przykłady kodu:
Moim zdaniem, najprostsze rozwiązanie jest zwykle najlepsze.
Moc prezentów od zajączka, co koszyczek trzyma w rączkach!!!
Z okazji Świąt postanowiłem wypróbować jak wysyłać wideo życzenia. Zacząłem od 12 sekund TV. Niestety, dziś ich serwery są przeciążone i nagrywało mi się kiepsko. Spróbowałem więc z YouTube. Otóż, w YouTube jest opcja pozwalająca na nagrywanie filmów bezpośrednio z kamery wideo. Czyli znaczy się, że programiści YouTube musieli pokonać trudności z którymi walczę na co dzień i koniecznie musiałem zobaczyć jak to zrobili. Będę miał referencyjną implementację z czego cieszę się niezmiernie. No cóż, nie wszystko się im udało, podobnie jak mi… Na przykład YouTube ucina ostatnie zdanie w nagraniu: “Życzę jaja święconego i wszystkiego najlepszego“. Ja zmniejszyłem ten problem obniżając jakość nagrania. W każdym bądź razie, będzie nad czym pracować, ale to już po Świętach!!!