Autor wpisu: m1chu, dodany: 22.12.2008 03:10, tagi: css
Dla zwykłego użytkownika Internet Explorer to po prostu pierwsza linia dostępu do Internetu. Nie każdy z nich wie jednak, że jest to linia stosunkowo mało bezpieczna i niestabilna. Wiele mówi się o istniejących już od wielu lat i ciągle rozwijanych alternatywach. I pomimo, że sporo osób skusiło się już na wymianę używanej przeglądarki to rynek nie tylko najnowszej, ale i starszych odsłon IE jest nadal prężny. Zbyt prężny, co najbardziej odbija się na twórcach witryn internetowych. Niepodporządkowanie się standardom powoduje, że często aby praca wychodząca spod ich ręki była prawidłowo interpretowana przez przeglądarkę Microsoftu trzeba użyć pewnego typu zamienników...
Dlaczego dyskryminuję IE?
Bo mam przez tą przeglądarkę więcej pracy. Pracy której by nie było, gdyby wielce wykształceni, po jeszcze większych pod względem stopnia prestiżu uczelniach programiści potrafili "sklepać" ten twór porządnie, wg. istniejących od wielu lat standardów. I nie tylko mi to przysparza nerwów. Wiem, wiem - za chwilę znajdzie się tutaj jakiś specjalista z ogromnej korporacji developerskiej który wytknie mi, że nie szanuję przez to swoich klientów. Ich akurat traktuję poważnie i poświęcam swój czas w takiej ilości, aby zrobić co ma być wykonane porządnie. W hobbistycznych projektach powiem dobitnie i szczerze... w pewnym stopniu lekceważę użytkowników tegoż browsera. Przynajmniej tych którzy świadomie go używają i co najmniej w wersjach niższych niż siódemka. Bo z całej serii chłamu którą wydała korporacja z Redmond tylko ostatnia, "stabilna" (z nazwy) wersja choć odrobinę pokrywa się z wyznaczonymi regułami. Użytkownikom wersji szóstej... współczuję, a ci którzy z premedytacją korzystają z jeszcze starszych odsłon nie zasługują nawet na to.
Żeby nie być gołosłownym wypadałoby podać kilka przyczyn moich ostrych słów.
- ilość wykrywanych luk i prędkość ich łatania jest niekiedy zastraszająco długa - przykładem są tutaj niektóre błędy opisane na Secunii (dla IE7 w tym przypadku).
- fakt braku wsparcia dla wersji niższych niż szósta tej przeglądarki, a co za tym idzie niełatanie dziur wykrywanych w nich (niemiło byłoby wstać kiedyś rano i zobaczyć, że konto bankowe z którego korzystaliśmy dzień wcześniej poprzez przeglądarkę z Redmond jest puste, prawda?).
- pomimo zrobienia kilku kroków w przód nadal MSIE jest jednym z wolniejszych tego typu rozwiązań.
- jest wiele alternatyw takich jak Firefox, Opera (recenzja Opery 9.6x), czy Safari. Są one proste w obsłudze, wręcz intuicyjne, a dzięki zaimplementowanym, dodatkowym modułom, czy wtyczkom potrafią w znaczny sposób pomóc w surfowaniu po sieci.
- alternatywne przeglądarki względnie poprawnie interpretują standardy sieciowe dotyczące wyświetlania stron przez co nigdy nie zobaczysz prawidłowo napisanej strony w niepoprawnie ułożonym stylu.
To tylko namiastka różnic. W sieci znajduje się wiele artykułów pokazujących wyższość przeglądarek, jeszcze kilka lat temu niszowych od tej promowanej przez amerykańskiego giganta. Dlatego nawracajcie swoich znajomych, bo w tym wypadku naprawdę "pozornie inne" znaczy lepsze...
Nie w jeden dzień Rzym zbudowano...
Pomimo kilku słów mojej dezaprobaty, i wielu przeszłych lat negatywnych opinii innych ludzi nie da się oczywiście z dnia na dzień nawrócić wszystkich "niewiernych" :] Dlatego meritum dzisiejszego wpisu będzie tematyka komentarzy warunkowych i haków dla "zbuntowanej" przeglądarki.
Różne typy komentarzy.
Ukryte komentarze warunkowe
Od wersji 5 Internet Explorer obsługuje ukryte (pozytywne) komentarze warunkowe (z angielskiego downlevel-hidden (positive) conditional comments). Obsługuje, ale tylko w wersji pod Windowsem (IE/Win), pod Macintoshem już nie (IE/Mac). W zależności od treści w nich zawartych są one widzialne lub nie przez daną przeglądarkę. Jest to szczególnie przydatne jeżeli dany element strony musimy inaczej opisać w IE, niż w jej zamiennikach. Za pewnie sami twórcy zorientowali się wtedy jaki dziki twór stworzyli i choć ciut chcieli się zrehabilitować pozwalając webmasterom chociażby w nadmiarowy sposób tworzyć strony zgodne z ich "dziełem".
PLAIN TEXT CODE:- <!--[if IE]>
- kod pomiędzy tymi komentarzami zadziała tylko w odsłonach IE
- <![endif]-->
Oto przykład najprostszego zastosowania komentarzy. Można ją wykorzystać np. w sekcji head
w celu zaimportowania arkusza stylów wykorzystywanego przez produkt z Doliny Krzemowej.
Autor wpisu: Athlan, dodany: 20.12.2008 15:00, tagi: zend_framework
Pisząc nowy projekt natknąłem na problem z procesem uploadu filmiku do serwisu YouTube. Sam upload jest bardzo łatwy do napisania z Zend_Gdata_YouTube - przykład można znaleźć w manualu. Myślę, że zainteresowani przeczytają manual i wszystko będzie jasne. Więc jeżeli to takie proste, to w czym problem?
Zakładamy, że userzy uloadują filmiki bezpośrednio na nasz serwis. Nasz serwer ma za zadanie:
- Skompresować video i zapisać go w formacie flv.
- Nałożyć watermark.
- Wysłać obrobiony film do serwisu Youtube logując się na zdefiniowane przez użytkownika konto lub założone przez administratora strony.
Pierwsze 2 kroki wykonają się błyskawicznie w porównaniu do trzeciego. Kompresja i nałożenie watermarku na 30 megowy plik z wykorzystaniem FFMPEG to nic nadzwyczajnego. Natomiast wysyłka pliku na serwery Youtube’a może zawiesić apache’a, gdy jest ich kilka.
Rozwiązanie? Wpadłem na pomysł, aby upload filmików ustawiony był w pewnego rodzaju kolejce, która uruchamiana by była co minutę (cron), a czas jednego wysłania elemntu nie mógłby przekroczyć 50 sekund. Oczywiście takie działanie uruchamiałoby swój osobny proces apache’a. Ten sposób jest ograniczony dwoma limitami: wielkością pliku oraz czasem jego uploadu na serwer (jednocześniem interwałem uruchamiania kolejki).
Autor wpisu: Diabl0, dodany: 19.12.2008 21:53, tagi: zend_framework, php
Tym razem zadanie wydawało się banalne - ułatwić życie użytkownikom umożliwiając im masowe drukowanie zleceń raz na jakiś czas, zamiast przy każdym nowym zleceniu. Zlecenia w formacie PDF były zapisywane do plików. Teraz wystarczyło tylko połączyć te kilka/naście plików w jeden wielostronnicowy PDF (użytkownicy powiesili by mnie za jaja jakby musieli klikać po koleji każdy PDF i klikać “Drukuj”). Tylko…
Pierwszy pomysł jaki mi się nasunął to Zend_Pdf. Widziałem tam i Zend_Pdf_Page, i możliwość wczytania gotowego pliku. Prawie się zdziwiłem na myśl że w końcu ten IMHO bezcelowy komponent Zend_Pdf do czegoś się przyda. Niestety, po raz kolejny okazało się że jest nieprzydatna do niczego. Pomijając problemy z wczytaniem PDF’a wygenerowanego przez TCPDF:
(”Unsupported PDF version. Zend_Pdf supports PDF 1.0-1.4. Current version - ‘1.7′“)
gdzie w kodzie warunek wygląda następująco:
$pdfVersion = (float)substr($pdfVersionComment, 5); if ($pdfVersion < 0.9 || $pdfVersion >= 1.61) { /** * @todo * To support PDF versions 1.5 (Acrobat 6) and PDF version 1.7 (Acrobat 7) * Stream compression filter must be implemented (for compressed object streams). * Cross reference streams must be implemented */ throw new Zend_Pdf_Exception(sprintf('Unsupported PDF version. Zend_Pdf supports PDF 1.0-1.4. Current version - \'%f\'', $pdfVersion)); }
To jeszcze przy próbie utworzenia nowego dokumentu i przypisania mu stron z innego dokumentu ładny wyjątek:
“Page is attached to one documen, but rendered in context of another.”
Pozostało w takim razie Google, a tam… niewiele możliwości. Albo komercja, albo rozwiązania systemowe, i… mała perełka: FPDI
FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF, which was developed by Olivier Plathey. Apart from a copy of FPDF, FPDI does not require any special PHP extensions.
Since version 1.2.1, FPDI only supports the 1.6 version of FPDF.
Po chwili moją uwagę przyciągnęło jeszcze jedno (dość ciekawie brzmiące) zdanie:
Autor wpisu: Jaroslaw Mężyk, dodany: 16.12.2008 21:41, tagi: php
Autor wpisu: Diabl0, dodany: 13.12.2008 09:49, tagi: php
Dystrybucja Debian ma bardzo ścisłą i ostrą politykę dotyczącą stabilności gotowych pakietów oraz używania wyłącznie otwartego i wszędzie dostępnego kodu (włącznie z wszelkiego rodzaju algorytmami szyfrującymi i kodującymi które np. w Stanach podlegają dziwnym regulacjom). Dlatego też w stabilnej wersji Debian Etch 4.0 pakiet ffmpeg nie jest dostępny, natomiast w niestabilnym Sid znajduje się stosunkowo stara, mocno ograniczona wersja. Samodzielna kompilacja ffmpeg pozwoli na użycie najnowszej i najbardziej rozbudowanej wersji z wsparciem dla praktycznie wszystkich popularnych formatów video.
Wymagane pakiety debiana
- libavcodec0d
- libavformat0d
- libsdl1.2debian
- libimlib2-dev
- libfreetype6-dev
- liba52-dev
- libgsm1-dev
- libtheora-dev
- libvorbis-dev
- yasm
- subversion-tools
- libdc1394-13-dev
- re2c
aptitude update aptitude install libavcodec0d libavformat0d libsdl1.2debian libimlib2-dev libfreetype6-dev liba52-dev libgsm1-dev libtheora-dev libvorbis-dev yasm subversion-tools libdc1394-13-dev re2c
instalacja liblame
(http://sourceforge.net/project/showfiles.php?group_id=290)
./configure --prefix=/usr make make install
instalacja faac
http://www.audiocoding.com/downloads.html
./bootstrap ./configure --prefix=/usr make make install
instalacja libmp4v2
./configure --prefix=/usr make make install
instalacja faad
http://www.audiocoding.com/downloads.html
autoreconf -vif ./configure --prefix=/usr --with-mp4v2 make make install
instalacja libx264
(http://www.videolan.org/developers/x264.html)
./configure --prefix=/usr --enable-shared make make install
instalacja libxvid
(http://www.xvid.org/Downloads.43.0.html)
cd build/generic ./configure --prefix=/usr make make install
kompilacja ffmpeg
http://ffmpeg.mplayerhq.hu/ (http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2)
./configure --prefix=/usr --enable-nonfree --enable-libmp3lame --enable-swscaler --enable-liba52 --enable-libdc1394 --enable-gpl --enable-libfaac --enable-libfaad --enable-libgsm --enable-libgsm --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-pthreads --enable-encoder=flv --enable-shared make make install
instalacja ffmpeg-php
http://sourceforge.net/project/showfiles.php?group_id=122353
Autor wpisu: Splatch, dodany: 09.12.2008 17:10, tagi: php
Java od wersji 5.0 zawiera możliwość definiowania typów wyliczeniowych. Jednym z praktycznych przykładów zastosowania tego mechanizmu jest TimeUnit. Enum ten służy do konwertowania jednostek czasu pomiędzy różnymi wielkościami - na przykład z minut na sekundy: