abcc3.py

Wieki po projekciku, który robiłem w ramach projektu DSP2017, po którym chyba już nic w sieci nie zostało, doznałem natchnienia. Stwierdziłem, że teraz jest łatwo, można popytać LLMa, więc może łatwiej będzie znaleźć bibliotekę do ping pod Pythonem. Ostatnio opornie to szło…

Nie zawiodłem się, podał od ręki, wraz z kodem. Oczywiście przerobiłem, by bardziej pasowało. Przy okazji przy testowaniu (w zasadzie: testach uruchamiania) wynikło trochę błędów, które poprawiłem.

Po co to zrobiłem? Nie wiem. Chyba dla porządku. Drażnił mnie ten Python 2 w wymaganiach. A wyrzucić szkoda było. Chociaż raczej nikt nie używa. Choć IIRC ktoś się przymierzał, ale nie chciał poświęcić czasu, tylko „zrób mi”. Oczywiście za darmo. Trochę nie miałem czasu, weny i… to tak nie działa.

Warto po latach przypomnieć czym jest abcc? Na dzień dzisiejszy to rzeźbiarstwo figurowe – program do wybierania najlepszego łącza z kilku dostępny z wykorzystaniem zadanych wag, na podstawie strat i opóźnień. W sumie kiedyś, w czasach routerów na Linuksie miało to sens. Chociaż nic nie stoi na przeszkodzie by i dziś podpiąć dowolny skrypt i sterować np. przy pomocy SNMP routerem operatorskim. Istniało komercyjne rozwiązanie, które mniej więcej robiło to samo. Oczywiście z ładnym inferfejsem i opakowaniem.

Albo można użyć na jakimś OpenWrt do balansowania łącza czy też raczej wyboru lepszej ścieżki do danej sieci. Bez BGP, na podstawie wyżej wspomnianych metryk. Przy LTE itp. może być użyteczne.

OR-tools

Niedawno xpil wrzucił zagadkę dotyczącą rozmieszczenia liczb na wierzchołkach dwunastościanu foremnego. Nieco rozochocony zeszłorocznym Advent of Code (który w znacznym stopniu odpuściłem, za wiele srok) stwierdziłem, że „to się zaprogramuje”.

Suma liczb na każdym boku była dość spora, ale istniało ograniczenie w postaci wymogu, że muszą być liczbami pierwszymi, więc może nie będzie tak źle? No bo na ile sposobów można wybrać pięć liczb z nieco ponad trzystu tak, by suma dawała określoną wartość? Otóż niestety na wiele i po wstępnej przymiarce wiedziałem, że brnę w ślepą uliczkę.

Przypomniałem sobie o Z3 solver, które bywa wykorzystywane w CTFach do rozwiązywania zadań i wyglądało trochę na szwajcarski scyzoryk. Tyle, że nie znam tego rozwiązania – nigdy nie znalazłem czasu, by się nauczyć. Ale od czego mamy AI? Porozmawiam z chatem, na pewno pomoże.

Rozmowę zacząłem jednak od problemu ogólnego, trochę licząc, że jest jakiś wyjątkowa właściwość lub algorytm dla tego dwunastościanu. Gdy poprosiłem o kod w Pythonie, ku mojemu zdziwieniu zaproponował rozwiązanie z użyciem nie Z3, tylko OR-tools. Zerknąłem i okazuje się, że Microsoft zrobił Z3, a Google zrobiło coś może mniej uniwersalnego, ale podobno szybszego, przeznaczonego do optymalizacji.

Przyznaję, że OR-tools robi dobre wrażenie. Podobnie jak Z3 nie jest proste i intuicyjne, ale po krótkiej chwili walki z chatGPT udało się złożyć program, który znalazł rozwiązanie. W bardzo krótkim czasie, rzędu kilkunastu sekund. Co ciekawe, algorytm jest niedeterministyczny. Rozwiązania nie podaję, bo jest na stronie z rozwiązaniem zagadki – na oko bardzo podobne. Jeśli komuś zależy to znajdę to co chatGPT zaproponował.

To teraz wypadałoby nauczyć się obu narzędzi, ale raczej nie znajdę na to czasu. Za to przynajmniej będę wiedział, że istnieją i co mniej więcej potrafią.

I ciekawostka. Wiecie co to jest „LUB-przykładowe narzędzia”? Jest to odpowiednik „OR-Tools Examples” w tłumaczeniu na oficjalnej stronie Google. To tak dla ustalenia, gdzie jesteśmy z automatycznymi tłumaczeniami. Chciałem napisać, „z AI”, ale chyba nie było tam wykorzystane – Gemini tłumaczy znacznie lepiej i całkiem sensownie.

Szachy

W szachy nauczył mnie grać dziadek, gdy byłem małym dzieckiem. Grałem nieźle jak na swój wiek, ale jakoś specjalnie szachowego bakcyla nie połknąłem. Ani nie grałem później w klubach, ani nie czytałem zaawansowanych książek. Owszem, czytałem jakieś proste książki dla dzieci, gdzie były jakieś podstawy taktyki i wartości figur, ale nic więcej.

Potem zetknąłem się z ludźmi, którzy wiedzieli co to obrona sycylijska, znali otwarcia i umieli tę wiedzę wykorzystać. Czyli – patrząc z perspektywy – mieli dużą przewagę i tak też z tego co pamiętam przebiegały rozgrywki. Studiowanie książek tylko po to, by lepiej grać w grę, która miała być rozrywką jakoś nie wydawało mi się sensowne. Odpuściłem. Albo po prostu właśnie nie połknąłem bakcyla.

Fast forward. O szachach przypomniał mi serial Gambit królowej. Nakręcony na podstawie książki Waltera Tevisa. O samym serialu pisali Zuzanka i Boni, nieco udzielałem się w komentarzach w pierwszym linku, więc nie ma sensu powtarzać. Ważne jest to, że serial przypomniał mi – i nie tylko mi – o istnieniu szachów. I ogólnie wpłynął mocno na zainteresowanie nimi na świecie[1]. Postanowiłem odświeżyć temat.

Pierwszą rzeczą było zainstalowanie programu na smartfonie. Nawet dłuższą chwilę – pewnie około miesiąca – pograłem. I nawet jakieś efekty były. Tylko była to gra przeciwko komputerowi. I bez żadnych dodatków. Program został, czasem go włączałem i… tyle. W zasadzie bardziej był na telefonie, niż realnie używałem. Znaczy się kolejny raz nie połknąłem szachowego bakcyla.

Zupełnie niedawno zarejestrowałem się na chess.com i zainstalowałem ich aplikację. I był to strzał w dziesiątkę. Zadania, lekcje, przyjemne analizy. I mocna gamifikacja: ligi, zliczanie codziennego grania, zbieranie flag państw ludzi, z którymi się grało. Wciągnęło mnie. Gram regularnie. Dodatkowo można grać ze znajomymi, a okazało się, że w firmie są użytkownicy tej platformy.

Jest to podlewane elementami analizy i nauki (wszystko w appce!) i… widzę postępy. Zatem, jeśli ktoś chce się nauczyć grać w szachy – bezinteresownie polecam. Tym bardziej, że można korzystać za darmo. A dla chętnych jest krótki, zdaje się tygodniowy, trial dający dostęp do wszystkich funkcjonalności i usuwający niektóre limity typu ilość lekcji w tygodniu.

[1] Z tego co pamiętam. Linków ani danych nie mam, ale i trendy Google, i szybkie wyszukiwania zdają się potwierdzać.