Wow no troszkę się nazbierało materiału. W czasie trwania konkursu nauczyłem się wielu przydatnych rzeczy odnośnie frameworków, php, baz danych. Uzyskałem wiele informacji na temat urządzeń GPS o zapisie drogi w formacie KML lub KMZ. Dowiedziałem się iż pozycja w zdjęciach zrobionych w urządzeniach wyposażonych w funkcje geotagingu z gps (nie wliczam tu telefonów se w których kwestia ta jest różnie rozwiązana i nie zawsze informacje o geotagingu są przechowywane w formacie EXIF) jest zapisywana w formacie EXIF. Dowiedziałem się również jak umieszczać mapy google na swojej stronie oraz jak je konfigórować, uczyłem się api google maps. Uczyłem się api facebooka. Poznałem sposoby manipulowania informacjami w portalu facebook o tym iż każdy obiekt w portalu ma unikatowy numer i mogę się do niego odwołać po tym numerze. Dowiedziałem się jak działają aplikacje w portalu. Cała ta wiedza jest przydatna w procesie tworzenia programu. Jest tego dużo ale znów nie aż tak dużo żeby to strasznie przytłaczało. Powiem iż dzięki temu konkursowi udoło mi się poszerzyć swoją wiedzę w znaczny sposób i za to dziękuje pomysłodawcą projektu.
Pisze posta podsumowując w wielkim skrócie to co udało mi się wyszperać i nauczyć. Jeżeli ktokolwiek jest zainteresowany szczegółowymi informacjami o rzeczach jakie tu wymieniam to zapraszam do przeglądnięcia szczegółowych postów na ten temat.
Wiem już że mogę się nie wyrobić z aplikacją z względów czasowych do końca konkursu ale nawet jak nie zdążę to i tak przedstawię ją na łamach bloga. Mam nadzieję że informacje które tu przedstawiam przydają się komukolwiek chodź wiem ze wiedza tu zawarta nie jest może na jakimś wysmakowanym poziomie.
Do końca października zamierzam wprowadzać na blogu tematy już konkretnie związane z alikacją mam nadzieje że zdążę :), a mniej wiedzy teoretycznej tak jak miło to miejsce do tej pory.
Wiem że dzisiejszy post jest mało związany z konkretami ale od czasu do czasu podsumowanie oraz zebranie wszystkiego w jednym miejscu jest potrzebne.
Najważniejsze jest to, iż wiedza jaką zdobyłem była niesamowicie potrzebna. Bez informacji na temat geolokalizacji projekt najprawdopodobniej wcale nie poszedłby do przodu. Jeśli ktoś ma jakiekolwiek materiały na temat geolokalizacji lub formatu exif, to chętnie poczytam. W internecie są co prawda materiały na ten temat ale może ktoś ma coś bardziej interesującego.
Blog jest poświęcony rozwijaniu projektu portalu który ma za zadanie pomagać rowerzystą w znajdywaniu najlepszych dla nich tras rowerowych i w rozeznaniu się gdzie najlepiej jest wybrać się na przejażdżkę rowerem. Serwis ma utworzyć społeczność cyklistów wymieniających się spostrzeżeniami na temat tras rowerowych.
niedziela, 10 października 2010
niedziela, 3 października 2010
Zabezpieczamy symfony
Symfony ma jedną dość dobrą zaletę . Mianowicie pluginy. Zauważyłem ze jest jedno przewodnie zdanie które doskonale reprezentuje symfony a mianowicie "po co wymyślać znów koło? ". No tak po co mamy je wymyślać skoro możemy z niego korzystać :).
Dziś zajmiemy się autentyfikacją użytkownika. I nie będę pisał skomplikowanych wierszy kodu :) bo po co skoro są pluginy :). Zaczynajmy więc:
Pierwsza sprawa to zabezpieczenia wejścia dla konkretnej aplikacji w symfony co robimy za pomocą zmiany kodu w:
apps/nazwa/config/security.yml
default:
is_secure: false //oczywiscie zmieniamy na true
Tym sposobem gdy będziecie chcieli wejść sobie po adresie na aplikacje w tym przypadku "nazwa" wyskoczy informacja iż strona nie jest dostępna publicznie.
Następnie przydałby się nam plugin. W tym celu w pierwszej kolejności sprawdźmy czy mamy zainstalowany PEAR ponieważ jest on wymagany dla następującego polecenia dla symfony:
php symfony plugin:install sfDoctrinePlugin
Jeżeli korzystamy z tego sposobu instalacji to automatycznie zostaje zmieniona
// config/ProjectConfiguration.class.php
zatem nie mamy się już czym przejmować. Jeżeli natomiast robimy to w innym sposobem to musimy pamiętać o włączeniu pluginu ręcznie co prezentuje poniżej:
Po zainstalowaniu pluginu wykonujemy standardowe polecenie:
php symfony doctrine:build --all --and-load --no-confirmation
Następnie zmieniamy ustawienia w settings.yml na odpowednie :
Po tych zabiegach powinniśmy po odświeżeniu strony zobaczyć formularz logowania :) I to jest właśnie urok symfony :)
Następnie utwórzmy jakiegoś usera do logowania:
php symfony guard:create-user abc SecrestPass
php symfony guard:promote abc
Od teraz możemy posługiwać się metodą isAuthenticated() która zwara czy jesteśmy zalogowaniu czy nie:) zatem jeżeli chcemy aby tylko zalogowani wdzieli np menu to zwyczajnie w layoucie dajemy:
Jak widać prawie nie pisząc kodu można zrobić w symfony ładnie wyglądający skrypt logowania.
Pozostało jeszcze aby zalogowani użytkownicy mogli się wylogowac:
wiec dodajmy w miejscu "cos w menu" <?php echo link_to('Logout', 'sf_guard_signout') ?>
Prawda że to proste. Jeżeli ktoś chce bardziej zainteresować tą tematyką to zapraszam do studiowania tego adresu: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/13.
Dziś zajmiemy się autentyfikacją użytkownika. I nie będę pisał skomplikowanych wierszy kodu :) bo po co skoro są pluginy :). Zaczynajmy więc:
Pierwsza sprawa to zabezpieczenia wejścia dla konkretnej aplikacji w symfony co robimy za pomocą zmiany kodu w:
apps/nazwa/config/security.yml
default:
is_secure: false //oczywiscie zmieniamy na true
Tym sposobem gdy będziecie chcieli wejść sobie po adresie na aplikacje w tym przypadku "nazwa" wyskoczy informacja iż strona nie jest dostępna publicznie.
Następnie przydałby się nam plugin. W tym celu w pierwszej kolejności sprawdźmy czy mamy zainstalowany PEAR ponieważ jest on wymagany dla następującego polecenia dla symfony:
php symfony plugin:install sfDoctrinePlugin
Jeżeli korzystamy z tego sposobu instalacji to automatycznie zostaje zmieniona
// config/ProjectConfiguration.class.php
zatem nie mamy się już czym przejmować. Jeżeli natomiast robimy to w innym sposobem to musimy pamiętać o włączeniu pluginu ręcznie co prezentuje poniżej:
// config/ProjectConfiguration.class.php class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins(array( 'sfDoctrinePlugin', 'sfDoctrineGuardPlugin' )); } }
Po zainstalowaniu pluginu wykonujemy standardowe polecenie:
php symfony doctrine:build --all --and-load --no-confirmation
Następnie zmieniamy ustawienia w settings.yml na odpowednie :
# apps/nazwa/config/settings.yml
all:
.settings:
enabled_modules: [default, sfGuardAuth]
# ...
.actions:
login_module: sfGuardAuth
login_action: signin
# ...Po tych zabiegach powinniśmy po odświeżeniu strony zobaczyć formularz logowania :) I to jest właśnie urok symfony :)
Następnie utwórzmy jakiegoś usera do logowania:
php symfony guard:create-user abc SecrestPass
php symfony guard:promote abc
Od teraz możemy posługiwać się metodą isAuthenticated() która zwara czy jesteśmy zalogowaniu czy nie:) zatem jeżeli chcemy aby tylko zalogowani wdzieli np menu to zwyczajnie w layoucie dajemy:
// apps/nazwa/templates/layout.php <?php if ($sf_user->isAuthenticated()): ?> <div id="menu">
//cos w menu :)
</div> <?php endif ?>
Jak widać prawie nie pisząc kodu można zrobić w symfony ładnie wyglądający skrypt logowania.
Pozostało jeszcze aby zalogowani użytkownicy mogli się wylogowac:
wiec dodajmy w miejscu "cos w menu" <?php echo link_to('Logout', 'sf_guard_signout') ?>
Prawda że to proste. Jeżeli ktoś chce bardziej zainteresować tą tematyką to zapraszam do studiowania tego adresu: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/13.
EXIF FILE
Dziś powiem o formacie pliku który trochę daje mi w kość a mianowicie o plikach EXIF. Jest do rozszerzenie pliku np: jpg które zawiera wiele przydatnych informacji dodatkowych do zdjęcia. Z mojego punktu widzenia najbardziej przydatnymi informacjami będą informacje zapisywane z gps czyli po prostu geotaging zdjęć.
Dzięki tym informacją będę mógł osadzić zdjęcie na mapie w punkcie w którym zostało ono zrobione.
Tak przygotowane Fotki można bezproblemowo zamieścić na mapie google dzieki portalom takim jak http://www.panoramio.com/. Jeżeli zdjęcie zawiera dane geograficzne (pozycje z GPS) zapisana w exif to automatycznie po odczytaniu zdjęcia zostanie one przydzielone do współrzędnych geograficznych.
Nie udało mi się jednak dojść jeszcze do sposobu w jakim mógłbym wyświetlić jednocześnie zdjęcie oraz trasę zapisaną w postaci plików KML.
Istnieje parser napisany dla pythona ale ja bym potrzebował coś bardziej pod php jakąś bibliotekę.
Zwracam się z prośbą do uczestników konkursu może ktoś się interesował taką tematyką ? Jeżeli tak to proszę o podpowiedz gdzie szukać odpowiedzi.
Dzięki tym informacją będę mógł osadzić zdjęcie na mapie w punkcie w którym zostało ono zrobione.
Tak przygotowane Fotki można bezproblemowo zamieścić na mapie google dzieki portalom takim jak http://www.panoramio.com/. Jeżeli zdjęcie zawiera dane geograficzne (pozycje z GPS) zapisana w exif to automatycznie po odczytaniu zdjęcia zostanie one przydzielone do współrzędnych geograficznych.
Nie udało mi się jednak dojść jeszcze do sposobu w jakim mógłbym wyświetlić jednocześnie zdjęcie oraz trasę zapisaną w postaci plików KML.
Istnieje parser napisany dla pythona ale ja bym potrzebował coś bardziej pod php jakąś bibliotekę.
sobota, 2 października 2010
symfony vs facebook
Dziś przytoczę kilka cennych uwag związanych z instalacja a właściwie uruchomieniem symfony na facebooku.
Generalnie nie jest to jakaś trudna sztuka ale jest kilka aspektów o jakich należy pamiętać podczas próby wpakowania symfony do okienka facebooka.
Pierwszą ważną sprawą jest sama konfiguracja facebooka wspominałem o niej już wcześniej ale przypomnę tylko najważniejsze rzeczy.
Musimy gdzieś umieścić aplikacje. Wiadomo przecież ze facebook na swoim portalu nie oferuje nam hostingu zatem musimy mieć jakieś miejsce w sieci gdzie przepakujemy sobie pliki symfony.
Jeśli już posiadamy takie miejsce to musimy stworzyć aplikacje w facebooku o tym pisałem na początku wiec jak ktoś nie wie jak to robić to niech przejrzy pierwsze posty. W panelu edycji aplikacji zakładce Facebook Integration podajemy ważny parametr nazwany Canvas URL. Tu znajduje się a w zasadzie zostaje wpisany adres do plików symfony znajdujących się gdzieś na "naszym" serwerze w internecie.
No i przyszedł czas na wybranie opcji wyświetlania naszej strony w portalu, do wyboru mamy FBML albo pływająca ramka. Jeżeli wybierzemy pływającą ramkę to możemy już korzystać z efektów naszej pracy ale przecież my chcemy aby tagi facebooka także były interpretowane ( <fb > ) wiec to nie jest wybór dla nas.
Wybieramy więc FBML. Wszytko pięknie no może poza faktem że po odpaleniu adresu http://apps.facebook.com/MOJA_APLIKACJA/ symfony ruszy ale bez obrazków. Wiemy już dlaczego się tak dzieje wiec szybko podajemy ścieżkę dla obrazków no i wiadomo co dalej czyli udostępnianie cache i tak dalej czyli wszystko co jest w normalnym procesie instalacji.
Niby ok ale jednak coś jest nie tak. No przecież nie możemy sobie pozwolić na to iż user będzie miał dostęp do wszystkich plików naszego frameworka przecież to mogło by być niebezpieczne !!. Zatem musimy wyciągnąć wszystkie składowe frameworka przed tak zwany public_html. Ściślej mówiąc chodzi o przechowanie plików symfony wyżej niż dostępne dla użytkownika foldery i elementy.
W moim przypadku folder który jest dla usera nazywa się public_htm. Zatem wszystkie elementy symfony (foldery) nie wliczając "web" dajemy na tym samym poziomie co public_html. Zawartość folderu web dajemy do public_html. Odświeżamy stronę i? :) i nic :D.
A to dlatego że musimy "powiedzieć symfony iż teraz folder "web" to folder public_html.
Zmiany takiej dokonamy przechodząc do config/ProjectConfiguration.class.php następni edytujemy ten plik i dopisujemy w metodzie setup następującą linie kodu:
$this->setWebDir($this->getRootDir().'/public_html');
To wystarczy do tego aby symfony wiedziało ze teraz to public_html jest właściwym folderem.
Dodatkowo należy pamiętać o zrobieniu linka w folderze public_html do obrazków. Ja to zrobiłem umieszczając w nim link o nazwie "sf" do katalogu 0:/public_html/uploads/.
W layaut należy pamiętać ze niemożna używać tagów html-owych nie możemy mieć <html> czy <body> bo już jesteśmy przecież w takiej strukturze portalu (facebooka)
Słowem końca powiem że jest jeszcze kilka elementów dotyczących prawidłowego postawienia symfony dla facebooka ale więcej informacji napisze kiedy indziej ze względy na ograniczoność czasową jaka mnie ostatnio dotyka :)
Generalnie nie jest to jakaś trudna sztuka ale jest kilka aspektów o jakich należy pamiętać podczas próby wpakowania symfony do okienka facebooka.
Pierwszą ważną sprawą jest sama konfiguracja facebooka wspominałem o niej już wcześniej ale przypomnę tylko najważniejsze rzeczy.
Musimy gdzieś umieścić aplikacje. Wiadomo przecież ze facebook na swoim portalu nie oferuje nam hostingu zatem musimy mieć jakieś miejsce w sieci gdzie przepakujemy sobie pliki symfony.
Jeśli już posiadamy takie miejsce to musimy stworzyć aplikacje w facebooku o tym pisałem na początku wiec jak ktoś nie wie jak to robić to niech przejrzy pierwsze posty. W panelu edycji aplikacji zakładce Facebook Integration podajemy ważny parametr nazwany Canvas URL. Tu znajduje się a w zasadzie zostaje wpisany adres do plików symfony znajdujących się gdzieś na "naszym" serwerze w internecie.
No i przyszedł czas na wybranie opcji wyświetlania naszej strony w portalu, do wyboru mamy FBML albo pływająca ramka. Jeżeli wybierzemy pływającą ramkę to możemy już korzystać z efektów naszej pracy ale przecież my chcemy aby tagi facebooka także były interpretowane ( <fb > ) wiec to nie jest wybór dla nas.
Wybieramy więc FBML. Wszytko pięknie no może poza faktem że po odpaleniu adresu http://apps.facebook.com/MOJA_APLIKACJA/ symfony ruszy ale bez obrazków. Wiemy już dlaczego się tak dzieje wiec szybko podajemy ścieżkę dla obrazków no i wiadomo co dalej czyli udostępnianie cache i tak dalej czyli wszystko co jest w normalnym procesie instalacji.
Niby ok ale jednak coś jest nie tak. No przecież nie możemy sobie pozwolić na to iż user będzie miał dostęp do wszystkich plików naszego frameworka przecież to mogło by być niebezpieczne !!. Zatem musimy wyciągnąć wszystkie składowe frameworka przed tak zwany public_html. Ściślej mówiąc chodzi o przechowanie plików symfony wyżej niż dostępne dla użytkownika foldery i elementy.
W moim przypadku folder który jest dla usera nazywa się public_htm. Zatem wszystkie elementy symfony (foldery) nie wliczając "web" dajemy na tym samym poziomie co public_html. Zawartość folderu web dajemy do public_html. Odświeżamy stronę i? :) i nic :D.
A to dlatego że musimy "powiedzieć symfony iż teraz folder "web" to folder public_html.
Zmiany takiej dokonamy przechodząc do config/ProjectConfiguration.class.php następni edytujemy ten plik i dopisujemy w metodzie setup następującą linie kodu:
$this->setWebDir($this->getRootDir().'/public_html');
To wystarczy do tego aby symfony wiedziało ze teraz to public_html jest właściwym folderem.
Dodatkowo należy pamiętać o zrobieniu linka w folderze public_html do obrazków. Ja to zrobiłem umieszczając w nim link o nazwie "sf" do katalogu 0:/public_html/uploads/.
W layaut należy pamiętać ze niemożna używać tagów html-owych nie możemy mieć <html> czy <body> bo już jesteśmy przecież w takiej strukturze portalu (facebooka)
Słowem końca powiem że jest jeszcze kilka elementów dotyczących prawidłowego postawienia symfony dla facebooka ale więcej informacji napisze kiedy indziej ze względy na ograniczoność czasową jaka mnie ostatnio dotyka :)
Subskrybuj:
Posty (Atom)