Certstream HOWTO

Do czego można wykorzystać dane pochodzące z certstream można zobaczyć choćby na prezentacji z konferencji z BSides Warsaw z 2019 roku. Ponieważ każdy ma certstream, mam i ja. Nie jest to zbyt zasobożerne, a można popatrzeć pod kątem security i phishingu, co w sieci piszczy.

Problem

Niestety, zauważyłem korzystanie z certstream jak w przykładach, z użyciem biblioteki Pythona nie jest idealne. Problem objawia się tym, że co jakiś czas następuje zerwanie połączenia z serwerem widoczne jako:

[ERROR:certstream] 2021-11-22 17:18:01,171 - Error connecting to CertStream - Connection to remote host was lost. - Sleeping for a few seconds and trying again…
[INFO:certstream] 2021-11-22 17:18:06,564 - Connection established to CertStream! Listening for events…
[ERROR:certstream] 2021-11-22 17:18:51,893 - Error connecting to CertStream - Connection to remote host was lost. - Sleeping for a few seconds and trying again…
[INFO:certstream] 2021-11-22 17:18:57,213 - Connection established to CertStream! Listening for events…

Początkowo nie wydawało się to dramatem. Kilka sekund przerwy, co parę minut nie powinno mocno wpływać na wyniki. Niestety, pominięte certyfikaty okazały się zauważalne, więc zacząłem szukać przyczyny i rozwiązania tego problemu.

Debug

Na pierwszy ogień poszła wyszukiwarka. Okazało się, że ludzie mają ten problem w różnych warunkach. Jedni sugerowali, że zależne jest to od wersji Pythona. Inni nie potwierdzali i sugerowali problem z serwerem certstream.calidog.io. Podejrzewałem także zbyt niską wydajność serwera VPS na którym działa skrypt, ale ten pomysł szybko odrzuciłem – na mocniejszym VPS nie było wielkiej różnicy. Problem nie był palący i przeleżał trochę czasu. Dopiero na którejś konferencji zaczepiłem Adama L., który również korzysta z certstream i zdarza mu się wspominać w prezentacjach o tym. Zasugerował problem z biblioteką, jej debug i zrobienie po swojemu, na wzór.

Zainspirowało mnie to do bliższych oględzin. Nie jest to trudne – biblioteka jest niewielka i prosta. Na pierwszy ogień poszła złożoność operacji wykonywanych w skrypcie podczas sprawdzania domen. Szybko jednak okazało się, że nawet nie wykonując jakichkolwiek operacji, nawet nie wyświetlając domen, nadal obserwuję rozłączenia. Postanowiłem spróbować skorzystać z innego serwera certstream, tym bardziej, że biblioteka wprost przewiduje zmianę URLa. Tyle, że miałem problem ze znalezieniem takowego.

Na szczęście CaliDog udostępnia także kod źródłowy serwera napisany w… Eliksirze. Nie ukrywam, że była to dla mnie nowość. Instalacja na Debianie była pewnym wyzwaniem. Dla leniwych jest dostępny obraz dockera, ale z pewnych względów stwierdziłem, że wolę zainstalować w systemie.

Instalacja serwera certstream na Debianie

Instalacja na Debianie Bullseye jest w zasadzie zgodna z tym, co napisano w instrukcji repo i na stronie Elixir. Czyli nie jest zgodna. Pierwsza sprawa, to brak pakietów dla Bullseye. Bez problemu można jednak skorzystać z pakietów przygotowanych dla starszej wersji, czyli Buster. W pliku /etc/apt/sources.list.d/erlang-solutions.list powinno pojawić się zatem:

deb http://binaries.erlang-solutions.com/debian buster contrib

Kolejna rzecz powodująca problemy z uruchomieniem serwera certstream to konieczność doinstalowania pakietu erlang-dev:

apt-get install erlang-dev

Po tych zabiegach serwer powinien się bez problemu uruchomić. Domyślnie działa bez szyfrowania na porcie 4000, więc jeśli nie postawimy frontu z certyfikatem SSL, to URL serwera certstream zmieni się z domyślnego wss://certstream.calidog.io na ws://NASZ.ADRES:4000 – trzeba podać port i usunąć jedno s.

Po uruchomieniu własnego serwera i podłączeniu tego samego skryptu, z tego samego VPSa, okazało się, że rozłączenia prawie nie występują. Zaś porównując ilość zgubionych domen okazało się, że jest ich znacznie więcej, niż przypuszczałem. Nawet średnie kilkadziesiąt procent.

Bullseye

Zakończyłem aktualizację ostatniej[1] maszyny do Debiana 11 czyli Bullseye, pora na tradycyjne podsumowanie.

Najpierw zaktualizowałem kontenery. Operacja totalnie bezproblemowa przy pomocy apt. Czyli wariant zalecany. Z większych zmian warto jedynie odnotować zmianę wpisu dla repozytorium security w sources.list.

Główny host jedynie odrobinę gorzej. Coś mu nie poszło przy zależnościach i odinstalował mariadb. Konfiguracje i dane zostały, więc przywrócenie trwało moment. Niemniej miał prawo się pogubić, korzystam z dodatkowych repozytoriów w tym systemie.

Desktopy również niemal bezproblemowo, w tym przejście z unstable na stable przy okazji upgrade. Jedyne z czym był problem to WiFi i wicd. Z uwagi na zależność od Pythona 2.x pakiet jest usuwany i… skończyłem bez sieci na pierwszym systemie. Rozwiązanie jest proste: wystarczy przeprosić się z network managerem i zainstalować go zamiast wicd przed aktualizacją. Po takim zabiegu aktualizacja bezproblemowa.

Ostatnie było Raspberry Pi robiące za router GSM. Tam co prawda jest Raspbian, nie Debian, ale można powiedzieć, że także była to aktualizacja do Bustera z uwagi na zmiany wpisów w sources.list. Nieco się pospieszyłem i instalowałem jako wersję niestabilną. Niemniej – bez problemu. Choć przygotowałem się na reinstalację systemu i operację przeprowadzałem nie zdalnie, a z fizycznym dostępem do sprzętu.

Ogólnie wygląda na brak większych zmian i chyba najbardziej bezproblemową aktualizację w historii. Jedyne co zauważyłem, to nieco większe zużycie miejsca na dysku. Generalnie tak to już bywa, że nowszy soft jest większy niż stary, ale w przypadku maszyny z kontenerami lxc zabolało to nieco bardziej. Dobiłem do granicy wolnego miejsca na dysku przy wykonywaniu się backupów. IIRC nie skończyło się zupełnie, ale było dosłownie na styk.

Zrobiłem porządki zarówno w logach, zbędnych rzeczach, jak i pakietach. Okazało się bowiem, że w kontenerach mam trochę nadmiarowych rzeczy. Przy tej ostatniej operacji okazało się, że na jednym z kontenerów apt działa wolno. Pobieranie działało normalnie, przeliczanie zależności także. Natomiast każde dodanie lub usunięcie pakietu zaczynało się od przestoju, podczas którego nic się na oko nie działo. Szybki strace ujawnił, że chodzi o okolice dbus. Usunięcie pakietu – kolejnego zbędnego, zresztą – rozwiązało problem.

[1] Tak naprawdę jeden kontener został na Buster i póki co zostanie – soft do generowania Planety Joggera zniknął z Bullseye. I raczej nie wróci, więc trzeba pomyśleć nad przesiadką na inny soft. Niemniej, nic związanego z samym systemem.

Beta reader

Beta reader wg anglojęzycznej Wikipedii to testowy czytelnik niepublikowanych dzieł literatury, który udziela feedbacku z punktu widzenia przeciętnego czytelnika autorowi[1]. Skojarzenia z beta testerem oprogramowania zamierzone.

Z tego, co udało mi się znaleźć w „polskim” internecie, często na rodzimym gruncie jest – czy też może było – to wypaczane w stronę korektora, stylisty i ogólnie „nauczyciela języka polskiego”. Nie zgadzam się z takim podejściem i znacznie bliżej mi do tej wizji. Poprawianie przecinków w tekście, w którym prawdopodobne są grubsze zmiany, uważam za stratę czasu. Poprawna polska stylistyka? To zależy. Może autor chce pisać slangiem albo stylizuje? Celuje w określoną grupę? OK, pewnie warto to zauważyć i zwrócić autorowi uwagę, ale niekoniecznie poprawiać. Beta reader nie jest też krytykiem literackim.

Beta reader
Źródło: Thumbnail.ai

Geneza

Tak się zdarzyło, że na firmowym forum wewnętrznym parę miesięcy temu pojawiło się zapytanie, czy ktoś by nie chciał być beta readerem. Jak już się dowiedziałem, kim jest beta reader – bo oczywiście nie miałem pojęcia – to stwierdziłem, że mogę spróbować. Co prawda nie spełniałem wstępnych wymagań, bo gatunek niezupełnie mój i połowa przytoczonych utworów nic mi nie mówiła, ale zgłosiłem się, podsyłając namiar na konto na Biblionetce[2]. Z jednej strony dlatego, że różne rzeczy czytam, z drugiej strony z ciekawości, jak to wygląda. Się udało, kandydatura została przyjęta.

Wszystko zbiegło się w czasie z lekturą książki napisanej przez inną osobę z firmy, oraz z przesłuchaniem audiobooka Netflix: To się nigdy nie uda. To pierwsze zdarzenie miało znaczenie o tyle, że okazało się, że tacy niezawodowi pisarze potrafią tworzyć całkiem ciekawe utwory. To drugie o tyle, że w ogóle neguje rolę autora jako samodzielnego twórcy działa. Za to mocno podkreślony jest tam wpływ zespołu. Co prawda to zupełnie inny gatunek, ale skłoniło mnie do przemyśleń.

Ja, beta reader

Jeśli komuś wydaje się, że totalnie nie orientuję się w realiach pisarsko-wydawniczych, to ma rację[3]. Nie to, że nie mam ulubionych pisarzy, bo mam. Chociaż pewnie większość z nich nie żyje. Ale nawet jeśli żyją, to dla mnie są autorami dzieł, więc jakieś spotkania itp. niezupełnie mnie interesują w kontekście tworzonej literatury. Utwór jest IMO osobnym, zamkniętym dziełem. To trochę jak różnica przy muzyce między słuchaniem utworów z płyty i chodzeniem na koncerty. Muzycy potrafią nagrywać świetne płyty i grać średnie koncerty. Odwrotnie oczywiście też. I jedno nie rzutuje na drugie. Więc dla mnie jeśli ktoś tworzy fajne płyty czy książki, to reszta nie ma znaczenia.

Klasycznie, beta reader czyta utwór dwa razy. Jednak początkowo nie wiedziałem o tym, choć możliwe, że po prostu przeoczyłem ten fakt. No i było ciśnienie o szybki feedback. Zresztą cały proces odbywał się chyba dość nieortodoksyjnie. W sumie może to i lepiej? Przecież nie jesteśmy zawodowcami[4].

Wersja z poprawianiem gramatyki, stylistyki czy ortografii w moim przypadku w ogóle nie wchodziła w grę. Po pierwsze, nie jestem dobry w te klocki. Poza ortografią. Zdarza mi się mówić i pisać potocznie, z przecinkami od zawsze miałem problem. Większym problemem jest to, że nie czytam literatury pięknej na komputerze. Zwłaszcza dłuższej. Nie i już. Strony WWW – owszem. Teksty techniczne – owszem. Natomiast literatura piękna to głównie papier lub czytnik ebooków. Ten ostatni niby pozwala na bookmarki i notatki, ale nie korzystam. Może kiedyś dojrzeję.

Beta reader – wyzwania

Bycie beta readerem to odpowiedzialność. Niepublikowane utwory, nawet początkujących twórców, są zwyczajnie kradzione. Przyznaję, że jestem w lekkim szoku. Ale może i zawodowcy potrzebują inspiracji czy też pożywki? W każdym razie z linkowanego artykułu wynika, że chętnych na zdobycie niepublikowanych utworów jest wielu. Więc trzeba to jakoś zabezpieczyć, przynajmniej w stopniu podstawowym. Znaczy, w wariancie minimum, nie wrzucamy na publiczny dysk czy w głębokie ukrycie.

Jest to też jakiś wpływ na autora. Oczywiście można sucho skomentować, że tu mi się nie klei, tu opisy za suche. Jednak czy tylko o to chodzi? Przeciętny czytelnik to przecież nie polonista oceniający wypracowanie. Ani nie ekspert od tworzenia fabuły. Wydaje mi się, że bardziej liczy się wrażenie. Niestety łatwo przejść do „a gdyby tak w tym miejscu” i… już sugerujemy jakieś rozwiązania fabularne. Pokrewne zagadnienie to porównywanie z innymi utworami. Pewnie sporo zależy od odporności autora na sugestie i zdolność do trzymania się własnej wizji. Zresztą czy naprawdę niestety? Tak czy inaczej, warto wybadać temat z autorem.

Ostatnie wyzwanie to trzymanie języka za zębami. Wiadomo, że nie można nikomu zdradzić fabuły. Jeśli autor jest bardziej znany, pewnie poziom trudności rośnie, bo w grę wchodzi dopytywanie o zaawansowanie prac. Jeśli któryś z czytelników zastanawiał się do tej pory, czemu nie napisałem niczego o czytanej książce, to ma odpowiedź.

Wyzwania techniczne

Technicznie czy też logistycznie też jest parę wyzwań. Na przykład mój czytnik ebook nie radzi sobie z każdym EPUB generowanym z narzędzi. W większości przypadku przy otwarciu pliku na czytniku mieli, mieli i… nie kończy mielić, trzeba ubić proces. Okazało się, że możliwości eksportu do EPUB jest wiele, nawet w obrębie pojedynczego narzędzia, a sam format ma różne wersje. Ostatecznie odkryłem, że działa u mnie otwarcie RTF w Libre Office, następnie eksportuj bezpośrednio jako EPUB. Aktualizacja firmware na czytniku czy wersji softu do konwersji nie miały wpływu. Tak przygotowana wersja działa bardzo dobrze, więc nie drążyłem dalej.

Nieopisane pliki, czyli brak wypełnionego pola autor czy tytuł to przy tym detal – Calibre pozwala na ich ustawienie. Za to nic nie może pomóc w synchronizacji wersji. Zdarza się, że nie jesteśmy jedynymi beta readerami, a autor w tzw. międzyczasie zmodyfikuje któryś rozdział. I może być warto to jakoś posynchronizować. Na szczęście nie zdarza się to często, a zmiany raczej są w konkretnych punktach, typu rozdział. Pewnie jakimś rozwiązaniem byłoby użycie systemu kontroli wersji, jak w oprogramowaniu. Tylko raczej nie przypuszczam, by było to rozwiązanie popularne wśród pisarzy. Nawet wśród tych piszących na komputerach.

Po co?

Pytanie zadane z punktu widzenia beta readera oczywiście. Czemu to robię? Jest to coś nowego, ciekawego. Czytając wpisy przytoczone na początku tego wpisu, mam wrażenie, że dobrze trafiłem. Utwory zdecydowanie dają się czytać i wciągają. Rozmowy z autorem też są przyjemne i na luzie, dalekie od skrajności opisanych w linkowanych wpisach. Jedyna wada to fakt, że nie mam czego podlinkować na Biblionetce, więc zaburzy mi statystyki.

[1] Tłumaczenie własne, polskiej wersji Wikipedii nie ma.
[2] Przy okazji przypomnę o niedawnym wpisie o backupowaniu danych z Biblionetki.
[3] No dobra, trochę mi się obiło o self publishingu. Głównie za sprawą Michała Szafrańskiego, który mocno się w tym względzie uzewnętrzniał. To jeden z wpisów, na blogu jest znacznie więcej i o papierowej wersji, i o audiobookach.
Trochę kiedyś siedziałem na grupach dyskusyjnych, gdzie byli i autorzy, i tłumacze, ale raczej nie zwracałem uwagi na wątki dotyczące tworzenia. O ile w ogóle takie były. Nie przypominam sobie.
[4] Tak, podobno istnieją zawodowi beta readerzy. Mignęła mi nawet polska strona kogoś z taką ofertą.