ECIH dzien 2 i ostatni


Nadeszła niedziela, zakończenie kodowania i pora prezentacji. Bardzo duży współczynnik sukcesu – na 32 zespoły, wyzwanie ukończyło aż 29. Niestety, przez to każdy miał tylko 3 minuty na prezentację i odpowiedzi na pytania.

Niemniej solucje bardzo ciekawe. Z tych, które lepiej zapamiętałem:

  • meshowy (BLE/WiFi Direct) komunikator komórkowy, w ramach demo działająca aplikacja dla chętnych

  • kilka kontrolerów do OT (np. PV), zastępujących producenckie chmury (lokalne sterowanie albo Nasza Komunistyczna Chmura)

  • wtyczki do przeglądarek robiące fact-checking przeglądanych stron

  • monitoring powstających aktów prawnych pod kątem czerwonych flag i braku bezpieczników

  • analiza zdjęć satelitarnych w korelacji z infrastrukturą (czy ta koparka powinna być w pobliżu światłowodu?)

  • wykrywanie anomalii w ruchu morskin na Bałtyku

  • mapowanie przekłamań bitów pamięci, spowodowane promieniowaniem kosmicznym, na linijki kodu źródłowego.

Były to dla mnie też dni najbardziej intensywnego korzystania z komunikacji miejskiej w ostatnim czasie. Nastąpiła koniukcja: miejsce było w miarę blisko i dostępne bezpośrednim autobusem lub tramwajem; dwa bilety – tam i z powrotem – kosztowały mniej niż godzina parkowania pod GPNT; nie mogłem dojeżdżać hulajnogą, bo Gdańsk całkowicie pokpił sprawę odśnieżania i odladzania DDR w tym miesiącu.

ECIH podziękował za mentorzenie.

033/100 of #100DaysToOffload

ECIH dzien 1


Ten dzień zaczął się naszą (w sensie ASI) prezentacją o radionawigacji i jej zakłócaniu. Jakub przemycił kilka ciekawostek i mniej znanych faktów. W Gdańsku jest ILS kategorii 3, najwyższej, ale tylko na podejściu z jednej strony! Wyzwania na ścieżce kosmicznej hakatonu wiązały się luźno z prezentacją.

Zdjęcie w trakcie prezentacji "Airspace as critical infrastructure"

Zdjęcie od Startup Harbour

Poza kosmiczną, były też ścieżki social media/dezinformacja/łączność oraz energetyka/offshore. Nie trzeba było podejnować konkretnych wyzwań, ale rozwiązanie powinno się wpisywać w temat ścieżki.

Gdy uczestnicy zaczęli kodować, my mentorzy skupiliśmy się na wsparciu merytorycznym. Ale też na networkingu. Rozmowy z ludźmi z 11labs, przedstawicielami funduszy inwestycyjnych. Mind blown.

Miło było zobaczyć reprezentacje Hackerspaców. Knyfyrtel (Poznań), Łódź, a nawet Kutno.

Organizacyjnie nie miałem zastrzeżeń. Przestrzeni było wystarczająco. Jedzenie było dostarczane regularnie, komunikacja na Discordzie na bieżąco. Nawet problemy z wifi szybko zażegnane.

032/100 of #100DaysToOffload

ECIH dzień 0


Weekend minął mi na udziale w European Critical Infrastructure Hackaton. Zorganizowany głównie przez znajomych z Vidoc. Moja firma dołożyła swoją cegiełkę, plus byliśmy dostępni dla uczestników jako mentorzy.

Na dniu rozruchowym nie załapałem się na warsztat ze składania dronów. Natomiast drugi warsztat z dezinformacji i destabilizacji państw to złoto. Radzieckie przepisy z ubiegłego wieku wciąż działają, a media społecznościowe tylko zwiększyły skuteczność.

Rozmowy w salce VIP i na kolacji zaskoczyły po całości. Spotkałem osoby z Bundeswehry, zajmujące się energetyką, prawniczkę specjalizujacą się w prawie chińskim, menedżera w Netfliksie, gdańską europosłankę i kilku dyrektorów.

Zaskakujące kwestie np. doboru lokalizacji hackatonu. Warunkiem koniecznym był dostęp do… prysznicy. Cóż, to w końcu ponad doba siedzenia przed komputerem.

031/100 of #100DaysToOffload

Apple knows better (how big it is)


Last year, I've spent few months exchanging emails and packet dumps with Zoom's support. They provide videoconferencing software which gave me connectivity problems . Specifically, Zoom client, on my work Macbook, when connected to my home network, failed. To make reporting harded, Zoom's webpage did not open in Chrome on that laptop neither.

Perplexingly, my private Fedora laptop, on the same network, had no problems whatsoever. I'll spare the details of weeks-long investigation (no, it wasn't DNS' fault; nor Cloudflare's).

The problem source…

MacOS X DHCP client ignores Maximum Transfer Unit (option 26) from DHCP server!

I couldn't believe it, but there are tons of similar reports over the net. Apparently, Apple deems MTU information not trustworthy. Well, thank you 🍏, there went weeks of my time.

Why do I even have non-standard MTU in my network?

Since my ISP was acquired, I had to deal with blast-from-the-past networking. Plain, reliable Ethernet connection was replaced with PPPoE, lowering the MTU to 1492 bytes, bringing distaste and headaches.

Why other webpages and software continued working?

Most communications use TCP/IP protocol, which knows how to deal with decreased MTU. Modern pages (and Zoom) try to use QUIC protocol. It works over UDP. UDP has no mechanisms of Path MTU discovery and too big packets are just dropped. PMPTU for QUIC is still at a draft stage.

Why it started to happening recently?

Due to other circuimstances, I had disabled IPv6 connectivity for my work laptop around summer last year. I didn't noticed at the time, but before that, Zoom worked fine over IPv6. MTU information from RA is good enough for Apple, whereas from DHCP is a no-no.

Kudos to Zoom Support, for spotting the MTU problem in the end.

030/100 of #100DaysToOffload

200% z 5 minut sławy


Poszedłem do Hackerspace Trójmiasto na lighting talki. Chciałem tylko zobaczyć jak to wygląda, a ostatecznie poprowadziłem dwie nano-prelekcje. Taki lifehack jakby ktoś chciał mieć 10 minut sławy zamiast 5.

Tematy naprawdę różne były, szycie to jest życie, biblioteki, czcionki, tokarki, kongres CCC itp. Nagranie jest na kanale HS3M. Moje dwa występy od 18:36 i 42:44

029/100 of #100DaysToOffload

I Voted, F43 edition


I've cast my votes in Fedora Engineering Steering Comittee. The voting closes tomorrow.

As usual, I've read interview with the candidates, and then decided on my preferences. Red Hat employees get a minus, new faces get plus. There are exceptions, it's not a hard rule!

That's one of the way I contribute to Fedora. Sometimes I blog about elections. I've also been a Fedora packages for almost 18 years!

https://badges.fedoraproject.org/pngs/ivoted-f43.png

028/100 of #100DaysToOffload

KKDG2025 – moje podsumowanie


Ledwo co się zaczęła, a już się skończyła akcja Kręć Kilometry dla Gdańska 2025. Mogę więc krótko podsumować mój udział jako casuala.

Punkty zbierało się głównie za dojazdy do miejsca pracy/uczelni, a także za odwiedzanie wyznaczonych miejsc dodatkowych i dłuższe wycieczki. Kampania trwała trzy miesiące, w październiku punkty liczono ×2, w listopadzie ×3.

Z tego wynika, że na listopad przypada praktycznie połowa możliwej do zdobycia punktacji. W założeniu ma to zachęcać i rekompensować jazdę w gorszej pogodzie. W tym roku nie musiało – mamy 22 grudnia i nawet jeszcze śnieg nie padał. Wczoraj pojechałem na wycieczkę bez elektrycznych rękawic, bo przyszła fala upałów +7°C.

Wracaja do KKDG. Takie wagi miesięcy to plus dla mnie, bo wrzesień jest tradycyjnie miesiącem wyjazdu gdzieś na urlop. Za dojazdy do pracy zbierałem punkty na rzecz Dynatrace, bo my się w firmie nie ogarnęliśmy z rejestracją.

W tej edycji odwiedziłem wszystkie punkty bonusowe. Nawet na odległej wyspie sobieszewskiej. Większość z małżonką, którą nowy rower zachęca do częstszych wycieczek.

Wszystkie punkty specjalnie, niemal codziennie do pracy do limitu kilometrów, cały listopad na dwóch kółkach. Parę weekendowych dłuższych wyjazdów. W tym trybie jestem w stanie w 3 miesiące wyjeździć ok. 5,5 do 6 tysięcy punktów. Punkty można zamienić na gadżety/nagrody, więc np. zapięcie u-lock za 5555 mógłbym zdobyć.

W tym roku upłynniłem punkty na kawę gdańską (była spoko) za 2222, a pozostałem 3333 przekazałem na bon 100 PLN dla Schroniska dla Bezdomnych Zwierząt Promyk.

Daleko mi było do torby rowerowej Crosso (7777 pkt), ale poznawszy ich ofertę kupiłem sobie sam Zipper+ w prezencie. Bardzo mi się spodobała dostępność części zamiennych do ich produktów. I PDFy z szablonami – można wydrukować i przymierzyć do roweru , wybierając od razu dobry rozmiar. Przypomniałem sobie też dobre opinie joggerowych kolegów. Oczywiście zakupiona samemu torba nie ma logo KKDG, więc nie ma szpanu. A przyznam, że na mieście zauważalne są osoby z torbami i sakwami z logo 7777, co od razu wskazuje, że to górna półka rowerzystów miejskich :)

027/100 of #100DaysToOffload

Fedora 42→43, more eventful than usual


I've found time for dist-upgrade of my home server, finally. As usual, there was one thing needing manual intervention: PostgreSQL update. But this time it was more complicated.

Between Fedora 42 and 43, PostgreSQL jumped from v16 to v18. And postgresql-setup --upgrade handles adjacent versions upgrades only. Fortunately, Fedora ships other version-suffixed packages for this database.

It is possible (and needed!) to use postgresql-server17 and postgresql17-upgrade packages as an intermediate step in the upgrade. Commands are documented in bz#2411778#c1. It should be included in F43 Common Bugs list, but it isn't. (And the list itself was moved from Wiki into Discourse…)

Note to self: the upgrade always fails with my customised postgresql.conf. Remember to plant the default config for the duration of postgresql upgrade.

026/100 of #100DaysToOffload

MinIO się skończyło


Domowa implementacja API S3, MinIO, znienacka zakończyła rozwój. Produkt jest rozwijany dalej jedynie komercyjnie. Znaki były wcześniej, dwa miesiące temu zaprzestali publikacji obrazów.

Szkoda.

Ale uczciwie mówiąc, mam domowy deploy od kilku lat, ale tego API w końcu nigdzie nie użyłem. Najbardziej przydatny był webowy panel MinIO, podpięty pod domowe SSO. Główną funkcjonalnością było dla mnie uploadowanie plików z sieci gdzie np. GMail jest zablokowany.

Z jednej strony, jeśli będę potrzebował cebulowe (czyli darmowe) S3, to do 10GB / miliona operacji IO można użyć free tier R2. Z drugiej, głupio nie mieć self-hosted wersji, więc zastanawiam się nad Garage.

Mam też S3 API udostępnione przez domowy klasterek CEPH, ale ten częściej nie działa, niż działa (bo jest na deweloperskich wersjach Fedora Rawhide).

Przy okazji pozdrawiam osoby koleżeńskie z jednej z poprzednich prac, które podjęły decyzji o wbudowywaniu MinIO w produkty dostarczane klientom. 🫂

025/100 of #100DaysToOffload

Suszarka skończyła. Teraz Twoja kolej.


Nie pisałem jeszcze jak zintegrowałem suszarkę do ubrań z domową automatyką. Najważniejsze była informacja, że zgonsusznia (ang. deathstill) skończyła pracę, bo jej pikania nie słychać zza zamkniętych drzwi. Informację przekazuje nam Aleksa.

Odpytywanie

Suszarka marki Candy ma jakąś tam aplikację, ale jak to zwykle bywa do niczego się ta appka nie nadaje. API nie jest opisane. Komunikacja z urządzeniem jest niby szyfrowania. Niby, bo odpowiedź jest xorowana z kluczem. Jednocześnie odpowiedź jest JSONem, pierwsze znaki to zawsze {", dalej też łatwo zgadnąć.

Jest więc narzędzie CandySimplyFi-tool, które klucz odkrywa.

Napisałem kawałek kodu eksportujący stan suszarki do domowego brokera MQTT.

Mów do mnie

Jednym z konsumentów informacji o suszarce z MQTT jest mały serwis z jednym zadaniem: jak suszarka skończy, to niech Aleksa da odgłos paszczą. I powtarza co kwadranso, o ile suszarka nie została wyłączona.

Do tego polecam świetną usługę VoiceMonkey. Po wstępnym skonfigurowaniu, wystarczy jedno RESTowe żądanie aby Echo przemówiło. Mam kilka predefiniowanych zdań informujących o zakończeniu cyklu. Zawsze też można poprosić lokalnego LLMa o wygenerowanie jakichś krótkich, sarkastycznych komunikatów.

Ile jeszcze?

Nasza suszarka ma tendencję do kończenia cyklu wcześniej, niż wynika z pokazanego na początku czasu Nie doczytałem, czy ma czujnik wilgotności, a może ilości odprowadzonej wody? Niemniej finał pracy bywa niespodzianką, więc głosowa informacja o końcu cyklu jest tym bardziej wskazana.

/dżogstaff/2025.11.30-suszarka.dash.webp

Posiadanie informacji o stanie suszarki w systemie pozwala na robienie dashboardzików i innych powiamień – np. o konieczności wyczyszczenia filtra lub wylania wody. Tu się przydaje Prometheus lub coś podobnego i push-gateway.

024/100 of #100DaysToOffload

Warsztaty rowerowe


Dzisiaj z rana pojechałem kilka wiosek dalej, na warsztaty rowerowe organizowane przez Mechanika Rowerowa. Po latach^Wdekadach zaniedbywania poprzedniego roweru, do obecnego postanowiłem podejść poważniej.

Warto było. Posłuchałem specjalistów, zrobiłem kilka stron notatek. Co najważniejsze, w komfortowych warunkach i pod nadzorem przećwiczyłem demontaż i zakładanie koła, dętki, opony, rozkuwania i spinanie łańcucha oraz niektóre regulacje. A że byłem ze swoim rowerem, to poznałem też lokalizację schowanych śrub i obecność stabilizatora łańcucha w przerzutce.

Po drodze, jadąc szerokimi ulicami przez przemysłowe Kokoszki stwierdziłem, że przydałyby się tam pasy dla rowerów. Odpowiedni wniosek jeszcze dzisiaj napiszę i prześlę do miasta.

Gdy już wracałem, czekała mnie jeszcze niespodzianka, bo moja pierwsza Żona wsiadła na swój rower (sama!) i wyjechała mi na spotkanie. Jeszcze będą z niej ludzie :)

022/100 of #100DaysToOffload

9. Sesja Rady Dzielnicy Jasień


Zwołałem sesję Rady Dzielnicy Jasień na przyszły tydzień.

Głównie musimy skończyć budżet dzielnicy na przyszły rok. W planie jest również dyskusja i może stanowisko odnośnie współpracy Rady z Urzędem Miasta w Gdańsku.

Bo nie jest dobrze. Niedawno Rada Dzielnicy Oliwa ogłosiła, że szuka sposobu na samorozwiązanie. Rozumiem ten poziom frustracji, mam w planie notkę na temat olewania jednostek pomocniczych przez urząd miejski.

021/100 of #100DaysToOffload

Backups with btrbk


Storage setup of my home server is btrfs raid1 over two, dm-crypt'ed 16TB HDDs cached with bcache on NVMe. It works fine, however for PostgreSQL database and my homedir I prefer full NVMe speed.

Therefore I've put those two directories on (dm-crypt'ed) btrfs subvolumes directly on NVMe. Thanks to DUP profile there's a protection against bitrot. But it's still a single device which may just die. Regardless of full backups, I was doing daily rsync into main drives, but there's faster and more capable way.

Enter btrbk, which operates on btrfs subvolumes. It uses btrfs' native send capability to copy the subvolume between filesystems effectively.

Additionally, it's very easy to keep some number of historic subvolume snapshots. They utilize copy-on-write, minimizing space usage. This let me recover files quickly or compare filesystem's state over last few days.

The config it bit tricky, that's why I'm posting this. My full backup config below, divided in three sections for explanations.

timestamp_format        long
snapshot_preserve       14d
snapshot_preserve_min   2d      # defaults to 'all'

The source definition. preserve option combination is needed to have daily snapshots kept for last two weeks and have older snapshots removed.

target_preserve         7d
target_preserve_min     latest  # defaults to 'all'

What to do with subvolumes copies at the target directory. Above combination of options keeps last seven days of snapshots copies.

send_compressed_data    yes

volume /run/btrbk-work
        target /home/poligon/backs/btrbk_snaps

        subvolume home_zdzichu

        subvolume var_lib_pgsql

Job definition. /run/btrbk-work is a directory where I temporarily mount NVMe drive root volume with subvolumes beneath. /home/poligon/backs/btrbk_snaps is the directory on my main (raid1) pool where subvolume copies are stored. And the last two lines are specific subvolumes to copy.

That works for me. btrbk is run by cron.daily/ from a short script ensuring everything is mounted where it should be.

020/100 of #100DaysToOffload

No to pohulane


Na fali postów naprawczo–remontowych… po przejechaniu trochę ponad 6 200km w 2,5 roku, oddałem moją hulajnogę do serwisu. Zaciski hamulcowe trzeba wymienić i coś zaczęło się dziać z baterią.

Nie zawsze ładuje się do pełna, przestaje losowo w trakcie. Poniżej dwa wykresy: górny to obecne zachowanie. Dolny to prawidłowe ładowanie:

/dżogstaff/2025.10.24-ładowanko.png

W serwisie rozebrali baterię, stwierdzili brak uszkodzeń mechanicznych i sprawdzili wszystkie sekcje. Diagnoza: akumulator ma 60% oryginalnej pojemności, jest już na wykończeniu. Szkoda, bo dbałem o higienę. Nigdy nie rozładowałem go do zera, ani też nie trzymałem naładowanego na 100%. To niestety kwestia budżetowości części.

Dostałem trzy opcje:

  • zbalansowanie ogniw i złożenie wszystkiego; jeszcze z jeden sezon da się pojeździć

  • nowy akumulator od producenta, koszt 2 850zł

  • zupełnie nowa, ale taka sama hulajnoga, bo akurat mają taki model w kartonie, za jakieś 3,5k zł

Przy tych kosztach postanowiłem dojeździć Joyora do końca, a jak przyjdzie czas – rozejrzeć się za czymś z wyższej półki. Absolutnie sprawdził się finansowo i czasowo jako główny środek transportu w mieście.

Ostatnie 2 tygodnie, gdy hulajnoga była w warsztacie, do biura jeździłem na rowerze. I jest spoko, może będę to robił częściej. Drogę „tam” mam bardzo z górki, większość trasy nawet nie muszę pedałować:

/dżogstaff/2025.10.24-pedałowanko.jpg

A w biurze są prysznice. Może zabiera to 10 minut dodatkowych minut, ale dużo więcej oszczędzam nie robiąc samochodem korków.

019/100 of #100DaysToOffload

Halo, czy mnie słychać?


Zaczynając pracę w obecnej firmie, na startup gift poprosiłem o słuchawki Sony WF-1000XM4 – douszne. Raczej rzadko ich używam. Do porządnego wyciszenia mam duże WF-1000, a do jazdy na jednośladzie i hikingów lepiej sprawiają się kostne Shokzy.

Niemniej małe słuchawki mają zaletę bycia małymi, więc czasem biorę je do plecaka. I tu negatywnie zaskoczyły mnie w zeszłym miesiącu. Bateria zaczęła niknąć w oczach niczym wody jeziora Karaczaj. Niecała godzina i kaput.

Otóż nie jest to niezwykłe. Któraś z wersji firmware wypuszczona przez Sony miała błąd skutkujący zbyt wysoką temperaturą pracy akumulatorków. Efektem jest trwałe uszkodzenie i obniżenie pojemności.

Gwarancja? Owszem, ale moim słuchawkom dwa lata już minęły.

Opcja druga, naprawa. Można samemu spróbować. Akumulatorki Z55H kosztują kilkadziesiąt złotych sztuka, a wymiana wymaga rozklejania i manipulacji drobnymi elementami.

Może to też zlecić komuś. Koszt usługi z materiałami to około 250 zł. Trochę dużo, ale to tylko ¼–⅓ ceny nowych słuchawek.

I tu wchodzi Sony, całe na… jasnoszaro. Mają pogwarancyjny program serwisowy. Obowiązuje tylko w trzecim roku posiadania (czyli rok po upłynięciu gwarancji). Za 160 zł autoryzowany serwis wymienia elementy douszne na nowe. Całe, nie rozklejają i nie wymieniają tylko akumulatorków. Etui pozostaje to samo.

Zadzwoniłem do Sontronic, wypełniłem formularz, wysłałem paczkę Paczkomatem. Tydzień później wyjąłem z maszyny nowe słuchawki, które mam nadzieję będą działać bez problemu przez lata.

018/100 of #100DaysToOffload <https://100daystooffload.com/>

Jaki matrix?


Znowu mam wrażenie, że muszę wykonać pewną ilość pracy, żeby zostać w tym samym miejscu.

Tym razem matriksowy homeserver Dendrite. Jakiś czas temu został przejęty przez Element, co miało zapewnić jego dalszy rozwój. W zamian jednak umarł i mam wrażenie, że dalszy rozwój protokołu powoduje coraz gorsze działanie Dendrite. Np. podobno winą homeservera są niedziałające ustawienia powiadomień we Fractal.

No więc trzeba się zmigrować na coś działającego. Pewnie na Conduwuit, pardon, teraz to Tuwunel. Przy okazji doktoryzacja z przenoszenia kont i subskrypcji kanałów… już mi się nie chce.

017/100 of #100DaysToOffload

Szeptany obwiniacz


Model Whisper okazał się zaskakująco użyteczny. Mam nagrania z kilku lat zebrań pewnego kolektywu. Protokoły z tych zebrań często pomijały niektóre sprawy. A przesłuchiwanie godzinnych nagrań w celu znalezienia jakiegoś zdania… po prostu nie wydarza się.

I tu wchodzii cały na biało wspomniany model. Kilka linijek w Pythonie przemieliło te nagrania na wyszukiwalny tekst, ze znacznikami czasowymi. I nawet ładnie ogarnia kwestie finansowe.

00:58:47,960 --> 00:58:53,960 Tak, tylko czy 3 razy więcej z 300 zł, czy z 3000 zł, to też jest różnica.

Teraz z łatwością można komuś wypomnieć co deklarował lata temu i puścić odpowiedni fragment nagrania.

016/100 of #100DaysToOffload

Tunezja objazdowo 7: koniec


Jesteśmy zadowoleni. Przewodnik wygadany i zorganizowany, grupa też się nie rozłaziła, całkiem fajni ludzie.

Przeraża ilość śmieci wszędzie, nawet na pustyni na każdym metrze wala się plastik.

Dinarów nie wolno wywozić z Turcji, nam zostało prawie 200. Kantor na lotnisku chciał jakieś kwitki i potwierdzenia wymiany których nie mieliśmy. Po głębokim patrzeniu w oczy znalazł pasujące w swoich śmieciach i dostaliśmy euro.

Przez tydzień przejechane 2100km autobusem, 200km samochodami 4x4, zużyłem 8,13GiB danych komórkowych.

015/100 of #100DaysToOffload

Tunezja objazdowo 6: rzymskie miasta


Wyjazd 6.30.

Trzy osoby zrezygnowały, zostały w hotelu. Zbytnio zmęczone czy przepimprezowane?

Jedno rzymskie musi miasto Dougga.

Drugie rzymskie miasto Thuburbo Maius.

Niesamowite, otwierają oczy jak rozległe było imperium rzymskie. To stąd większość mozaik oglądanych na początku wycieczki.

8k kroków, 5,7km.

014/100 of #100DaysToOffload