Szybsze parsowanie stron internetowych – c.d. z serwisem www.filmydokumentalne.eu

movieWe wczorajszym wpisie opisałem sposób pobrania bazy danych filmów ze strony www.filmydokumentalne.eu. Wszystko byłoby w porządku, gdyby nie fakt, że wykonanie kompletnego importu trwa ok. jednej godziny.

Dlatego dzisiaj dodaję do programu obsługę wielowątkową, dzięki której nasz program dostanie znacznego przyspieszenia.

Czytaj dalej

Parsujemy strony internetowe – import listy filmów dokumentalnych

movie

Istnieje w polskim internecie strona internetowa katalogująca filmy dokumentalne: www.filmydokumentalne.eu.
Właściciele wordpressowej strony twierdzą, że nie naruszają prawa udostępniając nielegalnie umieszczonych w sieci filmów. Myślę więc, że sami również nie będą mieli nic przeciwko abym wykonał import całego ich katalogu odnośników 🙂

Zadanie na dziś

Wykonanie programu którego celem jest wygenerowanie listy odnośników do filmów dokumentalnych umieszczonych na stronie www.filmydokumentalne.eu.

Żeby nie zostać posądzony o kradzież danych, nie będę zapisywał żadnych wartości tekstowych charakteryzujących dany film (jak np. tytuł i opis), lecz pobiorę tylko i wyłącznie odnośniki.

Czytaj dalej

Jak zabezpieczyć się przed iteracją przeglądania stron po ID?

securityNierzadko w naszych systemach, czy zwykłych stronach internetowych stosujemy wyświetlanie zawartości na podstawie identyfikatora w postaci liczby naturalnej. Numerowi temu odpowiada id rekordu w bazie danych, kontroler na jego podstawie pobiera odpowiedni obiekt a widok wyświetla zawartość. Czasem jednak chcielibyśmy zabezpieczyć możliwość szybkiego spreparowania odnośnika żeby utrudnić zadanie botowi iterującemu po kolejnych numerach i pobierającego zawartości podstron.
Pamiętam okres popularności serwisu nasza-klasa.pl. W tym czasie przygotowałem właśnie takiego bota, dzięki któremu mogłem zgromadzić sporą ilość danych właśnie dzięki opisywanej podatności.

Czytaj dalej

Dlaczego tak mało zarabiamy w Polsce? Automatyzacja procesów: parsowanie PDF

workPrzeczytałem gdzieś kiedyś zdanie, które utkwiło mi w pamięci, a brzmiało mniej więcej tak: „preferuję zatrudnianie ludzi leniwych; leniwy pracownik zawsze znajdzie sposób aby wykonać swoją pracę w szybszym czasie i niższym kosztem”. Odnosiło się to pracy w obszarach IT.

Powszechne jest w polskim internecie narzekanie ludzi na zarobki. Tylko dlaczego tak mało jest samokrytyki do samych siebie? Może mało zarabiamy ponieważ jesteśmy niewydajni? Może nasz pracodawca jest niewydajny i nie optymalizuje procesów?

Często jest tak, że wykonanie pewnej czynności przez konkretną osobę, może być wykonane w czasie stukrotnie  krótszym przez kogoś innego i to przy niższych kosztach. Problemy takich optymalizacji mają głównie mali przedsiębiorcy. Sęk w tym, że udział mikro, małych i średnich przedsiębiorstw w tworzeniu PKB wynosi powyżej 50% (dane)

Czytaj dalej

Arma – gra doskonała

ArmA_3_Logo_(Black_Transparent)Nie wiele jest gier, które potrafią przyciągnąć gracza na kilkaset czy kilka tysięcy godzin. Nie wiele jest gier, w których producent udostępnia api do tworzenia swoich własnych rozszerzeń. I w końcu nie wiele jest gier, które mają tyle wspólnego z rzeczywistością co seria czeskiej firmy Bohemia Interactive: Arma.

Wpis ten nie wiele ma wspólnego z zagadnieniem programowania, ale chciałbym się podzielić swoim zafascynowaniem do tej gry. Grałem w Armę 2, Armę 2 DayZ, Armę 2 Epoch i wreszcie w Armę 3. I żadna inna gra w moim subiektywnym punkcie widzenia nie dorównuje tej produkcji.

Czytaj dalej

Dlaczego kwadrat nie jest prostokątem?

squareZ punktu widzenia matematyka tak. Z punktu widzenia programisty jednak w żadnym wypadku nie powinien.

Główne zasady programowania obiektowego zdefiniowane przez Roberta C. Martina zawierają się w słowie SOLID:

  1. SRP, The Single Responsibility Principle (zasada jednej odpowiedzialności)
    Klasa powinna mieć jeden i tylko jeden powód do zmiany
  2. OCP, The Open Closed Principle (zasada otwarty / zamknięty)
    Klasy powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje
  3. LSP, The Liskov Substitution Principle (zasada postawienia Liskov)
    Metoda przyjmująca jako parametr egzemplarz klasy A musi działać poprawnie także dla wszystkich klas, które dziedziczą po A, bez znajomości ich typów
  4. ISP, The Interface Segregation Principle (zasada separacji interfejsów)
    Tworzone interfejsy powinny być odpowiedzialne za jak najmniejszą funkcjonalność
  5. DIP, The Dependency Inversion Principle (zasada odwrócenia zależności)
    Należy uzależniać kod od abstrakcji, nie od konkretnych implementacji.

Jak to kiedyś ktoś w sieci zabawnie podsumował: zasady te każdy zna, nie każdy rozumie i nikt ich nie przestrzega.

Poniżej opiszę zasadę LSP (Liskov) która odnosi się do problemu zawartego w temacie.

Czytaj dalej

Obliczenia w pamięci – mnożenie przez 11

Testuję darmowy www.easel.ly do tworzenia infografik. W ramach ćwiczeń zrobiłem krótką grafikę na temat mnożenia w pamięci liczby dwucyfrowej przez 11. Miałem wczoraj opublikować zestaw algorytmów do wykonywania obliczeń w pamięci (o których szkoda zresztą, że nie uczą w szkołach), ale postanowiłem właśnie zastąpić nudne tekstowe wskazówki infografikami. Tak więc dziś pierwsza:

mnozenie_przez_11

Flagi bitowe, czyli jak przechować wiele opcji w jednej wartości liczbowej

flagZa sprawą obiektowych języków programowania wykorzystywanie flag bitowych stało się mniej popularne. Warto jednak wiedzieć, że jest coś takiego i w jaki sposób można je zaimplementować we własnych projektach.

W największym uproszczeniu:

Flagi bitowe wykorzystuje się do zapisu wielu informacji typu tak/nie pod postacią jednej liczby naturalnej.

Czytaj dalej

Chrome css border bug

Podczas przygotowywania tabelki do wpisu Permutacje i zagadka z trójkątem zauważyłem dziwne zachowanie w Chromie:

chrome_top_border_problem

Przy zastosowaniu atrybutów colspan w pierwszym wierszu tabeli można zaobserwować błędnie wychodzącą z prawej strony linię, w przypadku gdy w kolejnym wierszu część komórek zdefiniowana jest bez ich łączenia.

Taki problem można zaobserwować tylko w Chromie. Temat zgłosiłem w chromium i można śledzić go tutaj.

 

Rozmowy kwalifikacyjne

W tym tygodniu byłem na rozmowie kwalifikacyjnej w JCommerce SA. Generalnie nie szukam pracy, ale jeśli firma dzwoni do mnie bezpośrednio (bez pośredniczących head hunterów), lokalizacja firmy mieści się w tym samym mieście, a rozmowa kwalifikacyjna może być poprowadzona na miejscu, to chętnie biorę udział w takim spotkaniu.

Dlaczego? Bo to dobry sposób na rozeznanie rynku, na podążanie za oczekiwaniami pracodawców, no i na mobilizację, aby przypomnieć sobie te zagadnienia, z którymi rzadko ma się do czynienia przy rozwijaniu bieżących projektów.

Czytaj dalej