Archiwalia w kategorii 'web'

10przykazan jeszcze nie umarło

Właśnie skończyłem kolejny raz przepisywać kod 10przykazan. Wyleciał zupełnie leciwy — i wielokrotnie łatany — MagpieRSS, zastąpiły go curl i XML Feed Parser.

Skutek zauważyć łatwo, bo wróciły do łask blogi, z których notki niechętnie trafiały do serwisu. W związku z tym proszę, żeby zgłaszać mi ewentualne usterki, a postaram się je poprawić, zanim przepiszę kod po raz kolejny.

Kolejna aktualizacja kodu prawdopodobnie będzie oznaczać schyłek ery PHP i dominację niezastąpionego Django. Termin nie jest jeszcze ustalony, ale spodziewajcie się zmian w ciągu trzech-czterech tygodni.

Uprzedzając pytania, tak, dodamy kolejne blogi, ale prawdopodobnie dopiero po reinkarnacji serwisu. W tej chwili wolny czas poświęcam głównie na walkę z tysiącem różnych odstępstw od standardów RSS i ATOM, które można spotkać na blogach już u nas goszczących.

Jeszcze raz o wykrywaniu przeglądarek

Bullsh*t  in buzzword

Pisanie aplikacji webowych ma to do siebie, że czasem różne przeglądarki reagują na nie w nieco nieoczekiwany sposób. Problem może wynikać z błędnej implementacji CSS, z różnic w dostępnych funkcjach JavaScriptu, czasem przyczyną może być też populacja poszczególnych gatunków motyli w Australii (ukłon w stronę domyślnej przeglądarki Microsoftu). Najczęściej wynika jednak z zastosowania czynnika ludzkiego w procesie budowy owych aplikacji i usunięcie usterki sprowadza się do zrobienia czegoś TheRightWay™.

Jeśli boisz się, że twoja aplikacja nie zadziała na niczym poza dwoma testowanymi komputerami, to masz poważny problem. Albo cierpisz na paranoję, albo faktycznie aplikacja nie nadaje się do publikacji nawet w fazie alfa. Jeśli jednak uważasz, że wykrywanie przeglądarek innych niż testowane jest remedium na twoje bolączki, to masz już dwa problemy.

Po pierwsze, nigdy nie przetestujesz aplikacji w każdej konfiguracji przeglądarka + system operacyjny. Nawet gdyby się okazało, że wszędzie działa bez problemu, jeżeli nie pozwolisz ludziom tego sprawdzić, to wątpliwości pozostaną do końca życia. Ludzie, którzy w towarzystwie cieszą się największym autorytetem komputerowego guru i — tym samym — mają największą szansę zareklamować twój produkt wirusowo, często używają mniej popularnego oprogramowania. Ograniczając się do najpopularniejszej trójki, odcinasz się od nich na zawsze.

Po drugie, wyrzucanie gości, jeszcze zanim przekroczyli próg, to bardzo niegrzeczna metoda na powiedzenie komuś mamy was tam, gdzie słoneczko nie świeci. Jeśli aplikacja może rozpadać się na tyle, że nie da się jej używać, to wystarczy grzeczne ostrzeżenie, że za tabliczką spacery odbywamy na własną odpowiedzialność. Dużo więcej zyskasz, jeśli użytkownicy będą mieli szanse zgłosić konkretne usterki. Pomyśl, ile czasu twoi pracownicy muszą spędzić na szukaniu usterek przy dodawaniu obsługi kolejnej przeglądarki. Teraz pomnóż to przez liczbę zaangażowanych testerów i podziel przez liczbę użytkowników aplikacji. Trochę mniej, prawda? Użytkownicy pracują dla ciebie za darmo.

Jeśli jesteś pewien, że twoja aplikacja nie działa poprawnie z konkretną przeglądarką, to masz dwa wyjścia:

  1. Napraw aplikację. Z biznesowego punktu widzenia to jedyna sensowna odpowiedź na powyższy problem.
  2. Jeśli powyższe nie ma sensu, to wykrywaj przeglądarkę, w której aplikacja nie ma szans zadziałać, a nie te, w których testy przeszły pomyślnie.

Do upartych, jak autorzy pokazanego we wstępie buzzworda, apeluję, by przynajmniej wykrywanie zaimplementowali prawidłowo. Gecko to Gecko, czy będę używał Firefoksa, Flocka, Słitaśnej Przeglądarki Patrysa i niezależnie od systemu operacyjnego.

Poliż węża

Jakbym bardzo nie szanował Pythona jako języka, tak nie sposób mi przejść obojętnie wobec tworu zwanego Polish Python Coders Group. Jak wyraźnie demonstruje serwis grupy, zrzeszać będzie ona amatorów-entuzjastów języka PHP.

W prawej kolumnie widzimy Django, obok reklamę Python od podstaw. Widać szacowne grono redaktorów i autorów serwisu w linki kliknąć jeszcze okazji nie miało, bo cały serwis właśnie na wspomnianym PHP stoi (pozwolę sobie nie brać pod uwagę możliwości, że komuś chciałoby się dopisywać ścieżki typu index2.php do urls.py).

Z lektur polecę jeszcze podstawy HTML, bo warstwa struktury aż prosi się o przepisanie (może tym razem bez wstawiania nagłówków w postaci plików graficznych).

Podsumowując, fani Pythona, łączmy się… w bólu.

Python: libchart 0.0.3

Dziś pojawiła się obiecana potrzeba i tak powstała trzecia wersja biblioteki do generowania wykresów. Tym razem nie wymaga PIL i oparta jest w całości o Cairo, a to oznacza śliczne wygładzanie krawędzi.

python-libchart 0.0.3

Jak poprzednio, do pobrania ze strony projektu.

Drodzy łebdeweloperzy…

Przychodzi do was klientka. Wdrażacie jej osCommerce. Robicie jej niedźwiedzią przysługę, ale to problem większości tak zwanych agencji interaktywnych. Teraz zaczyna się wasza praca przy dostosowaniu owego wynalazku z piekła rodem. Uwaga, czytajcie mi z ruchu klawiszy…

Waszym pieprzonym obowiązkiem jest wykonać pracę prawidłowo, zgodnie ze sztuką i w jak najlepszym interesie klientki, która wam za to płaci. Tak, to jest obowiązek, a nie opcja premium, za którą się dopłaca. Tak, jak zamawiając hydraulika nie dopłacacie 100% ekstra za uszczelnienie zaworu po wymianie, tak wy nie macie prawa oddać klientowi produktu, który już po chwili zaglądania za kulisy wygląda jak ledwie trójkowa praca zaliczeniowa na pierwszym semestrze studiów informatycznych.

Że kod brzydko sformatowany? Nie, nie. Co powiecie na zapytanie SQL, które wykonuje się — bagatela — piętnaście sekund? Nie mówię o raportach, mam na myśli zapytanie, które pobiera dane do wyświetlenia na stronie. A dlaczego potrzebuje na to ledwo ćwierć minuty? Bo jeden z drugim klepacz (to taka odmiana programisty, która przychodzi do biura o 8:01, a o 15:59 jest już w płaszczu i chwyta za klamkę) — jak to się marketingowo na stronach chwalą — potraktował klienta indywidualnie. Zapewne przez to rozumieć należy to tylko jeden klient, pewnie nikt się nie kapnie.

Całe pięć minut zajęło mi przeczytanie, mało popularnego w arystokratycznych kręgach agencyjkowych hakerów, loga slow queries. Całe dziesięć poświęciłem na dodanie prawdziwej nowinki w świecie RDBMSindeksów do tabel. Serwis działa ponad dwa razy szybciej (przetestowane też za pomocą dostępnego tylko elicie narzędzia ab).

Jako ciekawostkę podam, że — zapewne dla podwójnej pewności — któryś geniusz poświęcił sporo czasu na dodanie indeksu UNIQUE dla każdego klucza PRIMARY, który (widać niektórzy nie wiedzą) implikuje indeksowanie dla przeszukiwania i gwarantuje unikalność. Nie poświęcił za to ani sekundy na dodanie oczywistych indeksów dla kolumn, które służą za klucze zewnętrzne. Prawie zewnętrzne, bo serwis korzysta z tabel MyISAM.

Na koniec powiem, że jeśli ktoś poczuł się urażony powyższą notką, to bardzo, kurwa, dobrze i powinien się w końcu nauczyć wykonywać swój zawód. Jeśli agencji nie stać na zatrudnienie kompetentnego DBA, to niech się przebranżowi na robienie bannerków we Flashu, bo w programowaniu nie ma czego szukać. Cała reszta czytelników, mam nadzieję, bawiła się równie dobrze, co ja przy poprawianiu waszej fuszerki i pewnie z radością wysłałaby was na Worse Than Failure.

PHP, PCRE i nagłe zgony

Jest wpół do drugiej w nocy. Siedzę w biurze. Serwer Apache wygląda na stabilny. Dokładnie, wygląda.

Prawie wszystkie działające u nas aplikacje są zaimplementowane jako usługi FastCGI serwowane przez Lighttpd. Bazy danych działają w osobnych serwerach wirtualnych, podobnie odseparowany jest Apache, który dzierży brzemię mielenia PHP i przedzierania się przez gąszcze plików .htaccess.

Wszystko byłoby pięknie, gdyby Apache nie zaczął sobie chodzić na spacerek do krainy wiecznych łowów (jak to Indianie mają w zwyczaju czynić po SIGSEGV). Szybki (błyskawiczny rzekłbym, ale to nie prawda) strace i końcówka gdb pokazały, że ślad urywa się gdzieś w PHP.

Następny test — przestawienie PHP z mod_php (użytkownicy nie mają dostępu do kodu serwisów, więc nie bawiliśmy się w żadne separacje użytkowników) na CGI. Tym razem dzielny serwer przetrwał, w przeciwieństwie do skryptu. Kolejny strace i gdb na symulowanym środowisku CGI (w bardzo wysublimowany sposób — export QUERY_STRING=… i tak dalej) i okazuje się, że zdycha jednak biblioteka implementująca PCRE.

Dużo Google. Bardzo dużo. W końcu pomaga Qwiat. Miał to samo, pomógł downgrade pakietu pcre do wersji 6.7. Przebudowa wspomnianego pakietu we wspomnianej wersji, upgrade w vserwerze, restart usług. Działa. Nieźle się maskuje.

Kod serwisów zdaje się działać bez zarzutu. Chciałem zarzucić temat, ale obiecałem znaleźć syntetyczny testcase. Więcej Google. Na liście błędów pcre jest znana podatność na przepełnienie stosu. Autorzy zdają się mieć ją w dużym poważaniu. Wersja 7.x zdycha, wersja 6.x działa. A takiego.

<?php
print 'A teraz coś z zupełnie innej beczki: ';
preg_match('/(.(?!b))*/', str_repeat("a", 10000));
?>

Powyższy kod położył mi każdą kombinację PHP i PCRE. Bardzo ładny sposób, żeby komuś zrobić DOS na PHP działające w trybie FastCGI (po n-tym padzie usługi w krótkim czasie serwer słusznie uzna, że jest uszkodzona i przestanie ją wskrzeszać, przynajmniej na jakiś czas).

I tym optymistycznym akcentem zakończę swoje gadanie od rzeczy i udam się do domu spać.

123-reg

Serdecznie polecam usługi brytyjskiego serwisu 123-reg.co.uk. Kilka największych zalet poniżej:

  • zmiana delegacji DNS działa tylko dla niektórych naszych domen;
  • dla pozostałych nie ma nawet możliwości podania adresów IP, od razu dostajemy błąd;
  • nie odpisują na żadne zgłoszenie powyższego błędu przez e-mail;
  • ich wsparcie techniczne to specjalna infolinia, każda minuta połączenia kosztuje grube pieniądze, łącznie z czterdziestoma minutami oczekiwania na zgłoszenie się operatora;
  • kiedy już się poddaliśmy, zgubili ticket transferowy z GoDaddy

Na koniec jeszcze raz, serdecznie polecam.

Religijnie: 10 przykazań i władza nad demonami

Ostatnie dni stanowiły dla mnie nieprzerwane pasmo imprez… wróć! Nieprzerwane pasmo pracy z kodem. A właściwie to jedno i drugie, Python jest tak wygodny, że nawet przy kilku projektach pozostaje czas na imprezy.

O Pythonie za chwilę, najpierw jednak o PHP. Wróciło 10przykazan, po 9 dniach awarii. Długa przerwa, ale głównym problemem był dostęp do internetu. Trzeba wam bowiem wiedzieć, że 1. marca kwietnia (więcej kawy) przeprowadziłem się do nowego mieszkania i do dziś nie udało się nam podpisać umowy z żadnym dostawcą. Ale nie o tym chciałem pisać, okazało się, że przyczyną problemu jest PHP w wersji 5.2.2, które psuje biblioteki RPC.

W wolnym czasie zacząłem też eksperymentować z własną implementacją niesławnego pakietu daemontools. O działalności djb słyszeli chyba wszyscy, a niezorientowanych pozostawię na pastwę Google, bo i szukać nie trzeba długo.

W ITS Ltd. używamy daemontools do zarządzania usługami FCGI. Wszystko byłoby dobrze, gdyby nie fakt, że od czasu do czasu (po zmianie kodu na serwerze) trzeba taką usługę zrestartować, a czasem i zatrzymać na dłużej. Cóż, daemontools pozwala to zrobić tylko rootowi z poziomu konsoli.

Pakiet wygląda na martwy, za trzy tygodnie kończy się jego licencja redystrybucji. Mój nowy projekt poboczny to próba odtworzenia schematu działania oryginału za pomocą odrobiny Pythona. Przy okazji dodałem nieco interfejsów D-Bus. Zainteresowanych wczesnymi testami zapraszam na stronę daemontools-ng.

Opera guys have the balls

Opera guys have the balls
Nowy produkt Opery — Opera Stress Reliever™ Limited Beta

Razem z Marvelem zostaliśmy zaproszeni na ekskluzywną konferencję Opera Software, gdzie zaprezentowano nam nowy produkt do walki ze stresem w biurze. Urządzenie, które było bohaterem prezentacji, jest reklamowane hasłem gdziekolwiek jesteś, walcz ze stresem, postanowiliśmy je więc poddać testom w warunkach typowo bojowych, w kwaterze ITS Ltd.

Zgodnie z obietnicą producenta, urządzenie — mimo wczesnej fazy beta — równie dobrze leży na komputerach typu desktop, co na urządzeniach mobilnych. Przebadaliśmy je za pomocą biurowych komputerów Dell OptiPlex 745, mojego prywatnego laptopa Asus A6Km oraz na telefonach Sony Ericsson K700i i K750. Jedyne trudności sprawiło nam umieszczenie go na obudowie obecnej w czasie prezentacji konsoli Wii firmy Nintendo. Obecni na miejscu deweloperzy z wrocławskiego biura Opera Software zapewnili nas jednak, że obsługa Wii jest dopiero w fazie rozwojowej i również ta platforma będzie w pełni obsługiwana nim produkt trafi do użytkowników domowych. Po powrocie do domu postaram się również przetestować zgodność z konsolą Sony PlayStation 2, choć ta nie znajdowała się na liście urządzeń oficjalnie wspieranych.

Pracownicy Opery zapewniali nas, że urządzenia cechuje wspólne zunifikowane jądro, dlatego postanowiliśmy przetestować jego odporność na mechaniczne uszkodzenia. Najpierw upuściliśmy urządzenie z wysokości jednego metra, co odpowiada zsunięciu z typowego biurka lub niskiej szafki.

1 meter above the ground

Następnie powtórzyliśmy próbę dla wysokości typowego regału biurowego, zwiększając wysokość do półtora metra.

1.5 meter above the ground

Oba testowane przez nas urządzenia nie wykazywały najmniejszych śladów zewnętrznych uszkodzeń. Co więcej, funkcjonowały przez cały czas przeprowadzania testu z fabryczną dokładnością.

After hitting ground

Takiej stabilności konkurencja może Operze tylko pozazdrościć. Trzeba również zauważyć, że produkt Opery wymagał do działania znacznie mniej miejsca i siły niż wiodące obecnie na rynku produkty konkurentów.

A tak poważnie, to byliśmy dzisiaj na konferencji prasowej związanej z oficjalnym ogłoszeniem działalności wrocławskiego biura Opery. Było bardzo kameralnie, w niedużej salce konferencyjnej znaczącą część widowni stanowili pracownicy biura.

Rozpoczął Jon von Tetzchner (przepraszam, jeśli przekręciłem nazwisko), prezes i założyciel firmy. Opowiadał o historii firmy, o tym jak z prowadzonej przez dwie osoby, jednoplatformowej konkurencji Mosaic zmienili się w czterystuosobową firmę, której produkt działa na niemal każdym systemie operacyjnym. Powiedział też, że wierzą w jedną Sieć, w której nie ma miejsca na WAP. I nie sposób się z nim nie zgodzić.

Wspomniane czerwone piłeczki znakomicie ułatwiały rozładowanie stresu związanego z koniecznością słuchania tłumaczki, która interpretacją wypowiadanych słów nie ustępowała swym telewizyjnym kolegom. Dowiedzieliśmy się więc, że ninety five per cent oznacza jedną czwartą a 1500 sign-ups to półtora tysiąca odwiedzin.

Dalej jeden z pracowników polskiego oddziału opowiadał o przyczynach wyboru Wrocławia na siedzibę. Współczuję mu nieco, bo o ile mówił sensownie, to ręcę mu się trzęsły tak, że pilotem od Wii ledwo trafiał w przyciski. Z Marvelem przez chwilę chcieliśmy go też wypromować na księdza, kiedy to zaczął mówić, jakby miał word-spacing: 2em. Wygląda na to, że jako mówca został wybrany spośród grona pracowników metodą najkrótszej słomki ;)

Było bardzo miło, na koniec ucięliśmy sobie pogawędkę z programistami z wrocławskiego biura. Pożartowaliśmy chwilę i przyszło nam wracać do pracy. Przez to ominął nas, niestety, poczęstunek. I o ile z bólem serca, ale zniosę niemożność kontynuacji rozmów kuluarowych, o tyle odżałować nie mogę kawy i ciastek. Wracam więc do pracy, głodny.

Nielegalne tłumaczenie

Jak podaje Gazeta, policjanci zatrzymali dziewięć osób, które nielegalnie tłumaczyły dialogi z filmów. Czy to ja jestem przed poranną kawą, czy może to zdanie jest zwyczajnie idiotyczne?

Jak można nielegalnie tłumaczyć? Nielegalne może być rozpowszechnianie tłumaczeń książek bez zgody wydawcy, nielegalne może być kopiowanie filmów. Ale tłumaczenie? Może sam fakt, że znam biegle jeden język obcy i dwa inne w stopniu podstawowym jest już dostatecznym powodem, żeby mnie aresztować? Można bowiem domniemać, że skoro posiadam wszelkie po temu predyspozycje, mogłem uczyć się języków z zamiarem tłumaczenia. A to jest przecież nielegalne.

Czy jeśli opowiem koledze film, to złamię prawo? A jeśli film był po francusku i będę go opowiadał po polsku?

Czy napisanie streszczenia książki jest legalne? A recenzji filmu? Można przecież podnieść podobny argument — w przypadku 90% serwowanej nam przez kina papki, po przeczytaniu recenzji, mniej ludzi obejrzy film, bo część uzna, że to szmira.

Polskie listy dialogowe szkodzą kinematografii dokładnie w ten sam sposób. Przecież nikt nie przeczyta samych napisów zamiast obejrzenia filmu, prawda? A czy któryś z serwisów oferował nielegalne kopie filmu do pobrania? Nie oferował, to o co chodzi?

Panie Gutek i inni wydawcy, ja oglądam filmów dużo. Mam w domu całe sterty legalnych płyt, oglądałem też masę pirackich kopii. Gdyby chociaż połowę z interesujących mnie tytułów dało się kupić w Polsce, to byłbym szczęśliwy. I tak, zapłaciłbym za nie. Dlatego, żeby je mieć, nie dlatego, że czekam na wasze spolszczenia. Angielskie filmy oglądam w oryginalnych wersjach językowych. Japońskie z angielskimi napisami.

A panowie niech się zastanowią, co wam złego zrobili tłumacze. Ja bym na waszym miejscu podpisywał z nimi kontrakty zamiast podawać ich do sądu. Bo oni — w przeciwieństwie do waszych profesjonalistów — nie uważają, że fuck to znaczy kurczę.