.pl .en .de .ru
Interdyscyplinarny blog badawczy pracowników Zakładu Infolingwistyki i Zakładu Przetwarzania Języka Naturalnego UAM

Jak śledzić re-research.pl, inne blogi i nie być towarem

Filip Graliński
10/04

Jak najlepiej śledzić re-research.pl? Jak nie przeoczyć takich smakowitych kąsków jak ten o Stalinie, który był Polakiem i szewcem, czy wpis o dowcipnisiach, którzy zrobili kawał okupacyjnej gadzinówce?

Niby nic trudnego — wystarczy codziennie wchodzić na naszą stronę i na pewno będzie coś nowego! Z drugiej strony przypuszczamy, że nie tylko re-research.pl, drogi Czytelniku, chciałbyś czytywać. Jak śledzić setki interesujących blogów i serwisów (każdy z inną częstością publikowania nowych wpisów) bez mozolnego ręcznego sprawdzania, czy aby nie ma czegoś nowego do poczytania?

Łe tam, dlaczego nie F*c*book?

Jedna możliwość to zdać się na serwisy społecznościowe — Nasza Klasa (ktoś używa?), grono.net (pamiętacie? „Kurczę a jest możliwość odzyskania chociażby zdjęć z tego portalu ?”), Facebook, Twitter, vkontakte czy co tam jest teraz na fali. To znaczy czytać to, co rekomendują nam znajomi („mądrość tłumu”) czy sztuczna inteligencja.

My jednak nie przepadamy za serwisami społecznościowymi (nawet jeszcze nie podpięliśmy się porządnie do nich…) i tym sposobem czytywania newsów. Jest kilka powodów:

  • Nie jesteś klientem serwisu społecznościowego — jesteś towarem. Ty, Twoje dane, Twoje zainteresowania i potrzeby, historia Twojego życia. Jesteś żywym towarem, który jest sprzedawany stronom trzecim (reklamodawcom).

  • Czy naprawdę chcę, żeby ktoś wiedział o mnie wszystko: gdzie mieszkam, co jadam, na kogo głosuję, czy wolę filigranowe brunetki czy blondynki-kawały baby? (Tak, młody człowieku, będziesz za 20 lat posłem albo CEO wielkiej firmy i każdy kliknięty w serwisie społecznościowym film zostanie wykorzystany przeciwko Tobie).

  • „Mądrość tłumu” szybko degeneruje się do LOL-kotków, śmiesznych filmików i obelg rzucanych nad taką czy inną barykadą.

  • Cenzura: serwisy społecznościowe cenzurują po uważaniu (norweskich dziennikarzy, działaczy afroamerykańskich i konserwatystów). Cenzurują i mają do tego prawo! To ich prywatny folwark i mogą sobie tam robić, co chcą, ale my nie musimy być bydlątkami na tym folwarku.

  • Komercyjne sieci społecznościowe to zaprzeczenie idei Internetu opartego na otwartych standardach.

Koniec połajanki, teraz konstruktywnie!

Problem śledzenia newsów został przez ludzkość rozwiązany — i to rozwiązany w najlepszy sposób, bo za pomocą otwartego standardu. Popatrz na prawy górny róg naszej strony, znajdziesz tam ikonę rss. Kliknij śmiało ten link, ujrzysz treści naszego bloga podane w „surowy” sposób — format jest surowy, bo nie jest przeznaczony dla człowieka, a dla maszyny. To jest właśnie standard RSS — serwisy internetowe mogą publikować swoje kanały RSS, czyli listy nowości zapisanych w sposób czytelny dla programów komputerowych (mogą i — prawie wszyscy — publikują, nie jest to martwy standard).

Co to właściwie daje? Istnieją mianowicie czytniki kanałów RSS (nie mylić z czytnikami e-booków, o których też zaraz powiemy), czyli programy czy aplikacje (również na urządzenia mobilne), którym możemy podać listę kanałów RSS, które chcemy śledzić. Aplikacje te automatycznie odpytują serwisy internetowe o nowości i natychmiast mogą nas o nich powiadomić i przedstawić wszystkie treści w zagregowany sposób.

Przeglądarki internetowe mają wbudowane czytniki RSS i to pewnie najprostszy sposób korzystania z kanałów RSS. Do przeglądarki Firefox polecam dodatek Brief — bezproblemowy czytnik RSS.

Zaproponujemy tutaj jednak inny sposób, trochę bardziej kłopotliwy w konfiguracji, ale za to maksymalizujący rozmiar treści, które codziennie możemy przepuszczać przez nasz mózg.

Codzienny tysiącstronicowy e-book

Czytanie na komputerze nie jest optymalne — trzeba machać myszą, kuszą różne dystrakcje (śmieszne filmiki, napływające w mejlu i komunikatorze wiadomości itd.). No i komputera nie można zabrać do tramwaju. Z kolei telefon i tablet mają swoje wady (prywatnie najbardziej przeszkadzają mi w czytaniu przypadkowe pacnięcia ekranu dotykowego).

Optymalnym urządzeniem do czytania jest czytnik e-booków, Amazon Kindle (najlepiej stary model, bez ekranu dotykowego!) lub jakikolwiek inny. Pomysł polega na tym, żeby codziennie (czy co parę dni) generować sobie wielki e-book powstały z połączenia nowych wpisów z setek blogów i serwisów informacyjnych. Zanim powiemy, jak to technicznie zrobić, rozwiejmy pewne wątpliwości.

  • Kilkaset stron, kiedy jak to przeczytam? Na czytniku czyta się naprawdę szybko (szybciej niż na komputerze, komórce czy nawet w papierowej książce), oko i mózg wprawiają się do cyklu: czytaj diagonalnie stronę, przetraw ją w mózgu, naciśnij przycisk, czytaj diagonalnie stronę, przetraw… itd. Poza tym, paradoksalnie, szybciej pominąć niechcianą stronę niż zastanawiać się, czy klikać w jeden, czy w drugi link.

  • Czytać całe blogi systematycznie? Nie lepiej śledzić to, co podsyłają znajomi? Nie wiem, ale podług mojego doświadczenia, czytanie newsów ze starannie wyselekcjonowanych serwisów bije na głowę jałowe klikanie w linki podawane w serwisie społecznościowym. Wolę nie pominąć wpisu kogoś, czyj głos sobie cenię, niż śledzić wszystko, co szerokie koła wrzucają do netu.

Calibre

Do tworzenia e-booka z naszych ulubionych kanałów RSS użyjemy programu Calibre. Program jest darmowy i do pobrania na różne systemy operacyjne.

Po zainstalowaniu proszę uruchomić program Calibre. Przy pierwszym uruchomieniu trzeba odpowiedzieć na kilka pytań, następnie proszę kliknąć „Pobierz wiadomości” i wybrać „Dodaj własne źródło wiadomości”.

Następnie wybierz „Nowe źródło”.

Potem kliknij „Przełącz na tryb zaawansowany”.

Teraz najtrudniejszy moment: musisz skasować cały tajemniczy kod, który widzisz

i w jego miejsce wkleić tzw. „przepis”, który podaję tutaj:

from calibre.constants import config_dir, CONFIG_DIR_MODE
import os, os.path, urllib
from hashlib import md5

class ImportedFeeds(BasicNewsRecipe):
    title = u'Imported Feeds'
    oldest_article = 3
    max_articles_per_feed = 30
    auto_cleanup = True
    remove_empty_feeds = True
    feeds = [
        (u're-research.pl', u'http://re-research.pl/pl/rss.xml'),
        (u'A Blast From The Past', u'https://allkindsofhistory.wordpress.com/feed/'),
        (u'Airminded', u'http://airminded.org/feed/'),
        (u'Andrew Gelman', u'http://andrewgelman.com/feed/'),
        (u'Another word for it', u'http://tm.durusau.net/?feed=rss2'),
        (u'Ask a Korean', u'http://askakorean.blogspot.com/feeds/posts/default'),
        (u'Biblia Curiosa', u'http://curioza.blogspot.com/feeds/posts/default'),
        (u'David Clarke', u'http://drdavidclarke.co.uk/feed/'),
        (u'DH Now', u'http://digitalhumanitiesnow.org/feed/'),
        (u'Gwern',u'http://www.gwern.net/atom.xml'),
        (u'Hack Education', u'http://feeds.feedburner.com/HackEducation?format=xml'),
        (u'High Scalability', u'http://feeds.feedburner.com/HighScalability?format=xml'),
        (u'Historia i Media', u'http://historiaimedia.org/feed/'),
        (u'JasonColavito.com - Blog', u'http://www.jasoncolavito.com/1/feed'),
        (u'Language Evolution', u'http://langevo.blogspot.com/feeds/posts/default'),
        (u'languagehat.com', u'http://www.languagehat.com/index.rdf'),
        (u'Language Log', u'http://languagelog.ldc.upenn.edu/nll/?feed=rss2'),
        (u'Hunch', u'https://feeds.feedburner.com/MachineLearningtheory?format=xml'),
        (u'THE MAGONIA BLOG', u'http://feeds.feedburner.com/TheMagoniaBlog'),
        (u'Marcin Wilkowski', u'http://wilkowski.org/feed'),
        (u'Marginal Revolution', u'http://marginalrevolution.com/feed'),
        (u'Mind Hacks', u'http://mindhacks.com/feed/'),
        (u'MIT review', 'http://www.technologyreview.com/computing/rss/'),
        (u'Modernistyczny Poznan', u'http://modernistyczny-poznan.blogspot.com/feeds/posts/default'),
        (u'Pedagog', u'http://sliwerski-pedagog.blogspot.com/feeds/posts/default'),
        (u'Planet Haskell', u'http://planet.haskell.org/rss20.xml'),
        (u'Forteana', u'http://feeds.feedburner.com/blogspot/JFXzu'),
        (u'Sceptique vs. les Soucoupes Volantes', u'http://skepticversustheflyingsaucers.blogspot.com/feeds/posts/default?alt=rss'),
        (u'Simply Statistics', u'http://feeds.feedburner.com/SimplyStatistics?format=xml'),
        (u'Slate Star Codex', u'http://slatestarcodex.com/feed/'),
        (u'SmarterPoland', u'http://smarterpoland.pl/?feed=rss2'),
        (u'Sociological Eye', u'http://sociological-eye.blogspot.com/feeds/posts/default'),
        (u'statpics', u'http://statpics.blogspot.com/feeds/posts/default'),
        (u'Strange Company', u'http://strangeco.blogspot.com/feeds/posts/default?alt=rss'),
        (u'Beachcombing\'s Bizarre History Blog', u'http://feeds.strangehistory.net/strangehistory?format=xml'),
        (u'Stratechery', u'http://stratechery.com/feed/'),
        (u'The Frame of Lagado', u'http://www.lagado.name/blog/?feed=rss2'),
        (u'Warsztat badacza', u'http://feeds.feedburner.com/EmanuelKulczycki'),
        (u'Word Spy', u'http://www.wordspy.com/rss.xml'),
        (u'WCN', u'https://wszystkoconajwazniejsze.pl/feed/'),
    ]

    def parse_feeds(self):
        recipe_dir = os.path.join(config_dir,'recipes')
        hash_dir = os.path.join(recipe_dir,'recipe_storage')
        feed_dir = os.path.join(hash_dir,self.title.encode('utf-8').replace('/',':'))
        if not os.path.isdir(feed_dir):
            os.makedirs(feed_dir,mode=CONFIG_DIR_MODE)

        feeds = BasicNewsRecipe.parse_feeds(self)

        for feed in feeds:
            feed_hash = urllib.quote(feed.title.encode('utf-8'),safe='')
            feed_fn = os.path.join(feed_dir,feed_hash)

            past_items = set()
            if os.path.exists(feed_fn):
               with file(feed_fn) as f:
                   for h in f:
                       past_items.add(h.strip())

            cur_items = set()
            for article in feed.articles[:]:
                item_hash = md5()
                if article.content: item_hash.update(article.content.encode('utf-8'))
                if article.summary: item_hash.update(article.summary.encode('utf-8'))
                item_hash = item_hash.hexdigest()
                if article.url:
                    item_hash = article.url + ':' + item_hash
                cur_items.add(item_hash)
                if item_hash in past_items:
                    feed.articles.remove(article)
            with file(feed_fn,'w') as f:
                for h in cur_items:
                    f.write(h+'\n')

        remove = [f for f in feeds if len(f) == 0 and
                self.remove_empty_feeds]
        for f in remove:
            feeds.remove(f)

        return feeds

Jeśli nie rozumiesz, o co chodzi, nie ma się czym przejmować (ja też do końca nie rozumiem) — najważniejsze, że w środku pojawia się lista serwisów, które chcesz śledzić i adresów ich kanałów RSS. Ta przykładowa lista odpowiada naszemu blogrollowi. Oczywiście możesz usunąć poszczególne wiersze i dodać swoje (okienko funkcjonuje jako prosty edytor tekstu). Nie zamopnij kliknąć „Zapisz” po zakończonej edycji „przepisu”.

Jak dokładnie dodać nowe? Powiedzmy, że chcesz śledzić nowości na stronie Ministerstwa Nauki i Szkolnictwa Wyższego. Wchodzisz na stronę Ministerstwa, szukasz ikonki RSS lub podobnej. O, jest, proszę ją kliknąć i przekopiować adres (http://www.nauka.gov.pl/rss/id,6,rss,1.html) do „przepisu”, tj. trzeba dodać wiersz (nie zapomnijmy o przecinku na końcu):

(u'Ministerstwo Nauki', u'http://www.nauka.gov.pl/rss/id,6,rss,1.html'),

tuż przed nawiasem kwadratowym (tj. za wierszem z „WCN”), tak więc fragment „przepisu” powinien po zmianie wyglądać tak:

        (u'Word Spy', u'http://www.wordspy.com/rss.xml'),
        (u'WCN', u'https://wszystkoconajwazniejsze.pl/feed/'),
        (u'Ministerstwo Nauki', u'http://www.nauka.gov.pl/rss/id,6,rss,1.html'),
    ]

    def parse_feeds(self):

(Zniknęło okno, gdzie można edytować „przepis”? Zawsze możesz wybrać „Pobierz wiadomości”, i „Dodaj własne źródło wiadomości”, a następnie kliknąć „Edytuj to źródło”).

Pobieranie

To teraz czas na pierwsze pobranie! Kliknij „Pobierz wiadomości” i „Zaplanuj pobieranie wiadomości”.

Rozwiń „Własne”, wybierz „Imported Feeds” i kliknij na dole „Pobierz teraz”.

Pobieranie chwilę potrwa (w zależności od liczby śledzonych kanałów RSS), można w tym czasie zaparzyć kawę czy herbatę.

W końcu pobieranie powinno się skończyć, powinniśmy zobaczyć „e-booka” zatytułowanego „Imported Feeds” z bieżącą datą. Jeśli podłączymy czytnik do komputera, e-book powinien zostać automatycznie przegrany na niego.

Następnego dnia znowu klikamy „Zaplanuj pobieranie wiadomości”, pobieramy i zgrywamy e-booka (artykuły wcześniej zgrane nie powinny już pojawić się ponownie).

Podsumowanie

Przyznaję, że konfiguracja tej maszynerii nie jest najprostsza, ale warto się przemęczyć. Oczywiście nie warto dla paru blogów, ale jeśli znajdziemy kilkaset interesujących blogów i serwisów, będziemy mieć mnóstwo smakowitej masy tekstowej do poczytania w domu, w tramwaju, w kolejce.

Jak zgromadzić listę ciekawych miejsc w Internecie? Od czegoś trzeba zacząć (najlepiej od re-research.pl!), ja zawsze przeglądam listę polecanych blogów (tzw. blogroll) i jeśli znajdę coś ciekawego, bezlitośnie dodaję. Moja prywatna lista kanałów RSS liczy 280 pozycji i cały czas rośnie.

No i warto śledzić też ciekawe serwisy, z którymi niekoniecznie się zgadzamy — by nie dać się zamknąć w bańce filtrującej.

Pytanie? Wątpliwości?

Nie przekonuje Was ten pomysł? Natrafiliście na problem techniczny? Zapraszam do wpisywania pytań i komentarzy poniżej.

Tagi