Hacktoberfest 2022

W tym roku ponownie uczestniczyłem w Hacktoberfest. Początkowo wydarzenie traktowałem sceptycznie. Zresztą słusznie, bo problem mało istotnych commitów i spamu jak najbardziej istnieje. Potem jednak stwierdziłem, że to fajny motywator, żeby coś zrobić w open source. Zabawę z Hacktoberfest zacząłem więc w 2020, z repozytoriami nie uczestniczącymi oficjalnie w Hacktoberfest.

W zeszłym roku dołączyłem do firmowego wydarzenia. W ramach gry we własną grę, bawiliśmy się w zbieranie jak największej ilości gwiazdek. Czyli robienie commitów do repozytoriów z ich jak największą ilością. W duchu fair play, czyli bez spamu i poprawiania literówek. Trochę taki CTF.

Zatem w pełnym wymiarze uczestniczyłem w Hactoberfest 2021. Mógłbym dodać and all I got was this lousy t-shirt. Bowiem po spełnieniu warunków na odpowiednią liczbę commitów można było wybrać nagrodę – koszulkę lub zasadzenie drzewa. Lubię t-shirty, więc wybrałem koszulkę, mimo średniego koloru. Przy okazji dowiedziałem się, ile kosztuje darmowa koszulka po przejściu przez cło i Pocztę Polską. Otóż w 2021 przy deklarowanej wartości przesyłki $5,95, naliczono 5 zł VAT oraz 8,5 zł opłaty pocztowej. Razem 13,5 zł, czyli mniej więcej połowa wartości paczki. Zaś sama paczka dotarła w marcu 2022. Dowód:

Opłaty za koszulkę Hacktoberfest - Poczta Polska
Opłaty za koszulkę Hacktoberfest. Źródło: fot. własna

Nie powinno zatem dziwić, że w tym roku wybrałem posadzenie drzewa zamiast koszulki. Tegoroczny Hacktoberfest to trochę kontynuacja poprzedniego. Znowu zbieranie gwiazdek z ekipą z firmy. Z drugiej strony jest to powrót do korzeni, bo moje tegoroczne commity to głównie tłumaczenia do tldr. A przecież przygodę z open source zaczynałem od tłumaczeń w ramach Polish Debian Documentation Project, potem tłumaczyłem na polski w ramach GNU Polish Translation Team.

Oczywiście były też commity związane z kodem, oczywiście w Pythonie. I tu spostrzeżenie, że ludzie potrafią znaleźć błąd, zdebugować go, znaleźć miejsce, gdzie powinien być poprawiony i… założyć issue, wszystko pięknie opisując. Nie oceniam bo przyczyny mogą być różne, choć dziwię się, bo nakład pracy na założenie issue na GitHub z pięknym udokumentowaniem błędu i debugiem jest IMVHO większy, niż poprawka w kodzie. W każdym razie widać, że warto commitować i poprawiać takie drobne błędy.

Pojazdy drugiej kategorii

Rowerem jeżdżę, ale raczej niewiele i raczej używam go jako środka transportu w mieście. Widać to choćby po statystykach rocznych. Można się do wielu rzeczy przyczepić w sprawie organizacji ruchu rowerowego w miastach, ale jakieś ścieżki są i powiedzmy, że da się żyć. Choć oczywiście wiele można poprawić.

W tym roku jednak wybrałem się rowerem na wakacje, w dłuższą trasę, za miasto. Dla ustalenia uwagi, rower to tzw. góral, wypad miał charakter przejazdu z miejsca na miejsce, więc jechałem tylko z małym plecakiem, a długość trasy to nieco ponad 60 km w każdą stronę. Taki wypad świetnie pokazuje, w jak fatalnym stanie jest infrastruktura rowerowa w Polsce.

Zaczęło się niewinnie, tuż za Poznaniem. Ścieżka rowerowa była wzdłuż ruchliwej drogi, ale tylko z jednej strony, dla ruchu rowerowego w obu kierunkach. Nic w tym złego. Pod warunkiem, że ścieżka jest cały czas po tej samej stronie drogi, a nie zmusza się rowerzystę do stania na światłach i przechodzenia na drugą stronę co małe kilkaset metrów. Serio, więcej stania, niż jechania. Totalne wybicie z rytmu i spowolnienie jazdy. Analogia samochodowa: zupełnie jakby ktoś wpadłby na pomysł, by na drodze ruchu szybkiego robić światła co kilometr. No ale cieszmy się, że coś jest, prawda?

Radość nie trwała długo. W pewnym momencie ścieżka się skończyła na skrzyżowaniu z jakąś ulicą, pojawił się znak informujący o końcu ścieżki rowerowej (C-13a) i… tyle. Cóż robić, trzeba udać się na jezdnię. Zmieniam stronę na właściwą (ścieżka była po lewej stornie drogi) i… zauważam tuż za skrzyżowaniem znak „zakaz wjazdu rowerów” (B-9). Rozglądam się, żadnej alternatywy nie widać, latać nie umiem…

Kawałek dalej ścieżka wróciła. Znaczy coś oznaczone jako ścieżka, pokryte asfaltem. Który kiedyś może był gładki, ale obecny stan nawierzchni był tragiczny. Masa drobnych, poprzecznych nierówności. Tu pierwszy raz cieszyłem się, że mam grube opony. Na góralu owszem, dało się jechać. Co prawda mało komfortowo, ale nie trzeba było nawet specjalnie zwalniać. W przypadku cieńszych opon miałbym obawy o całość sprzętu. Przy okazji taka sytuacja może być dobrym wytłumaczeniem, czemu widać rowery szosowe na jezdniach, gdy obok jest ścieżka. Jazda po czymś takim musiałaby być albo bardzo wolna, w okolicach prędkości marszu, albo raczej pewne jest uszkodzenie sprzętu. Analogia samochodowa: ta ścieżka była podobna, ale znacznie gorsza, niż poniemiecka droga z płyt betonowych do Świnoujścia (obecnie jest tam już asfalt).

Więcej nie opiszę, bo później infrastruktura rowerowa w zasadzie po prostu zniknęła. Tu i ówdzie przy miejscowościach pojawił się fragment, który owszem, może coś daje mieszkańcom, ale w kontekście ruchu turystycznego między miastami nie wnosi nic. Drogi, którymi jechałem też momentami raczej dla górala, bo gres czy piach to słaba nawierzchnia dla roweru. Ale to już może kwestia wyboru trasy przez nawigację – korzystałem ze standardowych Google Maps.

Na samych drogach generalnie było OK. Niewielki ruch, kierowcy zachowują odstęp. Jedyny wyjątek zdarzył się na zupełnie bocznej drodze między wioskami. Było zupełnie pusto, z naprzeciwka jechał samochód osobowy. Samochód, który mnie wyprzedzał postanowił – mimo zupełnie pustej drogi – zrobić to dokładnie w momencie zrównania się trzech pojazdów. Czyli zamiast przepisowego metra odstępu było jakieś 10 centymetrów. Serio, dawno nikt tak blisko mi nie podjechał.

Wrócę jeszcze tylko do momentu z lataniem, czyli urywającą się ścieżką i zakazem. Wracałem tą samą trasą i okazuje się, że oznaczenie informujące o końcu ścieżki rowerowej… należy zignorować. Dalej jak najbardziej można – a w kontekście oznaczeń wręcz należy – jechać rowerem. IIRC był kawałek ulicy, a potem ścieżka w lesie, do której wjazd był ukryty w krzakach. Sama ścieżka już bez oznaczeń, ale nadająca się do jazdy. Ale nie trzeba o tym informować rowerzysty, nawet napisem. Przecież wiadomo, że wszyscy okoliczne drogi znają. A jak ktoś nie zna, to niech szuka, prawda?

Krótko podsumowując sam wyjazd – jestem zadowolony. Dałem radę i ja, i rower. Mimo braku infrastruktury jechało się nie najgorzej. Czy powtórzę wypad w przyszłym roku? Nie wykluczam. Ale ze względu na brak infrastruktury na pewno nie wybiorę się na tego typu wypad z dziećmi.

Pomigracyjnie

W poprzednim wpisie pisałem o planowanej migracji na Oracle Cloud. Jak widać blog stoi już w nowej lokalizacji, więc operacja jest zakończona i mogę napisać kilka słów z perspektywy.

Migracja

Poszło niemal bezproblemowo. Backup w zasadzie zadziałał. Był problem z detalami typu lista zainstalowanych pakietów i crony. W sumie nieistotne i/lub poprawione. Xpil opisał swoją migrację VPSa i po tej lekturze miałem silne postanowienie zamknięcia wszystkiego w kontenerach LXC. To nieco wydłużyło proces migracji i dodało trochę zadań. Co prawda nadal nie jest to taka separacja jak w dockerach czyli per usługa, ale mariadb + nginx + całe WWW w osobnym VPSie też jest OK.

Konieczne było lekkie przemeblowanie. Musiałem rozdzielić skrypty cron do właściwych kontenerów. Okazało się też, że wynik działania jednego kontenera (Planeta Joggera) musi trafić nie do hypervisora, tylko do innego kontenera, a ten nie ma dostępu. Skrypt w cronie na hypervisorze załatwił sprawę.
Podobnie niezbyt elegancko rozwiązany jest backup bazy danych. Dump robię teraz w LXC, a następnie cały kontener jest backupowany. W ten sposób zawartość bazy jest zdublowana. Mam pomysł jak to rozwiązać, nie wiem, czy potrzebuję. Tyle o samej migracji, a efekty i hosting?

Efekty

Przede wszystkim jest szybciej, przynajmniej wg GTmetrix. Niestety nie zrobiłem testu tuż przed migracją i od razu po niej. Mam tylko ten link z twardymi danymi, ale w międzyczasie się poprawiło, więc polegam głównie na pamięci. Ale tak dobrze to nigdy nie było:

Blog GTmetrix w Oracle Cloud
GTmetrix w Oracle Cloud

Hosting

Pewnie w sporej części to kwestia przejścia z jednego VPSa na dwa, w dodatku z widocznymi dwoma rdzeniami w systemie. W Arubacloud było:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2650L v4 @ 1.70GHz
stepping        : 1
microcode       : 0xb000038
cpu MHz         : 1699.999
cache size      : 35840 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx hypervisor lahf_lm 3dnowprefetch pti arat
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips        : 3399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual

Teraz jest (pojedynczy rdzeń):

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7551 32-Core Processor
stepping        : 2
microcode       : 0x1000065
cpu MHz         : 1996.249
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr virt_ssbd arat npt nrip_save arch_capabilities
bugs            : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 3992.49
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual

Blog zawsze dominował, jeśli chodzi o obciążenie, ale teraz ma całe zasoby dla siebie. Z drugiej strony bieżący VPS ma sporo wolniejszy dysk (3000 IOPS, 24 MB/s). Można tym jakoś sterować, ale zakładałem na domyślnych wartościach. No i nie widzę potrzeby zmiany.

Wady

Żeby nie było, że wszystko jest fajnie – port 25 TCP w Oracle Cloud jest zablokowany na twardo, w obie strony. Czyli ani maila nie przyjmę, ani nie wyślę. Znalazłem, że trzeba pisać do supportu o odblokowanie. Napisałem i zobaczymy. O ile do monitoringu poczta nie jest mi potrzebna, bo powiadomienia mogę wysyłać Telegramem, to przy blogu jest to jakby kluczowe. Potwierdzanie subskrybcji komentarzy itp. Z drugiej strony widzę, że nie było to jakoś mocno wykorzystywane… Zobaczę co odpowiedzą i wtedy pomyślę, co dalej.

Ogólnie sporo rzeczy w Oracle Cloud jest załatwianych przez support. Ustawienie PTR – support (działa!). Inny obraz dysku dla arm64 – support (tak powiedzieli na czacie, odpuściłem).

UPDATE: Port 25 nie został odblokowany, bo free tier. Nie jest to duży problem – wystarczy skonfigurować SMTP relay u któregoś z dostawców.