Wpisy z maj, 2008

Dropshipping - powiedz nienieniearghhhh

Przeczytałem sobie taką notkę o dropshippingu. Idea nawet fajna, ale pomija istotną sprawę: firma zarabia na wartości dodanej. Czym więcej kluczowych funkcji biznesowych będzie realizowanych poza firmą, tym mniejszą wartość dodaną generuje. A zamawianie towaru w hurtowni, pakowanie i wysyłanie do klienta jest chyba jedną z kluczowych funkcji sklepu internetowego, czyż nie?

Prędzej czy później dojdzie do nieuniknionego: dostawca uruchomi własny system zamówień, poinformuje wszystkich klientw sklepu, zaoferuje niższą cenę i żegnaj biznesie złoty…

Dropdowny, Ajax i usability

Generalną zasadą budowy dostępnego interfejsu jest takie jego przygotowanie, żeby mogły się nim posługiwać także osoby, które posługują się wyłącznie klawiaturą, lub innymi, niestandardowymi urządzeniami do obsługi komputera. Interfejs powinien być także tak przygotowany, żeby korzystanie z niego było oczywiste, a operacje odwracalne. Nie ma nic gorszego dla aplikacji www, niż użytkownik, który nie jest pewien, co zrobić, aby osiągnąć oczekiwany rezultat. “Don’t make me think”, najważniejsza reguła budowy interfejsu.
Czytaj dalej »

ColdFusion - utracone hasło

Zapisuję to sobie tutaj, bo za każdym razem muszę szukać w sieci ;)

Metoda

1. Lokalizujemy plik neo-security.xml (jeżeli mamy CF zainstalowane na domyślnej ścieżce, to będzie w c:\CFusionMX7\lib\)

2. Szukamy ciągu:

  1. <var name='admin.security.enabled'>
  2.     <boolean value='true'/>
  3. </var>

3. Zamieniamy wartość na ‘false’

4. Zapisujemy i restartujemy serwer CF

Voila!

SQL Subselect - parę słów o wydajności

Trafiłem ostatnio na ciekawy wpis na blogu Krisa, traktujący o problemach związanych z wydajnością SQL subselect w dużych bazach (a przynajmniej dużych jak na aplikacje internetową). Temat dla mnie również ciekawy, ponieważ nasza aplikacja ma poważne problemy z wydajnością pojawiające się przy rozroście bazy danych, i część tych problemów jest związana z bazą danych.

Podejście Krisa - polegające na złamaniu postaci normalnej poprzez utworzenie kolumn pomocniczych z pewnością - poprawiło wydajność, ale budzi we mnie niepokój. Spreparowałem więc sobie zestaw danych wejściowych w celu przeprowadzenia własnego eksperymentu…
Czytaj dalej »

Nie generuj stron przez POST!

Jakieś 9 miesięcy temu, zirytowany błędami w naszej podstawowej aplikacji, wprowadziłem na rozmowę kwalifikacyjną pytanie o różnice pomiędzy żądaniami GET a POST. Srodze się rozczarowałem: od tego czasu przeprowadziłem z 50 rozmów, i tylko 1 (słownie: jedna!) osoba znała prawidłową odpowiedź.

Typowe odpowiedzi błąkały się wśród szczegółów technicznych: że GET to idzie w nagłówkach żądania, a POST w ciele żądania, że przez POST to można przesłać pliki, a przez GET to nie możliwe itp. Parę osób stwierdziło, że parametrów przesłanych przez POST nie widać w pasku URL przeglądarki. Nie wyciągnęły jednak z tego żadnych dalszych wniosków.

W zasadzie podane odpowiedzi są jak ze starego dowcipu - w 100% poprawne ale nikomu do niczego niepotrzebne. Pomijają najważniejszą sprawę: strony wygenerowanej przez POST nie da się wysłać mailem, przez komunikator czy zapisać w historii przeglądarki. Nie da się jej wykopać czy podlinkować. A nawet odświeżenie nie jest możliwe, bez obejrzenia wariacji na temat “strona wygasła”.

Nie mówię oczywiście, że należy zrezygnować z używania POST. Nie wolno tylko generować kodu HTML po takim żądaniu. Zakładanie konta, oczywiście, powinno być obsłużone przez POST, a po pomyślnym zalogowaniu należy przekierować na stronę z podziękowaniami. Głosowanie w sondach, logowanie, edycja danych i inne tego typu operacje powinny kończyć się wygenerowaniem nagłówka Location i przekierowaniem na nowy adres.

Natomiast każdy formularz, który ma na celu wygenerowanie strony (np. wyszukiwanie), powinien być obsłużony przez GET.