Skończ z CSS

niedziela, 29.12.2013

less-logo

Jakieś półtora roku temu natrafiłem na LESS.js. Od razu mnie zainteresował i stwierdziłem, że będzie można w tym stworzyć całkowicie modyfikowalną wizualnie aplikację. Koledzy, byli sceptyczni w ogóle w stosunku do LESS-a i sensu jego stosowania.

Przez ten cały czas miałem w głowie, że coś takiego istnieje, ale dopiero życie zmusiło mnie do skorzystania z tej technologii. W jednym z projektów, który był adresowany do osób niepełnosprawnych, było założenie by użytkownik mógł zmieniać kontrasty na stronie, zmieniać czcionkę i możliwie robić jakieś inne rzeczy.
I wtedy w mojej programistycznej „stajni” zadebiutował obok boostrap3. Co prawda, klient się wycofał z funkcjonalności, ale LESS pozostał i z tego się cieszę.

Czym jest LESS.js?

LESS jest jednym z wielu niedawno powstałych języków do dynamicznego tworzenia arkuszy stylów. W dwóch słowa: piszemy w LESS, a otrzymujemy wynikowo arkusz CSS.
Do rodzinki takich języków należą także: SASS, SCSS. Podstawy tych języków są podobne, ale każdy z nich ma garść czegoś innego do zaproponowania.

Dlaczego warto używać LESS/SASS/SCSS?

Zacznę od tego, że niewiele i bardzo skromne powody są ku temu by nie używać takich języków, no chyba że plik CSS ma jakieś marne 100 linijek.

Mały przykład, na którym widać ładne zagnieżdżenia:

#header {
  h1 {
    font-size: 26px;
    font-weight: bold;
  }
  p { 
    font-size: 12px;
    a { 
      text-decoration: none;
      &:hover { 
        border-width: 1px;
      }
    }
  }
}

Drugi przykład to użycie mixins (za wiki)

.rounded-corners (@radius: 5px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
}

#header {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}

Zalet bez liku:

  • już same zastosowanie takich języków sprawia, że kod jest bardziej DRY, nie piszemy ciągle podobnie zagnieżdżonych sekwencji CSS, ale zagnieżdżamy selektory,
  • powyższe sprawia, że łatwo jest nam zmieniać taką strukturę, jest ona przy tym bardziej przejrzysta i oczywiście nie piszemy tych samych sekwencji selektorów po stokroć,
  • możemy stosować zmienne dla kolorów, nazywać je przy tym wg swojego klucza, a następnie używać je we wbudowanych funkcjach takich jak np. darken() ,
  • możemy także używać zmiennych do trzymania innych atrybutów, np. wielkości czcionki, adresu obrazka, czy nazwy fonta,
  • zgodnie z duchem DRY, możemy zastosować tzw. domieszki/mixins, które zachowują się jak funkcja w każdym innym języku programowania, do której też możemy wprowadzać argumenty,
  • możemy operować na parametrach liczbowych z użyciem prostej arytmetyki,
  • jeśli mamy zwykły CSS, kompilator po prostu go wstawi przy kompilacji, jest też możliwość „dekompilacji” CSS do LESS/SASS/..
  • jesteśmy w stanie sprawić (jeśli tylko będzie potrzeba lub chęć), że nasza aplikacja/strona będzie miała nieograniczone możliwości zmiany elementów wizualny czy to losowo, czy to przez klienta, czy to nawet przez użytkownika końcowego – prawda, że pięknie ? :)

Można by tak wymieniać i zagłębiać się w poszczególne języki, ale chyba lista powyżej sprawia, że chęć programowania i uciecha z programowania wzrasta, bo w końcu możemy… zaprogramować sobie CSS :)

Jak kompilować?

Sposobów na korzystanie z LESS/SASS/.. jest wiele. LESS w odróżnieniu od innych tego typu języków (w końcu LESS.js ;) ) ma możliwość modyfikacji w locie strony, bez przeładowania. Co, w pewnych okolicznościach może być piękne i mocno pomocne. Wystarczy wyobrazić sobie, że piszemy w naszym edytorze, zapisujemy plik less, a less watch zmienia nam elementy na stronie i to na każdej otwartej przeglądarce. Czyli, możemy pisać na jednym monitorze i zapisując, na drugim oglądać zmiany np. szerokości o 10px, po zmianach kod mamy już gotowy i zapisany, nie musimy niczego przeklejać.

Innymi sposobami na korzystanie z less/sass/.. to:

  • używanie dedykowany kompilatorów dla naszego języka programowania (np. php, python) – niewątpliwą zaletą takiego rozwiązania jest możliwość łatwego wdrożenia innych osób do naszych projektów, nie muszą one konfigurować swoich edytorów/IDE, nie muszą także instalować dodatkowego oprogramowania i konfigurować
  • edytory stworzone z myślą o CSS i LESS/SASS
  • kompilatory i wtyczki dla IDE
  • same kompilatory

 

Nie wiem, jak wy, ale ja nie chcę już wracać do czystego CSS, bo i po co? ;)

Django again

poniedziałek, 09.09.2013

Python (logo)

Powrót do Pythona był dla mnie wyczekiwanym momentem.

Dawno temu musiałem go poznać, żeby wykonać kilka projektów w pracy.

Od samego początku byłem zaciekawiony tym tworem, który nie posiada nawiasów klamrowych (szok!;)), a zamiast tego jedynie wcięcia.

Po pierwszych chwilach, które były mocno irytujące, polubiłem ten język i pragnąłem do niego wrócić.

W sumie, to nie wiem, jak można go nie lubić. Ma przecież tyle zastosowań (nie tylko aplikacje web jak popularny PHP), tyle możliwości implementacji (Jython, IronPython), tylu zwolenników (np. wielki Google) i parę innych zalet.

Nigdy jednak nie byłem człowiekiem, który od tak sobie dzióbdzia coś w języku (czy technologii), tylko dlatego, że jest fajny, albo warto się go nauczyć, nie zaczytywałem się też bez sensu w bibliach programistycznych. Zawsze uczyłem się przy okazji projektów, które po prostu trzeba było wykonać. Tak samo nauczyłem się Pythona i tak samo zarzuciłem jego użytkowanie – z braku powodów i projektów.

Django to jeden z najpopularniejszych albo najpopularniejszy z frameworków dla Python, choć ponoć są lepsze. Kiedyś, parę razy podchodziłem do tego tworu, aby zbudować autorską aplikację do zastosowań własny. Wtedy wygrał pragmatyzm i duet Zend Framework z PHP. Teraz jest ten czas by wkroczyć znowu do tej samej rzeki. Lodowatej rzeki, bo pierwsza konfiguracja Django i sprawienie, żeby to wszystko ożyło zawsze było utrapieniem. Ale do dzieła… :)

Tak na marginesie. Po kilku dniach przerwy z samym Django, przypadkow znalazłem ciekawy artykuł Wprowadzenie do Pythona, co prawda jako wprowadzenie jest średnie, ale jako przypomnienie Pythona lub Python dla ciekawski jest elegancki.
Dla osób, które chcą się nauczyć Pythona spotkałem się z zaleceniami by sięgnąć po pozycję Zanurkuj w Pythonie, ale jeszcze nie zdążyłem tego przeanalizować.

Pomidorowy sposób na efektywność

środa, 17.07.2013

Pomodoro - sposób na efektywność
Pojęcie wydajności pracy człowieka (ale i nie tylko) od wielu już lat jest głównym wskaźnikiem pozwalający ograniczać koszty i maksymalizować zyski.

Niestety albo stety (zależy od punktu widzenia) zwiększanie wydajności pracy nie jest całkowicie tożsame ze zwiększaniem się zarobków.

Większą korelację można zaobserwować względem zwiększonych zysków właścicieli i koncernów. Życie…

Część pracującej populacji jest w stanie dość jasno określić przynajmniej niektóre z poniższych:

  • ile jednostkowej ilości usług/produktów są w stanie wytworzyć
  • ile musi wytworzyć w ciągu danej jednostki czasu
  • jaka jest norma dla jego stanowiska pracy
  • jakie są widełki i jakie kary/bonusy
  • mają wyszczególniony proces produkcji krok po kroku

Oczywiście spora część pracujących nie ma jasno sprecyzowanych norm, które da się określić. Są to np. lekarze pogotowia, którzy nie wiedzą czy pod czas dyżuru przyjmą 100 czy 10 pacjentów, są to także ludzie na kierowniczych stanowiskach, którzy mają nienormowany czas pracy.

Programista z natury swojego zawodu, jest twórcą, artystą, inżynierem. Podczas każdego dnia pracy wykonuje wiele różnych zadań, których czasem nie da się przewidzieć, które czasem bywają ze sobą powiązane czasem nie. Każdego dnia programista ma całą gamę celów, powiązań i obostrzeń. W takim środowisku nie trudno o rozkojarzenie, stres, błędne decyzje i mizerne efekty. Niektórzy sobie z tym radzą, niektórzy muszę więc znaleźć metodę dla siebie.

 

Technika Pomodoro 

To bardzo prosta technika. Jej nazwa wywodzi się od kuchennego czasomierza (który czasami bywa właśnie w formie pomidora), który odlicza zadaną ilość minut, po których należy np. wyciągnąć ciasto z piekarnika. O upływie zadanego czasu informuje nas alarmem.

Jak to działa Pomodoro? – prosto:

  1. (za pierwszym razem) określamy czas – np. Pomodoro = 25 minut
  2. określamy jasno zadanie albo 2-5 mniejszych zadań
  3. nastawiamy czas
  4. robimy tylko to i nic innego
  5. odpoczywamy (najlepiej przez określoną ilość czasu)

 

Taki system bardzo łatwo sprawia, że:

  1. Dzielimy swój czas na dwie wirtualne części, na:
    • tą w które pracujemy
    • tą w której jemy, pijemy, odpoczywam, załatwiamy swoje sprawunki, czy robimy przeróżne inne rzeczy
  2. Musimy sami siebie zmusić do jasnego określenia co będziemy robić przez tego jednego Pomodoro- możemy oczywiście określić „będę pracował”, ale to trochę mija się z celem…
  3. Robimy tylko jedną rzecz albo rodzaj czynności, a nie zajmujemy się „wszystkim i niczym”, wszystko inne nas nie obchodzi:
    • na telefon odpowiemy po Pomodoro
    • pocztę czy facebooka sprawdzimy po Pomodoro
    • zrobimy sobie kanapkę po Pomodoro
    • zrobimy pierdyliard innych rzeczy, ale dopiero po Pomodoro
  4. Z czasem jesteśmy w stanie określać, że na daną czynność potrzebujemy N liczbę Pomodoro
  5. Wiemy ile jeszcze czasu musimy „się sprężąć” i kiedy nastąpi odprężenie / przerwa
  6. Jak odpoczywamy to odpoczywam, jak pracujemy to pracujemy

Jak łatwo zauważyć każdy Pomodoro to niemalże świętość. To jest nasza umowa ze sobą samym, że teraz Pomodoro od samego początku, aż do samego końca. Nastawiamy czas i zostajemy wchłonięci.

Pomodoro staje się także dla nas jednostką miary czasu i znakiem, że DZIAŁAMY.

Jeśli chcecie dowiedzieć się więcej zapraszam na PomodoroTechnique.com, a także na blogi i filmiki związane z tematem.

 

Niech Efektywność będzie z Wami!!!

 

 

ExtJS – prezentacja

środa, 28.11.2012

ExtJs jest potężnym frameworkiem javascript wyposażonym w zestaw gotowych/wbudowanych kontrolek umożliwiający łatwą budowę rozbudowanych aplikacji opartych o technologię AJAX. ExtJS, jest budowany i zarządzany przez Sencha (Sencha.com).

W stosunku do bardzo podobnego Dojo, z którego także miałem okazję korzystać przy budowie mniejszych aplikacji, większość pracy i zmian, pochodzi z jednego ściśle określonego źródła, czyli od pracowników Sencha. Co jak się okazało (Dojo poznałem później) jest idealnym rozwiązaniem, gdyż w tym przypadku rozwój dobrego już wcześniej produktu ewoluuje w ściśle określonym kierunku, co sprawia, że ExtJS 4.* jest dobrym rozwinięciem idei poprzednich wersji i coraz przyjemniej się z niego korzysta. Także dokumentacja, choć nie zawsze idealna znajduje się w jednym ściśle określonym miejscu, jest przejrzysta i funkcjonalna.

Ale do rzeczy….

ExtJS 4, jest narzędziem kompleksowym. Szczyci się tym, że można zbudować za jego pomocą aplikację webową, która wygląda zupełnie jak desktop. Osobiście, nie widzę w tym większego sensu, ale mam kolegę, który pracuje na nad rozbudową i konserwacją takiego właśnie systemu. Sam framework choć rozbudowany, jest stosunkowo prosty w implementacji, a podążając za przykładami dostarczonymi przez twórców lub dużo lepiej, za gotowym już kodem aplikacji w którą się wdrażamy, łatwo jest zacząć tworzyć swój własny kod. Oczywiście, potrzebna będzie znajomość Javascript-u przynajmniej na poziomie gdzieś pomiędzy minimalnym i średnim, a do tego przynajmniej teoretyczną wiedza jak działa technologia AJAX.

Aplikacje w ExtJs składają tak z jakby z dwóch warstw.

Warstwa danych i warstwa interakcji z użytkownikiem. Za pomocą technologii AJAX i notacji JSON te dwie warstwy komunikują się ze sobą.

Do generowania, dodawania i modyfikacji danych, a także do obsługi serca samej aplikacji wybieramy język typu PHP, Python.

Za pomocą Javascript dodajemy elementy wbudowane w ExtJS takie jak np. formularz, przyciski, gridy. Mamy także do wyboru różne warianty wyświetlania elementów na stronie, grupowania ich wg potrzeb i np. określania interakcji między nimi. ExtJs dba o to by wszystko (całość to oczywiście html i css)wyświetlało się podobnie w każdej przeglądarce (tak samo jak w znanym jQuery).

Najczęściej w pracy z ExtJs korzysta się z dobrze skonstruowanego narzędzia jakim jest interaktywny Grid. Jest dość przemyślanym modułem o wielu zastosowaniach. Łatwo za jego pomocą przeglądać dane, sortować je, filtrować. Mamy dużo możliwość doboru cech i funkcjonalności dla naszych Grid-ów.

Trudno mi sobie wyobrazić większą aplikację użytkową bez tego elementu.

Zdecydowanie najlepszą cechą tego frameworku jest jego kompletność i dojrzałość. Wszystko co w nim zawarte i wbudowane wystarczy by zbudować nawet bardzo rozbudowane aplikacji klasy biznesowej. Można także, pamiętając o odpowiednich zabezpieczeniach, przenieść stare aplikacji desktopowe do sieci internet czy sieci firmowej.

Warianty licencyjne ExtJS: link

Big project

niedziela, 30.10.2011

Pierwszy raz w życiu zdarza się… jeden raz.

Do tej pory maksymalna ilość osób z którymi pracowałem na danym zadaniem programistycznym ograniczała się do 2 lub 3, ale to max. Zazwyczaj zadania, na których się opierałem wykonywałem sam i byłem za nie odpowiedzialny osobiście. Same zadania, także w poprzedniej pracy nie ograniczały się do jednego klienta, jednego systemu, itp. itd.

Team work - praca zespołowa

Team work - praca zespołowa

Teraz jest zupełnie inaczej. Jestem jednym z elementów dość dużego zespołu programistów. Sama już nasza ilość (w tym momencie, a jest niedziela 21:20, na Skype widać siedmiu, którzy pracują), a ogólnie jest nas kilkunastu, co robi na mnie spore wrażenie. Czasem jest to powodem drobnych nieporozumień, czasem utrudniamy sobie pracę nawzajem. Aby tego wszystkiego było mało, ten projekt, jest w sumie outsourcingiem, czyli jest jeszcze jeden klient pod klientem głównym.

Jak już wspomniałem, to jest coś innego:

  • jest jeden projekt, jedna aplikacja, jeden klient
  • jest jeden język (PHP) i jedna baza (Mysql)
  • jest wielu ludzi, dość mocno skupionych na swoich zadaniach, jednak którym w pewnym stopniu przyświeca myśl, że mamy wspólny cel i starają się sobie pomóc nawazajem
  • są ściśle wyznaczone terminy i etapy
  • używamy systemu umożliwiających pracę zbiorową (SVN, Redmine, Skype)

To dość ciekawe doświadczenie. Jestem jednym, z tych mniej doświadczonych programistów. Jedno co łączy to doświadczenie z poprzednim jest ogólne zwątpienie („ja się nie nadaję!”, „co ja tutaj robię”, „jestem za wolny!”), kiedy zadania, które wykonuje się 5 razy wolniej od reszty załogi, przeplatane z ekstazą jak wiąże się z tworzeniem, jakąś bystrą modyfikacją, czy możliwością pomocy programistycznej koledze.

Czasem czuję się jak kopciuszek programistyczny. Moje kodowanie jest rzadko wymyślne, zmyślne czy tym bardziej powabnym, choć chciałbym oczywiście aby było inaczej. Często stosuję metodę KISS i asekurację w modyfikacji tego co działa, szczególnie jeśli w grę wchodzą transakcje i pieniądze.

Największy stres oczywiście jest kiedy zrobi się commita i nagle pojawiają się błędy, coś nie działa, a jakaś podstrona na serwerze na którym działamy wywala błędami. Wtedy człowiekowi wstyd, że czegoś nie dopilnował, gdzieś popełnił błąd, zapomniał dodać tabeli do bazy na serwerze głównym, a to przecież nie powinno się zdarzyć. Ehhh, ten brak koncentracji i dyletanctwo.

Jednak największym problem jaki mam, to szacowanie czasu potrzebnego na wykonanie zadań. Trudno mi oszacować, nietrudno mi przekroczyć dany czas. Dlatego cieszę się, kiedy nie muszę tego robić. Intensywnie pracuje nad powierzonym zadaniami, nie musi mnie nawet nikt z tego rozliczać co do godziny, żebym czuł presję.

Nie mniej jednak uczę się tego i mam z tyłu głowy fakt, że ja też muszę być ważny dla siebie w tej układance. Za niedługo projekt w PHP (jedyny w tej firmie dla tego języka) może się skończyć, tak samo jak moja umowa i nie wiadomo jaka może okazać się przyszłość. Możliwe, że dostanę szansę przebranżowienia, ale może != na pewno.

Szanuj swoje zdrowie

poniedziałek, 22.08.2011

Jako że bardzo mocno opierałem się przed innym typem umowy, niż umowa o pracę, taką też miałem okazję podpisać z moim nowym pracodawcą. Ta forma umowy ma różne plusy i minusy. Minusem jest chociażby dość duży dysonans przy wypłatach na linii umowa o pracę – umowy cywilnoprawne, ale coś za coś. Dużym plusem są wielorakie funkcje zabezpieczające takiej umowy, a także różne prawa i obowiązki.

Jednym z minusów jest to, że trzeba zaliczyć szkolenie BHP . Jako że centrala mojej nowej firmy jest w Gliwicach udałem się tam potulnie (na szczęście dzięki dobrej pogodzie na motorze). Szkolenie jak to szkolenie, nic co mogło zaskoczyć. No może poza tym, że szkoleniowiec był także motocyklistą, wystąpiło więc wiele wątków pobocznych ;).  Nie jedno już przeżyłem w swoim życiu szkolenie BHP, tak na oko to już 5 czy 6. Tak naprawdę szkoleniowiec musi obskoczyć wiele zagadnień i sprężyć się przy tym, żeby jak najmniej osób zasnęło. Zawsze się znajdzie jakiś nowy element, ale zazwyczaj człowiek już większość rzeczy wiedział wcześniej, czy to ze szkoleń, czy choćby z doświadczenia.

Ja sam siebie postrzegam jako osoba odpowiedzialna i widząca w pewnej perspektywie, można powiedzieć nawet, że ostrożna. Do jakiejkolwiek pracy nie pójdziemy, musimy być świadomi jednego, nie ma takiej pracy, która nie powoduje takiego czy innego uszczerbku na zdrowiu. Musimy także sobie uświadomić jak wiele życia poświęcamy lub zabiera nam praca.

Do pracy należy podejść z odpowiedzialnością. Zarówno w stosunku do obowiązków jak i do siebie samego, i swojego zdrowia. Każdy sam, na podstawie wiedzy, doświadczenia i opinii, powinien wypracować sobie jakiś model funkcjonowania w pracy (np. mini relaksacje, ćwiczenia, programy wspomagające). Każdy powinien odpowiedzialnie gospodarować swoim zdrowiem (fizycznym i psychicznym), bo nikt tak naprawdę mu nie nakreśli wszystkich zagrożeń (nawet na tygodniowym szkoleniu BHP), nikt nie będzie za nim chodził i pokazywał mu jak ma prawidłowo siedzieć i kiedy robić przerwy, a już na pewno nikt nie każe mu kategorycznie dbać o swoje zdrowie, bo to już nie czasy szkolne.

To każdy z nas powinien się dokształcać w tym wszystkim o czym m.in. mówią szkolenia BHP, np. :

  • prawo pracy
  • obowiązki i prawa zarówno pracownika jak i pracodawcy
  • pierwsza pomoc
  • przepisy BHP
  • ergonomia
  • funkcjonowanie organizmu
  • zapobieganie chorobom, dysfunkcjom i urazom
  • relaksacja, odreagowywanie i zapobieganie nadmiernemu stresowi

bo:

  1. nigdy nie wiesz czy pewne zagadnienia nie będą dotyczyć ciebie (np. spór z szefostwem)
  2. może na starość będziesz chciał poczytać wnukom czy ponosić ich „na barana”
  3. łatwiej jest zapobiegać niż leczyć
  4. gdy pojawi się coś niepokojącego, możliwe że twoja reakcja będzie szybsza

To takie ogólnikowe przemyślenia. Ja przez wiele lat dokształcałem się i zdobywałem doświadczenie w tych wszystkich zagadnieniach. Robię to nadal. W pracy daje z siebie wszystko (takie mam „głupie” zasady), jednocześnie dla swojego zdrowia staram się zrobić w tym czasie to co w mojej mocy. Bo nie mam zamiaru, za parę lat, nosić takich okularów jak Stępień z serialu 13 Posterunek.  Przemyślcie to jak traktujecie swoje zdrowie w pracy.

Bezrobocie

piątek, 18.03.2011

Nadszedł czas posuchy i braku pracy programistycznej. Szczerość czasem ma swoje dobre i złe strony. Jakby nie było pod górkę jest ciężej, ale za to większa satysfakcja (przynajmniej dla mnie).

Oczywiście mieszkam w Bielsku-Białej, gdzie jakaś oferta pojawia się co parę dni i zazwyczaj do tego głównie w .NET albo dla pro w JAVA, a jak już pojawia się coś w PHP czy ewentualnie Pythonie (ależ go ostatnio polubiłem! :) ) to trzeba mieć oczywiście dużo doświadczenia i dużo więcej przeróżnych umiejętności, których ja niestety do tej pory nie nabyłem.

Cóż było zrobić? Dotarłem w końcu do Urzędu Pracy. Zarejestrowałem się. Będę mieć przynajmniej na waciki, bo przysługuje mi 80%. Paradoksalnie za miesiąc przysługiwałoby mi 0%, ale szef postanowił się pożegnać ze mną właśnie teraz ;). Oczywiście nie liczę na pomoc Urzędu, no chyba że jakieś szkolenia, ale oni też trudno. Otwarcie czegoś swojego, nawet budki z hot-dogami (czemu by nie? ) przy dofinansowaniu UE nie wchodzi w grę bo UP nie ma przydziału.

No cóż. Rozglądając się po ofertach pracy musiałem nakreślić sobie jakiś plan rozwoju. Oczywiście nakreśliłem go w tym co umiem i co dlatego będę udoskonalał. Rynek pracy w Bielsku-Białej jest trudny dla programisty. Wystarczy powiedzieć, że w Poznaniu wyszukiwarka praca.trovit.pl znajduje 377, w Bielsku aż 16, nie wspominając już o 582 we Wrocławiu. Oczywiście jedynie część tych ofert pracy dotyczy programisty PHP lub Python-a.

Trzeba było nakreślić sobie jakiś plan działania. Bo jeśli lubi się programować i woli się to robić za minimum krajowe, niż iść np. do fabryki z możliwością dostania od razu pod 2 kafle na rączkę, to trzeba zacząć działać. No na razie mam ochotę się sprawdzić w tym co robię. Polubiłem tworzenie czegoś z niczego. Polubiłem zarówno małe skrypty, jak i rozbudowane aplikacje z bazami danych 500 mega w początkowej fazie rozwoju.

Frameworki

No cóż, pracodawcy wymagają i trzeba wybrać. Oczywiście jeśli chodzi o Pythona-a to nie ma wielkiego problemu – Diango i po sprawie. Jeśli chodzi o PHP nie jest już tak prosto i jednoznacznie. Korci CakePHP, który jest zachwalana choćby za szybko i prostotę. Zend za, którego postanowiłem się zabrać, może jest trochę krowowaty i skomplikowany, ale pożądany przez pracodawców. Na uwagę także zasługuje Kohana i poleceny przez mojego kolegę Yii, którego charakterystyka w tabeli porównawczej frameworków jest naprawdę imponująca.

Design / Layout

Muszę przyznać, że chyba nie jestem pod tym względem super uzdolniony, ale też muszę przyznać, że to nie było nigdy u mnie na pierwszym planie. Teraz jednak, myśląc po części o tworzeniu swoich rozwiązań, muszę to wszystko podnieść na wyższy level. Także GIMP i Inkscape w dłoń ;).

Javascript

No niestety pokutuje niski poziom. Omijaniem tego tematu dopadło mnie dopiero w pracy, gdzie musiał tworzyć i modyfikować rozwiązania JavaScript. Z jQuery jest gorzej, bo w pracy akurat można było zebrać za niego opierdol. No cóż. Niektórzy muszę mieć jQuery bo inaczej ich życie traci sens :D, a niektórzy widzą, że nie zawsze jQuery jest konieczny i wogóle celowy. Znajomość jQuery – jeszcze gorzej.

AJAX

Zagadnienie AJAX to coś co zacząłem, ale nieoczekiwane zdobycie pracy, która wymagała dużo nauki odciągnęła mnie od tego tematu. Gdzieś tutaj muszę się w niego wgryźć.

Flash

I tutaj jest bolączka. Od paru lat korzystam jedynie z darmowego oprogramowania. Widzę, że część developerów bardzo przyjemnie sobie zarabia robią względnie dość proste strony na bazie Flash-a. Oczywiście dostrzegam, że wiele takich projektów, głupotą jest robić za pomocą Flash-a. W zasadzie z pozycji kogoś kto zna się na pozycjonowaniu, nawet mogę powiedzieć debilizmem jest tworzenie stron Flash-owych, które w zasadzie nie korzystają z dobrodziejstw Flash-a :D, a wszystkie efekty są co najmniej do powtórzenia za pomocą JavaScript, a czasem w ogóle nic pozytywnego nie wnoszą do projektu. No cóz… sam wszedłbym we Flash-a, ale wiem ile kosztuje i nie mogę sobie na niego pozwolić (jest SWiSH, ale nie wiem czy jest sens się rozdrabniać). Jak mawia mój „mentor” ;) Jaruś Kaczyński ;), „Zasady zobowiązują”. A mnie zobowiązują do OpenSource i darmowego oprogramowania jaknarazie. Także Flash odpada narazie…

Języki obce

No cóż angielski wystarcza by dokumentację poczytać, ale chyba trzeba się trochę podszkolić. Niby po krótkie przygodzie z Irlandią teraz już wiem, że za granicę to jedynie na max max max 6 miesięcy, nie mniej jednak myślę o takiej przygodzie i sprawdzeniu się. Oczywiście nie z bieżącymi umiejętnościami, ale z JAVĄ w butonierce, myślę o Berlinie ;). Ale to melodia przyszłości. Nie mniej jednak niemiecki można trochę podszkolić, a angielski to i tak trzeba mieć perfect, żeby sobie móc spokoju podróżowanie (nie zarobkowo) po Europie na ukochanym moto… aż się rozmarzyłem w tym momencie ;).

Dodając do tego administrację serwerami UNIX I SVN-a mamy pokaźną wiedzę do zdobycia.  Trzeba mieć plan, aby można było do niego dążyć i siebie samego z niego rozliczyć. Programowanie jest podróżą…

Cytat musi być!

„Ja bardzo dużo czytam, odświeżam umysł i kur… będę jak brzytwa.” :D

Koncepcje po byku…

czwartek, 10.02.2011

Siedzę siedzę sobie spokojnie w domku … i pracuję, bo do pracy po wypadnięciu dysku nie dałem rady się doturlać. Akurat zmieniałem dla szefa szablon newslettera i w zasadzie kończyłem pracę, kiedy dostałem OPR, że ktoś puścił newsletter i nie dość że wadliwego to jeszcze kilkadziesiąt . Oczywiście, od razu na mnie (bo kiedyś cron-a źle ustawiłem ;) ), a że wziąłem to do siebie, to szukałem swojego błędu. Na logikę szablon nie powinien wpłynąć na takie kuriozalne błędy, ale dziarsko zabrałem się do sprawdzania tagów HTML. W międzyczasie okazało się, że … strona z której został wysłany newsletter nie działa!!! Czy można sobie wyobrazić coś bardziej kuriozalnego? Jak najszybciej wyłączyłem cron-y. Kolega wyłączył newslettera i strona znowu się pojawiła, a ja zrobiłem sobie fajrant z pół godzinnym poślizgiem ;).

Kilka dni później dostałem zadanie poprawy i włączenia już poprawionej wersji do defaul-towej wersji naszego CMS-a. W trakcie studiowania plików, które zostały wyłączone z cron-a okazało się, że … nie są one odpowiedzialne za newsletter-a. Fajnie –  pomyślałem. Ciekawe jak do jasnej cholery to działa?

W trakcie dalszego research-u wyjaśniło się dlaczego cała strona umarła po włączeniu newsletter-a. Przy każdym włączeniu strony, dokonywała się wysyłka newsletter-a. W tym wypadku występował akurat błąd i oczywiście strona padała.

Znalazłem dobrze działającą wersję skryptu. Zrobiłem try{} catch{} na fragmencie odpowiedzialnym za wysyłkę i dodatkowe filtrowanie adresu email przed wysłaniem. Przy wysyłce jednak okazało się, że doszły 2-3 emaili do każdego z użytkowników.

Okazało się, że w dziesiątkach CMS-ów wysyłka jest podłączona w taki sposób metoda pobiera całą listę zapytaniem „SELECT * FROM wysylka” subskrybentów dla danego newsletter i potem idzie pętlą wysyłając i usuwając wpis w bazie danych.

A jaki z tego morał ?:

  • Jeśli ty modyfikowałeś kod po raz ostatni to ty dostaniesz w dupę za to, że ktoś nie pomyślał
  • Nigdy to, ale nigdy nie myśl, że coś jest super przemyślane bo działa od jakiegoś czasu i nikt nie zauważył błędu
  • Jeśli coś poprawiasz albo napiszesz, zawsze staraj się to.. spieprzyć, bo wtedy „zwiększasz sumę swojego ubezpieczenia”
  • Nikt, ale to nikt nie robi samych mądrych i przemyślanych rzeczy

„Co cię nie zabije, to cię … w idiotyczny sposób zestresuje.” :D

Python vs PHP

piątek, 24.12.2010

No cóż, muszę się przyznać, że wkurza mnie podejście moich starszych stażem kolegów programistów odnośnie języka PHP.

Ja lubię PHP. Znam ten język na tyle dobrze, by w miarę płynnie się poruszać po wszystkim co z nim związane. Denerwujące jest to, że kiedy tylko coś pójdzie nie tak, coś nie chce działać, coś zachowuje się nieprzewidziany sposób, to wszystko od razu wrzuca się do worka z napisem „PHP to język śmieciowy”.

Dramatycznie się z tym nie zgadzam.

W tym momencie w mojej firmie królują 3 języki programowania. PHP, JavaScript i Python.

– PHP, to jest mój konik.

– JS-a zawsze do tej pory unikałem (trochę tego żałuje…)

– Python, który ponoć jest o niebo lepszym językiem niż PHP

Powiem szczerze. Nie polubiliśmy się z Pythonem na wejściu. Początki były dość trudne, wszystko sprawiało problem. Po dość krótki obcowaniu z językiem muszę powiedzieć, że jest on… po prostu zwykłym językiem programowania. Bez fajerwerków, tudzież z bagażem często bardzo wkurzających dolegliwości.

Python i PHP

Python (1991)jest starszym językiem niż PHP (1995), mimo to jest uważany za poważniejszy i dojrzalszy język programowania.  To prawda, że od samego początku twórcy i programiści starają się utrzymywać pewne określone wzory i niepisane zasady konstrukcji. Sprawia to, że język jest dość uporządkowany, a programowanie odbywa się w określonym stylu.

Python w odróżnieniu od PHP, jest w pełni obiektowy, w takim znaczeniu, że wszystko w tym języku jest obiektem. Inaczej mówiąc nie da się w tym języku programować, nie znając koncepcji takiegoż programowania.

Python oczywiście nie jest doskonały. Często aż irytuje dziwnymi dla mnie, programisty PHP, zagraniami i wymaganiami, które w PHP są oczywiste, proste i nie powodujące zakłopotania.

Różna jest koncepcji celu jakiemu ma służyć PHP względem języka Python. PHP został stworzony jako proste narzędzie do tworzenia witryn internetowych. Taki właśnie jest cel istnienia tego języka. Nie napiszemy w tym języku wielu rzeczy, choćby najprostszego dektopowego kalkulatorka. Jest to język stworzony dla prostego i bezbolesnego tworzenia stron internetowych. Nie mniej jednak PHP, także za sprawą jego popularności, ciągle się rozwijał. Wystarczy porównać obiektowość PHP 4 i PHP 5. Piąta wersja języka sprawiła, że w końcu PHP stał się dojrzałym językiem, który choć ciągle sprawia, że robienie witryn internetowych jest proste, ale także wprowadza mechanizmy i rozwiązania dużo bardziej ambitniejsze i dające dużo większe pole manewru.

Wracając do Pythona

Najbardziej wkurzającym elementem języka jest przymus odpowiedniego operowania wcięciami i brak nawiasów. Naprawdę trudno się przestawić na początku. A co powiedzieć o takim kodzie? Dla mnie jest co najmniej średnio czytelny, kiedy mam do czynienia z większym fragmentem kodu. Lubię te piękne „curly brackets” i swoje własne formatowanie fragmentów kodu, ale to jest też kwestia przyzwyczajenia oczywiście.

Podsumowanie

Choć, nie wybrałbym tego języka do nauki, cieszę się, że moja praca wymaga nauczenia się i programowania w języku, który nie jest dla mnie uosobieniem cnót wszelakich. Programista powinien umieć się odnaleźć w każdym języku i umieć w nim znaleźć masę pozytywów.

Trudne początki

piątek, 05.11.2010

Minął miesiąc i parę dni. Był to okres wytężonej pracy, porażek i sukcesów.

Codziennie trzeba było przyjąć taką wiedzę, że trudno sobie wyobrażać czasem jak człowiek może rozszerzyć swoje możliwości pochłaniania informacji i analizowania ich w locie. Czasem mózg się przegrzewał.

Weekendy okazywały się najgorsze. Samodzielna praca, jest dużo trudniejsza kiedy pewne rzeczy nie przychodzą prosto, a wręcz uparcie oddalają się odpowiedzi na wydawało się proste pytania. Wgłębianie się zupełnie obcy system, czasem po prostu milimetr po milimetrze okazywał się często tak szorstkim i dołującym doznaniem, że siły do „walki” wracały dopiero z nastaniem drugiej części niedzieli. Czasem jeszcze weekend okraszony był próbami zapoznania się z Pythonem, którego to języka szefo oczekiwał, że dość szybko się nauczę.

Ostatni, długi weekend,  z takich czy innych powodów okazał się owocny głównie w świdrujące myśli:

„Ja się do tego nie nadaję. Jestem za wolny. Za wolno kojarzę. Popełniam za dużo głupich błędów. ”

Pikowanie w dół 1 listopada zostało zakończone następnego dnia rano. To był przykry poranek. Nie byłem w stanie nic wziąć do ust, wiedziałem że muszę jeszcze przed pracą zakomunikować swoje postanowienie szefowi. Myśli o porażce miażdżyły także moje ogólne poczucie własnej wartości, a nie tylko wartości jako programista.

Wszedłem do biura. Szef zapytał się co się stało i z czym przyszedłem. Ja przez chwilkę stałem, nie wiedząc jak zacząć. Po chwil odezwałem się łamiącym się głosem:

„Ja się do tego nie nadaję… Pracuję za wolno… Szkoda na mnie czasu… Głupio mi brać pieniądze, kiedy nie widać efektów mojej pracy”

Wiem, że wyglądałem wtedy żałośnie. Gdzieś w oku kręciła się łza. Czułem porażkę, czułem, że zaraz wyjdę i już pewnie nie wrócę do programowania, a stanie się to jedynie moim hobby.

Nie wnikając w szczegóły dalszej części tej rozmowy powiem, że wyszedłem z pracy dopiero o 16. Zresztą tak jak każdego dnia :).

Dalej staram, się rozwiązywać problemy programistyczne, czasem nawet na siłę, we własnym zakresie. Po tej rozmowie jednak nie przekraczam pewnych granic w tym względzie, bo czasem nawet podzielenie się problemem sprawia, że nad głową zaświeca się kreskówkowa żaróweczka. Teraz jedynym programistą jest dość ciekawy gość z 30-letnim stażem (kolega który mnie prowadził przez miesiąc przeprowadził się do Bydgoszczy), trochę bardziej się interesuje tym co robię (zacząłem raportować pod koniec dnia pracy na email), ale już się nie wychylę do komputera obok się z zapytaniem „masz chwilkę”, bo on akurat raczej większość pracy programuje poza firmą.

Cieszę się, że programuje. Nie liczy się rodzaj umowy i kasa, ważne że człowiek podejmuje wyzwania każdego dnia.

Jedno co bym chciał zmienić to podejście do większych czy też bardziej skomplikowanych problemów programistycznych z podejścia

„To mnie przerasta ;(…”,

na

„Ale będzie jazda! ;)”

A słowo problemy przechrzcić na puzzle.