Archiwalia dla 10.2006

NetArt, Sztuka wciskania kitu w Sieci

O ile dotychczas miałem o wspomnianej wyżej firmie całkiem dobre zdanie, to ostatnio zmieniło się diametralnie.

Jeden z naszych klientów hostuje tam serwis wykonany przez nas czas temu jakiś. Serwis z przyczyn nieznanych przestał nagle działać. Poprosiliśmy o dostęp do konta. W międzyczasie serwis nagle zaczął działać prawidłowo. Następnie zmarł ponownie.

Po otrzymaniu dostępu do bazy danych, zalogowałem się do interfejsu phpMyAdmin 2.7.0 (nie sprawdzam nawet, czy jest ekspoitowalny) i moim oczom ukazał się… MySQL 3.23.58. Tak, niemalże najnowsza wersja, ukazała się bowiem we wrześniu 2003. Wklejam przeto zapytanie wysyłane przez serwis, licząc na błąd składni, bo wykluczyć błędu po naszej stronie się nie da. Kolejna niespodzianka:

#1030 - Otrzymano błąd 28 z obsługi tabeli

Wewnętrzny błąd serwera baz danych. Przyczyn błędu 28 może być masa, od uszkodzenia systemu plików, przez ograniczenie daemona quotą, przez fizyczne uszkodzenie nagłówka pliku z tabelą, aż po wyczerpanie miejsca na dysku.

Wysłaliśmy tedy informację do klienta, że interwencja z naszej strony jest nieuzasadniona i dalsze angażowanie nas w rozwiązywanie problemu nie odbędzie się darmowo, a najlepszym sposobem będzie kontakt z administracją serwera hostującego serwis.

Klient, widać niezadowolony z reakcji obsługi technicznej NetArtu, zgłosił nam po kilku dniach chęć przeniesienia hostingu na nasze serwery. Przygotowaliśmy wszystko z naszej strony, pozostało przetransferowanie domeny.

Dotychczasowy host do problemu ustosunkował się następująco: nie ma podstaw do przeniesienia domeny, gdyż problem z serwisem wskazuje na celowy wandalizm z naszej strony, co miałoby podważyć wiarygodność firmy aktualnie świadczącej usługi i zmusić klienta do zmiany operatora.

Tak, drodzy panowie z NetArtu, celowo włamaliśmy się na wasz serwer i zatkaliśmy go do granic możliwości, następnie zatarliśmy po sobie ślady, a to wszystko z tak ogromną precyzją, że naszą ofiarą padł dokładnie jeden serwis. Gratuluję poczucia humoru.

Technorati Tags: , , ,

Zanim zaczniesz tworzyć webaplikacje

Bez spełnienia poniższych punktów, nawet nie zabieraj sie za pisanie niczego, do czego mają mieć dostęp ludzie. W szczególności nie zabieraj się też za pisanie CV do nas ;)

  • potrafisz rozwinąć skrót RDBMS i własnymi słowami powiedzieć, jaką rolę pełni
  • w odpowiedzi na powyższe nie użyłeś sformułowania w który mogę rzucać dowolnymi śmieciami, a potem je wyjąć
  • potrafisz określić, czym jest MVC albo potrafisz powiedzieć, czemu nie należy umieszczać kodu logiki biznesowej w kodzie prezentacji
  • nie musiałeś przed chwilą sprawdzić w Google, czym się różni logika biznesowa od logiki bazodanowej i logiki prezentacji
  • trzecia postać normalna nie kojarzy ci się ze Wstępem do psychoanalizy Freuda
  • zapytany o indeksy, nie zastanawiasz się, czy dziekan już podpisał
  • wiesz, że klucze obce nie służą do otwierania mieszkań co ładniejszych koleżanek
  • zapytany o HTML nie rozwijasz skrótu jako How to meet ladies, a przynajmniej nie na rozmowie kwalifikacyjnej
  • zdajesz sobie sprawę, że baza danych jest środowiskiem wielodostępowym, rozumiesz działanie transakcji i pojęcia typu race condition (trudne słowo)
  • na dźwięk skrótu JS nie piszesz odruchowo <SCRIPT LANG="JAVASCRIPT"><!-- document.write("Hello") --></SCRIPT>
  • potrafisz powiedzieć, czym jest OOP, kiedy go używać i kiedy jest to overkill (trudne słowo)
  • znasz przynajmniej jeden używany jeszcze dialekt SQL i potrafisz cytować przekazywane do niego parametry w taki sposób, aby zapytania mogli pisać tylko deweloperzy, a nie odwiedzający serwis

Znajdź swoją muzykę

Przeglądając zasoby związane z biblioteką JSViz, specjalizującą się w budowaniu dynamicznych grafów, trafiłem przypadkiem na prawdziwą perełkę. Jedna z aplikacji demonstracyjnych służy do… szukania muzyki.

JSViz Demo - Amazon-based music recommendations

Music Recommendations, bo tak nazywa się demo, łączy się z serwisem Amazon i — na podstawie jego rekomendacji podobnych albumów — prezentuje graf polecanej muzyki. Coś czuję, że uzupełnię swoję kolekcję z tym cudeńkiem, jest o niebo wygodniejsze niż przeklikiwanie się przez serwis giganta.

Technorati Tags: , , , ,

Internet Explorer: System error -1072896658

Właśnie z sit0 zabieraliśmy się za spędzenie drugiego dnia nad kolejnym dziwadełkiem, które występowało w naszej ukochanej przeglądarce. Spora część ajaksowej funkcjonalności naszych zabawek zaprzestała pełnienia swych funkcji w IE.

Zaczęliśmy tradycyjnie, od zabawy z Fiddlerem i upewnienia się, że zapytanie trafia do serwera prawidłowo i że serwer generuje prawidłową odpowiedź. Pudło, trzeba pobawić się z JS. Debugowanie tego ostatniego w IE jest zabawą tyle niewdzięczną, co czasami graniczącą z absurdem. Po kilku godzinach zabawy z wstawianiem kodu kontrolnego w różne etapy przetwarzania odpowiedzi (rozoraliśmy całą bibliotekę script.aculo.us), zostaliśmy dalej z niczym. Mieliśmy tylko jeden wyjątek, który nie miał kompletnie sensu. Cała jego zawartość to System error -1072896658.

Zbawienie przyszło z Google: ktoś miał już identyczny problem i okazało się, że rozwiązanie stosuje się także w naszym przypadku. Jeśli więc IE zachowuje się dziwnie i nie działają w nim wywołania AJAX, sprawdź zawsze nagłówki. IE jest bardzo wybredny i bardzo małomówny.

Technorati Tags: , , ,

Strip #031: Grzechy przeszłości

A może tak w klimacie zbliżonym do humoru xkcd?

Tutaj w graficznych przeglądarkach wyświetla się komiks

iShave

Kiedy następnym razem przyjdzie wam ogolić swoje [...] [...] i [...] pod [...], sięgnijcie po nową maszynkę Philipsa — Bodygroom. Reklama powaliła mnie na [...] [...] i [...].

O ile najbardziej jestem potencjalnie zainteresowany samym produktem, to polecam obejrzeć ShaveEverywhere — oficjalną stronę Philips Bodygroom.

Internet Explorer: Pomocy!

Kolejny dzień spędzamy na poszukiwaniu przyczyny chorego zachowania IE6.

Efekt jest taki, że losowo przerywa przetwarzanie dokumentu, a efektem jest jedynie fragment drzewa DOM. Co ciekawe, przy każdym odświeżeniu strony, utyka gdzie indziej. Próbowałem to rozdłubać nawet Fiddlerem. Ten ostatni pokazuje też, że IE pyta serwera, czy grafiki się zmieniły, otrzymuje odpowiedź 304, po czym dziarsko uznaje, że grafiki nie da się załadować.

W każdej innej przeglądarce, z IE7 włącznie, serwis działa poprawnie.

W życiu takiego cyrku nie widziałem. Pomoże nam ktoś?

Update: chłopaki z Janmedia zdiagnozowali problem — winnym okazał się serwis Google Video i wtyczka do Flasha. Otóż po załadowaniu odtwarzacza googlowego, IE przestawał ładować cokolwiek więcej. Czekamy jeszcze na potwierdzenie, czy to jedyna przyczyna.

Prywatnie: Pauza

Decyzją dziekanatu Wyższej Szkoły Informatyki i Zarządzania Copernicus we Wrocławiu, 15. października bieżącego roku, zostałem skreślony z listy studentów.

Decyzją kobiety, którą kocham, 15. października bieżącego roku, zostałem skreślony z listy zajętych facetów.

Przerwa techniczna w blogowaniu. Johnnie Walker się do mnie uśmiecha wyzywająco.

Encje w HTML

Na prośbę Roya:

(X)HTML w skrócie definiuje dokument jako zestaw elementów. Każdy element to albo textNode, albo kontener — typowy element, jak nagłówek, paragraf, czy span, który zawiera kolejne elementy.

Elementy są czasem błędnie nazywane tagami, podczas gdy tagi to sposób tekstowego zapisu elementów — składają się wtedy z tagów otwierającego i zamykającego (albo jednego samozamykającego w przypadku elementów, które nie zawierają żadnych dzieci).

Wszytkie elementy, poza tekstowymi, posiadają różne atrybuty. Te ostatnie zapisuje się jako listę par nazwa="wartość" wewnątrz tagu otwierającego element. Teraz ważne: ponieważ HTML jest aplikacją SGML (trudne słowo), a XHTML jest aplikacją XML (jeszcze trudniejsze słowo), wartości atrybutów w zapisie trzeba cytować za pomocą encji.

Ponieważ HTML definiuje encji masę, a XHTML dziedziczy ich po XML tylko pięć, to cytować powinno się tylko te ostatnie (inaczej nie można przetwarzać wyniku jako dokumentu XML).

Oto więc lista kandydatów: &amp;, &lt;, &gt;, &quot;, &apos;.

Ponieważ w PHP funkcja html_entities jest mocno nadgorliwa, poniżej prosta implementacja poprawnej alternatywy:

function xmlentities($string)
{
	return str_replace(array
		(
			'&', ''', '"', '<', '>'
		), array
		(
			'&amp;', '&#039;', '&quot;', '&lt;', '&gt;'
		), $string);
}

Apostrof jest traktowany specjalnie, bo w HTML go… nie przewidzieli.

Technorati Tags: , , , ,

Strip #030: Eskalacja uprawnień

Z pewnością zauważyliście, że numer dzisiejszego odcinka stanowi dopełnienie czwórkowe (bez znaku) numeru pokoju z adresu bloga.

Tutaj w graficznych przeglądarkach wyświetla się komiks

Zapomniałem dodać, że inspiracją był oczywiście rewelacyjny xkcd.