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 RDBMS — indeksó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.

Ja myślę, że powinieneś wysłać na WTF.com. ;-)
muszę to przeczytać na kwasie będąc… jazdaaaa! :)
nic z tego nie skumałem ale zajęty byłem aż do samego końca arta. patrys, dla takich jak ja na końcu jakaś goła babka by się przydała. wiesz, żeby się miało wrażenie, że z wykładu coś się wyniosło :)
Ojojoj, niepotrzebnie skracałem, jest jakiś wtf.com, a ja oczywiście miałem na myśli worsethanfailure.com.
Hehehehe :) Skad ja to znam :>
Tia, LAMP przyciąga masę takich “programistów”.
No przepraszam, już więcej nie będziemy ;D
widziane ostatnio w mysql;
UPDATE [...] WHERE index=’”.$line[2].”‘ AND index” AND index IS NOT NULL AND index0;
gdzie ‘index’ jest typu int i tez nie ma klucza,
50 tys. takich wpisów wykonywało (by) się ok 9 min (wczesniej php’owi kończy się czas)
Po szybkiej poprawce całość trwa ok 2 sekund.
No coz, pauperyzacja zawodu.
Rozumiem ze nie poprawiałeś tego wszystkiego za darmo. Więc przez jakiegoś klepacza, jest co robić i za co brać pieniądze.
ech, niestety to samo można powiedzieć o dużej części ‘aplikacji łebowych’, a potem klient prosi aby coś **tylko poprawić**, bo poprzedni programista chyba czegoś nie dorobił… i jak tu wytłumaczyć, że często łatwiej jest to napisać od nowa niż poprawić? szczególnie jeżeli pisanie komentarzy w kodzie to zdaje się dla wielu straaasznie nudne i męczące zajęcie
pieknie napisane :)
Dobrze to opisałeś.
A co do komentarzy to albo już o nich zapomnieli, albo wstydzą się je pisać. Bo przecież tacy dobrzy programiści nie muszą ich pisać, spojrzą tylko na kod i już wiedzą co on robi, tą są zawodowcy przecież ;-)
“i jak tu wytłumaczyć, że często łatwiej jest to napisać od nowa niż poprawić? ”
Bardzo prosto - przedstawić rachunek finansowy. W wielu znanych mi przypadkach - działa.
Gorzej, jeśli jakiś klepacz wcześniej pracował w naszej firmie. Wtedy to jest faktycznie problem.
Tak to już niestety bywa. Miałem podobną historię, jako że pracuję jako jeden z administratorów w firmie świadczącej usługi hostingowe.
Było to tak: Pewnego pięknego dnia, dostaliśmy zgłoszenie od zdenerwowanego klienta, który twierdził, iż nasze maszyny są kijowe (użył innych słów, domyślcie się jakich), “nie działają” i przez to jego sklep nie działa prawidłowo.
O co chodziło? Klient miał sklep, do którego importował produkty z jakiegoś zewnętrznego systemu, który generował plik z aktualną bazą towarów. Plik ten liczył ~15 tysięcy rekordów i był następnie “przerabiany” przez skrypt PHP, który za jednym wywołaniem wykonywał prawie 2 razy tyle zapytań SQL. Jak się możecie domyśleć, serwer “ucinał” ten skrypt po osiągnięciu max_execution_time, nie pozwalając mu wykonać tych ~30 tysięcy zapytań SQL… Skrypt importu był tak tragicznie napisany, że spędziłem 2 godziny na przerabianiu go - skończyło się na wykonywaniu zazwyczaj jedynie kilku zapytań SQL, a czas wykonywania był mniejszy niż 0,5 sekundy. Dodam, iż naprawa (czyt. przepisanie) skryptu rozpoczęła się w około 30 minut po zgłoszeniu.
Jak się odwdzięczył klient? Oczywiście nie odpisał na obszernego maila z opisem zmian, nie podziękował, a dzień później… zjechał nas na popularnym forum internetowym za kijową jakość usług i fakt, że “serwer nie działa, a on szuka poważnych i porządnych firm hostingowych”.
Na zakończenie tylko dodam, że koleś płacił za najtańsze konto, a abonament był praktycznie równy 2 roboczogodzinom przeciętnego informatyka. Naprawę skryptu zrobiliśmy oczywiście za darmo.
Bywa… Taki już urok tej pracy, nie ma co się zrażać, mimo takich wydarzeń i tak chętnie pomagam klientom ;-)
pracownik, wyglada na to, ze zle wykonales robote: po pierwsze nie poinformowales klienta, gdzie lezal problem (albo zrobiles to niezbyt komunikatywnie), po drugie wykonales czyjas robote za darmo..
wyszlo na to, ze zostales zjechany, wiec “naprawiles serwer” i jeszcze zwaliles wine na bogu ducha winnego autora serwisu.. :)
O jezu, jak słyszę o przeróbkach w skrypcie to mnie zawsze krew zalewa…
Ej, Panie Patrys! Gdyby tak zebrać moje Daily WTF, to pewnie wyszłaby książka. Napisana w kilka dni. Od 24 miesięcy nie dotykam “gotowych systemów”. Starczył mi pojedynek z Mambo, który zakończyłem wyrwaniem flaków z tego systemu i zdublowaniem wszystkiego własnym kodem.
enbewu ma racje. Trzeba walić klientowi kawę na ławę. ;p
@pracownik - dzień jak co dzień.
@rafalski - po Twoim wpisie wnioskuję, że pracę z klientami znasz z opowiadań.
@patrys - programista mógłby pisać lepiej, ale:
- na wczoraj są 2 inne bardzo ważne projekty które zlecił partner strategiczny firmy i trzeba się pośpieszyć, bo to bardzo ważny klient jest
- nie ma wiedzy, bo jest po studiach informatycznych i na magisterkę pisał sklep (z wykorzystaniem register_globals=on - krew mnie kurwa zalewa !)
(i na koniec mój ulubiony ostatnimi czasy tekst)
- mógłby lepiej, ale stawka blokuje
jak czytam takie wpisy to cieszę się, że nie zostałem informatykiem, a moja znajomość programowania skończyła się na podstawach C++ :)
chociaż jak na zielonego w temacie zrozumiałem całkiem sporo.
wojtosz:
“Wysoki sądzie, nie zaszyłem pacjenta, bo była kolejka na izbie przyjęć.” :)
Tak to już bywa z darmowymi produktami, trzeba się z nimi nieźle narąbać aby chodziły szybko i bezproblemowo. Ja miałem taki problem z wordpressami, przy dużej ilości postów i dziennym archiwum blog z każdym dniem zaczynał coraz wolniej chodzić. Dopiero dodanie indeksów znacznie go przyspieszyło.
wojtosz : stawka blokuje i na ksiazki/szkolenia nie stać ? :)
patrys : “Całe dziesięć poświęciłem na dodanie prawdziwej nowinki w świecie RDBMS — indeksów do tabel” dzieki za polepszenie humoru - choc tez sie z takimi rzeczami spotykam.
@wolnystrzelec
mówisz o mojej osobie czy ogólnie ?
nie jestem programistą (w pełnym znaczeniu tego słowa). google uczą za free. ubolewam, że wielu nie potrafi z tej wiedzy skorzystać. książki (papierowe) zajmują miejsce, kosztują i nie można ich uaktualniać. na szkolenia nie uczęszczam. staram się natomiast być na `wykładach` organizowanych przez osoby o uznanym autorytecie; wykłady takowe zazwyczaj są darmowe.
coś pominąłem ?
wojtosz:
Co to za nauczyciel, jeśli najpierw trzeba wiedzieć, o co spytać? Jestem pewien, że gdyby ludzi o których piszę słyszeli chociaż o indeksach, to by je dodali.
warto by dodac odnosniki przy : loga “slow queries”
http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html
Muszę przyznać, że jeszcze kilka lat temu sam też dodawałem indeks UNIQUE obok PRIMARY, no bo przecież klucz główny jest unikalny, to pasuje akurat ;) Bardzo możliwe, że gdzieś jeszcze działa jakiś “mój” system z takimi zdublowanymi indeksami :)
wojtosz : :) ogólnie ;)
Sam napisałeś że istnieje wiele źródeł wiedzy (w dodatku darmowych) - dlatego argument “blokującej stawki” do mnie nie przemawia.
wolnystrzelec - kwestia czasu by do tych zrodełdotrzec i się z nimi zapoznać - a jak wiadomo “czas to pieniądz”
> Tia, LAMP przyciąga masę takich “programistów”.
Mam kumpla który w życiu zawodowym miał do czynienia z takimi kwiatkami jak tabele z ponad setką kolumn(telefon1, telefon2…) albo pobieranie danych z kilku tabel najprostszym SELECT.. i wyszukiwanie łączenie zależności w c#. Generalnie twierdzi że najwięcej tych okrutnych kwiatków to widział w MSSQL.
> …
> Jak się odwdzięczył klient?
> …
Od strony dostawcy internetu wygląda to nawet gorzej. Najbardziej dają o sobie znać najwięksi idioci (robią to regularnie i najczęściej ci z najniższymi abonamentami). Standardem są wyłączone modemy, wyłączone połączenia sieciowe (samo się wyłączyło), zawirusowane komputery (130 prób połączeń z serwerami pocztowymi na minutę, ale dziwią się że poczty nie mogą wysyłać albo że wszystko wolno chodzi), firewalle blokujące cały ruch (znajmony “informatyk” mówi że: tak bezpieczniej) i niezainstalowane karty sieciowe. Kiedyś przyczepił się wyjątkowy burak któremu nie szło wytłumaczyć że z serwera z Kamczatki to on z pełną prędkością ściągać nie będzie.
Życze wszystkim jak najmniej nerwów w pracy. Pozdrawiam.
wolvverine : aby utrzymać się na rynku pracy musisz inwestować w siebie i swoje umiejętności (nawet jeśli nie robi tego za Ciebie pracodawca - nie opłaca szkoleń itd.). Nie robiąc nic w tym kierunku - tracisz pieniądze (możliwość zdobycia lepszej pracy/zlecenia/nie wywalenia/whatever).
Co do zjebanych klientów to jednymi z najgorszych buraków są prawnicy. Nikt tak jak oni nie jest równie bezczelny i niegrzeczny.
Co do poprawiania cudzych serwisów bez wiedzy właścicieli to zasadniczo słaby pomysł, zawsze może powiedzieć że sobie nie życzył itp. Ja dzwonię do klienta który wali slow queries i ostrzegam że jeśli nie naprawi swojego sajtu w ciągu tygodnia to go blokuję - działa w 100%.
xarafaxz:
No, no, widzę, że Twoja branża też jest niezła ;-) Teraz już wiem, dlaczego czasem traktowali mnie jak debila, gdy dzwoniłem dajmy na to na infolinię, z informacją że jest jakaś awaria sieci ;-) “Czy modem jest włączony”, “Czy - uwaga - lampki się świecą?”.
Zresztą uwielbiam infolinie: “Proszę zmienić system na Windows XP, nasz internet na linuksie nie działa”
albo
Ja: Nie działa faks,
Operator: Proszę zaktualizować sterowniki na komputerze, do którego faks jest podłączony,
Ja: Ale ja mam komputer zgaszony, nie ma w ogóle sygnału w faksie,
Operator: Nie szkodzi, to najpewniej kwestia sterowników…
qwiat:
Jasne, że to zły pomysł - poprawianie serwisów bez wiedzy właścicieli. Zdarzają się jednak wyjątkowe przypadki, kiedy coś musi działać “na już”. Widzę, że klient nie ma pojęcia o co chodzi i jak mam mu 2 dni tłumaczyć, to czasami wolę mu sam zmienić i napisać co zrobiłem. W tym opisywanym przeze mnie przypadku żadnych plików mu nie podmieniłem, po prostu napisałem mu nowy moduł importu i dałem do osobnego pliku - wszystko bardzo dokładnie opisałem, każdy krok co i jak się wykonuje i dlaczego stary nie działał.
Miałem akurat czas i chęci, to “naprawiłem”. W 99% przypadkach tak nie jest, więc też jedynie ostrzegam, mówiąc co jest nie tak. W 1% pomagam ingerując w kod i 99% ludzi jest wówczas bardzo wdzięcznych, co mnie cieszy. Reszta następnego dnia krzyczy na forach ;-)
Jeszcze do do klientów. Są czasami sytuacje, że np. o 5 rano robimy coś na serwerze i zrestartujemy kilka usług - np. przez 3 minuty nie działa Apache. O godzinie 10:00 dostajemy wówczas maile co to znowu za awarie były, że cały ranek nie działało i że tak się nie da normalnie pracować, jak te maszyny takie awaryjne! Czasami zamuli odpalony SpamAssasin i minie 3 minuty, zanim się zrestartuje - wówczas pewne jest otrzymanie 20 maili w stylu “poczta nie działa od 2 godzin”… Do dziś nie wiem o co chodzi, dla mnie to jest największy fenomen w obsłudze klienta - wyolbrzymiają 90% problemów, czasami nawet te, których nie ma.
Chyba można mówić mi klepacz - bo przez skomunikowanie połączeń na trasie praca-dom wychodzenie choćby o 17:05 mogę opłacić godziną oczekiwania na dworcu :P A przesłanie wpisu popieram na całej długości.
To przykre, że niektórzy zaglądają do czegoś takiego jak oscommerce.. a może to po prostu żałosne?
patrys: mnie nie przeskoczysz :D musiałem się zmagać z serwisem który na zapisanie komentarza do artykułu potrzebował ~360 zapytań SQLowych z włączonym cachem i >450 przy wyłączonym. Wierz mi - uniq i pri na jednej kolumnie to jeszcze nic :D
sth: znasz lepszy sposób na postawienie i skonfigurowanie sklepu w 1-2 dni?
A z czego się można dobrze nauczyć RDBMS? ;-)