-S - paczka slackware (czyli coś jak Kasia)Powstanie paczuszka tgz, której zawartość możemy obejrzeć sobie dość dokładnie w mc lub innym programem pozwalającym na podejrzenie tgz-ów. Jeżeli chcemy sprawdzić gdzie ulokował się już zainstalowany program możemy podejrzeć: /var/log/packages/ --- program ---
--nodoc - bez dokumentacji (tworzy domyślną dokumentację, w tym przypadku w ogóle nie potrzebne)
-y - Nie męczy Cię zbędnymi pytaniami i na wszystkie odpowiada yes
Monday, May 21, 2007
Gdzie pójdzie po make install ?
Często chcielibyśmy mieć pewność gdzie umieści pliki make install. Ostatnio nieciekawy numer wywinęło mi qingy :| Jeżeli jesteś na etapie kompilowania źródeł to w miejscu make install możesz wydać polecenie checkinstall -S --nodoc -y:
Sunday, May 20, 2007
Gmail notifier
Trafiłem właśnie na bardzo sympatycznego gmail notifier-a:
http://gmail-notify.sourceforge.net/
Ściągnąłem źródełka. Wypakowałem wszystkie pliki do /usr/local/gmail. Dodałem do mojego ~/.zshrc:
XFCE może zapamiętywać podczas zamykania systemu sesję, czyli co jest odpalone co nie i uruchamiać to ponownie lub wchodząc w ustawienia autormatyczne uruchamianie aplikcji możesz dodać Gmail notifier-a podając: /usr/local/gmail/notifier.py
http://gmail-notify.sourceforge.net/
Ściągnąłem źródełka. Wypakowałem wszystkie pliki do /usr/local/gmail. Dodałem do mojego ~/.zshrc:
export PATH=$PATH:/usr/local/gmailWykonałem . ~/.zshrc później notifier.py i ... okazało się , że brakuje pygtk. No to szybciutko:
suWypełnieł username, password, Save user name and password (check) i mogłem się już cieszyć pięknym gmail notifierem w mojej nowej Kasi :)
updateos -i pygtk
[CTRL]+[D]
[ALT]+[F2]
/usr/local/gmail/notifier.py
XFCE może zapamiętywać podczas zamykania systemu sesję, czyli co jest odpalone co nie i uruchamiać to ponownie lub wchodząc w ustawienia autormatyczne uruchamianie aplikcji możesz dodać Gmail notifier-a podając: /usr/local/gmail/notifier.py
Saturday, May 19, 2007
Kary za reklamy
Kiedyś znajomy opowiedział mi o zamiarze kupna breloczka, który umie wyłączyć kilkaset tysięcy modeli telewizorów. Wchodzicie do MediaMarkt, stajecie przy ścianie zapełnionej gadającymi telewizorami, wyciągacie breloczek, naciskacie guziczek i ... cisza.
W perspektywie ciszy reklamowej w Media Markt spojrzałem na dzisiejsze reklamy, które "witają mnie" na strona portali internetowych. Reklama, często zajmująca 50-100% mojego ekranu i nie działający guziczek, który ją wyłącza. Ktoś powinien za to zapłacić ! Za co ? Za czas, który poświęcam, aby dotrzeć do treści, które są dla mnie w danym momencie ważniejsze aniżeli, reklama, której TEORETYCZNIE mam PRAWO nie oglądać. Ktoś narusza nie tylko moją wolność i zabiera mi mój bezcenny czas, ale dodatkowo PŁACĘ ZA TO, że ktoś mi COŚ reklamuję. Jak to płacę ? A no tak ! Kilka kilo-bajtów tekstu i kilkaset kilo-bajtów reklamy na pół strony ! Ciekaw jestem ile transferu HTTP to reklamy. Jestem prawie pewien że ponad 50%, a kto za ten transfer płaci ? Ja ! Czyj czas zżera ? Mój ! Ktoś powinien zrobić z tym porządek.
W perspektywie ciszy reklamowej w Media Markt spojrzałem na dzisiejsze reklamy, które "witają mnie" na strona portali internetowych. Reklama, często zajmująca 50-100% mojego ekranu i nie działający guziczek, który ją wyłącza. Ktoś powinien za to zapłacić ! Za co ? Za czas, który poświęcam, aby dotrzeć do treści, które są dla mnie w danym momencie ważniejsze aniżeli, reklama, której TEORETYCZNIE mam PRAWO nie oglądać. Ktoś narusza nie tylko moją wolność i zabiera mi mój bezcenny czas, ale dodatkowo PŁACĘ ZA TO, że ktoś mi COŚ reklamuję. Jak to płacę ? A no tak ! Kilka kilo-bajtów tekstu i kilkaset kilo-bajtów reklamy na pół strony ! Ciekaw jestem ile transferu HTTP to reklamy. Jestem prawie pewien że ponad 50%, a kto za ten transfer płaci ? Ja ! Czyj czas zżera ? Mój ! Ktoś powinien zrobić z tym porządek.
Wednesday, May 16, 2007
Zatruwanie switcha
Dziś razem z jednych z doktorów z uczelni na której studiuję postanowiliśmy zatruć switcha. Był to jakiś 3com, podobno miał 8MB pamięcie... Postawiliśmy dwa laptopy, na jednym na Windowsie postawiliśmy WireShark-a, na drugim zapuściliśmy Knoppix STD.
Troszkę się namęczyłem z napisaniem skryptu, który by pozwolił tego switcha zapchać. Początkowo pomysł był taki, że ponieważ do switcha podłączone były tylko dwa komputery, słać jednym ramki na jakiś lewy MAC, drugim zaś czekać, aż zacznie wyłapywać te ramki, przy czym MAC źródłowy był preparowany.
Wstępnie napisałem w bash-u prosty skrypt generujący MACi - nic trudnego... Problemy zaczęły się gdy trzeba było preparować MACi źrółowe. Chłopacy z Matrixa zapodali wersję z ifconfigiem jednak kilka dni później trafiłem na Knoppix STD z arpingiem :)
Już na samym początku okazało się jednak, że jak się wyśle na lewy MAC to on go nie ma w pamięci i wysyła wszędzie... no to 3 komputer :| by był potrzebny, ale nie. Podszyliśmy się pod jakiś dobrze znany nam MAC, puściliśmy z niego arpinga i router to łyknął ;) Mogliśmy więc słać na MAC, którego w sieci nie ma, a switch go zna i wie co z nim robić.
Okazało się, że wersja bash-a na Knoppix STD jest tak stara, że skrypt trzeba było przepisać :| (szkoda, że nie rozwijają już Knoppix STD - świetna dystrybucja ! A byłaby jeszcze lepsza, gdyby ktoś ją odświerzył) Po przepisaniu skryptu - udało się, zapodaliśmy skrypt ... i czekamy, komunikaty się pojawiają, a my czekamy.
Doszliśmy do wniosku, że tak średnio to idzie 1 na sekundę więc przy 8MB switcha przyjdzie nam czekać 1200 godzin (szacunkowo i to z dużym błędem)... Zwiększenie ilości wątków do 400 pozwoliłoby nam liczyć na 4 godziny. Dopisaliśmy pętlę while odpalającą skrypt 400 razy i aby przyśpieszyć pracę wysłaliśmy wszystko do /dev/null. A co ! Niech sobie działa ! System trochę przysiadł i zaczął działać "w zwolnionym tempie" długo zastanawiając się nad każdym ruchem myszki jednak efekt był widoczny już po 15 minutach rozmowy - WireShark został zasypany mnóstwem pakietów :)
To było piękne :)
Troszkę się namęczyłem z napisaniem skryptu, który by pozwolił tego switcha zapchać. Początkowo pomysł był taki, że ponieważ do switcha podłączone były tylko dwa komputery, słać jednym ramki na jakiś lewy MAC, drugim zaś czekać, aż zacznie wyłapywać te ramki, przy czym MAC źródłowy był preparowany.
Wstępnie napisałem w bash-u prosty skrypt generujący MACi - nic trudnego... Problemy zaczęły się gdy trzeba było preparować MACi źrółowe. Chłopacy z Matrixa zapodali wersję z ifconfigiem jednak kilka dni później trafiłem na Knoppix STD z arpingiem :)
Już na samym początku okazało się jednak, że jak się wyśle na lewy MAC to on go nie ma w pamięci i wysyła wszędzie... no to 3 komputer :| by był potrzebny, ale nie. Podszyliśmy się pod jakiś dobrze znany nam MAC, puściliśmy z niego arpinga i router to łyknął ;) Mogliśmy więc słać na MAC, którego w sieci nie ma, a switch go zna i wie co z nim robić.
Okazało się, że wersja bash-a na Knoppix STD jest tak stara, że skrypt trzeba było przepisać :| (szkoda, że nie rozwijają już Knoppix STD - świetna dystrybucja ! A byłaby jeszcze lepsza, gdyby ktoś ją odświerzył) Po przepisaniu skryptu - udało się, zapodaliśmy skrypt ... i czekamy, komunikaty się pojawiają, a my czekamy.
Doszliśmy do wniosku, że tak średnio to idzie 1 na sekundę więc przy 8MB switcha przyjdzie nam czekać 1200 godzin (szacunkowo i to z dużym błędem)... Zwiększenie ilości wątków do 400 pozwoliłoby nam liczyć na 4 godziny. Dopisaliśmy pętlę while odpalającą skrypt 400 razy i aby przyśpieszyć pracę wysłaliśmy wszystko do /dev/null. A co ! Niech sobie działa ! System trochę przysiadł i zaczął działać "w zwolnionym tempie" długo zastanawiając się nad każdym ruchem myszki jednak efekt był widoczny już po 15 minutach rozmowy - WireShark został zasypany mnóstwem pakietów :)
To było piękne :)
Sunday, May 6, 2007
Rozmyślania o MVC
Od jakiegoś już czasu ludzie męczą mnie o to abym zaczął programować używając MVC. Podobno łatwiej. Ale ja w tym, żadnego sensu nie wiedziałem ... No bo co to za sens ? pisać tylko:
<title> <?=$tytul?> </title>
czy
<title>${tytul}</title>
Jakiś piekielnie skomplikowany mechanizm, który dba o przekazywanie zmiennych do odpowiednich plików, dodatkowo o to, aby to wszystko pozamieniać, generując tylko narzuty czasowe ... więc o co chodzi ?
Ale może najpierw co to jest MVC. Za wikipedią:
Jednak nie o takie podejście w całym tym przedsięwzięciu chodzi. Aby mówić o MVC trzeba po prostu dojrzeć do niego - inaczej to będzie wciskanie ci "dobrego" rozwiązania, do którego w cale nie jesteś przekonany i jest Ci wciskane na siłę ! :)
Moim ideałem programowania jest pewien ideał nabyty z C++. Jeżeli piszę klasę, to chcę ją napisać tak, aby ktoś sobie wziął pliczek z moją klasą skopiował do swojego katalogu, includował i już mógł jej używać - jak swojej. Tak też starałem się robić w PHP - i tu pojawia się problem - oprócz PHP jest przecież ... HTML :|. No właśnie :| W C++ sprawa jest prosta, możemy nie martwić się o "prezentację danych" (pod konsolą) robimy cout. A jeszcze lepiej zwracamy po prostu wynik nic nie wyświetlając. Jednak w PHP Dochodzi HTML. Opowiem wam historyjkę z życia wziętą.
Musiałem kiedyś przerobić portal oparty o XOOPSa. Chodziło o zmianę layoutu. Kiedy zagłębiłem się w kod okazało się, że jego fragmentu porozrzucane są po najróżniejszych zakamarkach tabel baz danych ... Uwierzcie ! grzebanie i dochodzenie w jakim rekordzie znajduje się ten konkretny fragment MENU doprowadzało mnie do szału ! A wyobraźcie sobie, że poza tym kod HTML mógłby być porozrzucany po najróżniejszych metodach używanych tam klas... po prostu masakra ! W takiej sytuacji prosty plik HTML z jasno powstawianymi elementami pochodzącymi z PHP byłby idealny zamiast grzebanie się po metodach klas i bazie danych - udręka !
O wiele łatwiej jest stworzyć własny formularz do bazy danych mając:
<form action="${action}" method="${method}">
<fieldset>
<legend>${tytul}</legend>
<label>${login}: <input name="${login}" type="text"></label>
</fieldset>
</form>
niż jakąś czarną skrzynkę pod tytyłem:
$login->pokaz_formularz();
Niby też ładnie, ale dla osoby, która chciałaby nasz formularz zupełnie przerobić (bo nie pasuje Jej do jego layout) kompletnie nie pasuje. Wtedy znacznie łatwiej jest powstawiać sobie kilka pól (nasze zmienne ${nazwa}) w nowe miejsca, do przez siebie przygotowanego pliku niż szukać po klasach i bazie danych - gdzie on mógł to wcisnąć ?
A więc klasa musi się już tylko zająć przetworzeniem danych i wrzuceniem ich w odpowiedni szablon. Może to wyglądać na przykład tak:
$zmienne = array {
'tytul' => 'Moje MVC',
'nazwa' => 'firma',
}
$controller->parse('formularz.html', $zmienne);
No i tu pojawia się kolejny element. Kontroler - czyli element, który zajmie się włożeniem odpowiednio przez nas wcześniej napisanych zmiennych w odpowiedni szablon HTML.
Z praktycznego punktu widzenia wygląda to tak:
No właśnie i tu pojawia się kolejna kwestia. Framework. O co chodzi ? Myślę, że wiele osób pisząc o MVC zaczyna pisać o jakimś konkretnym frameworku i przez to wprowadza tylko bałagan, gdyż framework to pojęcie o wiele szerszym znaczeniu.
Framework to tak po ludzki napisany w jakimś języku mechanizm, zbiór biblitotek, którego używa się jak języka programowania... czyli buduje się w opraciu o nie swój kod. To znaczy tak jakbyś napisał swój własny język programowania w PHP i go opublikował. Na początku wydawało mi się to głupotą do kwadratu ! Po co mi język napisany w PHP do obsługi PHP. Żadnych więcej możliwości nie daje, a tylko powoduje, że wszystko działa wolniej ... głupie. A jednak nie zawsze, tylko trzeba wiedzieć kiedy z niego korzystać, a kiedy nie. A powodów może być kilka.
Frameworki pisane są do różnych języków programowania np. do JavaScript i jedną z korzyści z nich wynikających opiszę właśnie na tym przykładzie. Dwa dobrze znane mi frameworki w JavaScript to jquery i prototype. Ładuje się do przeglądarki pliczek w poprzez na przykład i ... pisząc w JavaScript od tej pory ma się dwie możliwości. Albo używamy JavaScript, albo używamy framework-a...
Przykładowy kod, który powoduje zniknięcie elementu na stronie (będzie to element ) w jquery wygląda następująco.
$('div.cos').hide('slow');
i tyle ! Proste nie ? Teraz zastanów się. Gdybyś nie używał jquery jak chciałbyś to zrobił ? Ja nie wiem... Jednak wiem jedno - znając burzliwe dzieje przeglądarek internetowych pisząc w JavaScript wcześniej czy później natknąłbym się na moment, w którym coś pod konkretną przeglądarką przestałoby działać ... :( Byłbym wtedy zmuszony do próby zaprogramowania tego samego na dwa, a może nawet trzy czy cztery (a może nawet więcej) sposobów, tylko po to aby obsłużyły to wszystkie przeglądarki... Powiedzmy, że się udało - napisałem skrypt... przychodzi rok 2008 i na rynku pojawia się kIEpska 8 nie zgodna z niczym ... i mój skrypt nie działa :( i co znowu siadam do kodu i rzeźbię ....
I tu pojawia się nasz framework. Działa jak język programowania, czyli pozwala nam pisać program... pod spodem jednak siedzą rzeczywiste funkcje JavaScript, które wszystko robią za nas :) Jaki jest z tego plus - nie my, ale twórcy frameworka zadręczają się problemem "nie działa na nowej przeglądarce :(" My piszemy nasz kod RAZ, wrzucamy na stronę, a o zgodność i całą resztę martwi sie framework :) i działa. Takie rozwiązanie (w przypadku JavaScript) ma wiele więcej plusów. Wymienię kilka:
Dlatego wybierając framework należy zwrócić uwagę na kilka drobiazgów:
Dodatkowo w JS frameworki mogą oferować obsługę fajnych efektów, animacji, składnię dużo przejrzystrzą i prostą aniżeli samo JS (dużo łatwiej czytać kod), kod może być w nich krótszy i bardziej zwięzły. Często framework posiada dodatkowe możliwości i dostępne w sobie użyteczne algorymty, których na próżno szukać w suchym JavaScript. Nie musimy wtedy pisać własnych funkcji. Przykładowo w jquery obsługa AJAXa jest bajecznie prosta a kod obsługujący go jest bajecznie prosty, przejrzysty i pisze się całkiem przyjemnie :) Nie martwię się o to, że AJAX w IE obsługiwany jest totalnie inaczej niż w FireFox czy w Operze, nie muszę też zagłębiać się też wszczegóły techniczne i sposób działania. Piszę sobie:
$('div.tresc').load('rozdzial.php?rozdzial=1');
a w uzyskanym dzięki frameworkowi czasie piję sobie kakao ;)
Istnieją też frameworki do PHP. Starają się one eliminować niedogodności języka oraz platform, na których jest uruchamiany. Dostarczają także użytecznych mechanizmów, które często są wykorzystywane w programowaniu, a które nie jeden z nas musiałby opracowywać na własną rękę:
Wszystko zależy od stopnia skomplikowania naszego projektu. Jeżeli tworzymy prostą stronę internetową prawdopodobnie framework będzie tylko zawracaniem głowy i może nam tylko utrudnić to co jest proste. Jeżeli jednak decydujemy się na bardziej skomplikowany projekt, używanie MVC pozowli wywalić z kodu klas zbędnych HTML (który często zawala miejsce) co sprawi, że kod w metodach stanie się bardziej jasny, przejrzysty i czysty. Poskutkuje to łatwiejszym zrozumieniem tego co robi dana metoda oraz zwiększy czytelność kodu a przez to ułatwi modyfikowanie go ... co tylko się opłaci ! Czytając kod klas skupimy się na tym co klasa robi i co zwraca, a uwolnimy się od zastanawiania się nad tym jak to wyświetla co zdecydowanie pozwoli nam skoncentrować naszą uwagę na rozwiązaniu problemu.
Jeżeli już decydujemy się na skorzystanie z MVC następuje pytanie, czy piszemy własne klasy do obsługi tego co potrzebujemy ponieważ na przykład używamy tylko MVC czy może przydadzą nam się dodatkowe mechanizmy pozwalające na niezależność od rodzaju bazy danych (nie wiemy na czym będziemy pracować), dodatkowe opracowane już przez kogoś mechanizmy czy w końcu niezależność od wersji PHP :)
<title> <?=$tytul?> </title>
czy
<title>${tytul}</title>
Jakiś piekielnie skomplikowany mechanizm, który dba o przekazywanie zmiennych do odpowiednich plików, dodatkowo o to, aby to wszystko pozamieniać, generując tylko narzuty czasowe ... więc o co chodzi ?
Ale może najpierw co to jest MVC. Za wikipedią:
MVC (ang. Model-View-Controller - Model-Widok-Sterownik) to wzorzec projektowy w informatyce, którego głównym założeniem jest wyodrębnienie trzech podstawowych komponentów aplikacji:Czyli tak dla ludzi. Chodzi o to, aby jak najbardziej oddzielić logikę prezentacji PHP od logiki kontrolera HTML (tak w dużym uproszczeniu). No tak miało być dla ludzi. Otóż chodzi o to aby oddzielić to co skrypt robi od tego jak skrypt to pokazuje. Ja sam sobie mówiłem: "Ale co to za problem ... przecież <php? include ('licznik.php'); ?> czy <php? $licznik->show(); ?> nikomu jeszcze nie zaszkodziło !".
- modelu danych,
- interfejsu użytkownika,
- logiki sterowania
Jednak nie o takie podejście w całym tym przedsięwzięciu chodzi. Aby mówić o MVC trzeba po prostu dojrzeć do niego - inaczej to będzie wciskanie ci "dobrego" rozwiązania, do którego w cale nie jesteś przekonany i jest Ci wciskane na siłę ! :)
Moim ideałem programowania jest pewien ideał nabyty z C++. Jeżeli piszę klasę, to chcę ją napisać tak, aby ktoś sobie wziął pliczek z moją klasą skopiował do swojego katalogu, includował i już mógł jej używać - jak swojej. Tak też starałem się robić w PHP - i tu pojawia się problem - oprócz PHP jest przecież ... HTML :|. No właśnie :| W C++ sprawa jest prosta, możemy nie martwić się o "prezentację danych" (pod konsolą) robimy cout. A jeszcze lepiej zwracamy po prostu wynik nic nie wyświetlając. Jednak w PHP Dochodzi HTML. Opowiem wam historyjkę z życia wziętą.
Musiałem kiedyś przerobić portal oparty o XOOPSa. Chodziło o zmianę layoutu. Kiedy zagłębiłem się w kod okazało się, że jego fragmentu porozrzucane są po najróżniejszych zakamarkach tabel baz danych ... Uwierzcie ! grzebanie i dochodzenie w jakim rekordzie znajduje się ten konkretny fragment MENU doprowadzało mnie do szału ! A wyobraźcie sobie, że poza tym kod HTML mógłby być porozrzucany po najróżniejszych metodach używanych tam klas... po prostu masakra ! W takiej sytuacji prosty plik HTML z jasno powstawianymi elementami pochodzącymi z PHP byłby idealny zamiast grzebanie się po metodach klas i bazie danych - udręka !
O wiele łatwiej jest stworzyć własny formularz do bazy danych mając:
<form action="${action}" method="${method}">
<fieldset>
<legend>${tytul}</legend>
<label>${login}: <input name="${login}" type="text"></label>
</fieldset>
</form>
niż jakąś czarną skrzynkę pod tytyłem:
$login->pokaz_formularz();
Niby też ładnie, ale dla osoby, która chciałaby nasz formularz zupełnie przerobić (bo nie pasuje Jej do jego layout) kompletnie nie pasuje. Wtedy znacznie łatwiej jest powstawiać sobie kilka pól (nasze zmienne ${nazwa}) w nowe miejsca, do przez siebie przygotowanego pliku niż szukać po klasach i bazie danych - gdzie on mógł to wcisnąć ?
A więc klasa musi się już tylko zająć przetworzeniem danych i wrzuceniem ich w odpowiedni szablon. Może to wyglądać na przykład tak:
$zmienne = array {
'tytul' => 'Moje MVC',
'nazwa' => 'firma',
}
$controller->parse('formularz.html', $zmienne);
No i tu pojawia się kolejny element. Kontroler - czyli element, który zajmie się włożeniem odpowiednio przez nas wcześniej napisanych zmiennych w odpowiedni szablon HTML.
Z praktycznego punktu widzenia wygląda to tak:
- HTML - zajmuje się formą w jakiej prezentowane są dane.
- PHP - naprawdę zajmuje się tylko obróbką danych.
- Jakiś parser - czyli klasa (albo funkcja, czy co tam sobie chcecie) zajmuje się tym, żeby włożyć suche zmienne PHP w odpowiednie miejsca w pliku HTML.
No właśnie i tu pojawia się kolejna kwestia. Framework. O co chodzi ? Myślę, że wiele osób pisząc o MVC zaczyna pisać o jakimś konkretnym frameworku i przez to wprowadza tylko bałagan, gdyż framework to pojęcie o wiele szerszym znaczeniu.
Framework to tak po ludzki napisany w jakimś języku mechanizm, zbiór biblitotek, którego używa się jak języka programowania... czyli buduje się w opraciu o nie swój kod. To znaczy tak jakbyś napisał swój własny język programowania w PHP i go opublikował. Na początku wydawało mi się to głupotą do kwadratu ! Po co mi język napisany w PHP do obsługi PHP. Żadnych więcej możliwości nie daje, a tylko powoduje, że wszystko działa wolniej ... głupie. A jednak nie zawsze, tylko trzeba wiedzieć kiedy z niego korzystać, a kiedy nie. A powodów może być kilka.
Frameworki pisane są do różnych języków programowania np. do JavaScript i jedną z korzyści z nich wynikających opiszę właśnie na tym przykładzie. Dwa dobrze znane mi frameworki w JavaScript to jquery i prototype. Ładuje się do przeglądarki pliczek w poprzez na przykład i ... pisząc w JavaScript od tej pory ma się dwie możliwości. Albo używamy JavaScript, albo używamy framework-a...
Przykładowy kod, który powoduje zniknięcie elementu na stronie (będzie to element ) w jquery wygląda następująco.
$('div.cos').hide('slow');
i tyle ! Proste nie ? Teraz zastanów się. Gdybyś nie używał jquery jak chciałbyś to zrobił ? Ja nie wiem... Jednak wiem jedno - znając burzliwe dzieje przeglądarek internetowych pisząc w JavaScript wcześniej czy później natknąłbym się na moment, w którym coś pod konkretną przeglądarką przestałoby działać ... :( Byłbym wtedy zmuszony do próby zaprogramowania tego samego na dwa, a może nawet trzy czy cztery (a może nawet więcej) sposobów, tylko po to aby obsłużyły to wszystkie przeglądarki... Powiedzmy, że się udało - napisałem skrypt... przychodzi rok 2008 i na rynku pojawia się kIEpska 8 nie zgodna z niczym ... i mój skrypt nie działa :( i co znowu siadam do kodu i rzeźbię ....
I tu pojawia się nasz framework. Działa jak język programowania, czyli pozwala nam pisać program... pod spodem jednak siedzą rzeczywiste funkcje JavaScript, które wszystko robią za nas :) Jaki jest z tego plus - nie my, ale twórcy frameworka zadręczają się problemem "nie działa na nowej przeglądarce :(" My piszemy nasz kod RAZ, wrzucamy na stronę, a o zgodność i całą resztę martwi sie framework :) i działa. Takie rozwiązanie (w przypadku JavaScript) ma wiele więcej plusów. Wymienię kilka:
- Nie obchodzi nas jak obsługiwana jest wersja JS w przeglądarce.
- Nie martwimy się gdy wychodzi nowy standard JS - o to martwią się twórcy frameworka.
- Nie martwimy się gdy wychodzi nowa przeglądarka. Czekamy aż wyjdzie nowa wersja frameworka, podmieniamy jeden pliczek z nim zawarty i wszystko działa :)
Dlatego wybierając framework należy zwrócić uwagę na kilka drobiazgów:
- Jak często aktualizowany jest framework i czy w ogóle jest jeszcze rozwijany.
- Jak wygląda jego dokumentacja i czy jest często wykorzystywany.
Dodatkowo w JS frameworki mogą oferować obsługę fajnych efektów, animacji, składnię dużo przejrzystrzą i prostą aniżeli samo JS (dużo łatwiej czytać kod), kod może być w nich krótszy i bardziej zwięzły. Często framework posiada dodatkowe możliwości i dostępne w sobie użyteczne algorymty, których na próżno szukać w suchym JavaScript. Nie musimy wtedy pisać własnych funkcji. Przykładowo w jquery obsługa AJAXa jest bajecznie prosta a kod obsługujący go jest bajecznie prosty, przejrzysty i pisze się całkiem przyjemnie :) Nie martwię się o to, że AJAX w IE obsługiwany jest totalnie inaczej niż w FireFox czy w Operze, nie muszę też zagłębiać się też wszczegóły techniczne i sposób działania. Piszę sobie:
$('div.tresc').load('rozdzial.php?rozdzial=1');
a w uzyskanym dzięki frameworkowi czasie piję sobie kakao ;)
Istnieją też frameworki do PHP. Starają się one eliminować niedogodności języka oraz platform, na których jest uruchamiany. Dostarczają także użytecznych mechanizmów, które często są wykorzystywane w programowaniu, a które nie jeden z nas musiałby opracowywać na własną rękę:
- Często nie wiemy na jakim PHP będziemy pracować, albo przychodzi nam zmienić serwer. Wszystko było napisane w PHP 5, funkcje czystego DOMu działały świetnie a tu klops :( usługodawca zapodaje na serwer PHP4 a my ... kwiczymy. Może przyjść nam tutaj z pomocą framework ! Jeżeli jest tak zaprogramowany piszemy mu wtedy "php5" i kod napisany we frameworku działa używając funkcji z php5. Zmienia się sytuacja musi działać na php4 podajemy frameworkowi "php4" i działa na php4. Zmieniamy tylko jedną literkę ! zamiast kilkuset linijek aplikacji.
- Frameworki, także te w PHP mogą wspomagać programowanie od strony baz danych czy AJAX-a (np. symfony wspiera AJAX). Przykładowo baza danych - zmieniamy silnik z MySQL na Postgresa ... Framework może oferować nam swoją własną klasę dostępu do bazy danych, która działa tak samo bez względu na to z jakiego mechanizmu bazodanowego korzystamy.
- Jeżeli pojawi się PHP 6 ... to my nadal pracujemy w naszym frameworku a o poprawność męczą się ludzie tworzący go.
- Często framework wspomaga programowanie w MVC udostępniając nam klasy, które w sprytny i zgrabny sposób potrafią przetransportować informacje z klasy do odpowiedniego szablonu w PHP i powstawiać wszystko na swoje miejsce.
Wszystko zależy od stopnia skomplikowania naszego projektu. Jeżeli tworzymy prostą stronę internetową prawdopodobnie framework będzie tylko zawracaniem głowy i może nam tylko utrudnić to co jest proste. Jeżeli jednak decydujemy się na bardziej skomplikowany projekt, używanie MVC pozowli wywalić z kodu klas zbędnych HTML (który często zawala miejsce) co sprawi, że kod w metodach stanie się bardziej jasny, przejrzysty i czysty. Poskutkuje to łatwiejszym zrozumieniem tego co robi dana metoda oraz zwiększy czytelność kodu a przez to ułatwi modyfikowanie go ... co tylko się opłaci ! Czytając kod klas skupimy się na tym co klasa robi i co zwraca, a uwolnimy się od zastanawiania się nad tym jak to wyświetla co zdecydowanie pozwoli nam skoncentrować naszą uwagę na rozwiązaniu problemu.
Jeżeli już decydujemy się na skorzystanie z MVC następuje pytanie, czy piszemy własne klasy do obsługi tego co potrzebujemy ponieważ na przykład używamy tylko MVC czy może przydadzą nam się dodatkowe mechanizmy pozwalające na niezależność od rodzaju bazy danych (nie wiemy na czym będziemy pracować), dodatkowe opracowane już przez kogoś mechanizmy czy w końcu niezależność od wersji PHP :)
Saturday, May 5, 2007
Moje programy - Linux
Komunikatory:
Ekg2 - świetnie mi się go używa. Jest prosty i po prostu działa. Obsługuje mi pocztę (gmail), jabbera, IRCa, Tlena i GaduGadu. Jest po prostu idealny.Przeglądarki:
Pidgin - świetny komunikator, który potrafi obsłużyć bardzo wiele sieci. Estetycznie wykonany pod GTK na Kasi wygląda naprawdę bomba !
Kadu - Nie trzeba przedstawiać. Przeszkadza mi tylko to, że napisany jest pod QT, ale to dla mnie w sumie jego jedyna wada, wada związana z estetyką - a dokładniej Jej brakiem.
Psi (daisy) - Świetnie nadaje się do Jabbera. Sam używam na chromie.
Skype - Znajomi i rodzice używają, więc czemu nie ja :) w sumie miło się gada :)
Opera, Firefox -nie trzeba przedstawiać.Odtwarzacz muzyki:
IEs4linux - używam do testowania stronek internetowych pod Linuksem - bardzo wygodne.
MOC - po prostu urzekł mnie swoją prostotą i genialnym rozwiązaniem - klient serwer. Jak doinstalować zgodnie ze wskazówki na stronie dodatkowe kodeki to można posłuchać muzyki w najbardziej pstrokatych formatach.Inne multimedia:
AmaroK - Lubię to w jaki sposób kataloguje muzykę, jak na mnie zbyt ociężały. Na dzień dzisiejszy używam go tylko do słuchania radia internetowego do momentu, w którym nie poprawią MOCa aby też to potrafił.
mplayer - razem z wtyczką do FireFox-a po prostu super ! Odtwarzam prawie wszystko.Edytory programistyczne:
VLC - wiem, że mogę na nim polegać. Czasem nie działają mi pliki WMP ... wtedy używam VLC i idzie jak burza. Poza tym ma świetne opcje do streamingu :) mi oczywiście nie potrzebne, ale może komuś się przydadzą :)
vim - podoba mi się jego funkcjonalność i kolorowanie składni, umie sprawnie sprawdzać pisownię ASPELLem - w sumie wszystko czego człowiekowi do szczęścia potrzeba.Klienci FTP:
Eclipse (dokładnie PDT - dedykowane dla PHP) - jak na mój komputer do bólu ociężały, ale wybajerzony. Podoba mi się wsparcie dla wpisywanych funkcji, dostęp do manuala oraz menadżer klas - bardzo pomaga przy pisaniu kodu.
Bluefish - świtny edytor, jednak jego głównym mankamentem jest brak uzupełniania składni poleceń oraz strasznie brakuje mi wbudowanego klienta FTP.
Kate - Lekki, napisany w QT edytor. Najwygodniejsze jest to, że jak każda aplikacja w QT umie obsłużyć prawie każdy protokół, który się Jej zaserwuje - to jest bardzo wygodne. Wkurza mnie tylko jego tempota na zapisywanie stanu środowiska pracy i uparte proszenie o hasło do kont zdalnych przy uruchamianiu.
Quanta Plus - rozbudowana wersja Kate dziedzicząca po niej swoje wady i zalety ! Dużo bardziej rozbudowana pod kątem tworzenia stron www.
gftp - po prostu lekki i przyjemny w użyciu, typowy, dwu panelowy klient FTP.Menadżer logowania:
konqueror - dzięki obsłudze protokołów zaimplementowanej w QT niesamowicie wygodnie używa się go ponieważ zdalny system plików jest transparentny i używa się go jak lokalnego.
qingy - świetne możliwości graficzne, fajne motywy i możliwość stworzenia naprawdę WŁASNEGO niepowtarzalnego ekranu logowania, także do konsoli :) jest naprawdę świetny !Pulpit zdalny:
rdesktop - świetny sposób na dobranie się do swojego Windowsowego przyjaciela :)Grafika:
JAlbum - świetny program do generowania miniaturek - nic dodać, nic ująć :)Menadżer plików:
GIMP - Darmowy program do obróbki grafiki - bardzo użyteczny :)
GTKSee - świetny program do pokazu slajdów.
GQView - genialnie nadający się do wybierania zdjęć programie z kapitalną opcją kopiowania aktualnie oglądanego zdjęcia do wcześniej ustalonego katalogu.
Thunar - świetne podglądy plików i nie do pobicia system masowej zmiany nazw plików :) oraz świetna możliwość dodawania swoich miejsc w panelu po lewej stronie.
Konqueror - nie do przebicia, wszystko co QT oferuje znajduje się tutaj - trochę przeciążony, ale obsługuje kapitalne podglądy, metody sortowania i dostępu do zdalnych zasobów.
Sunday, April 22, 2007
Konfiguracja mojego vim-a
Nie chcę was zanudzać szczegółami. W sieci dostępnych jest mnóstwo wspaniałych opisów do konfiguracji vim-a. Podaję tutaj tylko swój plik konfiguracyjnych i kilka ciekawych linków:
Wikibooks:
http://pl.wikibooks.org/wiki/Vim
Seria artykułów vim dla PHP [eng]:
http://schlitt.info/applications/blog/index.php?/archives/278-Comfortable-PHP-editing-with-VIM.html
http://schlitt.info/applications/blog/index.php?/archives/283-Comfortable-PHP-editing-with-VIM-2.html
http://schlitt.info/applications/blog/index.php?/archives/331-Comfortable-PHP-editing-with-VIM-3.html
http://schlitt.info/applications/blog/index.php?/archives/372-Comfortable-PHP-editing-with-VIM-4.html
http://schlitt.info/applications/blog/index.php?/archives/372-Comfortable-PHP-editing-with-VIM-4.html
http://schlitt.info/applications/blog/index.php?/archives/488-Comfortable-PHP-editing-with-VIM-5.html
Dodatkowe skrypt dla programistów PHP:
http://www.vim.org/scripts/script.php?script_id=1120
http://www.vim.org/scripts/script.php?script_id=967
Strona oficjalna:
http://www.vim.org/
Pisanie kodu PHP pod vim-em:
http://leon.w-wa.pl/texts/vim-php.php
Najlepszy artykuł o vim-e jaki czytałem - dla programistów C:
http://users.uj.edu.pl/~ufkapano/linux/cz3konsola/lp-vim.html
Vim dla PHP po polsku:
set nu " Włączamy numerowanie liniiLinki:
set softtabstop=3 " Wcięcie [TAB] ustawione na 3 spacje
set shiftwidth=3 " Wcięcie używając [>]
set tabstop=3 " Wcięcie [TAB] na sztywno w plikach już wcześniej edytowanych
if &t_Co > 2 || has("gui_running") " Jeżeli tylko dostępone są kolory
syntax on " Włącz podświetlanie składni
set hlsearch " Włącz podświetalnie wyszukiwania
endif
set nobackup " Nie chcemy plików backupowych
set autoindent " Kontrola wcięć: Takie samo wcięcie dla kolejnej linii
" Rozpoznawanie typów plików przez vim-a i właściwe podświetalnie składni
" Możliwość używania wtyczek typów plików pomagających
" Wykorzystywaie reguł automatycznego robienia wcięć
filetype plugin indent on
set linebreak " Łamenie wierszy kiedy nie mieszczą się na ekranie
set nowrap " Tekst po dojściu do niewidocznej części tekstu zostaje przesunięty
" Rozpoznawania znaków tabulacji i odstępu
" set list
" set listchars=tab:>-,trail:=
" Ładne wcięcia dla programowania w języku C
" set cindent shiftwidth=3
" Kolorowanie składni XHTML i SQL wewnątrz stringów w plikach PHP
let php_sql_query = 1 " Koloruj SQL w stringach
let php_htmlInStrings = 1 " Koloruj HTML w stringach
let use_xhtml = 1 " Używaj XHTML-a
" Pokazywanie tego co się wpisuje przy wyszukiwaniu /
set incsearch
let spell_executable = "aspell"
let spell_language_list = "polish,english"
let spell_markup_ft = "html,php,xhtml,dhtml,tex,mail,help,text"
let spell_auto_type = "tex,mail,text,html,sgml,otl,cvs,none"
command! Gcc !gcc % -o %.out
command! Run !./%.out
command Php :!php %
" Kodowanie
set encoding=iso-8859-2 " Kodowanie
set fileencoding=iso-8859-2 " Kodowanie pliu
set termencoding=iso-8859-2 " Kodowanie termianala
" Koloruj komentarze na jasno zielono
" highlight Comment ctermfg=lightgreen
"set showmatch
Wikibooks:
http://pl.wikibooks.org/wiki/Vim
Seria artykułów vim dla PHP [eng]:
http://schlitt.info/applications/blog/index.php?/archives/278-Comfortable-PHP-editing-with-VIM.html
http://schlitt.info/applications/blog/index.php?/archives/283-Comfortable-PHP-editing-with-VIM-2.html
http://schlitt.info/applications/blog/index.php?/archives/331-Comfortable-PHP-editing-with-VIM-3.html
http://schlitt.info/applications/blog/index.php?/archives/372-Comfortable-PHP-editing-with-VIM-4.html
http://schlitt.info/applications/blog/index.php?/archives/372-Comfortable-PHP-editing-with-VIM-4.html
http://schlitt.info/applications/blog/index.php?/archives/488-Comfortable-PHP-editing-with-VIM-5.html
Dodatkowe skrypt dla programistów PHP:
http://www.vim.org/scripts/script.php?script_id=1120
http://www.vim.org/scripts/script.php?script_id=967
Strona oficjalna:
http://www.vim.org/
Pisanie kodu PHP pod vim-em:
http://leon.w-wa.pl/texts/vim-php.php
Najlepszy artykuł o vim-e jaki czytałem - dla programistów C:
http://users.uj.edu.pl/~ufkapano/linux/cz3konsola/lp-vim.html
Vim dla PHP po polsku:
Subscribe to:
Posts (Atom)