Temat traktowania łańcuchów znaków w Javie jest standardowym tematem egzaminacyjnym, jak również ciekawym przypadkiem w codziennej pracy i w czasie nauki. Zacząłem pisać ten wpis pewien czas temu, do jego ukończenia zmobilizował mnie wpis na blogu dayt3k'a traktujący o tym temacie.

Łańcuchy znaków, a dokładnie - literały - traktowane są w Javie wyjątkowo, inaczej niż "typowe" obiekty. Zanim przejdziemy do ich traktowania, odpowiedzmy sobie najpierw na pytanie, czym w Javie jest literał znakowy?

Czytaj dalej...

Kolekcje i typy generyczne są wdzięcznym tematem na egzaminie, zwłaszcza przy próbach integracji ich z kodem używającym typów niegenerycznych, a także wtedy, gdy do koła fortuny dodamy jeszcze zwykłe tablice.

Które z linii prawidłowo deklarują 5-elementową tablicę list?
List<?>[] x1 = new ArrayList<?>[5];
List<?>[] x2 = new ArrayList<Integer>[5];
List<Integer>[] x3 = new ArrayList<?>[5];
List<Integer>[] x4 = new ArrayList<Integer>[5];

Czytaj dalej...

Z cyklu "Przygotowania do SCJP" - pewne aspekty obsługi wyjątków w Javie zwróciły moją szczególną uwagę. Obsługa wyjątków jest stosunkowo prosta, a przede wszystkim logiczna - w wielu sytuacjach trzeba się jednak podeprzeć rozdziałem 14.20 Java Language Specification traktującym o sposobie obsługi bloków try {} catch {} finally {}.

Trzeba pamiętać, że blok finally wykonywany jest zawsze - niezależnie od tego czy wyjątek wystąpił, czy nie wystąpił, czy został przechwycony, czy też nie (jest od tej reguły jeden wyjątek, o którym za chwilę*).

Co więcej - trzeba pamiętać, że blok finally wykonuje się również wtedy, kiedy na logikę powinien zostać pominięty.

Czytaj dalej...

Magento

09 stycznia, 2008

Od pewnego czasu z zainteresowaniem śledzę rozwój Magento - systemu e-commerce rozwijanego na zasadach OpenSource przez firmę Varien.

Nauczony kilkukrotnym doświadczeniem we wdrożeniach projektów klasy osCommerce/Zen Cart bez mrugnięcia okiem mogę powiedzieć - nigdy więcej. Dostosowanie sklepu do zaprojektowanego wyglądu wymaga sporych nakładów pracy ze względu na niekompletne rozdzielenie prezentacji od treści, oraz bardzo sztywne sposoby prezentowania pewnych informacji. Oczywiście - można nazmieniać dowoli, ale utrudniając sobie proces aktualizacji platformy do nowych wersji - bo modyfikacje obejmują dużo więcej miejsc, niż tylko katalog szablonów.

Magento jest inne - system oparty został o Zend Framework, tworzony jest w zamkniętym środowisku kilkudziesięciu doświadczonych programistów w Varien w celu użycia projektu do firmowych zastosowań. Rozwój idzie zgodnie ze ściśle zaplanowaną ścieżką, kod systemu jest spójny - a co najważniejsze dla nas, developerów, wyjątkowo elastyczny. Wymaga przyzwyczajenia się do dość złożonego w porównaniu z Zen Cartem sposobu integracji własnych rozwiązań w tej plaformie, ale moim zdaniem zdecydowanie warto. Większość rzeczy, włącznie z kompletnie dostosowanym designem, da się zrobić out-of-the-box, a te które się nie da - da się zrealizować w pełni niezależnymi modułami bez ingerencji w jądro Magento.

Projekt ciągle jest w fazie public beta - autorzy nie zalecają używania Magento w celach produkcyjnych ze względu na ciągle rozwijane API, niekompletną dokumentację wielu elementów, oraz potencjalne zmiany mogące poważnie utrudnić uaktualnienie bety do kolejnych wersji. Mimo to, bacznie przyglądam się i testuję w domu możliwości sklepu w kolorze magenty, bo naprawdę warto. Finalna wersja 1.0 od której dostępne będzie stabilne API i możliwość rozwijania modułów regionalnych (np. systemów płatności, integracji z porównywarkami, systemami aukcyjnymi, itp.) planowana jest na przełom marca i kwietnia. Ja tymczasem zaangażowałem się w tłumaczenie Magento na nasz ojczysty język, wychodząc z założenia, że warto dołożyć kamyczek do produktu, którego zamierzam używać w swoich wdrożeniach.

Tak czy inaczej - tym, którzy jeszcze nie widzieli, a borykają się z Zen Cartem, polecam uwadze.

Pionowe centrowanie obrazków

13 września, 2007

Pionowe centrowanie w CSS to temat wałkowany po wielokroć, w dłuższych bądź krótszych artykułach. Często wywlekane są armaty na muchy, często rozwiązania mają braki w obsłudze dla Internet Explorera, czasem... mniejsza o to. Pionowe centrowanie obrazka w <div>'ach o określonych rozmiarach wykorzystuje się stosunkowo często, a większości przypadków wystarcza bardzo prosta metoda:

HTML:
<div><span></span><img src="..." alt=".../></div>

CSS:
div { line-height: 200px; height: 200px; text-align: center; }
div img { vertical-align: middle; }

Taka konstrukcja działa bezbłędnie w FF, Safari, Operze i IE7. Żeby zadziałała także w IE6 potrzebny jest <span></span> przed obrazkiem, który widać już w powyższym kodzie. Potrzeba także

div span { display: inline-block; }

które najlepiej umieścić w arkuszu warunkowym dla IE6. 99% problemów z centrowaniem da się załatwić w ten prosty, choć czasem nie oczywisty sposób.