Recepturki Pythona

Zdaża się czasem, że jakiś programista znający kilka języków programowania chciałby poznać “na szybko” innym (tak ostatnio miałem z Ruby). Postanowiłem zrobić taki małe przykłady opisujące pythona.

Pierwszą ważną rzeczą w pythonie jest to, że wcięcia mają znaczenie, gdyż określają bloki kodu. Najlepiej stosować 4 spacje.

PySide – pierwszy program i pierwszy problem

Pierwszy program

Jeśli poszukacie w googlach, znajdziecie najprostrzy program jaki można zrobić przy użyciu PySide.

Potłumaczę trochę linijkii (zakładam, że Pythona znasz, a jesteś tutaj tylko z powodu PySide):

  • 4: importowanie PySide. Samo QT dzieli się na parę modułów. Najważniejsze to QtGui (czyli wszystkie widgety) oraz QtCore (czyli backend całego QT).
  • 6: aby aplikacja QT działała, musi mieć odpalony QApplication. Mechanizm ten głównie włącza multithreading w aplikacji.
  • 8: tworzenie widgetu, czyli najbardziej podstawowego elementu w GUI Qt. Każdy inny element GUI dziedziczy z klasy QWidget. Jako, że nasz QWidget nie ma elementu nadrzędnego, będzie on pokazany w postaci zwykłego okna.
  • 9: zmieniemy rozmiar widgetu
  • 10: ustawiamy tytuł widgetu
  • 11: każemy systemowi pokazać widget na ekran. Specjalnie mówię, że “każemy systemowi”, gdyż ta funkcja bezpośrednio nie pokazuje nic na ekran. Jeśli zamiast linijki 13 zrobimy sleepa, to nic nie zobaczymy. Trzeba włączyć aplikację QT, aby nasz programik zadziałał poprawnie.
  • 13: włączamy aplikację Qt. Tutaj zaczyna się “magia”. W tej chwili właczony jest system odpowiadający za sygnały. I dopiero teraz tak faktycznie wykonywane są rzeczy z linijek 8-11.

Skrypcik ten, otworzy nam nowe okno i nic więcej. Po zamknięciu okna, program się wyłączy. Możemy teraz dodać do okna przycisk, który będzie nam otwierał drugie okno.

Opis. Oczywiście tylko tych fragmentów, które nie opisałem wcześniej.

  • 7-11: funkcja, która otwiera nowe okno. Poza tytułem okna, kod jest taki sam jak przy otwieraniu pierwszego okna.
  • 21: tworzymy nasz button. Trzeba pamiętać o tym, że jeśli używamy polskich znaków, to do funkcji QT trzeba teksty posyłać unikodem.
  • 22: tutaj łączymy sygnał i slot. Nie będę tu opisywał całego mechanizmu sygnałów i slotów. Sygnał “clicked” jest połączony (metodą connect) z naszą funkcją otwierającą drugie okno. Jeśli ktoś kliknie na przycisk, to ta nasza funkcja zostanie wykonana.
  • 24: tutaj tworzymy Layout (Vertical Layout). W QT widgety wstawiamy do innych widgetów za pomocą właśnie layoutów. Podajemy nasz główny widget jako argument, co oznacza “ten layout jest w tym widget`cie” (wybaczcie, jeśli źle odmieniłem słowo “widget”)
  • 25: tutaj dodajemy button to layouta, a co za tym idzie, także do naszego głównego widgeta.

Po włączeniu programu, zobaczymy okienko, w którym widać przycisk. Klikamy na tenże przycisk i nic się nie dzieje. W tym momencie zaczniecie się zastanawiać, czemu program nie działa. Jedni zaczną się zastanawiać co zrobili źle, inni stwierdzą, że PySide lub samo QT jest popsute i nie działa. Nie jest to oczywiście błąd w kodzie, a bardziej problem (acz nie nazwałbym tego bugiem) w samym PySide (związanym z architekturą Pythona i Pyside). Otóż PySide to w 90% kod C++ tylko z opakowaniem Pythonowym. Niesie to ze sobą pewnie niedogodności.

Otóż, Garbage Collector Pythona działa tak, że sprawdza, czy do danego obiektu są przypisane jakieś referencje. Jeśli nie ma, to wtedy dany obiekt jest usuwany z pamięci. I to się dokładnie dzieje w naszym przypadku. W funkcji, która tworzy i otwiera nowe okno widzimy, iż nie zapisujemy referencji nigdzie. A ta referencja traci się pod koniec działania metody. Co za tym idzie, obiekt naszego drugiego okna jest także usuwany. Mała poprawka i program zacznie działać tak jak chcemy.

Poprawka jest w lini 8. Teraz nasz obiekt ma referencję globalną, a co za tym idzie, ta referencja nie jest usuwana po zakończeniu działania funkcji. Jeśli klikniemy w przycisk raz, to otworzy nam się dodatkowe okno. Jak klikniemy drugi raz, stare okno zniknie, a pojawi się nowe, właśnie z powodu tego, iż nadpisujemy tą naszą referencję globalną i stary obiekt widgetu jest usuwany.

O tym jak zostać programistą

Ogólnie

Pewna osoba ostatnio pytała się mnie, jak zostać programistą. Odpowiedź na to pytanie jest dość skomplikowana, więc postanowiłem to po prostu spisać. Dla tych, dla których mój blog jest nieznany, powiem 3 słowa o mnie. W chwili pisania tego wpisu, mam 26 lat i od 5 lat jestem programistą (od września 2007) z zawodu. Pracowałem w sumie w 3 firmach,

Jak wygląda typowy programista?

Po pierwsze, zapomnijcie o wszystkich stereotypach. Nie ma w ogóle jakiś cech, które wyróżniają programistę. Ani wewnętrznych, ani zewnętrznych. Na pewno nie ma tak, że wszyscy ubieramy się w koszulę. Zresztą, chyba u mnie w firmie nikt się nie ubiera w koszulę. Długość włosów: od łysych (mam kumpla, która wygląda jak dres jak sobie zetnie włosy), do długich, czasami kręconych. Cechy wewnętrzne? Są i intrawertycy i ekstrawertycy. Są ludzie towarzyscy i milczki. Są ludzie z rodzinami, z partnerami, albo samotni. Tak samo wiek nie ma znaczenia (mam znajomego, który w wieku 40 lat się przebranżowił z leśnika na programistę). Nawet czasami jakaś dziewczyna programistka się znajdzie.
Jedyną cechą, jaka ich wszystkich łączy, jest to, że aktywnie programują. Większa część moich kumpli z pracy programuję coś w domu (dla siebie lub dla kogoś). Większą cześć z nas mimo ilości napisanego kodu dziennie nadal fascynuje programowanie. Więc jeśli programujesz i lubisz programować, to spokojnie możesz zostać programistą.

Co robi typowy programista

Po pierwsze: kurwuje na potęgę. Większość pracy programisty, to nie “tworzenie kodu”, tylko zadawanie sobie pytania: “czemu to nie działa?!”. Oczywiście są spotkania omawiające, jest wymyślanie kodu i tak dalej. Ale jednak większość czasu zajmuje szukanie przyczyn błędów. Do tego, niestety, bardzo często praca programisty wiąże się z cięciem layoutów (jeśli jest się webdeveloperem) i testowaniem własnego kodu. Oczywiście, tester zrobi to lepiej, ale trzeba jednak się przemóc i jak najlepiej stestować swoje zmiany.

Inne mity

  • Mit o kawie. Czyli, że programiści piją ogromne ilości kawy. Fakt, mamy w pracy automat do kawy, ale myślę, że nie pijemy jej więcej niż zwykli ludzie (ja nie pijam kawy wcale). Do tego wielu z nas o wiele bardziej woli herbatę.
  • Mit o zerowym życiu programisty. Każdy z nas ma jakieś życie towarzyskie, domowe. Wielu z nas ma rodziny. Ja na przykład jestem bardzo towarzyski.
  • Mit o matematyce. Wielu ludzi uważa, że programowanie to matematyka. Otóż, nie jest tak prosto. Fakt, kiedyś informatyka była częścią matematyki. Ale to się z czasem zmieniło. W niektórych zagadnieniach informatyki matematyka odgrywa główną rolę. Ale gdzie jest matematyka w programie, który pokazuje okienko, które zbiera informację z serwisu internetowego. Ogólnie dobrze jest znać matematykę, ale ja np. nie znam matematyki jakoś super dobrze (poziom szkoły średniej) i radzę sobie świetnie.
  • Mit o studiach. Nie trzeba mieć studiów, aby zacząć programować. Wielu moich kumpli z pracy nie ma studiów, albo jest w trakcie robienia. O wiele ważniejsze jest talent i doświadczenie. A i tak najważniejsze jest zamiłowanie.

Jak zostać programistą?

Po pierwsze, musisz programować. Ćwiczyć, robić własne projekty, bawić się kodem. A jak już będziesz uważał, że już czas, wyślij CV. I znajdź firmę, która weźmie niedoświadczonego programistę (nawet na staż czy darmowe praktyki). Po jakimś czasie znajdź sobie lepszą pracę. I to chyba tyle.

Na krańcu otchłani

    Pewnego razu, odwiedziła mnie otchłań. Przyszła tak samo nie spodziewanie, jak złodziej wkradający się do domu. Była wtedy noc, spałem spokojnie. Weszła przez okno i patrzyła na mnie przez cały mój sen. Mimo, iż się nie obudziłem, wiedziałem, że tam była. Wyczuwałem jej głębie. Uciekła, jak tylko sen się skończył. Jeszcze widziałem ślady, jakie po sobie zostawiła. Widuję je do dzisiaj. Ja tak bardzo chciałem się obudzić ze swojego snu, ale nie mogłem.
    Drugiego dnia wpadła przez okno i pogłaskała mnie po twarzy. Delikatnie, jak kochanka, która chciała dotknąć partnera podczas snu, ale nie chciała go zbudzić. A ja nadal trwałem w swoim śnie. Rano nie chciałem o tym pamiętać, mimo iż nie umiałem zapomnieć. Żyłem jak wcześniej, ale nic już nie było takie samo. Gdy otchłań cię pogłaszcze, nie ma już odwrotu. To znak, że chce cię zabrać dla siebie i nie oddać.
Następnego dnia nie zadowoliła się tylko dotykiem, ona chciała już brać. Zabrała mi oko. Mimo, iż cały czas było ono na miejscu i działało normalnie, to czułem, iż zostało mi zabrane. Było takie odległe ode mnie i mojego ciała, a moja dusza nie czuła już z nim kontaktu. Tak jakbym używał nie swojej części ciała, a organizm jeszcze nie zdecydował, czy przeszczep się przyjął, czy nie.
    Potem otchłań zabrała mi uszy, abym nie mógł jej słyszeć jak przychodzi. Ale ja nadal słyszałem każdy jej oddech, każdy krok, każdy ruch. Wiedziałem, kiedy przychodziła i kiedy mnie na chwilę opuszczała. Widziałem każdy jej ślad. Ale ja nadal śniłem i nie umiałem się obudzić.
    I tak zabierała moje części po kolei. I już nic ze mnie nie zostało. Wtedy otchłań weszła we mnie i wypełniła moje ciało po brzegi. Próbowałem się bronić,przeklinać, grozić, a nawet czarować, ale przypominało to trochę krzyk osoby spadającej w przepaść. Macki otchłani wychodziły ze mnie, a ja dałem się prowadzić, bo już nie miałem siły walczyć. Tak jakbym stracił siebie, ale tak naprawdę to już dawno nie byłem ja.
    I wtedy otchłań zrobiła coś, czego się nie spodziewałem. Odeszła. Zostawiając mnie samego i pustego. A razem z nią, cały mój świat poszedł w niepamięć. I wtedy się zabiłem.
    Nie był to jednak koniec mojej historii z otchłanią, lecz jej początek. Bo kiedy umarłem i moja dusza się uwolniła, zobaczyłem wiele innych, nie moich otchłani. Każda z nich, prowadziła do innego świata, intymnego, własnego i totalnie różnego od pozostałych. Zatonąłem w nich i próbowałem zrozumieć. Zajęło mi to bardzo długo.
    Aż w końcu odnalazłem się na krańcu siebie. Znalazłem tam swoją duszę i mocno mi się ona nie spodobała, ale nie dlatego, że była odrażająca, lecz dlatego, iż dużo pracy było przede mną. Dotknąłem jej, poczułem kwaśny smak i ogrom strachu, rozlewający się ze wszystkich dziur mojego jestestwa. Doznałem wstrząsu i odrodziłem się. Można powiedzieć, że powróciłem do życia, choć, może bardziej oszalałem i wróciłem do zmysłów, w sposób jaki wraca się do starego przyjaciela, po długiej podróży.
    Wtedy się obudziłem, w swoim łóżku, w swoim pokoju, w swoim świecie. A otchłań siedziała na moim krześle i patrzyła na mnie. Pierwszy raz widziałem ją w pełnej okazałości. Miała na sobie moje ubrania, moje buty, moje tatuaże, a nawet moją twarz. Tak naprawdę to ja byłem swoją własną otchłanią, ale teraz kiedy już to wiem, to mam nad nią władzę. I mogę spać spokojnie
    Mnie się udało, choć nie bez strachu i strat. A wam wszystkim życzę pomyślnych łowów w poznawaniu i dotykaniu własnych otchłani.

$3 – $8

Nie ma dni bez twarzy
Nie słońca
I choć walczę i przegrywam
Nie mogę przestać patrzeć na słońce
Płonę siarczyście
Muszę czekać
Aż się wypalę
Bo się przecież nie spalę
Benzyny nie brak
Brak mi strachu
Krzywdę sobie robię

$3- $7

Kiedy patrze na las
Widzę siebie
Kiedy patrzę na wodę
Widzę ciebie
Kiedy patrze w niebo
Nie widzę nic
Bo słońca nie ma
I nas tak naprawdę też nie ma

A ja i tak się cieszę
Bo i tak patrzę
W las
I w wodę
Które nie mają nic wspólnego
Ale las płonie w najlepsze
Bo dawno tego nie robił

$3 – $6

Jeśli coś umiera
Jak kwiat
To można to poczuć
Jak ukłucie

Jeśli umiera coś
Czego nigdy nie było
To czuje się nicość
Wszechogarniającą

Nie czuje się strachu
Czuje się inteligencje i mądrość
Czuje się szczęśliwym?

$3 – $5

Dziś się obudziłem
Trochę chudszy
Trochę słabszy
Kolejny rok mija

Pomagałem dzisiaj
Stanowczo i zdecydowanie
Kolejny rok mija

Nigdzie nie byłem
Nikogo nie spotkałem
Coś mnie omija

Chciałem żyć inaczej
Dać coś innego
A moje życie przemija

$3 – $4

Bo ja tak bardzo szczęśliwy
Inaczej niż wcześniej
Choć robię to samo co wcześniej
Robię błędy

Zacząłem znowu podążać
I umierać
Robię błędy

Jak łowca zmysłów
Szukam siebie dawnego
I się cieszę bo
Popełniam błędy

$3 – $3

I nadszedł czas
Aby użyć zwykłych ust
Moich ust
Do podmuchania
W rozpalony las
Z bliska

I choć wiem
Że się spalę
To jak debil dmucham
I dmucham

W sumie
To czekam aż się spalę
Bo co innego mi zostało?