Uptime

W ramach side questa potrzebowałem monitoringu dostępności stron WWW, z API i dość dużą liczbą monitorowanych serwisów. Powiedzmy od 100 w górę. I najchętniej za darmo, bo potrzebuję tylko do PoCa. I fajnie, jakby umiał monitorować nieco częściej, niż raz na 5 minut.

Zdziwiłem się, bo okazało się, że… nie ma. A przynajmniej nie znalazłem. Oczywiście jest Uptime Robot, którego – jak się okazało – używam od ponad dekady. Z własnym narzędziem do wyświetlania dashboardu. No ale tam mam sporo slotów zużytych z 50, które może od biedy by wystarczyły.

Jestem zdziwiony, bo tego typu monitoring jest w miarę tani. Bo czymże jest request HTTP czy wysłanie pakietu ICMP raz na minutę i zapamiętanie stanu. A dla wysyłki poczty (SMTP relay) serwisów pozwalających nawet niewielkie newslettery jest całkiem spory wybór. I wygląda na nieco bardziej inwazyjne, potencjalnie (spam). No ale nie ma i co zrobisz, trzeba selfhostować. Za to będzie pełna dowolność w interwałach sprawdzania dostępności.

Szybko odpędziłem myśl o napisaniu własnego rozwiązania, bo tak, plik YAML z definicjami serwisów, prosty skrypt w Pythonie z wykorzystaniem biblioteki requsets, napędzany cronem spokojnie by wystarczył do tego, co chcę osiągnąć. Postanowiłem rozejrzeć się za gotowcami.

No i znalazłem coś, co mnie nawet zachwyciło. Nazywa się Uptime Kuma, daje API, daje ładny frontend, sensowną dokumentację w zakresie uruchomienia, obsługuje wiele kanałów powiadomień. Od początku ujęło mnie tym, że potrafi korzystać zarówno z bazy sqlite, jak i MySQL, więc przy małych zastosowaniach można sobie trzymać bazę w pliku, bez kolejnego serwera.

Oczywiście są wady. Po pierwsze nie przepadam za technologią, w której jest stworzone rozwiązanie. Po drugie, dedykowana biblioteka Pythona do obsługi API nie działa poprawnie. W sumie przez to straciłem więcej czasu, niż na uruchomienie monitorigu + reverse proxy w oparciu o nginx. Skończyło się tym, że nie korzystam z dedykowanej biblioteki, tylko robię requesty na żywca.

Gdyby ktoś chciał sobie porobić wykresy albo monitorować usługi – polecam sprawdzenie Uptime Kuma. 90k gwiazdek na GitHub nie jest przypadkiem.

Migracja, której nie było

Obwąchiwałem się z serwisem Codeberg od jakiegoś czasu. Nie miałem może silnego postanowienia migracji z GitHub i motywacji do niej[1], ale gdzieś tam taka opcja istniała. Nawet zrobiłem skrypt do backupu repozytoriów z GH i pisałem o Codeberg, na którym założyłem konto.

Jednak pozmieniało się. Codeberg zmienił warunki korzystania z usług. Najpierw pojawił się zakaz utrzymywania repozytoriów, w których kod pisał głównie LLM. Bo rzekomo pojawiają się niejasności związane z copyright i nie ma gwarancji, że nie będzie szkodliwego kodu. Chwilę później dołączył zakaz projektów związanych z kryptowalutami gdyż szkodzą reputacji serwisu. I opcja migracji przestała dla mnie istnieć.

Dlaczego? Powodów jest wiele, ale najważniejszy jest chyba niesmak. Nie wiem, czy bardziej spowodowany pokazową deklaracją światopoglądową, czy podawaniem pretekstowych uzasadnień czy wypaczaniem idei FOSS. Pierwszego tłumaczyć chyba nie trzeba – manifestacja antyAI i antykryptowalutowa i chęć jej „zaistnienia” w warunkach usługi jest czytelna. A przy tym zbędna – istniejące punkty jak najbardziej już zabraniały hostowania projektów naruszających zasady. Nic nowego się nie pojawiło, po prostu zakazy są z góry, tematycznie, bez zastanawiania się.

Uzasadnienia uważam za pretekstowe, gdyż… po krótkim zastanowieniu łatwo dostrzec, że nie mają sensu. Zabronione są projekty pisane głównie przez LLMy[2]. Kluczowe słowo to oczywiście głównie. Bo czy w projekcie, gdzie tylko trochę kodu jest pisane przez LLM mogłoby dojść do naruszenia copyright lub pojawić się szkodliwy kod? Oczywiście przy założeniu, że takie rzeczy w ogóle występują, ale tę część można wyłączyć przed nawias jako nieistotną dla dalszych rozważań. Otóż mógłby, bo nie zależy to od udziału kodu generowanego przez LLM.

Kolejna sprawa to brak możliwości stwierdzenia, jak powstał kod – ręcznie czy z użyciem LLM. I w jakim stopniu. Czyli pozostaje ocena po deklaracji autora lub owocach. A zapisy dotyczące copyrightu oraz szkodliwego kodu już przecież istniały.

Podobnie jest z nieprecyzyjnym słowem powiązany (z kryptowalutami). Czy jeśli zrobiłem skrypt, który pobiera dane m.in. o kursach kryptowalut i robi analizę statystyczną/korelację z kursem walut i akcji spółek giełdowych, to już szkodzi reputacji?

Zresztą przy krótkiej rozmowie z jedną z osób, które współpodejmowały decyzję, usłyszałem „nie chce też żeby moje składki szły na bandwidth i storage dla ludków co se robią 5 projektów i puszczają armię botów w samopas”. No rozumiem, że ktoś nie chce[3]. Ale nie uzasadniajmy tego copyrightem czy szkodliwym kodem. Wystarczy napisać wprost, że takie projekty zużywają więcej zasobów.

Zostało wypaczanie idei FOSS. Chodzi o cztery wolności, których Codeberg zresztą wymaga w warunkach usługi. Dokładnie o możliwość dowolnej modyfikacji oraz o możliwość rozpowszechniania ulepszeń. Wyobraźmy sobie, że jest projekt open source, który tworzy plugin zabezpieczający przed botami przez zastosowanie PoW (proof of work). Ot, np. policzenie czegoś stosunkowo złożonego w JS. Ktoś wpada na pomysł, żeby zamiast zużywać prąd zupełnie bez sensu, dać użytkownikowi możliwość spędzenia chwili czasu na kopaniu kryptowalut[4] na rzecz właściciela strony. Obecnie taka zmiana nie ma możliwości znalezienia się w kodzie projektu rozwijanego na Codebergu, ponieważ jej zaakceptowanie rzekomo szkodziłoby reputacji serwisu.

Oczywiście można dyskutować, czy to faktycznie ograniczenie tej wolności, bo przecież można sobie modyfikować i publikować gdzie indziej. Tylko wg mnie taka możliwość jest raczej teoretyczna – community i rozwój jest w konkretnym miejscu, nikt raczej nie będzie z powodu jednego ficzera chciał zmienić platformy, prędzej odrzuci zmianę. To nie jest hosting, że zmieniamy dostawcę, przepinamy domenę na nowe IP i już.

Rozmawiałem na ten temat ze znajomym. Pojawiło się stwierdzenie, że potem jest zdziwienie i narzekanie, że (przez tego typu akcje) ludzie nie korzystają z europejskich rozwiązań, tylko uzależniamy się od rozwiązań zza oceanu. To smutne, ale skoro lokalnie dostępna jest jedynie wolność z gwiazdką…

[1] No bo to trochę taka sztuka dla sztuki by była – mało się tam dzieje, a backup mogę przywrócić gdziekolwiek.
[2] You must not share projects that mostly consist of code written by „generative AI”-tools.
[3] Co prawda pewnie wystarczyłby tu rate limiter, no ale…
[4] To nie jest nowa idea, był plugin/serwis do kopania Monero, zamiast reklam na stronie. Z różnych powodów upadło.

Rozrywka

Link z ostatniego wpisu o tym, jak AI rzekomo zabiło CTFy przypomniał mi o podobnym zjawisku sprzed lat. Zanim przejdę do sedna – faktycznie, wygląda na to, że scena CTF do czasu pojawienia się AI się zmieniła. Niedawno bawiliśmy się ze znajomymi i duże kilkadziesiąt zespołów rozwiązało wszystkie zadania. Nie mam większej próbki, na ile to powszechne, ale faktycznie, pierwszy raz widziałem taką sytuację. No i opisy autora wpisu, całe frameworki, agenty – robi wrażenie. Bo LLMy były wykorzystywane już wcześniej, ale raczej ręcznie, przynajmniej wg mojej wiedzy. Zresztą oddać trzeba, że większość CTFów nie dawała żadnych ograniczeń w tym zakresie.

Wracając do zjawiska, które mi się przypomniało. Wieki temu, w czasach szkoły średniej, kiedy mieliśmy za dużo czasu, z kolegami wpadliśmy na genialny pomysł. Kupimy magazyn z łamigłówkami, rozwiążemy wspólnie i wyślemy do losowania, aby ubiegać się o najwyższą nagrodę. Były bowiem różne nagrody, zależne od ilości rozwiązanych zadań. Najniższy próg można było dość łatwo osiągnąć, ale i nagrody były niezbyt wysokie. Natomiast w najwyższym i nagroda była – jak dla nas – wysoka, i trzeba było naprawdę pogłówkować. Magazynem była tytułowa Rozrywka, która zawierała krzyżówki, jolki, rebusy itp. Jednym słowem: łamigłówki. Z perspektywy czasu, był to trochę taki CTF, tylko niezwiązany z komputerami i IT security.

Dla ustalenia uwagi: dwutygodnik Rozrywka – bo o nim mowa – kupowało się w kiosku, rozwiązania wysyłało zwykłą pocztą, chyba z fragmentem numeru. Z tego co pamiętam – choć nie dam głowy, każdy z nas kupował i wysyłał swój egzemplarz. Sporo rzeczy rozwiązywaliśmy równolegle, bo synchronizacja była nie online, tylko telefonicznie, albo w szkole[1]. Inny świat.

Oczywiście nigdy nic nie wygraliśmy, a sam pomysł dość szybko upadł[2]. Pewnie nie doceniliśmy wpływu szczęścia w losowaniu i przeszacowaliśmy szanse, czyli ilość ludzi, którzy jednak rozwiążą wiele zadań i wyślą rozwiązania. W sumie dla emerytów mogło to być jedyne zajęcie i odpowiednik loterii. Posiadali przy tym duże doświadczenie w rozwiązywaniu… Teraz to oczywiste, wtedy o tym nie myśleliśmy.

Jednak pamiętam, że robiliśmy usprawnienia. Pewien typ zadań to działania matematyczne, gdzie część cyfr jest zastąpiona literami[3]. Jako zdolni programiści podjęliśmy próbę napisania programu, który rozwiąże takie zadania. Z tego co pamiętam, początkowo zastosowaliśmy podejście brute force, co na niezbyt szybkich w owych czasach komputerach skazane było na niepowodzenie – program działał zbyt wolno. Przynajmniej w wersji naiwnej, bo ostatecznie kolega napisał w Pascalu coś, co było wystarczająco szybkie.

Dziś mamy tak szybkie komputery, że nawet wersja naiwna wystarczy[4]. Mamy też narzędzia w stylu Z-solvera czy OR-tools, które są w stanie pomóc przy tego typu zagadkach. Wreszcie jest dostęp online i do algorytmów, i gotowych narzędzi. Kiedyś było więcej myślenia i samodzielnego kombinowania. Podobnie z krzyżówkami. Chyba próbowaliśmy korzystać z jakichś komputerowych słowników na potrzeby krzyżówek, ale raczej były niekompletne i trudno dostępne.

Zmierzam jednak do tego, że komputery, ze swoją mocą obliczeniową, całkowicie zmieniły krajobraz łamigłówkowy i „scenę”. Bo pojawiły się też programy do tworzenia krzyżówek, sudoku, łamigłówek. Zmieniły się i same krzyżówki. Kiedyś normą była „szachownica” białych pól na wpisywanie haseł i czarnych, pustych. W białych były numerki, a hasła były oddzielnie. Czasem miały dość długie opisy. Teraz dominują krzyżówki panoramiczne, gdzie pojedyncza kratka zawiera – oczywiście krótki – opis hasła, a same hasła krzyżują się praktycznie wszystkimi literami.

I tak sobie myślę, że komputery zrobiły łamigłówkom to, co dziś LLMy i agenty robią CTFom. Zupełnie zmieniają krajobraz i środowisko. Przygotowując ten wpis dowiedziałem się, skąd wzięła się nazwa zadań: jolka… Jeśli chodzi o wydawnictwo Rozrywka, to z Wikipedii dowiadujemy się, że w 2021 r. prawa do tytułów zostały sprzedane. Jednak sam dwutygodnik nadal istnieje. Czy w zbliżonej formie? Jestem prawie pewien, że nie. Ale może kupię, żeby zobaczyć jak ma się do tego, co pamiętam. No i mam nadzieję, że scena CTF jednak nie zniknie, nawet jeśli się zmieni.

Bo łamigłówki nadal funkcjonują, nawet w epoce komputerów. Czasem – dzięki nim. I dostarczają radości i zabawy. Wystarczy przypomnieć 711 wyrazów o optymalizacji.

[1] Hm, a może to były wakacje/ferie?
[2] Jeśli dobrze pamiętam, wysłaliśmy z 2-3 razy, czyli zabawa na jakiś miesiąc czy dwa.
[3] Nazywa się to kryptarytm.
[4] Nawet w Pythonie, bez PyPy. A gdyby kogoś kryptarytmy i rozwiązywanie bardziej zainteresowało, to polecam te dwa linki.