obżarłem się i gęba mi się wylewa

O mnie

Zajmuję się produkcją i wsparciem aplikacji web oraz całych systemów opartych o podobne technologie, ze szczególnym uwzględnieniem Python, Django, PostgreSQL, Cassandra, ElasticSearch.

Doświadczenie zawodowe

Jestem programistą, a także architektem aplikacji web. Do moich zawodowych osiągnięć zaliczam wykonanie:

  • systemu telematycznego (assets tracking), wraz z jego utrzymaniem,
  • podsystemu zarządzania gospodarką magazynową,
  • podsystemu wyliczania cen sprzedaży towarów i usług,
  • projektu warstwy integracji z hurtowniami,
  • projektu warstwy integracji Mass Collect,
  • projektu i realizacji wyszukiwarek opartych o fasety (faceted search) we wdrożeniach e-commerce,
  • podsystemu automatycznego zatowarowania sklepu internetowego.

Jako programista brałem udział w realizacji projektów m.in. dla:

  • CTI Computech International (USA)
  • Mitsubishi Electric Europe (EU)
  • ING Bank Śląski (PL)
  • Monitor Outlet, Inc. (USA)
  • Rentalo (PL)
  • BISBOG (Szwajcaria)
  • TwojeRodo (PL)

Filozofia Python (PEP 20)

Dokument PEP 20 opisuje filozofię języka Python - zbiór reguł i zasad postępowania w różnych przypadkach. Jestem jej gorącym zwolennikiemn. Stosowanie tych zasad w praktyce pozwoliło mi uniknąć wpadek i porażek, oraz pozwoliło osiągnąć wysoką jakość kodu zdatnego do jego pielęgnacji (utrzymania w czasie). Filozofię PEP 20 przeszczepiam (w miarę technicznych możliwości) do innych języków, np. JavaScript.

Polecam zapoznanie się z Zen of Python.
Z kolei dotychczas mój najlepszy "framework" to KISS.

Historia

Programowaniem interesuję się od lat 80-tych. Przygodę rozpocząłem w czasach świetności "małego Atari".

Programowałem w różnych językach (C, asembler m68k/IA32/PPC, Basic, C#) i w różnych środowiskach. O tych czasach wspominam w historii.

Obecnie specjalizuję się w językach skryptowych, głównie Python oraz w programowaniu WWW (Django). Jestem zwolennikiem zwinnych metodyk produkcji oprogramowania (Agile), szczególnie Scrum. Nie umiem rysować, malować ani projektować logotypów.

Lata 80/90

Pamiętam niemal doskonale mój pierwszy "kalkulator" - Atari 65XE prosto z Pewex-u, wart wówczas jakieś $125. Pierwsze programy były proste - River Raid, Moon Patrol i pożyczony joy. Ojciec obiecał mi, że po "przejściu" 100 leveli w River Raid następuje koniec gry. Po zestrzeleniu setnego mostu nastał czas zmian - moja gra będzie miała zakończenie.

Atari Basic. Pierwsza gra nie porwała tłumów: Najciekawsza na świecie gra w smoka

Od tamtego czasu uczyłem się podstaw programowania - pętle, warunki, skoki. Gdy Basic nie wystarczył, walczyłem z Turbo Basic (głównie ze względu na skok wydajności). Gier nie powstało zbyt wiele, a jeśli już to w trybie GRAPHICS 0 z podmienionym na emblematy graficzne zestawem znaków ASCII. Próbowałem swych sił w programach użytkowych (operacje na plikach/dyskach), obliczeniowych, rozrywkowych (Koło Fortuny - GRAPHICS 0 ;) i bazodanowych - najprostszy data storage.

W tych czasach otarłem się o ciekawy język Action!, a także zacząłem przyglądać się asemblerowi 6502 ("Mapę pamięci Atari" W.Zientary czytałem chyba trzy razy).

Lata 90' - Amiga

Był to zdecydowanie najpiękniejszy okres. Nowe możliwości audio-wizualne, nowe zastosowania komputera (video-editing, grafika 3D, animacja 2D), nowe języki programowania.

Początki z Amigą to Amos Basic początkowo v1.3, niedługo później w wersji Professional. W tym czasie zmagałem się z programowaniem małych gier oraz narzędzi wspomagających ich tworzenie (edytory map, edytory obiektów). Amos Basic nie nadawał się jednak do poważniejszych zastosowań.

Zdobyłem Blitz Basic, którego główną zaletą było wykorzystanie możliwości chipsetu AGA oraz wydajność. Razem z przyjacielem pracowaliśmy nad polskim klonem Mortal Kombat - stosowaliśmy digitalizację obrazu z nagrań kamerą VHS (za pomocą urządzenia DigiLab firmy HDP Electronics), gdzie poszczególne klatki były skrupulatnie wycinane i koloryzowane w Deluxe Paint IV.

Thalimar - Land of Chaos screenshot Pierwszym poważnym projektem była gra RPG Thalimar - Land Of Chaos, którą próbowaliśmy zrealizować siłą woli, bez budżetu i całkowicie zdalnie wymieniając się informacjami na grupach dyskusyjnych i email. Kiedy ludzie zaczęli studiować/pracować, to projekt oczywiście padł. W tym projekcie więcej czasu mogłem poświęcić na programowanie i deployment (stąd zachowały się jakiekolwiek ślady tejże działalności).

Demoscena. Były to czasy fascynacji efektami graficznymi i pokonywania ograniczeń sprzętu. Swoich sił próbowałem i w tej materii. W asemblerze składałem maga dyskowego, niestety język tak niskiego poziomu, bez posiadania porządnej bazy "routinek" pochłaniał zbyt dużo czasu. Więdzę wykorzystałem w przygotowywaniu krótkich podprogramów wywoływanych z poziomu C.

Wiek XX na finiszu - blaszak

Czasy Windows oraz Internet Explorera. Zaczynałem od Borlanda C++ i rozgryzania biblioteki VCL, gdyż API Windowsa było ciężkie do ogarnięcia. Skupiałem się na pisaniu małych programów użytkowych. Zrealizowałem dwa małe projekty komercyjne. Probowałem reaktywować projekt Thalimara z silnikiem 3D Irrlicht (kompilator Dev Shed). Brak czasu zabił pomysł.

System operacyjny Microsoftu nie odpowiadał mi. Tęskniłem za Amiga OS i Directory Opus. Podjąłem się wyzwania napisania własnego systemu operacyjnego NovaOS, wzorowanego na AmigaOS. Był to ciekawy, półroczny eksperyment, dzięki któremu zdobyłem dużo wiedzy o architekturze IA-32.

Równolegle zgłębiałem tajniki programowania WWW. Zacząłem od PHP3, poszerzałem wiedzę o RDBMS, otarłem się o .NET i język C# (projekty web oraz desktop). Jednak dopiero od PHP4 (głównie przez łatwość i niskie koszty hostingów) i jego skromnej implementacji programowania obiektowego zacząłem korzystać ze zdobytej wiedzy komercyjnie.

Zrealizowałem w tym czasie kilka udanych projektów, w tym pierwszy sklep internetowy i proste CMS-y. Do roku 2008 programowałem w PHP5. Osiągnąłem na tyle wysoki poziom wiedzy o PHP, aby nigdy więcej nie stosować go do profesjonalnych zastosowań. Wybrałem Python z racji jego dość dobrej obiektowości, dynamizmu, kilku cech języków funkcyjnych, a także ze względu na jego ogólne przeznaczenie.

2005 - do dziś

Zajmuję się profesjonalną produkcją aplikacji web, ze specjalizacją w rapid development oraz skalowaniu horyzontalnym aplikacji web. Szczególnie cenię dane wychodząc z założenia, że ich czas życia (eksploatacji) jest n-krotnie dłuższy od eksploatacji warstwy aplikacji.

Stosuję serwery bazodanowe PostgreSQL (dane relacyjne, RDBMS), Apache Cassandra (serie czasowe, storage skalowalny), ElasticSearch (indeksy, wyszukiwanie, storage skalowalny).

Pod moją opieką są systemy online o zróżnicowanym stopniu skomplikowania. Najmniejsze to wdrożenia jednoserwerowe, najczęściej na VPS-ach, a największe sięgają dziesiątek maszyn fizycznych, kilkudziesięciu maszyn wirtualnych, oraz architekturze rozbitej na podsystemy zgodnie z przeznaczeniem, jak OLTP (OnLine Transaction Processing), DWH (Data Warehousing), DM (Data Mining) oraz ML (Machine Learning).

Jestem twórcą wielu bibliotek open-source. Prowadzę działalność gospodarczą w zakresie świadczenia usług produkcji oprogramowania i długoterminowego wsparcia systemów opartych o aplikacje web (głównie Python oraz Django).

Książki

Oto kilka pozycji, które są dla mnie (lub kiedyś były) nieocenionym źródłem wiedzy:

  • Niklaus Wirth: Algorytmy + struktury danych = programy, Warszawa: WNT, 1989
  • Perdita Stevens: UML: Inżynieria oprogramowania, Gliwice: Helion, 2007
  • Kernighan, Ritchie: Język ANSI C, Warszawa: WNT, 1999
  • Jesse Liberty: C++ dla każdego, Gliwice: Helion, 2002
  • Piotr Metzger: Anatomia PC, Gliwice: Helion, 2001
  • Mark DeLoura: Perełki programowania gier, Gliwice: Helion, 2002
  • Jan Ruszczyc: Asembler 6502, Warszawa: SOETO, 1987
  • Wojciech Zientara: Mapa pamięci ATARI XL/XE: Procedury interpretera Basica, Warszawa: SOETO, 1989
  • Andrzej Dudek: Jak pisać wirusy, Warszawa: Read Me, 1994
  • Michał Kołodziejczyk: Amiga OS od środka, Gliwice: WPK J.Skalmierskiego, 1997