HTML, CSS 2.1 i dokumenty PDF

pdfW ostatnim czasie realizowałem projekt w którym należało zaprojektować ok. sto dokumentów PDF w postaci różnego rodzaju wniosków, w różnym układzie. Ten, kto kiedykolwiek generował dokumenty za pomocą iTexta wie, że nie jest to trudne, lecz czasochłonne. Programiści z reguły są leniwi, ponieważ zawsze szukają drogi na skróty, tak aby zrobić jak najwięcej i najmniej się przy tym napracować. Ja również, dlatego postanowiłem wykonać generowanie takich dokumentów na podstawie HTML, CSS 2.1 i oddelegować zadanie projektowania takich szablonów innej osobie 🙂
Chodzi oczywiście o projekt realizowany w Javie.

Czytaj dalej

Wzorce projektowe – dekoratory

decoratorDekorator to jeden se strukturalnych wzorców projektowych, dzięki któremu możemy wykorzystać kompozycję w alternatywie do dziedziczenia w celu rozszerzenia zachowania klasy.
W przypadku dziedziczenia klasa rozszerzana jest w trakcie kompilacji w przeciwieństwie do dekoratorów, które rozszerzają klasy w trakcie działania programu.

 

 

Wzorzec projektowy Dekorator pozwala na dynamiczne przydzielanie danemu obiektowi nowych zachowań. Dekoratory dają elastyczność podobną do tej, jaką daje dziedziczenie, oferując jednak w zamian znacznie rozszerzoną funkcjonalność

Czytaj dalej

Arduino – zdalne sterowanie oświetleniem

W tym artykule opiszę sposób wykonania zdalnego sterowania jednym urządzeniem wpinanym do gniazdka 230V z wykorzystaniem Arduino. Wykorzystane będzie połączenie przez USB z komputerem, który jednocześnie będzie pełnił rolę serwera WWW. Dzięki temu rozwiązaniu możliwe będzie sterowanie zarówno z tej stacji jak i dzięki WiFi przez laptop, tablet, czy telefon komórkowy.

Efekt końcowy będzie wyglądał tak:

W takim razie zabieramy się do pracy 🙂

Czytaj dalej

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

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

Wzorce projektowe – fabryki

Factory_1Za każdym razem gdy używamy w kodzie operatora new, uzależniamy się od konkretnej implementacji zamiast od interfejsu. Jedna z zasad programowania obiektowego (reguła odwracania zależności / dependency inversion principle) mówi:

 

Uzależniaj kod od abstrakcji, a nie od klas rzeczywistych.

Zapewne każdy programista spotkał się ze składnią:

Wcześniej czy później z pewnością zmienią się wymagania i zajdzie konieczność rozbudowy programu. Nie obejdzie się bez modyfikacji istniejącego kodu. Wtedy zostanie złamana zasada open/closed:

System powinien być otwarty na rozbudowę, ale zamknięty na modyfikacje.

Można zauaważyć że fragmentem kodu mogącym ulegać zmianom będzie instrukcja warunkowa if/else zwracająca konkretny produkt w zależności od przekazywanego parametru. Ten fragment kodu nie jest zamknięty na zmiany, ponieważ gdy zajdzie konieczność dodania nowego produktu lub usunięcie istniejącego będziemy musieli wrócić do tego miejsca i wykonać aktualizację.

Czytaj dalej

Wzorce projektowe – singleton

Singleton – jeden ze wzorców konstrukcyjnych. Jego celem jest zapewnienie możliwości utworzenia tylko jednego obiektu danej klasy i zapewnienie do niego globalnego dostępu.

Przez wielu uważany za antywzorzec, głównie ze względu na ograniczoną możliwość testowania kodu. Pomijając kwestie słuszności jego wykorzystania przedstawię jego poprawną implementację, co nie jest trywialne jakby mogło się wydawać.

Czytaj dalej