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’)"
[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).
[php|zend] Prosta klasa do konwertowania/sprawdzania typu.
Na potrzeby biblioteki obsługi plików CSV w Zend Framework (i ogólnie w języku PHP) stworzyłem prostą klasę, która miała służyć do konwertowania i sprawdzania typu napisu (ang string). Z racji, że implementuje ona odrębną funkcjonalność postanowiłem przedstawić ją osobno, zanim przejdę do omawiania wspomnianej biblioteki Fasic_Csv.
[php] Nielogiczne instrukcje.
Z przykrością trzeba przyznać, iż zdarzają się “miejsca” w których język PHP nie jest ani logiczny, ani konsekwentny w swoich założeniach. Oto moja lista “zażaleń”.
[eclipse|php] Tworzenie szablonów.
Zapewne nikt nie lubi robić nudnych, często powtarzających się czynności. Do nich niewątpliwie można zaliczyć (i to niezależnie od wykorzystywanego frameworka i języka) tworzenie klas odpowiedzialnych za konkretną rzecz (np klasy modeli, widoku, itp).
Całe szczęście Eclipse (a dokładniej PDT 1.0.3) dostarcza nam mechanizmu szablonów (ang. Templates), które umożliwiają stworzenie szkieletu danej klasy w kilka kliknięć.