Radio 357

Po przeczytaniu wpisu zerknąłem na Radio 357 i zastanowiła mnie jedna rzecz. Parcie w kierunku FM. Na stronie patronite znajdziemy opowieści o kupnie koncesji lub przejmowaniu lokalnych rozgłośni, by zyskać pasmo. O słuchaniu na zwyczajnym odbiorniku stojącym w kuchni. Zastanawiam się, na ile to parcie w kierunku FM ma faktyczny sens, jeśli chodzi o dotarcie do ludzi, a na ile to zwykła nostalgia. Lub wręcz gra na niej.

Zalety FM

Owszem, FM ma trochę zalet. Nie potrzeba nowego sprzętu do odbioru, jakiekolwiek radio zadziała. Można bez problemu słuchać w samochodzie. Słuchacze nie płacą za transfer danych. Niby jest on darmowy, ale pewnie spora część ludzi odbiera na telefonach, przez GSM. A to oznacza, że de facto płaci za transfer[1].

Zalety?

Co prawda streamu internetowego pewnie też da się słuchać w aucie, ale raczej nie będzie to „natywne” radio, tylko udostępnianie z telefonu[2]. TBH nie próbowałem nawet, poziom skomplikowania wygląda na niepomijalny, ale i tak pewnie będzie rwanie przez dziury w zasięgu. Wolę muzę z karty SD, przynajmniej w trasie.

No właśnie, zasięg. FM wygląda różowo, jeśli weźmiemy pod uwagę zasięg ogólnopolski. Przy stacjach lokalnych różowo nie jest i samochodowe zalety „w trasie” mocno tracą na znaczeniu. Jest napisane wprost, że budowa sieci FM nie zdarzy się od razu. Potrwa miesiące. Tymczasem wkrótce minie rok, od kiedy audycje zniknęły z Trójki.

Dochodzi też kwestia jakości. FM szumi. Szczególnie na słabszym sprzęcie, bez dobrej anteny. Owszem, często da się to rozwiązać, szczególnie jeśli mamy dobry sygnał. W praktyce, jeśli chcemy mieć dobrą jakość, łatwiej jest słuchać streamu z internetu. Pokrycie GSM w Polsce jest niezłe i nadal się poprawia. Może pora wymienić odbiornik radiowy w kuchni na coś, co wspiera streamy internetowe? Albo, jeśli jest on dobrej jakości, dopiąć mu stosowną przystawkę, zostawić go po prostu jako wzmacniacz z głośnikiem i cieszyć się stacjami z całego świata[3]?

No i na koniec: nie tylko Polska ma znaczenie. Nadawanie tylko w kraju via FM odcina od kilkunastu milionów potencjalnych słuchaczy na świecie. I liczba niepomijalna, i dla części może to być jedyny kontakt z krajem.

Stream

Na szczęście stream internetowy nie jest trudny do zrobienia. Tzn. samo zakodowanie audio do postaci cyfrowej i udostępnienie przez sieć. Wieki temu robiło to Radio Baobab. Dystrybucja do wielu odbiorców może być bardziej skomplikowana. Szczególnie, jeśli chcemy zrobić ją samodzielnie. Ale zapewne skalowanie można rozwiązać przez rzut monetą. Istnieją gotowe serwisy, które rozwiązują zagadnienie pojemności łącz. Nie zdziwię się, jeśli również załatwią ew. transkodowanie i udostępnianie na popularnych platformach.

Cieszę się więc, że słuchacze nie poddali się nostalgii i chcieli stream. Cieszę się, że idzie nowe. Dzięki temu może i ja włączę kiedyś Radio 357. Póki co nie miałem okazji. Zwłaszcza, że wymagają playera na stronie, nie dają linka do gołego streamu. A ten player coś u mnie nie działa.

Czy w ogóle inwestowanie przez Radio 357 w FM ma sens? Nie wiem. Ja FM nie potrzebuję.

[1] Radio internetowe, z uwagi na charakter korzystania, zużywa całkiem sporo transferu. Godzina streamu w popularnym wariancie 128 kbps to ok. 58 MB. Radio ma to do siebie, że gra godzinami. Słuchanie przez 8h to 0,4 GB. Zakładając słuchanie w pracy – 8 GB miesięcznie, czyli jak na pakiety u operatorów GSM ilość zauważalna.

[2] Przynajmniej w typowym aucie. Nowe są już domyślnie podłączone do internetu, więc tam może być to bardziej wygładzone, bez dodatkowych urządzeń, bezpośrednio z netu. Przynajmniej jako opcja, bo zwykłe FM też jest.

[3] Zakładając, że ktoś potrzebuje. Jeśli ktoś jest wierny jednej stacji i nigdy nie zmienia na inną, argument traci sens. A słuchanie jednej stacji przy pracy wygląda mi na całkiem powszechne. Tyle, że mając do wyboru stacje z całego świata może się okazać, że będzie to zupełnie inna stacja…

Bieganie 2020 – podsumowanie

Jak wyglądała aktywność fizyczna, czyli jazda na rowerze i bieganie w 2020? Pora na podsumowanie mojego biegania w smutnym 2020, jeszcze smutniejszym grudniu. Smutna prywata, więc pominę. Ale ten wpis może być jedynym grudniowym. Pojawia się, bo szkic leżał od dawna, jako kontynuacja zeszłorocznych statystyk.

Bieganie

Zacząłem dość ambitnie, bo biegałem już na początku roku. Odrobiłem przerwę zimową, zaczęły się postępy i… pojawiła się pandemia i koronawirus. Może nie było silnych przesłanek do zaprzestania biegania, ale jakoś tak mi się załączyło niewychodzenie z domu, że i nie biegałem. Wyszedłem z założenia, że ostatecznie te dwa tygodnie, góra miesiąc można się poświęcić, prawda?[1] Ostatni bieg przed pandemią miałem pierwszego marca.

Jak wyglądała pandemia i walka z nią wszyscy wiemy, miałem o tym notkę. Wróciłem więc do biegania. Początek był straszny. Izolacja to nie tylko przerwa od biegania, to tygodnie siedzenia w domu, praktycznie bez ruchu. Oczywiście robiłem jakieś statyczne ćwiczenia, ale to nędzna namiastka. Ogólnie skończyło się tak, że znacznie gorsza forma, niż po przerwie zimowej. W pierwszych biegach musiałem skrócić dystans do 4 km. Pierwszy z nich był 9 maja. Z tego co pamiętam w chuście. Skończyłem zziajany i wykończony, i nie chusta była temu winna…

Potem było lepiej. Nie tylko szybko wróciłem do zeszłorocznej formy i dystansu 5 km, ale poczułem niedosyt. Zacząłem zwiększać dystans. Najpierw było to dodatkowe 100-200 metrów, potem lekko zmodyfikowałem trasę (chciałem kończyć w innym miejscu) i zrobiło się dodatkowe 600-700 metrów. Z perspektywą na dalsze wydłużenie.

Na wydłużenie nie trzeba było długo czekać. Skoro może być równe 6 km, to czemu nie? Tak więc sierpień to już biegi po 6 km, zamiast zeszłorocznych 5 km. I tak zostało – obecnie mój standardowy dystans to 6 km.

Trochę z tej okazji, a troche z okazji września kupiłem – wspomniane tu – buty do biegania z lepszą, nieco bardziej terenową podeszwą. Początek dramatyczny, bo mnie obtarły. Mój błąd, wziąłem krótkie skarpetki, zsunęły się, a but „niezmiękczony”. Ale to jednorazowy wypadek i bardzo mi się podobają.

Statystyka: 39 biegów, 20,75h w ruchu, 215 km. Lekki regres, ale jak mówiłem to słaby rok był, co na bieganie też się przełożyło. Ostatni bieg na początku listopada.

Rower

O ile bieganie w 2020 nie ucierpiało, to jazda na rowerze ucierpiała bardzo. Rower służył mi głównie za środek transportu do pracy. Z racji pandemii pracowałem głównie z domu. Ilość odwiedzin w biurze można policzyć na palcach jednej ręki. I raczej byłem autem, bo i przegonić je trzeba od czasu do czasu, i czasem jakieś drobiazgi zabierałem z biura. Czyli na rowerze nie jeździłem.

Potem nieco się to zmieniło, bo najmłodsza córka poszła do przedszkola. Blisko domu, ale Nextbike był za darmo i fajnie skracał czas dojazdu do przedszkola. Powrót już odbywał się pieszo. Z kronikarskiego obowiązku: 6,75h w ruchu, 30 przejazdów, 71 km.

[1] Och, jakże to naiwne myślenie było, patrząc z perspektywy.

Sprawdzanie DNS sinkhole

W poprzednim wpisie o phishingu w Polsce pisałem, że chcę zbadać jak wygląda adopcja listy hole.cert.pl wśród ISP do DNS sinkhole zapytań o domeny używane do phishingu. Odzew był mniejszy, niż się spodziewałem, ale coś udało się zrobić. Trochę się nauczyłem i może się to przydać także do względnie łatwego, samodzielnego sprawdzania np. cenzury w sieci, nie tylko w Polsce.

Wyniki

Jeśli kogoś interesują wyniki DNS sinkhole na podstawie hole.cert.pl wśród ISP, to znajdzie je w repo. Jak widać próbka jest mała, ale pewien trend daje się zauważyć. Nawet duzi ISP kablowi nie wykorzystują listy od CERT Polska. Na pewno – co oczywiste – wykorzystują ją sygnotariusze porozumienia. CERT trafnie zauważa, że lista może być wykorzystywana nie tylko na DNS operatorów, ale także na innych poziomach (Pi-hole, filtry AdBlock). Przypomnę jednak, że chodziło mi o sprawdzenie jaka jest adopcja listy na poziomie infrastruktury ISP. Czyli bez wymagania dodatkowych urządzeń czy działań po stronie użytkowników.

Pierwotny pomysł, czyli skrypty uruchamiane przez osoby trzecie w zasadzie ląduje w koszu. Wykorzystanie sond z projektu RIPE Atlas probe pozwala sprawdzić wszystko samodzielnie, bez angażowania innych ludzi. Wyniki się pokrywają, więc w repo zostawiłem zebrane ręcznie. Przy okazji widzę, że przy wynikach przydała by się data pomiaru. Do wyciągnięcia z commitów, ale lepsza byłaby podana jawnie.

RIPE Atlas probe

Dawno temu pisałem już o RIPE Atlas probe. Ogólnie są to małe pudełka dystrybuowane przez RIPE i uruchamiane przez ochotników (zarówno firmy jak i osoby fizyczne) w swoich sieciach na całym świecie. Pozwalają na wykonywanie pomiarów zlecanych przez panel RIPE. Istnieje też wersja programowa.

Użycie RIPE Atlas probe daje całkiem spore, zwłaszcza jeśli chodzi o zasięg pomiarów, możliwości ale… nie jest proste. Po pierwsze, trzeba mieć konto i kredyty. O ile założenie konta to moment, o tyle zebranie kredytów chwilę trwa – trzeba mieć uruchomioną sondę. No chyba, że dostaniemy je od kogoś, kto już je zgromadził (dziękuję!).

Po drugie, parametrów jest dużo i podobnie jak zwracane wyniki nie są do końca oczywiste. Np. w JSON szczegółowa odpowiedź jest zakodowana w base64, przez co początkowo uznałem (nie tylko ja…), że jej tam nie ma. Dekodowanie odpowiedzi DNS jest proste i opisane w dokumentacji, z przykładami w różnych językach. Niemniej, bariera wejście jest większa, niż się spodziewałem.

Sytuacji nie poprawiał fakt, że panel RIPE jest właśnie aktualizowany czy też przerabiany i nie wszystko wydaje się działać poprawnie. Np. wyszukiwania sond zwracają różne wyniki po API i przez stronę WWW.

RIPE Atlas Tools

Ostatecznie stanęło na tym, że korzystałem z API za pośrednictwem RIPE Atlas Tools. Do prototypowania i sprawdzeń ręcznych całkiem użyteczne. Nie jest to narzędzie idealne, na przykład status jest podawany numerycznie i… nie znalazłem opisu, który co oznacza. TBH szybciej było mi sprawdzić metodą porównania z wynikami z panelu. W każdym razie status connected to 1. Opis użycia w CLI:

Usage: ripe-atlas probe-search [-h] [--asn asn] [--asnv4 asnv4] [--asnv6 asnv6] [--prefix prefix] [--prefixv4 prefixv4] [--prefixv6 prefixv6]
[--location location | --center center | --country country] [--radius radius] [--tag tag] [--limit limit]
[--field {id,asn_v4,asn_v6,country,status,prefix_v4,prefix_v6,coordinates,is_public,description,address_v4,address_v6,is_anchor}]
[--aggregate-by {country,asn_v4,asn_v6,prefix_v4,prefix_v6}] [--all] [--max-per-aggregation max_per_aggregation] [--ids-only] [--status {0,1,2,3}]

Pora na parę przykładów użycia. W zasadzie wystarczają one do sprawdzenia jak z sieci danego ISP na określonym serwerze DNS jest resolvowana domena, czyli tego, co było przedmiotem projektu. Znalezienie aktywnych sond w sieci Orange (AS5617):

ripe-atlas probe-search --asn 5617 --country pl --ids-only --status 1

Sprawdzenie rozwiązywania domeny (tu: example.com) na wskazanym serwerze DNS (tu: 8.8.8.8) i sondzie (ID 1234):

ripe-atlas measure dns --query-argument example.com --from-probes 1234 --target 8.8.8.8

Powyższe zwróci w konsoli wynik w postaci już zdekodowanej. Dodatkowo będzie tam link do wyniku w panelu RIPE, który można pobrać w postaci JSON. Wtedy trzeba zdekodować odpowiedź DNS samodzielnie w sposób linkowany wyżej.

Na koniec wystarczy porównać, czy oczekiwany wynik jest taki sam, jak z serwera co do którego mamy pewność, że nie zmienia odpowiedzi i już wiemy, czy mamy do czynienia z DNS sinkhole. No prawie, bo domena może mieć np. zróżnicowane rozwiązywania nazwy na podstawie geolokalizacji. Można oczywiście sprawdzać większe ilości sond itp., ale do sprawdzania ew. cenzurowania stron lepsze mogą być zapytania HTTP – blokada bowiem może być na innym poziomie niż rozwiązywanie nazw domen.

Co dalej?

Ustalić adresy IP serwerów DNS przydzielanych klientom przez największych polskich ISP. Sądziłem, że będzie trywialne. Niestety myliłem się. Kiedyś można było bez problemu znaleźć je w sieci na stronach poszczególnych ISP. Teraz często nie chwalą się oni tą informacją. Np. nie udało mi się znaleźć tej informacji np. dla operatorów Vectra i Toya[1]. Tu liczę na pomoc czytelników w postaci podania nazwy ISP i przydzielonych przez niego adresów serwerów DNS.

Pełny automat. Powyższe przykłady są dobre do ręcznego wykorzystania. Mam wrażenie, że odpytywanie przy pomocy RIPE Atlas Tools słabo nadaje się do oskryptowania. Obsługa timeoutów, parsowanie odpowiedzi, zapisywanie wyników – wydaje mi się, że lepiej będzie napisać wszystko w Pythonie.

Badanie czasu od pojawienia się domeny na liście do czasu zablokowania u danego ISP. Bez pełnego automatu nie ma co podchodzić do tematu. I pewnie do przemyślenia jak to potem sensownie interpretować, pewnie trzeba będzie wspomóc się statystyką.

Motywacja mi nieco siadła, więc pewnie zejdzie dłuższa chwila nim coś nowego się pojawi.

[1] Dla Netii z kolei znalazłem serwery DNS, ale nie było ochotnika do zrobienia testu wersją ze skryptem. Przy pomocy sond RIPE Atlas ustaliłem, że nie korzystają z listy CERT Polska, ale z publikacją tego poczekam na zmianę flow zamieszczania danych.