This function is based on phpion's code but with added PNG-24 alpha channel support. Took me a while to figure it out, but imagecopymerge doesn't support transparency (don't ask me) so I had to use imagecopy and turn on imageAlphaBlending (despite what people in PHP manual's comments say). Too bad it couldn't be done in application/ and I had to edit system/ files.
Wpis ten dedykuję przede wszystkim osobom, które dopiero zaczynają szeroko pojęty freelancing, a nie starym wyjadaczom, dla których to o czym piszę będzie oczywiste. Więcej na ten temat znajdziecie również na blogu Marcina Kosedowskiego.
Wszystko zaczyna się gdy dostajemy nowe zlecenie. Pieniążki nęcą, wszystko wydaje się być proste, klient ma nawet ciekawe pomysły. Ustalamy terminy, może nieco zbyt optymistycznie, ale z nadzieją, że w najgorszym razie zarwie się kilka nocek. Wszystko jest cud, miód i orzeszki.
Zaczynamy pisać kod. Na początku tłucze się sam, wszystko jest banalne i idzie samo. Klient czasami coś tam doda od siebie, może pomarudzi, ale ogólnie nadal jest sympatycznie. Na wszystkie maile odpowiadamy błyskawicznie, odpisujemy klientowi na smsy, rozwiewamy wszystkie wątpliwości i odpowiadamy na pytania. Gdy już mamy prawie gotowy serwis, nadchodzi druga faza.
Nagle okazuje się, że połowa z tego co zrobiliśmy "jednak klientowi nie pasuje". Zaczyna się żmudne poprawianie i przerabianie już istniejących rzeczy. Specyfikacja, która wcześniej wydawała się klarownie jasna nagle okazuje się zagmatwana, bo to jednak nie o to chodziło. Dopiero wtedy zauważamy, że mnóstwo znaczników typu jak w serwisie XYZ tak naprawdę oznacza tak jak sobie wymyśliłem i trzeba się zdrowo domyślać. Najczęściej dotyczy to frontendu, ponieważ funkcjonalności są w mniejszym lub większym stopniu kopią.
Zagryzamy zęby - jeszcze jest czas. Do deadline zostało parę dni / tygodni, zdążymy wszystko zrobić.
Deadline. Straszliwa, czerwona krecha, która straszyła nas przez całą fazę drugą właśnie nadeszła. Projekt nadal nie jest skończony, ponieważ klient zażądał funkcjonalności, których nie było w specyfikacji. Na dodatek w trakcie sprawdzania błędów nagle okazuje się, że w kodzie jest mnóstwo małych, złośliwych chochlików, które psują całokształt. Klient zaczyna wybrzydać, że to mu nie pasuje, tamto nie działa, być może zaczyna nawet grozić zerwaniem umowy albo karami finansowymi. Poprawki zaczynamy robić na odwal się i przestajemy przejmować się optymalizacją.
Tydzień po deadline. Dwa tygodnie po deadline. Klient nadal marudzi, nagle przestaje mu się podobać cały design. Wkurzasz się i przerabiasz. Zaczyna mu przeszkadzać to jak wcześniej działał serwis, też przerabiasz. Prawie każdy mail zaczyna być oznaczony pilne albo na dziś / do jutra musi być. Gdy siadasz do projektu, zaciskasz zęby i masz ochotę uderzyć monitor. Pieniądze, które w pierwszej fazie cię nęciły, teraz wydają ci się śmiesznie małe w porównaniu z tym przez co przechodzisz. I tak powoli, powoli przechodzisz do ostatecznej fazy.
Masz już dość. Pieprzysz pieniądze, pieprzysz klienta, pieprzysz wszystko. Zaczynasz zajmować się pierdołami lub innymi zleceniami, bo nie możesz już patrzeć na dzieło twoich rąk, które jeszcze kilka tygodni wcześniej tak radośnie kodziłeś. SMSy od klienta zbywasz wciśnięciem przycisku, a na maila wchodzisz raz dziennie, żeby przejrzeć litanię poprawek. Dorzucasz je sobie do todo i idziesz się opieprzać. Od czasu do czasu skubniesz troche kodu lub nagłym zrywem nadziei poprawiasz wszystko tylko po to, żeby dostać kolejną listę. Etap ten kończy się w zależności od cierpliwości obu stron albo zakończeniem zlecenia, które jakościowo mocno odstaje od tego, co chcieliśmy uzyskać (głównie ze względu na poprawki klienta) albo zerwaniem umowy i utratą zlecenia, co kwitujemy krótkim łatwo przyszło, łatwo poszło i idziemy pracować nad czymś ciekawszym.
W jaki sposób uniknąć takich sytuacji? Poniżej tłumaczenie tekstu 10 Reasons to Politely Decline a Web Design Gig. Oto lista czerwonych lampek, które powinny nam zaświecić podczas przyjmowania zlecenia. Właściwie jest to lista dla webdesignerów, ale poza 4, 8 i 9 dotyczy również developerów.
Dodatkowo, przed chwilą znalazłem piękny filmik obrazujący sytuacje znaną z webdeveloperki/webdesignu, ale w odniesieniu do innych zawodów:
Zaczęło się od tego, że byłem zmęczony pracą. Postanowiłem usiąść sobie, zrelaksować się i poprojektować trochę designy na kartce papieru. Sięgnąłem po ołówek i odkryłem, że jest niezaostrzony. Wziąłem kolejny - to samo. Wyszło na to, że na 5 ołówków mam 5 albo złamanych, albo całkiem nowych. No tak nie może być! Zabrałem się do poszukiwań...
Jest to tak zwane cyberpunk music. Na początku trudno mi się do niej było przyzwyczaić, ale po jakimś czasie zaczęło mi całkiem przyjemnie grać w uszach ;)
Przy okazji polecam serwis Grooveshark, o którym chyba zresztą już było na Joggerze przy okazji wprowadzenia abonamentu na last.fm ;)