A więc .NET

Dawno mnie tu nie było, ale był też istotny tego powód. Niby człowiek wiedział, ale się łudził i fakt przejęcia Idea Banku przez Pekao spadł na mnie dość nieoczekiwanie, zwłaszcza, że miało to miejsce w południe w sylwestra 2020. Do tamtej pory pracowałem rozwijając aplikacje backoffice’owe w PHP, w Pekao ten język praktycznie nie istnieje poza jakimiś marginalnymi zastosowaniami (zresztą nie wiem, czy ma on rację bytu gdziekolwiek indziej w bankowości poza grupą Leszka Czarneckiego), więc pierwsze tygodnie oznaczały dla mnie miotanie się pomiędzy decyzją o pozostaniu w Pekao i zmianą języka, a zmianą pracy na inną i pozostaniu przy PHP. “Miotanie się” to bardzo adekwatne w tym wypadku określenie – nastrój w tej kwestii zmieniał mi się czasem co tydzień w skrajnych kierunkach. W Pekao dominuje szeroko pojęty .NET, więc dla mnie oznaczałoby to nie tylko zmianę języka, ale zaczynanie praktycznie od zera w większości powiązanych technologii. Tak na szybko listując: język ze słabo typowanego, skryptowego na silnie typowany, kompilowany, DBMS z PostgreSQL na SQL Server, serwery HTTP z Apache/nginx na IIS, środowisko uruchomieniowe z linuksowego na windowsowe, IDE z Eclipse na Visual Studio, do tego dużo drobniejszych rzeczy, jak razor pages, inny ORM, powszechnie używane zasoby sieciowe zamiast NFS/SFTP, itd. Dużo tego. Zupełnie inaczej wyobrażałem sobie też przepięcie na nowe technologie – część kolegów zaczęła swoją technologiczną konwersję praktycznie z dnia na dzień. W moim przypadku ostatecznie było inaczej – system, który tworzyliśmy w IB, podlegał migracji do systemów Pekao, więc było to priorytetem i potrwało do listopada 2021, a ja w tym czasie mogłem się spokojnie oswoić z nowym stackiem technologicznym i zacząć przyswajać wiedzę z tego zakresu, jeszcze wtedy na wolnych obrotach.

Pracę w projektach .NET-owych zacząłem na poważnie w grudniu 2021, więc ostatnio minęły pełne 4 miesiące pracy przy nich, taki większy okres próbny. Postanowiłem więc, że póki mam to jeszcze na świeżo, to opiszę moje wrażenie z takiej przesiadki.

Pierwszy miesiąc to głównie przyzwyczajanie się do silnie typowanego języka. Po ponad 10 lat pracy w PHP trzeba było zmienić przyzwyczajenia nawet w tak podstawowych kwestiach, jak dobór typów danych (i wyleczenie się ze wszechobecnych w PHP, mieszanych tablic asocjacyjnych). Nie było to jednak jedyne przyzwyczajenie do zmiany: samo środowisko uruchomieniowe rządzi się innymi prawami i niektóre rzeczy są rozwiązane w sposób, który nigdy we wcześniejszym stacku nie przyszedłby mi do głowy (koordynator transakcji rozproszonych jako osobna usługa jest moim faworytem do tego rankingu).

Z silnym typowaniem z perspektywy czasu jest jednak jak z przejściem ze skrzyni manualnej na automatyczną – na początku wkurza zahaczanie nogą o szeroki hamulec i odruchowe wpadanie lewej nogi w dziurę, gdzie powinno być sprzęgło, jednak po czasie docenia się to, że pewne rzeczy wyłapywane są już na etapie kompilacji. Początkowo było to dla mnie nieco uporczywe i zdawało mi się zbędnym narzutem, jednak nie zauważałem pewnego istotnego faktu: wcześniejsze projekty znałem dość dobrze i w przypadku zmian na poziomie modelu wiedziałem, gdzie szukać obszarów do refaktoryzacji. Gdy jednak nie ma się jeszcze takiej wiedzy, to w przypadku PHP często błędy wychodziły dopiero podczas uruchomienia pominiętego kodu. Tutaj projekty są dla mnie nowe, więc takiej wiedzy nie mam, a przeszukiwanie kodu źródłowego nie zawsze jest na tyle efektywne, aby zidentyfikować wszystkie konieczne miejsca.

Silne typowanie ma jeszcze jeden plus – dzięki niemu autouzupełnianie w IDE i ogólnie asystent kodu stoją na zupełnie innym poziomie, niż w PHP. Tutaj na każdym etapie zmienne mają znany edytorowi typ, więc praktycznie wszędzie mamy dostęp do podpowiedzi, co w przypadku PHP – nie było tak oczywiste.

Pisanie aplikacji webowej w C# z użyciem ASP.NET MVC to też pole do zmiany przyzwyczajeń. Dużo się tu dzieje w middleware’ach. W PHP korzystałem z Zenda i operowanie na surowej tablicy wartości z POST, lekko tylko przerobionej (np. przefiltrowanej) przez framework było dla mnie naturalnym podejściem. Tutaj królują modele, które są automatycznie mapowane z danych POST/GET. Za tym idzie mnóstwo innych rzeczy, jak np. sprzęgnięta walidacja, itd. Po krótkim przyzwyczajeniu jest to dużo wygodniejsze, niż praca na surowych danych z POST.

Konstrukcja języka C# mi się podoba. Są rzeczy, których brakowało mi w PHP (część z nich jednak w międzyczasie została wprowadzona w wersji 8 – gdzie one były przez tyle lat mojej pracy? :P), na przykład named parameters. Dłużej musiałem przysiąść nad powszechnie używanymi wyrażeniami lambda, których czasem w PHP się używało, ale w zupełnie inny sposób. Podobnie z typami generycznymi, z których prototypem (szablonami) miałem do czynienia dawno temu, gdy pisałem w C++. Do tego mnóstwo różnych, drobnych rzeczy, których nie znałem, a których używa się na co dzień (jak chociażby postępowanie z Nullable, bardziej zaawansowane używanie list, itd.).

A propos list, nie można zapomnieć o LINQ. Bardzo spodobało mi się to rozwiązanie, po opisanym wcześniej ogarnięciu wyrażeń lambda można wiele zrobić z kolekcjami w łatwy i krótki sposób. Dodatkowo, w zastosowaniach bazodanowych, w połączeniu z IQueryable czułem jak się w domu ze względu na przyzwyczajenie do zendowych selectów.

Polubiłem też wykorzystywany tu ORM i sposób tworzenia modelu. I choć widzę, że mam w tym temacie jeszcze mnóstwo do nauczenia, to jest przede wszystkim dużo szybciej niż w PHP, zarówno z mapowaniem struktury bazy danych na model, jak i chociażby z migracjami bazodanowymi. Pamiętam, że podobnie miałem, gdy w 2012 przesiadłem się z CodeIgnitera na Zenda i jego active record i Zend_Db_Select. Zresztą ostatnie miesiące bardzo przypominają mi 2012 – przyswajam dużo nowej wiedzy w krótkim czasie, wtedy zdaje się, że porównywałem pierwsze pół roku pierwszej pracy na etacie do całego drugiego stopnia studiów pod kątem przyswojonej wiedzy.

Nie mogę w tym zestawieniu pominąć debugowania aplikacji w Visual Studio. Coś, co działa z automatu i czego używa się codziennie to dla mnie zdecydowanie nowość. Wcześniej, w PHP, używałem xdebug do debugowania kodu krok po kroku lub do profilowania tylko w wyjątkowych sytuacjach, gdy logika była na tyle zaawansowana, że ciężko było ją debugować przez wypluwanie wartości lub wtedy, gdy trzeba było przyjrzeć się z wysokiego poziomu wykonywaniu kodu i systemowego i systemowo go zoptymalizować. Zresztą sama konfiguracja xdebug w PHP była dość problematyczna, szczególnie na obwarowanych zabezpieczeniami komputerach bankowych i takowej infrastrukturze sieciowej. Nie mówiąc już o szybkości działania tak debugowanej aplikacji.

Co do samego Visual Studio, to spodobał mi się gitowy merge tool, który jest znacznie wygodniejszy, niż wcześniej preferowane przeze mnie ręczne rozwiązywanie konfliktów – tutaj mam kod z dwóch stron konfliktu na podzielonym ekranie, mogę pojedyncze linie włączać do rozwiązania konfliktu checkboksami, a dodatkowo edytować go w połączonej wersji. Coś wspaniałego. Rozczarował mnie natomiast brak narzędzia do częściowego stage’owania zmian w gicie. Zostało podobno wprowadzone w VS 2022, więc chętnie wypróbuję, jednak póki co korzystam z VS 2019, więc pozostaje mi nadal dobrze znana obsługa gita z konsoli.

Podsumowując, z przesiadką na nowy stack technologiczny jest lepiej, niż przewidywałem. Nadal jestem na samym początku drogi, więc najbliższe miesiące to na pewno czas dalszej nauki w tym kierunku, jednak sam jestem zdziwiony, że wcześniejsze przyzwyczajenia i uprzedzenia w sumie dość szybko odpuściły. Zawsze byłem też z tych, którzy mocno się do takich rzeczy przyzwyczajają i ciężko było mi zwizualizować sobie trwałą, nieincydentalną przesiadkę np. na zupełnie inny język programowania. Nie doceniałem w tej kwestii jednak doświadczenia, które na pewno ma tu spore znaczenie – znając dobrze zasadę działania aplikacji internetowych, język to tylko narzędzie, sam sposób myślenia, programowanie obiektowe i sposób rozwiązywania problemów są w zasadzie takie same i cieszę się, że przekonałem się o tym na własnej skórze.

Co dały mi studia?

UWAGA! Ten wpis ma już 10 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Pół roku po obronie to dobry czas, aby podsumować jeden z dłuższych, formalnych etapów nauki (bo dłuższa była tylko sześcioletnia podstawówka). Jest to okres, który pozwala nabrać dystansu do studiów (a ten dystans mi się mocno przydał po “pożegnaniu”, jakie sprezentowała mojemu rokowi uczelnia), a jednocześnie wiele szczegółów ciągle się pamięta.

Obecnie jestem programistą języka drugiej kategorii w jednym z większych holdingów zajmujących się wielkim kapitałem. :> Podsumowanie to będzie więc pewnie zdominowane przez spojrzenie na studia pod kątem ich przydatności w tym zawodzie.

Początek studiów to matematyka. Można powiedzieć, że pierwsze trzy semestry były tylko delikatnie dekorowane przedmiotami ściśle technicznymi. Matmy było do zarzygania. Podobno ma to nauczyć ludzi myślenia na wyższym poziomie abstrakcji, niż dotychczas. Może i jest w tym trochę prawdy, jednak tylko za zasługą pojedynczych prowadzących zajęcia. Pozostałe wyglądały dość szablonowo i polegały na wałkowaniu tematu do czasu zauważenia schematu, który dało się przyłożyć do większości następnych zadań – a przynajmniej do tej ich części, która umożliwiała awans na kolejny rok. Ciężko mi więc określić, na ile przedmioty stricte matematyczne pomogły mi w życiu. Pewne jest, że umiejętności wyniesionych z uczelnianej matematyki nie wykorzystałem nigdy w praktyce, a moja obecna wiedza, np. o całkach, sprowadza się do ogólników i strzępów zasad ich rozwiązywania.

Ze względu na techniczny profil uczelni i – jak podejrzewam – konieczność wyżywienia pewnej mało potrzebnej obecnie katedry, mieliśmy dużo przedmiotów związanych z elektrotechniką. Część z nich była ciekawa i ogólna wiedza w tym temacie na pewno się przydaje, jednak mam wątpliwości, czy pchanie ich na takim poziomie na informatyce ma sens – powinny być raczej realizowane w szkole średniej na poziomie ogólnym. Poza wyjątkami – przedmioty te były fatalnie prowadzone, zaś prowadzący skutecznie obrzydzali nawet najciekawsze tematy. Tak było m.in. z moimi zainteresowaniami programowaniem niskopoziomowym. Ludzie, z którymi miałem pierwsze zajęcia z dotyczących go przedmiotów byli tak efektywni w tym, co robią, że do tej pory moje szczenięce fascynacje tym tematem wspominam już tylko z grymasem na twarzy. Ci prowadzący odpychali chęcią do nauki pod każdym względem, a ich doświadczenie zawodowe oscylowało gdzieś na początku lat 90., kiedy to udało im się napisać parę linii kodu w jakimś projekcie przemysłowych wag dla PKP. :> Pozostaje się tylko cieszyć, że ze względu na rekrutacyjne tendencje, katedra ta (a teraz nawet chyba instytut) umrze śmiercią naturalną.

Ale nie ze wszystkim było tak źle. Mimo, że ciekawe zaczęło robić się dopiero od trzeciego roku, to właśnie wtedy miałem większość przedmiotów, które wciąż mi się przydają. Chodzi głównie o solidną dawkę programowania obiektowego i równolegle prowadzoną inżynierię oprogramowania.

Tę drugą mogę określić chyba jako najlepsze zajęcia na całych studiach. Wykład był dyskusją o inżynierii oprogramowania z anegdotami i praktycznymi przykładami, co w fajny sposób otwierało umysł na pewne sprawy. Na laborkach było głównie projektowanie w narzędziach CASE z naciskiem na diagramy ERD. Tego, czego się wtedy dowiedziałem, używam praktycznie codziennie do dzisiaj i nie miałem z tym nigdy potem problemów, więc wydaje mi się, że zajęcia te były dość solidnie prowadzone.

Z programowania obiektowego również wiele wyniosłem, zwłaszcza, że jeszcze kilka lat przed rozpoczęciem studiów klasy służyły mi głównie jako kontenery dla metod i nie używałem niczego poza prostym dziedziczeniem. Zajęcia z C++ pozwoliły mi usystematyzować wiedzę, ale też wielu rzeczy się nauczyłem. Ostatecznie przygodę z tym językiem podsumowałem pracą inżynierską i – poza kilkoma zleceniami – już do niego nie wróciłem. Jednak sam paradygmat programowania obiektowego jest uniwersalny, a na składni C++ opiera się większość wiodących obecnie na rynku języków programowania. Kolejnym “moim” językiem stał się PHP.

PHP nauczyłem się całkowicie dopiero na studiach. Szybko jednak zostałem neofitą, a pokochałem zwłaszcza brak jawnych typów zmiennych. Zaczęło się od prostych aplikacji w “czystym” PHP na potrzeby projektów zespołowych. Polubiłem ten język, jednak perspektywa napisania w nim aplikacji bardziej złożonej od nieskomplikowanego CRUD-a przytłaczała mnie pod względem czasowym. Wtedy właśnie zainteresowałem się frameworkami. Pierwszym, z którym miałem styczność, był CakePHP, jednak wtedy było na niego trochę za wcześniej – byłem po prostu za głupi na ten framework. Trafiłem ze znajomym na CodeIgnitera – i to był strzał w dziesiątkę. Pisałem w nim ponad dwa lata i zrobiłem wiele zleceń. Projekty w nim realizowało też kilka innych osób na moim roku, co można uznać za dobre referencje dla CodeIgnitera – zwłaszcza, że wielu programistów PHP nigdy o nim nie słyszało. Obecnie pracuję z Zendem i perspektywa powrotu do CodeIgnitera wydaje się być nużąca, jednak jest to – moim zdaniem – najlepszy start, jaki mogłem sobie zapewnić w PHP.

Same projekty zespołowe dużo mi dały, ponieważ przez wszystkie na studiach inżynierskich realizowałem z kolegą, z którym dobrze szła mi praca. Pracę próbowaliśmy sobie ułatwiać i stosować np. duże IDE, zewnętrzne API czy systemy kontroli wersji (podczas, gdy reszta ludzi w grupie przesyłała sobie kod paczkami RAR w mailach :>). Na prowadzących raczej nie można było liczyć – ich rola sprowadzała się do nadzorowania projektu i testowania go pod koniec. Nie zapomnę sytuacji, w której prowadzący testował finalną wersję naszego pierwszego projektu, i po kilkunastu minutach, gdy już wydawało się, że skończył, wrócił się jeszcze ze słowami: “Sprawdzę jeszcze, czy przejdzie u Was SQL injection”. Świadomie pominęliśmy to zabezpieczenie ze względu na czas licząc, że prowadzący się nie zorientuje. Podczas, gdy już zastanawialiśmy się nad poprawkami, prowadzący otworzył formularz i zaczął wpisywać: !@#$, po czym wysłał formularz i – nieco zaskoczony – powiedział: “O, widzę, że przewidzieliście to. Wystawiam 5”. Nie wiem, na jakim poziomie była jego wiedza o SQL injection, ale nasz projekt można było wyłożyć nawet pojedynczym apostrofem w dowolnym polu.

Projekty zespołowe na studiach magisterskich były już mniej przydatne, ale to ze względu na olewający stosunek do studiów ze strony ludzi, którzy po części już pracowali lub czekali na obronę.

Wstyd się przyznać, ale SQL i bazy danych ruszyłem dopiero na studiach. Źle ułożony był też harmonogram studiów, który na ostatnim (lub przedostatnim) semestrze studiów I stopnia przewidywał pierwsze zajęcia z baz danych… w Accessie. Oczywistym więc było, że trzeba opanować bazy we własnym zakresie wcześniej.

Na studiach inżynierskich lubiłem też zajęcia z algorytmów i struktur danych. Dość dużo z nich wyniosłem i były ciekawe. Mówię tu jednak o laborkach, na których trafili mi się kompetentni prowadzący. Wykład był nudnym bełkotem dyktowanym z pożółkłych kartek, pamiętających pewnie lata 80.

Jeżeli chodzi o studia magisterskie, to żałuję, że na nie poszedłem. Przy rekrutacji do pracy nikt na to nie patrzył – skończyły się już czasy zatrudniania ludzi na podstawie dyplomu (a przynajmniej dyplomu polskich uczelni), a idąc wtedy do pracy, miałbym 1,5 roku doświadczenia więcej. Moi znajomi, którzy zdecydowali się na taki krok, planują już migrację do Warszawy.

Studia magisterskie były też nijakie pod względem jakości. Na pewno miał na to wpływ fakt, że były realizowane w ramach dużego projektu UE, który przewidywał m.in. wysokie wynagrodzenia za przygotowanie materiałów do zajęć. Brzmi motywująco, jednak termin, w jakim miały zostać opracowane, zamykał się w 1-2 miesiącach. Prowadzący jednak nie popuścili szansy na zdobycie takich pieniędzy, więc większość materiałów była po prostu kompilacją dostępnych w internecie informacji, wstawioną w nowy szablon. A przecież nikt tego merytorycznie nie weryfikował.

Za przydatne zajęcia z II stopnia studiów mogę uznać systemy baz danych. Wprawdzie w momencie ich rozpoczęcia nie było osoby, która by nie znała SQL, jednak ja sam nauczyłem się z nich PL/SQL-a i kilku innych rzeczy.

Co można powiedzieć o kadrze na studiach? To zależy. Przekrój jest dość duży: zdarzają się świetni nauczyciele, posiadający nie tylko wiedzę, ale potrafiący ją przekazać. Ale miałem wrażenie, że na moich studiach były to wyjątki. Prowadzących ze wspominanej już katedry można w większości uznać za zakały tej uczelni. Tematy się pokrywały, doświadczenie mieli nikłe, a na wykładach miałem się wrażenie, że padam ofiarą elokwencji niemających pojęcia o temacie ludzi.

Czego brakowało mi na studiach? Wzorców projektowych. Jest to wiedza, która przydaje się niemal każdemu developerowi, a jest na tyle uniwersalna, że wydaje się być idealnym tematem na zajęcia bez obawy o to, że narzuca się jakiś kierunek studentowi (jak ma to miejsce np. w doborze technologii). Brakuje też ludzi mających praktyczne doświadczenie w IT. Z rozmów z ludźmi z innych uczelni wynika, że pracuje w nich wielu prowadzących, którzy na co dzień zajmują się “swoją” dziedziną na wolnym rynku. U mnie naliczyłem tylko dwie takie osoby, które dodatkowo przerwały karierę na rzecz etatu na uczelni.

Miałem zamiar podsumowania studiów już od kilku tygodni i mam nadzieję, że zawarłem w tym wpisie wszystko, co chciałem przekazać. Być może ktoś wyciągnie wnioski z moich przemyśleń.

TAXI

UWAGA! Ten wpis ma już 14 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Jedzie przed Tobą ze stałą, dość niską prędkością taksówkarz? Uważaj, bo pewnie zaraz skręci albo zatrzyma się bez kierunku. Po rocznych obserwacjach plasują się u mnie na drugim miejscu najgorszych kierowców, zaraz po kobietach. Taki taksówkarzyna rzadko włącza światła, a jak już włączy, to najpewniej jedno ma spalone. Mówię oczywiście o światłach mijania, bo pozycji już nie ma szans u nich uświadczyć. Oprócz tego, wpychają się na siłę i zatrzymują gdzie tylko chcą. Pierwsi trąbią, gdy nie ruszysz sekundę po zapaleniu się zielonego.

Tak, mocno tutaj generalizuję, bo zdarzają się i “normalni”. Ale gdy większość z tych, których widzę podpada pod ww. schemat, to możliwości są dwie: albo mam pecha, albo rzeczywiście “normalnych” taksówkarzy można uznać za wyjątki potwierdzające regułę. Tylko potem śmieszy mnie to, jak słyszę w radiu, że korporacja ma na celu utrzymywanie wysokiej jakości świadczonych usług.

[Changelog] MB W123 po malowaniu

UWAGA! Ten wpis ma już 14 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Jako, iż moja Beczyna ma już swoje lata, a czasy, w której właściciel chował ją w ogrzewanym garażu pod kocem bezpowrotnie minęły, zaczęła się upominać o poprawki lakiernicze. O ile wcześniej zmieniłem przedni zderzak (rdza wychodząca spod chromy wygląda paskudnie), o tyle później przyszedł czas na tylne lewe drzwi, które straszyły z daleka. Miałem kupić nowe, jednak nie znalazłem takich w miarę “zdrowych”. Postanowiłem więc zaszpachlować te, które są – bo od środka są wręcz jak nowe, a że z zewnątrz wychodzi rdza – no cóż, w 31-letnim samochodzie trzymanym od ponad 1,5 roku wyłącznie pod chmurką to i tak dobrze.

Do zrobienia tych drzwi przymierzałem się już dłuższy czas, jednak przeszkadzały w tym albo studia, albo znajomy lakiernik “walcował” i wytrzeźwieć nie mógł. 😉

W końcu udało się to 2-3 tygodnie temu. Oprócz drzwi poprawionych zostało parę “pryszczy”. Wygląda to bardzo dobrze, wręcz nie widać, że drzwi były szpachlowane. Czeka mnie jeszcze dotarcie lakieru, ale z tym też nie wiem, kiedy się wreszcie zabiorę.

Ostatnio wymyłem Beczkę porządnie i nawoskowałem (czego nie robiłem już może z pół roku). Wyszło pięknie, przynajmniej tak mi się wydaje. Tylko trochę rozprasza to odbijające się niebo na masce. 😉






Ech, aktorzyny ;D

UWAGA! Ten wpis ma już 14 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Przeglądając YouTube znalazłem ciekawą serię WP TV o nazwie “MotoStory”. Oglądam po kolei wszystkie odcinki, bo dostarczają mnóstwo humoru. Na przykład taki Milowicz Michał:

Opowiada chłopaczyna niesamowitą historię o tym, jak po zerwaniu paska klinowego stracił hamulce. Na szczęście Bóg nad nim czuwał, dając automatyczną skrzynię biegów, bo – jak sam stwierdził – manualną nie miałby możliwości wyhamowania. No cóż, nie od dziś uważam, że automat w samochodzie to zło. ;D

Olej napędowy

UWAGA! Ten wpis ma już 15 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Od dzisiaj na polskich stacjach benzynowych cena oleju napędowego przewyższa cenę litra benzyny bezołowiowej o 95 oktanach. Jednocześnie warto wspomnieć, że jest to cena oscylująca powyżej 4,50 zł (nie licząc niektórych Orlenów, gdzie cena zwykłej ropy – nie tej sygnowanej marką Verva – potrafi dojść do 4,70 zł, oraz wszelkich stacji typu Tesco lub Neste).

Szaleją z cenami niesamowicie, sprzedaż ON powoli zaczyna spadać, ale oczywiście nikomu do głowy nie przychodzi obniżenie akcyzy.

Widziałem Beatę ;d

UWAGA! Ten wpis ma już 15 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Taa, stoję sobie na skrzyżowaniu Głębokiej z Kraśnicką, na pasie do skrętu w lewo, a że czerwone długo nie chciało się zmienić, spojrzałem w prawo – na środkowym pasie, zaraz obok mnie stała Beata Kozidrak rubinowym Jaguarem S-type. 😀 Szczęśliwym jak dziecko. ;d