Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[php] Operacje na napisach (string) i ich wydajność (krótka historia)
Od dawna zastanawiałem się, czy operacje na napisach są kosztowne (pamięciowo i/lub obliczeniowo)? W językach typu Java, C# spotykamy specjalną klasą typu StringBuilder, która jest zalecanym sposobem tworzenia napisów (jest optymalną wersją “zwykłych” napisów - optymalną pod względem wykonywania operacji na nich). W przypadku języka PHP takiej klasy nie posiadamy - istnieje tylko prosta zwykła konkatenacja.
[smarty] Ciekawe wykorzystanie modyfikatora.
Przyszedł czas na ciekawostkę, a dokładnie na nietypowe (wg mnie) wykorzystanie modyfikatorów biblioteki Smarty. Wyobraźmy sobie, że mamy bibliotekę do obsługi formularzy (wraz z walidacją pól), która dla każdego pola przechowuje informacje o tym, czy jest ono poprawne, czy też nie - informacja ta bardzo by się przydała w warstwie widoku, tylko jak ją “przekazać”. Pierwsza myśl jaka przyszłaby mi do głowy to stworzenie funkcji (wtyczki typu ‘template function’) Smarty, która realizowałoby tą funkcjonalność, na przykład:
-
function smarty_function_hasError($params, &$smarty) {
-
$hasError = false;
-
// Sprawdź, czy pole $params['field'] ma błędy
-
$hasError = Form::getFieldError($params[‘field’]);
-
}
-
return $hasError;
-
}
[php|zend] Nowa biblioteka dla plików CSV (wersja 0.96)
Przyszedł czas na dojrzalszą wersję znanej już Wam biblioteki obsługującej pliki CSV (Fasic_Csv). Dojrzewając pozbyła się kilku błędów i niedoskonałości oraz uzyskała nowe ciekawe funkcjonalności (przyznam się że trochę jej w tym pomogłem).
Przykład użycia biblioteki Fasic CSV (wraz z nowymi funkcjonalnościami):
-
// Pobierz plik CSV
-
// nazwa pliku, załaduj cały plik, rozpoznaj automatycznie separator
-
$file = new Fasic_Csv(‘1.csv’, true, true);
-
// Zmień kodowanie, plik jest w kodowaniu UTF-8 natomiast my chcemy ISO
-
$file->setEncoding(‘UTF-8′, ‘ISO-8859-2′);
-
// Ustaw mapowanie dla obiektów
-
// nazwa_pola => ['numer_kolumny:typ_danych' | 'funkcja anonimowa']
-
‘price’ => ‘2:round2′,
-
));
-
// Pobierz 3 linie (nie zwiększając wskaźnika), linie liczone są od 0
-
$line = $file->line(2);
-
// Stwórz obiekt na podstawie wcześniej zdefiniowanego mapowania
-
$obj = $line->asObject();
-
// Dla linii: "Nazwa Produktu;nieuzywana kolumna;13.008"
-
// Wyświetli: "stdClass Object ([price] => 13.01 [name] => ‘nazwa produktu’)"
[usability] Uwaga na Ajax (przykłady w jQuery).
Odkąd Ajax stał się tak popularny coraz więcej osób zauważa również jego wady (niestety taki jest koszt popularności ;)). Głównymi zarzutami (ale nie jedynymi) w jego kierunku to:
- Zaburzenie standardowej interakcji z użytkownikiem.
- Niepoprawne działanie przycisku Wstecz/Back w przeglądarce.
[php|zend] Biblioteka obsługi plików CSV - przykład.
Ponad dwa miesiące temu (ale ten czas leci…) przedstawiłem Wam propozycję klasy ułatwiającą pracę z plikami CSV - obiecałem wówczas, iż przedstawię bardziej zaawansowany przykład jej wykorzystania. Dotrzymuje więc obietnicy ;).
Przypomnę, iż poprzednio zaprezentowałem ogólne możliwości biblioteki Fasic_Csv, które między innymi skupiały się na:
- pobraniu następnej (lub dowolnie wybranej) linii z pliku CSV w postaci napisu oraz tablicy komórek
- pobraniu wybranej komórki, dla której można było określać jej typ (patrz biblioteka
Fasic_Forcetype)
[php] Jaki kierunek język PHP powinien obrać?
Do największych bolączek programistów PHP (moim zdaniem) do tej pory można było zaliczyć:
- Niezgodność nazw funkcji, mało spójne API.
- Brak oficjalnego frameworka.
- Wydajność aplikacji.
Czy coś się zmieniło? Postanowiłem przeanalizować aktualną sytuację w ramach w/w punktów
Programista Zend Framework - poziomy wtajemniczenia.
System Zend Framework stał się ostatnimi czasy bardzo popularny, w związku z czym jego znajomość jest bardzo mile widziana wśród pracodawców (czasami wręcz wymagana)… zastanawia mnie jednak co się kryje pod pojęciem “umiejętność ZF”.
Osoby, które chociaż trochę liznęły systemu Zend Framework wiedzą, iż serwisy oparte na ZF mogą być stworzone na 1001 sposobów (co w tym przypadku jest dużym plusem), przy czym każdy z nich będzie inny.. jedynie co może być stałe to zbiór podstawowych klas, takich jak Zend_Controller_Front, Zend_Controller_Action, itp…
[php|zend] Biblioteka obsługi plików CSV.
Już ładne kilkanaście miesięcy temu pracowałem nad projektem, w którym ważną częścią był import plików CSV (zapis z plików Excel). Przyznaje się bez bicia, iż wówczas zrobiłem to dość “nieładnie” - pomieszałem logikę importu z samym parsowaniem pliku i walidacją. Postanowiłem, więc że napiszę taki parser jeszcze raz - tym razem wg zasad naszego rzemiosła (standardowo bazuję na języku PHP i systemie Zend Framework).
[usability|javascript] Zabawy JavaScript’owo-Ajax’owe.
Aby urozmaicić look & feel strony coraz częściej wykorzystuje się możliwości jakie daje nam JavaScript & Ajax… i bez wątpienia nie należy się tego wstydzić. Jest jednak jedno ale…Mianowicie często zapominamy o ważnej rzeczy jak użyteczność tych nowych “bajerów”. Pod adresem Ajax’a zostało przedstawionych kilka zarzutów związanych z ogólnie pojętym “usability” - między innymi odnosiły się one do problemów z przyciskiem Back przeglądarki (takie same zarzuty były wysuwane w kierunku iframe). Jednak nie chciałem mówić o tych utartych i znanych wszystkim problemach.
[jquery] Zaawansowany interfejs użytkownika
Era brzydkich, ciężkich stron internetowych dawno już minęła - teraz przyszedł czas na ładne, proste aczkolwiek funkcjonalne strony i aplikacje internetowe. W tych ostatnich bardzo ważną rolę odgrywa UI (ang. User Interface) tworzone przy pomocy języka JavaScript - coraz więcej powstaje bibliotek do tworzenia ciekawych komponentów graficznych w świecie web. Oczywiście odkrywa to całkowicie nowe możliwości dla projektantów serwisów internetowych, którzy przed rozpoczęciem swoich prac powinni zapoznać się z aktualnymi możliwościami bibliotek JavaScript.